diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..56d5e7f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +wasm/main.wasm filter=lfs diff=lfs merge=lfs -text +wasm/zed.wasm filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a027bca --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules +yarn-debug.log +yarn-error.log +spicedb +zed +build +.vercel diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0f2599b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "examples"] + path = examples + url = https://github.com/authzed/examples.git diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md new file mode 100644 index 0000000..868514b --- /dev/null +++ b/CODE-OF-CONDUCT.md @@ -0,0 +1,24 @@ +# Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery +- Personal attacks +- Trolling or insulting/derogatory comments +- Public or private harassment +- Publishing other’s private information, such as physical or electronic addresses, without explicit permission +- Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. +By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. +Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the Contributor Covenant, version 1.2.0, available [here](https://www.contributor-covenant.org/version/1/2/0/code-of-conduct.html) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..3f87c99 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,113 @@ +# How to contribute + +## Communication + +- Bug Reports & Feature Requests: [GitHub Issues] +- Questions: [Discord] + +All communication in these forums abides by our [Code of Conduct]. + +[GitHub Issues]: https://github.com/authzed/playground/issues +[Code of Conduct]: CODE-OF-CONDUCT.md +[Discord]: https://authzed.com/discord + +## Creating issues + +If any part of the project has a bug or documentation mistakes, please let us know by opening an issue. +All bugs and mistakes are considered seriously, regardless of complexity. + +Before creating an issue, please check that an issue reporting the same problem does not already exist. +To make the issue accurate and easy to understand, please try to create issues that are: + +- Unique -- do not duplicate existing bug report. + Duplicate bug reports will be closed. +- Specific -- include as much details as possible: which version, what environment, what configuration, etc. +- Reproducible -- include the steps to reproduce the problem. + Some issues might be hard to reproduce, so please do your best to include the steps that might lead to the problem. +- Isolated -- try to isolate and reproduce the bug with minimum dependencies. + It would significantly slow down the speed to fix a bug if too many dependencies are involved in a bug report. + Debugging external systems that rely on this project is out of scope, but guidance or help using the project itself is fine. +- Scoped -- one bug per report. + Do not follow up with another bug inside one report. + +It may be worthwhile to read [Elika Etemad’s article on filing good bug reports][filing-good-bugs] before creating a bug report. + +Maintainers might ask for further information to resolve an issue. + +[filing-good-bugs]: http://fantasai.inkedblade.net/style/talks/filing-good-bugs/ + +## Finding issues + +You can find issues by priority: [Urgent], [High], [Medium], [Low], [Maybe]. +There are also [good first issues]. + +[Urgent]: https://github.com/authzed/playground/labels/priority%2F0%20urgent +[High]: https://github.com/authzed/playground/labels/priority%2F1%20high +[Medium]: https://github.com/authzed/playground/labels/priority%2F2%20medium +[Low]: https://github.com/authzed/playground/labels/priority%2F3%20low +[Maybe]: https://github.com/authzed/playground/labels/priority%2F4%20maybe +[good first issues]: https://github.com/authzed/playground/labels/hint%2Fgood%20first%20issue + +## Contribution flow + +This is a rough outline of what a contributor's workflow looks like: + +- Create an issue +- Fork the project +- Create a [feature branch] +- Push changes to your branch +- Submit a pull request +- Respond to feedback from project maintainers +- Rebase to squash related and fixup commits +- Get LGTM from reviewer(s) +- Merge with a merge commit + +Creating new issues is one of the best ways to contribute. +You have no obligation to offer a solution or code to fix an issue that you open. +If you do decide to try and contribute something, please submit an issue first so that a discussion can occur to avoid any wasted efforts. + +[feature branch]: https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow + +## Legal requirements + +In order to protect the project, all contributors are required to sign our [Contributor License Agreement][cla] before their contribution is accepted. + +The signing process has been automated by [CLA Assistant][cla-assistant] during the Pull Request review process and only requires responding with a comment acknowledging the agreement. + +[cla]: https://github.com/authzed/cla/blob/main/v1/icla.md +[cla-assistant]: https://github.com/cla-assistant/cla-assistant + +## Common tasks + +We use [yarn](https://yarnpkg.com/) to run common tasks in the project. + +### Testing + +In order to build and test the project, a [modern version of node] and knowledge of [React app architecture] are required. + +[modern version of node]: https://nodejs.org/en/about/previous-releases +[React app architecture]: https://react.dev/ + +```sh +yarn run test +``` + +To run integration tests: + +```sh +yarn run cy:run +``` + +### Linting + +```sh +yarn run lint +``` + +### Adding dependencies + +This project uses [yarn](https://yarnpkg.com/) for managing dependencies. + +```sh +yarn add +``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9c8169b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,51 @@ +ARG BASE_IMAGE=node:18-alpine3.18 + +FROM --platform=$BUILDPLATFORM $BASE_IMAGE AS playground-builder +WORKDIR /app +COPY ./package.json . +COPY ./yarn.lock . +COPY ./playground-ui ./playground-ui +COPY ./spicedb-common ./spicedb-common +COPY ./playground/package.json ./playground/package.json +ENV YARN_CACHE_FOLDER=/tmp/yarn_cache +RUN yarn install --frozen-lockfile --production --non-interactive --network-timeout 1000000 + +COPY ./playground ./playground + +WORKDIR /app/playground + +ARG APPLICATION_ROOT=/ +ARG NODE_OPTIONS=--openssl-legacy-provider +ENV PUBLIC_URL ${APPLICATION_ROOT} +RUN yarn build + +FROM $BASE_IMAGE AS playground-verifier +RUN npm install -g jshint +COPY ./playground/contrib/generate-config-env.sh . +COPY ./playground/contrib/test-config-env.sh . +RUN ./test-config-env.sh +RUN echo 'Config Verified' > verified + +FROM nginx:1.25.2 +LABEL maintainer="AuthZed " +EXPOSE 3000 +ENV PORT=3000 + +ENTRYPOINT ["./docker-entrypoint-wrapper.sh"] +CMD [] + +COPY ./playground/contrib/generate-config-env.sh . +COPY ./playground/contrib/test-nginx-conf.sh . +COPY ./playground/contrib/test-config-env.sh . +COPY ./playground/contrib/nginx.conf.tmpl . +COPY ./playground/contrib/docker-entrypoint-wrapper.sh . +RUN bash ./test-nginx-conf.sh + +COPY --from=playground-verifier verified . +COPY --from=playground-builder /app/playground/build/ /usr/share/nginx/html/ +COPY wasm/main.wasm /usr/share/nginx/html/static/main.wasm +COPY wasm/zed.wasm /usr/share/nginx/html/static/zed.wasm + +RUN mkdir /usr/share/nginx/html/static/schemas +COPY examples/schemas/ /usr/share/nginx/html/static/schemas +RUN ls /usr/share/nginx/html/static/schemas > /usr/share/nginx/html/static/schemas/_all diff --git a/README.md b/README.md index e69de29..07257b3 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,124 @@ + + spicedb logo + + + spicedb Logo + + +# Playground + +The SpiceDB Playground is an interactive app for building a [SpiceDB] schema, interacting with test relationships, and quickly iterating with test assertions. + +Whether you're just getting started learning SpiceDB concepts or need to develop a new permissions system schema for your application, the SpiceDB playground has functionality to help. + +SpiceDB Playground features include: + +- Rich text editor with syntax highlighting and tooltips +- Visual relationship editor with support for defining caveat context data +- Developer system that detects and presents schema and data errors +- Real-time check requests against a full SpiceDB instance running client side via WASM +- Fully functional [zed](https://github.com/authzed/zed) CLI instance running client side via WASM +- Schema and relationship graph visualization +- Import and export schema and workspace data as a YAML file + +## What is SpiceDB? + +SpiceDB is a graph database purpose-built for storing and evaluating access control data. + +As of 2021, broken access control became the #1 threat to the web. With SpiceDB, developers finally have the solution to stopping this threat the same way as the hyperscalers. + +Learn more about [SpiceDB] + +[SpiceDB]: https://authzed.com/spicedb + +## Getting Started + +## Deploying + +### Docker + +Run the latest Docker container + +```command +docker run -it ghcr.io/authzed/spicedb-playground:latest +``` + +### Vercel + +Deploy an instance hosted on Vercel + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fauthzed%2Fplayground&project-name=spicedb-playground&repository-name=spicedb-playground) + +or using the Vercel CLI + +```command +NODE_OPTIONS=--openssl-legacy-provider vercel build +vercel deploy --prebuilt +``` + +### NodeJS + +The `build` directory in the project root directory after running `yarn build` will contain an optimized production React application that can be served using your preferred NodeJS hosting method. + +> ℹ️ Node v18.x is required. + +For example: + +```command +NODE_OPTIONS=--openssl-legacy-provider yarn global install serve +cd build +serve +``` + +## Installing dependencies + +Setup git submodules: `git submodule update --init --recursive` + +Run `yarn install` in the _root_ project directory. + +## Updating wasm dependencies + +The project contains prebuilt WASM files for versions of both SpiceDB and zed. To update the versions, edit the following script files with the appropriate tag/commit hash and then run from the project root: + +`yarn run update:spicedb` + +`yarn run update:zed` + +## Developing your own schema + +You can try both [SpiceDB](https://github.com/authzed/spicedb) and [zed](https://github.com/authzed/zed) entirely in your browser on a SpiceDB Playground deployment thanks to the power of [WebAssembly](https://authzed.com/blog/some-assembly-required). + +If you don't want to start with the examples loadable from a Playground, you can follow a guide for [developing a schema] or review the the schema language [design documentation]. + +Watch the SpiceDB primer video to get started with schema development: + +SpiceDB Primer YouTube Thumbnail + +[developing a schema]: https://authzed.com/docs/spicedb/modeling/developing-a-schema +[design documentation]: https://authzed.com/docs/spicedb/concepts/schema + +## Contribute + +[CONTRIBUTING.md] documents communication, contribution flow, legal requirements, and common tasks when contributing to the project. + +You can find issues by priority: [Urgent], [High], [Medium], [Low], [Maybe]. +There are also [good first issues]. + +Our [documentation website] is also open source if you'd like to clarify anything you find confusing. + +[CONTRIBUTING.md]: CONTRIBUTING.md +[Urgent]: https://github.com/authzed/playground/labels/priority%2F0%20urgent +[High]: https://github.com/authzed/playground/labels/priority%2F1%20high +[Medium]: https://github.com/authzed/playground/labels/priority%2F2%20medium +[Low]: https://github.com/authzed/playground/labels/priority%2F3%20low +[Maybe]: https://github.com/authzed/playground/labels/priority%2F4%20maybe +[good first issues]: https://github.com/authzed/playground/labels/hint%2Fgood%20first%20issue +[documentation website]: https://github.com/authzed/docs + +## Joining the SpiceDB Community + +SpiceDB is a community project where everyone is invited to participate and [feel welcomed]. +While the project has a technical goal, participation is not restricted to those with code contributions. +Join our [Community Discord](https://authzed.com/discord) to ask questions and meet other users. + +[feel welcomed]: CODE-OF-CONDUCT.md diff --git a/examples b/examples new file mode 160000 index 0000000..2414636 --- /dev/null +++ b/examples @@ -0,0 +1 @@ +Subproject commit 2414636d576a0278e3ff3bb47b19fc9a7ff63f2f diff --git a/package.json b/package.json new file mode 100644 index 0000000..ae899d9 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "code", + "private": "true", + "version": "0.1.0", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "yarn workspace playground build && ./scripts/copy-build.sh", + "update:spicedb": "./scripts/update-spicedb.sh", + "update:zed": "./scripts/update-zed.sh" + }, + "workspaces": [ + "spicedb-common", + "playground-ui", + "playground" + ], + "dependencies": {} +} diff --git a/playground-ui/README.md b/playground-ui/README.md new file mode 100644 index 0000000..4e3cccc --- /dev/null +++ b/playground-ui/README.md @@ -0,0 +1,13 @@ +# PlaygroundUI + +PlaygroundUI is our React-UI skeleton. + +## Installing dependencies + +Run `yarn install` in the _parent_ directory. + +### Referencing + +```ts +import LoadingView from '@code/playground-ui/src/LoadingView'; +``` diff --git a/playground-ui/package.json b/playground-ui/package.json new file mode 100644 index 0000000..4ea61e1 --- /dev/null +++ b/playground-ui/package.json @@ -0,0 +1,38 @@ +{ + "name": "@code/playground-ui", + "version": "0.1.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "react-scripts test", + "lint": "../node_modules/.bin/eslint src", + "lint-fix": "../node_modules/.bin/eslint --fix src" + }, + "author": "", + "eslintConfig": { + "extends": "react-app" + }, + "peerDependencies": { + "@apollo/client": "^3.3.21", + "@material-ui/core": "^4.12.3", + "@material-ui/icons": "^4.12.3", + "@material-ui/labs": "^4.12.3", + "@types/d3-scale-chromatic": "^2.0.0", + "@types/lodash": "^4.14.171", + "d3-scale-chromatic": "^2.0.0", + "email-validator": "^2.0.4", + "graphql": "16.0.1", + "lodash": "^4.17.21", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", + "victory": "^35.9.3" + }, + "dependencies": { + "@types/react-page-visibility": "^6.4.1", + "react-countdown": "^2.3.5", + "react-page-visibility": "^7.0.0", + "use-deep-compare": "^1.1.0", + "use-window-focus": "^1.4.2" + } +} diff --git a/playground-ui/src/AlertDialog.tsx b/playground-ui/src/AlertDialog.tsx new file mode 100644 index 0000000..283c2e9 --- /dev/null +++ b/playground-ui/src/AlertDialog.tsx @@ -0,0 +1,60 @@ +import Button from "@material-ui/core/Button"; +import Dialog from "@material-ui/core/Dialog"; +import DialogActions from "@material-ui/core/DialogActions"; +import DialogContent from "@material-ui/core/DialogContent"; +import DialogContentText from "@material-ui/core/DialogContentText"; +import DialogTitle from "@material-ui/core/DialogTitle"; +import React from "react"; + +/** + * AlertDialogProps are the props for the alert dialog. + */ +export interface AlertDialogProps { + /** + * isOpen indicates whether the AlertDialog is currently open. + */ + isOpen: boolean + + /** + * handleClose sets the state that is bound to `isOpen` to false. + */ + handleClose: () => any + + /** + * title is the title of the alert. + */ + title: React.ReactNode + + /** + * content is the content of the alert. + */ + content: React.ReactNode + + /** + * buttonTitle is the title of the single close button on the alert dialog. + */ + buttonTitle: React.ReactNode +} + +/** + * AlertDialog provides a simple alert-style dialog. + * @param props The props for the alert dialog. + * @example setShowAlert(false)} + * title="My alert" content="Hi there!" buttonTitle="Okay!"/> + */ +export function AlertDialog(props: AlertDialogProps) { + return + {props.title} + + {props.content} + + + + + ; +} \ No newline at end of file diff --git a/playground-ui/src/AlertProvider.tsx b/playground-ui/src/AlertProvider.tsx new file mode 100644 index 0000000..e28fcb3 --- /dev/null +++ b/playground-ui/src/AlertProvider.tsx @@ -0,0 +1,103 @@ +import React, { + PropsWithChildren, + useCallback, + useContext, + useState, +} from "react"; +import { AlertDialog } from "./AlertDialog"; + +export interface AlertProps { + /** + * title is the title of the alert. + */ + title: React.ReactNode; + + /** + * content is the content of the alert. + */ + content: React.ReactNode; + + /** + * buttonTitle is the title of the single close button on the alert dialog. + */ + buttonTitle: React.ReactNode; +} + +export type AlertCallback = () => void; + +export type ShowAlert = (props: AlertProps, callback: AlertCallback) => any; + +const AlertContext = React.createContext(undefined); + +/** + * AlertProvider provides the alert dialog UI. + */ +export function AlertProvider(props: PropsWithChildren) { + const [alertProps, setAlertProps] = useState({ + title: "", + content: "", + buttonTitle: "", + }); + const [isAlertOpen, setIsAlertOpen] = useState(false); + const [alertCallback, setAlertCallback] = useState<{ + callback: AlertCallback | undefined; + }>({ callback: undefined }); + + const handleClose = () => { + if (alertCallback.callback !== undefined) { + alertCallback.callback(); + } + + setIsAlertOpen(false); + }; + + const showAlert = (props: AlertProps, callback: AlertCallback) => { + setAlertProps(props); + setAlertCallback({ callback: callback }); + setIsAlertOpen(true); + }; + + return ( + <> + + + {props.children} + + + ); +} + +/** + * useAlert provides a hook for displaying an alert dialog. Requires the AlertProvider + * to be installed in the parent DOM tree. + * @example + * const {showAlert} = useAlert(); + * showAlert({ + * 'title': 'Title', + * 'content': 'Content', + * 'buttonTitle': 'The button', + * }) + */ +export function useAlert() { + const showAlertCallback = useContext(AlertContext); + if (showAlertCallback === undefined) { + throw Error("Missing AlertProvider"); + } + + const showAlert = useCallback( + (props: AlertProps) => { + const promise = new Promise((resolve: () => void) => { + showAlertCallback(props, resolve); + }); + + return promise; + }, + [showAlertCallback] + ); + + return { showAlert }; +} diff --git a/playground-ui/src/ConfirmDialog.tsx b/playground-ui/src/ConfirmDialog.tsx new file mode 100644 index 0000000..5da9528 --- /dev/null +++ b/playground-ui/src/ConfirmDialog.tsx @@ -0,0 +1,138 @@ +import { createStyles, makeStyles, Theme } from "@material-ui/core"; +import Button from "@material-ui/core/Button"; +import Dialog from "@material-ui/core/Dialog"; +import DialogActions from "@material-ui/core/DialogActions"; +import DialogContent from "@material-ui/core/DialogContent"; +import DialogContentText from "@material-ui/core/DialogContentText"; +import DialogTitle from "@material-ui/core/DialogTitle"; +import TextField from "@material-ui/core/TextField"; +import React, { useState } from "react"; + +/** + * ConfirmDialogButton is a button in the confirm dialog. + */ +export interface ConfirmDialogButton { + /** + * title is the title of the button. + */ + title: React.ReactNode + + /** + * value is the value to given to the callback if the button is clicked. + */ + value: B + + /** + * color is the color of the button. Default is `default`. + */ + color?: "default" | "primary" | "secondary" + + /** + * variant is the variant of the button. Default is `text`. + */ + variant?: "text" | "outlined" | "contained" + + /** + * isEnabled, if specified, is the function to run to check if the button should be enabled. + */ + isEnabled?: (promptValue?: string) => boolean +} + +export type ConfirmCallback = (value: B, promptValue?: string) => void; + +/** + * ConfirmDialogProps are the props for the confirm dialog. + */ +export interface ConfirmDialogProps { + /** + * isOpen indicates whether the ConfirmDialog is currently open. + */ + isOpen: boolean + + /** + * handleComplete sets the state that is bound to `isOpen` to false and + * returns the value clicked. If the [X] is clicked, the `value` will be + * undefined. + */ + handleComplete: ConfirmCallback + + /** + * title is the title of the confirm. + */ + title: React.ReactNode + + /** + * content is the content of the confirm. + */ + content: React.ReactNode + + /** + * buttons are the buttons on the confirm dialog. + */ + buttons: ConfirmDialogButton[] + + + /** + * withPrompt, if specified, indicates a prompt should be displayed with + * the given string as the placeholder. + */ + withPrompt?: string; +} + + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + prompt: { + marginTop: theme.spacing(1), + width: '100%', + }, + })); + + +/** + * ConfigDialog provides a simple confirm-style dialog. + * @param props The props for the confirm dialog. + * @example isOpen={showConfirm} + * handleComplete={(value: SomeEnum) => setShowConfirm(false)} + * title="My confirm" content="Hi there!" + * buttons={[{"title": "Close", "value": undefined}]}/> + */ +export function ConfirmDialog(props: ConfirmDialogProps) { + const [promptValue, setPromptValue] = useState(''); + const classes = useStyles(); + + const handleComplete = (value: any) => { + props.handleComplete(value as B, promptValue); + setPromptValue(''); + }; + + return handleComplete(undefined)} + > + {props.title} + + + {props.content} + {props.withPrompt !== undefined && + ) => setPromptValue(event.target.value)} /> + } + + + + {props.buttons.map((button: ConfirmDialogButton, index: number) => { + return ; + })} + + ; +} diff --git a/playground-ui/src/ConfirmDialogProvider.tsx b/playground-ui/src/ConfirmDialogProvider.tsx new file mode 100644 index 0000000..41de00d --- /dev/null +++ b/playground-ui/src/ConfirmDialogProvider.tsx @@ -0,0 +1,129 @@ +import React, { + PropsWithChildren, + useCallback, + useContext, + useState, +} from "react"; +import { + ConfirmCallback, + ConfirmDialog, + ConfirmDialogButton, +} from "./ConfirmDialog"; + +export interface ConfirmProps { + /** + * title is the title of the confirm. + */ + title: React.ReactNode; + + /** + * content is the content of the confirm. + */ + content: React.ReactNode; + + /** + * buttons are the buttons on the confirm dialog. + */ + buttons: ConfirmDialogButton[]; + + /** + * withPrompt, if specified, indicates a prompt should be displayed with + * the given string as the placeholder. + */ + withPrompt?: string; +} + +export type ShowConfirm = ( + props: ConfirmProps, + callback: ShowConfirmCallback +) => any; +export type ShowConfirmCallback = ( + result: [B, string | undefined] +) => void; + +const ConfirmDialogContext = React.createContext( + undefined +); + +/** + * ConfirmDialogProvider provides the confirm dialog UI. + */ +export function ConfirmDialogProvider(props: PropsWithChildren) { + const [confirmProps, setConfirmProps] = useState>({ + title: "", + content: "", + buttons: [], + }); + const [isConfirmOpen, setIsConfirmOpen] = useState(false); + const [confirmCallback, setConfirmCallback] = useState<{ + callback: ConfirmCallback | undefined; + }>({ callback: undefined }); + + const showConfirm = ( + props: ConfirmProps, + callback: ShowConfirmCallback + ) => { + setConfirmProps(props); + setConfirmCallback({ + callback: (value: string, promptValue?: string) => { + callback([value as B, promptValue]); + }, + }); + setIsConfirmOpen(true); + }; + + const handleCompleted = (value: string, promptValue?: string) => { + if (confirmCallback.callback !== undefined) { + confirmCallback.callback(value, promptValue); + } + setIsConfirmOpen(false); + }; + + return ( + <> + + isOpen={isConfirmOpen} + handleComplete={handleCompleted} + {...confirmProps} + /> + + {props.children} + + + ); +} + +/** + * useConfirmDialog provides a hook for displaying a confirm dialog. Requires the ConfirmProvider + * to be installed in the parent DOM tree. + * @example + * const {showConfirm} = useConfirmDialog(); + * const [result] = await showConfirm({ + * 'title': 'Title', + * 'content': 'Content', + * 'buttons': [....] + * }) + */ +export function useConfirmDialog() { + const showConfirmCallback = useContext(ConfirmDialogContext); + if (showConfirmCallback === undefined) { + throw Error("Missing ConfirmDialogProvider"); + } + + const showConfirm = useCallback( + (props: ConfirmProps) => { + const promise = new Promise<[B, string?]>( + ( + resolve: (value: [B, string?] | PromiseLike<[B, string?]>) => void + ) => { + showConfirmCallback(props, resolve); + } + ); + + return promise; + }, + [showConfirmCallback] + ); + + return { showConfirm }; +} diff --git a/playground-ui/src/DiscordChatCrate.tsx b/playground-ui/src/DiscordChatCrate.tsx new file mode 100644 index 0000000..29c4a85 --- /dev/null +++ b/playground-ui/src/DiscordChatCrate.tsx @@ -0,0 +1,111 @@ +import { useTheme } from '@material-ui/core/styles'; +import React, { useEffect, useRef } from 'react'; + +export interface DiscordChatCrateProps { + serverId: string; + channelId: string; +} + +// Copied from: https://github.com/widgetbot-io/crate/blob/f34b7d18429326a8ce3073ae27fa7a3ae5c914b5/src/types/options.d.ts#L7 +type url = string; +type size = string; + +type horizontal = 'top' | 'bottom' | number; +type vertical = 'left' | 'right' | number; + +interface Options { + // Server + channel IDs + server: string; + channel?: string; + + // Dynamic username + username?: string; + + // Where the button should appear on-screen + location?: [horizontal, vertical]; + + // The color of the button + color?: string; + // The glyph to display on the button + glyph?: [url, size]; + // Custom CSS to be injected into the Shadow root + css?: string; + + // Message notifications + notifications?: boolean; + // Unread message indicator + indicator?: boolean; + // Notification timeout + timeout?: number; + + // Only load the widget once the user opens it + defer?: boolean; + // Connect to a custom WidgetBot server + shard?: url; +} + +interface Crate { + node: Element; +} + +// Copied from: https://github.com/widgetbot-io/crate/blob/master/src/util/cdn.ts#L3 +const CDN_URL = `https://cdn.jsdelivr.net/npm/@widgetbot/crate@3`; + +const loadFromCDN = () => + new Promise Crate>((resolve, reject) => { + const script = document.createElement('script'); + script.src = CDN_URL; + document.head.appendChild(script); + + script.onload = () => resolve((window as any).Crate); + script.onerror = () => reject('Failed to load Crate!'); + }); + +/** + * DiscordChatCrate creates a WidgetBot.io crate for a Discord channel. + */ +export const DiscordChatCrate = (props: DiscordChatCrateProps) => { + const crate = useRef(undefined); + const injected = useRef(false); + + const theme = useTheme(); + const glyph = { + uri: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAABo0lEQVRIicWXMU8UURRGzwKBhi1MlkYTCixtiIWdhVjZaiT0NPwELGn4B5Za0RgTtNoOoqHUTgsb2GYJIUNCARQkhEMxb3V3mFn3ze7sfslrJvO+M/fOvHvv1FQmoamJUCcJnhnwvmngBbACPAOWgAZQBy6AM+AI+AHsAd+Am76Oar/VULfUU+N0GvY1irz7QdfV80hgVufBZyDwrLozJDCrneBbCK6puyOGdrSrThWBNyuCdvSuw6r5r4A8Ag6BuZhjEalr4DFw3H2ONyqGEvw3oLeAvKoY2sPpTvUFMD8G8CVQ74646jR3NAu9qW6PCXySBX8fE3g/C/4wJvBH4F4B+VJxAfmaV0AAFoCfwGIFkbaBp0AC9weBBHgJtEYMbZH28+TvFXNalrqgNkeU3mbwG7gfo75Wf5cE/gr7c72z7zhPNeA58Cak6wnFs9of0uPyCTgAis3/E3HeOuiK6kpdVZfVeoxPLPShehOgt+rbEg+OGj3erpNOnLek7e1z5P5SqX6gJuqlulY20piPC9L5+32Idpt0hh5Kg4JHron9wtwBvs6360AoQqwAAAAASUVORK5CYII=', + size: '30px', + }; + const color = theme.palette.primary.main; + + useEffect(() => { + if ( + crate.current !== undefined || + injected.current || + !props.serverId || + !props.channelId + ) { + return; + } + + (async () => { + injected.current = true; + + const CrateConstructor = await loadFromCDN(); + const created = new CrateConstructor({ + server: props.serverId, + channel: props.channelId, + glyph: [glyph.uri, glyph.size], + defer: true, + color: color, + shard: 'https://emerald.widgetbot.io', + }); + created.node.setAttribute('title', 'Chat with us'); + crate.current = created; + })(); + + // NOTE: we disable the deps here to prevent the component from being re-added, as there + // is currently no way to dispose of the older Crate and create a new one. This does mean + // that once a crate is added, it *cannot* be changed, but that should be okay. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [props]); + + return ; +}; diff --git a/playground-ui/src/GoogleAnalyticsHook.tsx b/playground-ui/src/GoogleAnalyticsHook.tsx new file mode 100644 index 0000000..49e276d --- /dev/null +++ b/playground-ui/src/GoogleAnalyticsHook.tsx @@ -0,0 +1,78 @@ +import { useEffect } from 'react'; + +declare global { + interface Window { + gtag: (kind: string, subkind: any, data?: Record) => any + dataLayer: any[]; + } +} + +let tagInjected = false; +let userSet = false; + +/** + * useGoogleAnalytics is a hook which registers with Google Analytics and reports + * all page URL changes via the specified measurementId. + * + * If the measurementId is not specified or empty, simply returns the handlers + * for registering custom events. + * + * A call with the measurementId parameter can only be made *once*. + * + * @example + * // To initialize (should be at the root of the App) + * useGoogleAnalytics(measurementId); + * + * // To set the user + * const { setUser } = useGoogleAnalytics(); + * setUser({'id': ... , 'otherField': ... }) + * + * // To register an event + * const { pushEvent } = useGoogleAnalytics(); + * pushEvent('the-event-kind', {'data': 'here'}) + */ +export const useGoogleAnalytics = (measurementId?: string) => { + useEffect(() => { + if (measurementId && !tagInjected) { + // Configure Tags Manager. + window.dataLayer = window.dataLayer || []; + window.gtag = window.gtag || function () { window.dataLayer.push(arguments) }; + window.gtag('js', new Date()); + window.gtag('config', measurementId); + + // Install the Google Tags Manager. + let script = document.createElement('script'); + script.src = `https://www.googletagmanager.com/gtag/js?id=${measurementId}`; + script.async = true; + + document.body.appendChild(script); + tagInjected = true; + + return () => { + document.body.removeChild(script); + }; + } + }); + + const pushEvent = (eventName: string, eventParams: Record) => { + if (!tagInjected) { + return + } + window.gtag('event', eventName, eventParams); + }; + + const setValue = (valueKey: string, value: Record) => { + if (!tagInjected) { + return + } + window.gtag('set', valueKey, value); + }; + + const setUser = (userData: Record) => { + if (userSet) { return; } + setValue('user', userData); + userSet = true; + }; + + return { initialized: !!measurementId, setValue: setValue, pushEvent: pushEvent, setUser: setUser }; +}; \ No newline at end of file diff --git a/playground-ui/src/LoadingView.tsx b/playground-ui/src/LoadingView.tsx new file mode 100644 index 0000000..55c93e2 --- /dev/null +++ b/playground-ui/src/LoadingView.tsx @@ -0,0 +1,55 @@ +import CircularProgress from '@material-ui/core/CircularProgress'; +import Paper from '@material-ui/core/Paper'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import Typography from '@material-ui/core/Typography'; +import React from "react"; + +/** + * Properties for the LoadingView. + */ +interface LoadingViewProps { + /** + * The loading message content. + */ + message: React.ComponentType | React.ReactElement | string; +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + top: '0px', + left: '0px', + right: '0px', + bottom: '0px', + zIndex: 9999 + }, + paper: { + padding: theme.spacing(3), + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + throbber: { + color: theme.palette.primary.light, + marginRight: '1rem', + } + })); + +/** + * LoadingView displays a full page throbber and message for loading. + * @param props The properties for the loading view. + */ +export default function LoadingView(props: LoadingViewProps) { + const classes = useStyles(); + return
+ + + + {props.message} + +
; +} \ No newline at end of file diff --git a/playground-ui/src/MarkdownView.tsx b/playground-ui/src/MarkdownView.tsx new file mode 100644 index 0000000..bf95bc3 --- /dev/null +++ b/playground-ui/src/MarkdownView.tsx @@ -0,0 +1,28 @@ +import MarkdownIt from 'markdown-it'; +import React from "react"; + +/** + * Defines the properties for the MarkdownView. + */ +interface MarkdownViewProps { + /** + * The markdown to display. + */ + markdown: string; +} + +/** + * Displays markdown code in HTML. + * + * @param props The properties for this view. + * @example + */ +export default function MarkdownView(props: MarkdownViewProps) { + const md = new MarkdownIt('default', { + html: true, + linkify: true, + typographer: true + }); + + return ; +} \ No newline at end of file diff --git a/playground-ui/src/PlaygroundUI.tsx b/playground-ui/src/PlaygroundUI.tsx new file mode 100644 index 0000000..ccbe100 --- /dev/null +++ b/playground-ui/src/PlaygroundUI.tsx @@ -0,0 +1,124 @@ +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import { ConfirmProvider } from 'material-ui-confirm'; +import React, { PropsWithChildren } from 'react'; +import { CookiesProvider, useCookies } from 'react-cookie'; +import { AlertProvider } from './AlertProvider'; +import { ConfirmDialogProvider } from './ConfirmDialogProvider'; +import PlaygroundUIThemed, { + PlaygroundUIThemedProps, +} from './PlaygroundUIThemed'; +import SideDrawer from './SideDrawer'; +import PrimarySearchAppBar, { AppBarState } from './Toolbar'; + +/** + * Defines the properties for the PlaygroundUI skeletion + */ +interface PlaygroundUIProps { + /** + * titleBarState defines the content and state for the application bar. + */ + titleBarState: AppBarState; + + /** + * The contents of the side drawer. If undefined, the side drawer will be closed + * and disabled. + */ + drawerContent?: React.ComponentType | React.ReactElement; + + /** + * themedProps are the props for the theme. + */ + themedProps?: PlaygroundUIThemedProps; +} + +const drawerWidth = 240; // pixels + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + display: 'flex', + }, + content: { + flexGrow: 1, + padding: theme.spacing(3), + }, + toolbarSpacer: { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + padding: theme.spacing(0, 1), + // necessary for content to be below app bar + ...theme.mixins.toolbar, + }, + }) +); + +// Helper component that renders the PlaygroundUI UI. We do so in its own function/component +// to ensure it is fully nested under `` and, thus, properly themed. +function Themed(props: PropsWithChildren) { + const classes = useStyles(); + + const [cookies, setCookie] = useCookies(['sidebarState']); + const [isSideBarOpen, setSideBarOpen] = React.useState( + !cookies.sidebarState || cookies.sidebarState === 'open' + ); + + let toggleDrawer = function () { + if (!props.drawerContent) { + return true; + } + + const newState = !isSideBarOpen; + setSideBarOpen(newState); + setCookie('sidebarState', newState ? 'open' : 'closed'); + return true; + }; + + return ( + + + +
+ + {props.drawerContent !== undefined && ( + + )} +
+
+ {props.children} +
+
+
+
+
+ ); +} + +/** + * PlaygroundUI defines a skeleton for modern admin-panel-style React apps. + * + * @param props The properties for the PlaygroundUI skeleton. + * @example content + */ +export default function PlaygroundUI( + props: PropsWithChildren +) { + return ( + + + + + + ); +} diff --git a/playground-ui/src/PlaygroundUIThemed.tsx b/playground-ui/src/PlaygroundUIThemed.tsx new file mode 100644 index 0000000..8d959b9 --- /dev/null +++ b/playground-ui/src/PlaygroundUIThemed.tsx @@ -0,0 +1,99 @@ +import CssBaseline from '@material-ui/core/CssBaseline'; +import { createTheme, ThemeProvider } from '@material-ui/core/styles'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import React, { PropsWithChildren, useMemo } from 'react'; + +export interface PlaygroundUIThemedProps { + lightColor?: string; + darkColor?: string; + forceDarkMode?: boolean; +} + +/** + * Applied PlaygroundUI themeing to any child content. + * @example content + */ +export default function PlaygroundUIThemed( + props: PropsWithChildren +) { + // Determine whether the user prefers dark or light mode. + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + const darkMode = prefersDarkMode || props.forceDarkMode === true; + + const darkColor = props.darkColor; + const lightColor = props.lightColor; + + const dark = useMemo(() => { + return { + 500: darkColor || '#5730b2', + }; + }, [darkColor]); + + const light = useMemo(() => { + return { + 500: lightColor || '#6739b0', + }; + }, [lightColor]); + + // Instantiate the theme based on the user selection. + const theme = React.useMemo( + () => + createTheme({ + palette: { + type: darkMode ? 'dark' : 'light', + primary: darkMode ? dark : light, + action: { + hover: darkMode + ? 'rgba(255, 255, 255, 0.05)' + : 'rgba(0, 0, 0, 0.1)', + selected: darkMode ? undefined : 'rgba(0, 0, 0, 0.1)', + }, + }, + overrides: { + MuiMenu: { + paper: { + boxShadow: '0px 0px 10px #00000075', + }, + }, + MuiInputLabel: { + root: { + '&$focused': { + color: darkMode ? 'white' : 'inherit', + }, + }, + }, + MuiTab: { + wrapper: { + flexDirection: 'row', + }, + }, + MuiInputBase: { + root: { + '& input': { + '&:-webkit-autofill': { + transition: + 'background-color 50000s ease-in-out 0s, color 50000s ease-in-out 0s', + }, + '&:-webkit-autofill:focus': { + transition: + 'background-color 50000s ease-in-out 0s, color 50000s ease-in-out 0s', + }, + '&:-webkit-autofill:hover': { + transition: + 'background-color 50000s ease-in-out 0s, color 50000s ease-in-out 0s', + }, + }, + }, + }, + }, + }), + [darkMode, light, dark] + ); + + return ( + + + {props.children} + + ); +} diff --git a/playground-ui/src/SideDrawer.tsx b/playground-ui/src/SideDrawer.tsx new file mode 100644 index 0000000..9326c68 --- /dev/null +++ b/playground-ui/src/SideDrawer.tsx @@ -0,0 +1,112 @@ +import Divider from '@material-ui/core/Divider'; +import Drawer from '@material-ui/core/Drawer'; +import IconButton from '@material-ui/core/IconButton'; +import { createStyles, makeStyles, Theme, useTheme } from '@material-ui/core/styles'; +import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import clsx from 'clsx'; +import React from 'react'; + +// Based on: https://material-ui.com/components/drawers/#mini-variant-drawer +const useStyles = (drawerWidth: number) => makeStyles((theme: Theme) => + createStyles({ + drawer: { + width: drawerWidth, + flexShrink: 0, + whiteSpace: 'nowrap', + }, + drawerOpen: { + width: drawerWidth, + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + overflowY: 'auto' + }, + drawerClose: { + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + overflowX: 'hidden', + width: theme.spacing(8) + 1, + [theme.breakpoints.up('sm')]: { + width: theme.spacing(8) + 1, + }, + overflowY: 'hidden' + }, + toolbar: { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + padding: theme.spacing(0, 1), + // necessary for content to be below app bar + ...theme.mixins.toolbar, + }, + })); + +/** + * Defines the properties for the SideDrawer. + */ +interface SideDrawerProps { + /** + * The content of the SideDrawer. Typically, this is a `` component + * representing the sections of the application. + */ + content: React.ComponentType | React.ReactElement; + + /** + * The width of the drawer, in pixels, when open. + */ + drawerWidth: number; + + /** + * Whether the SideDrawer is currently fully open and displayed. If `false`, + * the drawer will be displayed in a collapsed state. + */ + isSideBarOpen: boolean; + + /** + * Callback function to close the drawer. + */ + closeDrawer: () => boolean; +} + +export const SideDrawerOpenContext = React.createContext(false) + +/** + * SideDrawer defines a collapsable Drawer component which is locked to the side + * of the application and provides sectioning and navigation support. Typically, + * the SideDrawer will consist of a full set of navigation sections, + * via `` elements, as well as extra information. + * + * @param props The properties for the SideDrawer. + * @example + */ +export default function SideDrawer(props: SideDrawerProps) { + const classes = useStyles(props.drawerWidth)(); + const theme = useTheme(); + + return +
+ + {theme.direction === 'rtl' ? : } + +
+ + + {props.content} + +
; +} \ No newline at end of file diff --git a/playground-ui/src/TabLabel.tsx b/playground-ui/src/TabLabel.tsx new file mode 100644 index 0000000..56349f0 --- /dev/null +++ b/playground-ui/src/TabLabel.tsx @@ -0,0 +1,44 @@ +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import React from 'react'; + +/** + * Defines the properties for the tab label. + */ +export interface TabLabelProps { + icon: React.ReactNode; + title: string; +} + + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + tabLabel: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + width: '100%' + }, + tabIcon: { + display: 'inherit' + }, + title: { + display: 'inline-block', + marginLeft: theme.spacing(1), + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + }, + })); + + +/** + * TabLabel defines a well-styled label for tabs. + * @param props The props for the TabelLabel. + * @example } title="Groups" />} /> + */ +export default function TabLabel(props: TabLabelProps) { + const classes = useStyles(); + return ( + {props.icon}{props.title} + ); +} diff --git a/playground-ui/src/TabPanel.tsx b/playground-ui/src/TabPanel.tsx new file mode 100644 index 0000000..38bf117 --- /dev/null +++ b/playground-ui/src/TabPanel.tsx @@ -0,0 +1,52 @@ +import React, { CSSProperties } from 'react'; + +/** + * Defines the properties for the tab panel. + */ +export interface TabPanelProps { + /** + * children is the content of the tab panel. + */ + children?: React.ReactNode; + + /** + * index is the index for which, if the value matches, the tab is displayed. + */ + index: any; + + /** + * value is the current tab value. + */ + value: any; + + /** + * className is the custom classname for the TabPanel. + */ + className?: string; + + /** + * style is any styles for the component. + */ + style?: CSSProperties | undefined; +} + +// Based on: https://material-ui.com/components/tabs/#vertical-tabs + +/** + * TabPanel defines a panel that displays based on the currently active tab. + * @param props The props for the TabPanel. + */ +export default function TabPanel(props: TabPanelProps) { + const { children, value, index, ...other } = props; + + return ( + + ); +} diff --git a/playground-ui/src/Toolbar.tsx b/playground-ui/src/Toolbar.tsx new file mode 100644 index 0000000..89dc077 --- /dev/null +++ b/playground-ui/src/Toolbar.tsx @@ -0,0 +1,396 @@ +import AppBar from '@material-ui/core/AppBar'; +import Badge from '@material-ui/core/Badge'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; +import Popover from '@material-ui/core/Popover'; +import { createStyles, fade, makeStyles, Theme } from '@material-ui/core/styles'; +import Toolbar from '@material-ui/core/Toolbar'; +import Typography from '@material-ui/core/Typography'; +import ExitToApp from '@material-ui/icons/ExitToApp'; +import MenuIcon from '@material-ui/icons/Menu'; +import MenuOpenIcon from '@material-ui/icons/MenuOpen'; +import MoreIcon from '@material-ui/icons/MoreVert'; +import NotificationsIcon from '@material-ui/icons/Notifications'; +import NotificationsNoneIcon from '@material-ui/icons/NotificationsNone'; +import clsx from 'clsx'; +import { bindPopover, bindTrigger, usePopupState } from 'material-ui-popup-state/hooks'; +import React from 'react'; +import { NavLink } from 'react-router-dom'; +import { UserProps } from './User'; +import UserCard from './UserCard'; +import UserIcon from './UserIcon'; + +// Based on: https://material-ui.com/components/drawers/#mini-variant-drawer + +/** + * Defines content and state that will appear in the app bar. + */ +export interface AppBarState { + /** + * title defines the content to display as the Application title. + */ + title: React.ComponentType | React.ReactElement; + + /** + * Sets the user information. + */ + user: UserProps; + + /** + * notificationCount is the number of notifications for the user. + */ + notificationCount: number; + + /** + * hasAdditionalNotifications indicates whether there are additional notifications + * for the user, beyond those loaded. + */ + hasAdditionalNotifications: boolean; + + /** + * statusElement is the element to show in the status view. + */ + statusElement?: React.ReactNode; + + /** + * notificationElement is the element to show in the notifications view. + */ + notificationElement?: React.ReactNode | undefined; + + /** + * searchElement is, if specified, the element to show as the search box. + */ + searchElement?: React.ReactNode; + + /** + * The action to perform for signing out. + */ + signoutAction: () => void; + + /** + * userContext displays additional context for the user, if any, right next to the username. + * For example, this might be the currently selected organization. + */ + userContext?: React.ReactNode; + + /** + * additionalUserMenuOptions holds any additional UI to place in the user menu. + */ + additionalUserMenuOptions?: React.ReactElement; +} + + +/** + * Defines the properties for the AppBar. + */ +interface AppBarProps { + /** + * The state and content for the app bar. + */ + state: AppBarState; + + /** + * shiftWithDrawer if specified and true, will shift the AppBar when the side + * drawer is open. + */ + shiftWithDrawer?: boolean; + + /** + * The width of the SideDrawer, in pixels. + */ + drawerWidth: number; + + /** + * Whether the SideDrawer is currently open or collapsed. + */ + isSideBarOpen: boolean; + + /** + * Callback function to toggle the drawer. + */ + toggleDrawer: () => boolean; + + /** + * isDrawerEnabled indicates whether the side drawer is enabled. Defaults to true. + */ + isDrawerEnabled?: boolean; +} + +const useStyles = (drawerWidth: number) => makeStyles((theme: Theme) => + createStyles({ + grow: { + flexGrow: 1, + }, + appBar: { + zIndex: theme.zIndex.drawer + 1, + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + }, + appBarShift: { + marginLeft: drawerWidth, + width: `calc(100% - ${drawerWidth}px)`, + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + }, + menuButton: { + marginRight: theme.spacing(2), + }, + title: { + display: 'none', + [theme.breakpoints.up('sm')]: { + display: 'block', + }, + minWidth: '130px' + }, + titleNavLink: { + color: theme.palette.common.white, + textDecoration: 'none', + }, + + status: { + position: 'relative', + padding: 0, + margin: 0, + marginRight: theme.spacing(1), + marginLeft: 0, + display: 'flex', + alignItems: 'center' + }, + + search: { + position: 'relative', + borderRadius: theme.shape.borderRadius, + backgroundColor: fade(theme.palette.common.white, 0.15), + '&:hover': { + backgroundColor: fade(theme.palette.common.white, 0.25), + }, + marginRight: theme.spacing(2), + marginLeft: 0, + width: '100%', + [theme.breakpoints.up('sm')]: { + marginLeft: theme.spacing(3), + width: 'auto', + }, + }, + sectionDesktop: { + display: 'none', + [theme.breakpoints.up('md')]: { + display: 'flex', + }, + }, + sectionMobile: { + display: 'flex', + [theme.breakpoints.up('md')]: { + display: 'none', + }, + }, + }), +); + + +/** + * PrimarySearchAppBar is the top search and app bar displayed in the application. + * @param props The properties for the PrimarySearchAppBar. + * @example + */ +export default function PrimarySearchAppBar(props: AppBarProps) { + const classes = useStyles(props.drawerWidth)(); + const [anchorEl, setAnchorEl] = React.useState(null); + const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null); + + // We define two menus: + // - One to be displayed for the user, with its information. + // - One to be displayed on mobile devices, containing the actions otherwise hidden. + const isProfileMenuOpen = Boolean(anchorEl); + const isMobileMenuOpen = Boolean(mobileMoreAnchorEl); + + const handleProfileMenuOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleMobileMenuClose = () => { + setMobileMoreAnchorEl(null); + }; + + const handleMenuClose = () => { + setAnchorEl(null); + handleMobileMenuClose(); + }; + + const handleMobileMenuOpen = (event: React.MouseEvent) => { + setMobileMoreAnchorEl(event.currentTarget); + }; + + const menuId = 'primary-search-account-menu'; + const renderProfileMenu = ( + + + + + {props.state.additionalUserMenuOptions} + + + + + + Sign Out + + + ); + + const notificationCountText = props.state.notificationCount ? `${props.state.notificationCount}${props.state.hasAdditionalNotifications ? '+' : ''}` : null; + + const mobileMenuId = 'primary-search-account-menu-mobile'; + const renderMobileMenu = ( + + + + + +

{props.state.user.username}

+
+ + {props.state.additionalUserMenuOptions} + {props.state.notificationElement !== undefined && + <> + + + + {props.state.notificationCount ? : } + + +

Notifications

+
+ + + } + + Sign Out + +
+ ); + + const NotificationsIconAndPopup = () => { + const popupState = usePopupState({ + variant: 'popover', + popupId: 'notificationPopover', + }) + return ( +
+ {props.state.notificationElement !== undefined && + + {props.state.notificationCount ? : } + + } + { + props.state.notificationCount > 0 && + {props.state.notificationElement} + + } +
+ ) + }; + + const isSideBarOpen = props.isSideBarOpen && props.isDrawerEnabled !== false; + return ( +
+ + + + {isSideBarOpen ? : } + + + {props.state.title} + + {props.state.searchElement !== undefined &&
+ {props.state.searchElement} +
} +
+
+ {props.state.statusElement !== undefined &&
+ {props.state.statusElement} +
} + + {props.state.userContext} + + + +
+
+ + + +
+ + + {renderMobileMenu} + {renderProfileMenu} +
+ ); +} diff --git a/playground-ui/src/User.ts b/playground-ui/src/User.ts new file mode 100644 index 0000000..741b7a6 --- /dev/null +++ b/playground-ui/src/User.ts @@ -0,0 +1,24 @@ +/** + * Defines the properties for a User. + */ +export interface UserProps { + /** + * The username of the user. + */ + username: string; + + /** + * The user's avatar URL, if any. + */ + avatarUrl?: string | null; + + /** + * The full name of the user. + */ + fullName?: string | null; + + /** + * The email address for the user, if any. + */ + emailAddress?: string | null; +} \ No newline at end of file diff --git a/playground-ui/src/UserCard.tsx b/playground-ui/src/UserCard.tsx new file mode 100644 index 0000000..8b62fe2 --- /dev/null +++ b/playground-ui/src/UserCard.tsx @@ -0,0 +1,36 @@ +import CardHeader from '@material-ui/core/CardHeader'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import React from "react"; +import { UserProps } from './User'; +import UserIcon from './UserIcon'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + }, + userIcon: { + fontSize: '140%', + } + })); + +/** + * Defines the properties for the UserCard. + */ +interface UserCardProps { + /** + * The user to display. + */ + user: UserProps +} + +export default function UserCard(props: UserCardProps) { + const classes = useStyles(); + + return
+ } + title={props.user.fullName || props.user.username} + subheader={props.user.emailAddress || props.user.username} + /> +
; +} \ No newline at end of file diff --git a/playground-ui/src/UserIcon.tsx b/playground-ui/src/UserIcon.tsx new file mode 100644 index 0000000..da299c9 --- /dev/null +++ b/playground-ui/src/UserIcon.tsx @@ -0,0 +1,77 @@ +import Avatar from '@material-ui/core/Avatar'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import clsx from 'clsx'; +import ColorHash from "color-hash"; +import React from "react"; + +/** + * Defines the properties for the AppBar. + */ +interface UserIconProps { + /** + * The username of the user. + */ + username: string; + + /** + * The user's avatar URL, if any. + */ + avatarUrl?: string | null; + + /** + * className is the custom CSS class name for this component, if any. + */ + className?: string + + /** + * size is the size of the icon. + */ + size?: "small" | "normal" +} + +interface styleProps { + userColor: string; +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + grow: { + flexGrow: 1, + }, + avatar: { + backgroundColor: (props: styleProps) => props.userColor, + color: (props: styleProps) => theme.palette.getContrastText(props.userColor), + width: '1.5em', + height: '1.5em', + }, + userIcon: { + maxWidth: '2em', + maxHeight: '1.5em', + display: 'inline-block' + }, + smallIcon: { + + }, + smallAvatar: { + width: '1em', + height: '1em', + } + })); + +/** + * UserIcon displays an icon for the user. If the user has an avatar image, it is + * used (and clipped to a circle). Otherwise, a color-generated Avatar is used. + * + * @param props The props for the UserIcon. + */ +export default function UserIcon(props: UserIconProps) { + let colorHash = new ColorHash({ lightness: [0.35, 0.5, 0.65] }); + const userColor = colorHash.hex(props.username ?? ''); + const classes = useStyles({ 'userColor': userColor }); + + return + + {props.username ? props.username[0].toUpperCase() : ''} + + ; +} diff --git a/playground-ui/src/VisNetworkGraph.tsx b/playground-ui/src/VisNetworkGraph.tsx new file mode 100644 index 0000000..5b3b8aa --- /dev/null +++ b/playground-ui/src/VisNetworkGraph.tsx @@ -0,0 +1,242 @@ +import { CircularProgress } from '@material-ui/core'; +import { createStyles, makeStyles, Theme, useTheme } from '@material-ui/core/styles'; +import clsx from 'clsx'; +import { dequal } from 'dequal'; +import React, { useRef, useState } from 'react'; +import 'react-reflex/styles.css'; +import useDeepCompareEffect from 'use-deep-compare-effect'; +import vis from 'visjs-network'; +import { useDebouncedChecker } from './debouncer'; + +export type EdgeShape = 'ellipse' | + 'circle' | + 'database' | + 'box' | + 'text' | + 'image' | + 'circularImage' | + 'diamond' | + 'dot' | + 'star' | + 'triangle' | + 'triangleDown' | + 'square' | + 'icon' | + 'hexagon'; + +export interface VisNode { + id: number | string + label: string + title?: string + group?: string + shapeProperties?: { + borderDashes?: boolean | number[] + } + color?: string | { + border?: string + background?: string + highlight?: string + } + + shape?: EdgeShape +} + +export interface VisEdge { + id: string + from: number | string + to: number | string + title?: string | Element + color?: { + color?: string + highlight?: string + }, + arrows?: { to?: { enabled?: boolean } } + dashes?: boolean | number[] +} + +interface VisGraphDefinition { + nodes: N[], edges: E[] +} + +/** + * simplify the graph for comparison. We only include fields that affect the shape of + * the graph. + */ +function simplify(graph: VisGraphDefinition) { + return { + nodes: graph.nodes.map((node: N) => { + return { + id: node.id, + } + }), + edges: graph.edges.map((edge: E) => { + return { + id: edge.id, + from: edge.from, + to: edge.to, + } + }), + } +} + +function applyChangesInPlace(visNodeSet: any, visEdgeSet: any, existingGraph: VisGraphDefinition, graph: VisGraphDefinition) { + // Check if the only changes are to the metadata of the nodes and edges. If so, they can + // be applied without recreating the entire network. + if (existingGraph.edges.length !== graph.edges.length || + existingGraph.nodes.length !== graph.nodes.length) { + return false; + } + + // Clone the graphs in simplified form for comparison. + const existingSimplified = simplify(existingGraph); + const simplified = simplify(graph); + if (!dequal(existingSimplified, simplified)) { + return false; + } + + + // If we've reach this point, then the graphs are the same with exception of allowable in-place + // changes. + // Apply any color and label changes. + graph.nodes.forEach((node: N) => { + visNodeSet.update({ id: node.id, color: node.color, label: node.label, title: node.title }); + }); + graph.edges.forEach((edge: E) => { + if (edge.color) { + visEdgeSet.update({ id: edge.id, color: edge.color }); + } + + visEdgeSet.update({ id: edge.id, title: edge.title }); + }); + return true; +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + graph: { + width: '100%', height: '100%', + '& code': { + fontSize: '85%' + } + }, + })); + +export interface VisNetworkGraphSelection { nodes: N[], edges: E[] } + +export interface VisNetworkGraphProps { + graph: VisGraphDefinition + selected?: VisNetworkGraphSelection + onDblClicked?: (nodes: N[], edges: E[]) => void + className?: string +} + + +/** + * Renders a VISJS network graph. + * + * NOTE: The following tags must be included in index.html for this component to be used: + * <script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"> + * <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" /> + */ +export default function VisNetworkGraph(props: VisNetworkGraphProps) { + const theme = useTheme(); + const classes = useStyles(); + + const divRef = useRef(null); + const networkRef = useRef(); + const currentGraphRef = useRef | undefined>(); + const nodeDataSetRef = useRef(); + const edgeDataSetRef = useRef(); + const [isLoaded, setIsLoaded] = useState(false); + + const updateSelection = (selection: VisNetworkGraphSelection | undefined) => { + if (!selection) { + return; + } + + const network = networkRef.current; + if (network !== undefined && nodeDataSetRef.current && edgeDataSetRef.current) { + network.setSelection({ + nodes: selection.nodes.map((node: N) => node.id).filter((nodeID: string | number) => !!nodeDataSetRef.current.get(nodeID)), + edges: selection.edges.map((edge: E) => edge.id).filter((edgeID: string) => !!edgeDataSetRef.current.get(edgeID)) + }, { + highlightEdges: false + }); + } + }; + + const { run: runUpdate, isActive: isActive } = useDebouncedChecker(250, async (graph: VisGraphDefinition) => { + // Check for in-place changes. + if (networkRef.current && applyChangesInPlace(nodeDataSetRef.current, edgeDataSetRef.current, currentGraphRef.current!, graph)) { + updateSelection(props.selected); + return; + } + + if (divRef.current === null) { + return; + } + + nodeDataSetRef.current = new vis.DataSet(graph.nodes); + edgeDataSetRef.current = new vis.DataSet(graph.edges); + + // Otherwise, create an entirely new network. + currentGraphRef.current = graph; + const network = new vis.Network(divRef.current, { nodes: nodeDataSetRef.current, edges: edgeDataSetRef.current }, { + nodes: { + shape: 'dot', + size: 10, + font: { + size: 12, + color: theme.palette.text.primary, + }, + borderWidth: 2, + shadow: true + }, + edges: { + width: 2, + shadow: true + }, + layout: { + randomSeed: 42, + improvedLayout: true + } + }); + network.on("stabilizationIterationsDone", function () { + network.setOptions({ physics: false }); + }); + + if (props.onDblClicked !== undefined) { + network.on("doubleClick", function (e: { nodes: string[], edges: string[] }) { + const nodes = props.graph.nodes.filter((node: VisNode) => e.nodes.includes(node.id.toString())); + const edges = props.graph.edges.filter((edge: VisEdge) => e.edges.includes(edge.id.toString())); + if (props.onDblClicked !== undefined) { + props.onDblClicked(nodes, edges); + } + }); + } + + networkRef.current = network; + + updateSelection(props.selected); + setIsLoaded(true); + }); + + useDeepCompareEffect(() => { + if (divRef.current) { + runUpdate(props.graph); + } + }, [props.graph, divRef]); + + useDeepCompareEffect(() => { + if (isActive()) { + return; + } + + updateSelection(props.selected); + }, [props.selected, networkRef, updateSelection, isActive]) + + return
+ {!isLoaded &&
} +
+
; +} \ No newline at end of file diff --git a/playground-ui/src/debouncer.ts b/playground-ui/src/debouncer.ts new file mode 100644 index 0000000..4744a08 --- /dev/null +++ b/playground-ui/src/debouncer.ts @@ -0,0 +1,90 @@ +import { useRef } from "react"; + +enum CheckerStatus { + SLEEPING = 0, + SCHEDULED = 1, + REQUESTED = 2, + RUNNING = 3, +} + +interface CheckerState { + status: CheckerStatus, + runIndex: number + argument: T | undefined +} + +/** + * useDebouncedChecker is a hook for invoking a specific checker function after the given + * rate of seconds, and automatically handling debouncing and rechecking. + */ +export function useDebouncedChecker(rate: number, checker: (arg: T) => Promise) { + const state = useRef>({ + status: CheckerStatus.SLEEPING, + runIndex: -1, + argument: undefined + }); + + const runChecker = (existingIndex: number) => { + const arg = state.current.argument; + if (arg === undefined) { + return; + } + + const currentIndex = state.current.runIndex; + if (currentIndex > existingIndex) { + // Things are being changed rapidly. Wait until they are done. + setTimeout(() => runChecker(currentIndex), rate); + return; + } + + (async () => { + state.current = { + status: CheckerStatus.RUNNING, + runIndex: existingIndex, + argument: arg + }; + await checker(arg); + + // If the run went stale, issue another call. + const nextIndex = state.current.runIndex; + if (nextIndex > existingIndex) { + setTimeout(() => runChecker(nextIndex), rate); + return; + } + + state.current = { + status: CheckerStatus.SLEEPING, + runIndex: existingIndex, + argument: undefined + }; + })(); + }; + + return { + run: (arg: T) => { + // To prevent it blocking the main thread. + (async () => { + if (state.current.status === CheckerStatus.SLEEPING) { + const currentIndex = state.current.runIndex + 1; + state.current = { + status: CheckerStatus.SCHEDULED, + runIndex: currentIndex, + argument: arg, + } + + // Kick off the timeout. + setTimeout(() => runChecker(currentIndex), rate); + } else { + state.current = { + ...state.current, + runIndex: state.current.runIndex + 1, + argument: arg + }; + }; + })(); + }, + isActive: () => { + return state.current.status !== CheckerStatus.SLEEPING + } + }; +} \ No newline at end of file diff --git a/playground-ui/src/types.d.ts b/playground-ui/src/types.d.ts new file mode 100644 index 0000000..5830373 --- /dev/null +++ b/playground-ui/src/types.d.ts @@ -0,0 +1,5 @@ +declare module 'visjs-network' { + const data: any + export default data +} + diff --git a/playground-ui/src/types.ts b/playground-ui/src/types.ts new file mode 100644 index 0000000..47f4def --- /dev/null +++ b/playground-ui/src/types.ts @@ -0,0 +1,6 @@ +/** + * All data stored in the table must have an `id` field. + */ +export interface IDed { + id: string +} \ No newline at end of file diff --git a/playground-ui/tsconfig.json b/playground-ui/tsconfig.json new file mode 100644 index 0000000..7ad0b81 --- /dev/null +++ b/playground-ui/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react", + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src", + ] +} \ No newline at end of file diff --git a/playground-ui/yarn.lock b/playground-ui/yarn.lock new file mode 100644 index 0000000..640bb76 --- /dev/null +++ b/playground-ui/yarn.lock @@ -0,0 +1,90 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react-page-visibility@^6.4.1": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@types/react-page-visibility/-/react-page-visibility-6.4.1.tgz#21c3bc4a3f310d38d188916cadc55f2bde65f27d" + integrity sha512-vNlYAqKhB2SU1HmF9ARFTFZN0NSPzWn8HSjBpFqYuQlJhsb/aSYeIZdygeqfSjAg0PZ70id2IFWHGULJwe59Aw== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" + integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +csstype@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" + integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ== + +dequal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.0.tgz#41c6065e70de738541c82cdbedea5292277a017e" + integrity sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +react-countdown@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/react-countdown/-/react-countdown-2.3.2.tgz#4cc27f28f2dcd47237ee66e4b9f6d2a21fc0b0ad" + integrity sha512-Q4SADotHtgOxNWhDdvgupmKVL0pMB9DvoFcxv5AzjsxVhzOVxnttMbAywgqeOdruwEAmnPhOhNv/awAgkwru2w== + dependencies: + prop-types "^15.7.2" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-page-visibility@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/react-page-visibility/-/react-page-visibility-7.0.0.tgz#13dfe604790d061e70b900038bad1ca769a36cbc" + integrity sha512-d4Kq/8TtJSr8dQc8EJeAZcSKTrGzC5OPTm6UrMur9BnwP0fgTawI9+Nd+ZGB7vwCfn2yZS0qDF9DR3/QYTGazw== + dependencies: + prop-types "^15.7.2" + +use-deep-compare@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-deep-compare/-/use-deep-compare-1.1.0.tgz#85580dde751f68400bf6ef7e043c7f986595cef8" + integrity sha512-6yY3zmKNCJ1jjIivfZMZMReZjr8e6iC6Uqtp701jvWJ6ejC/usXD+JjmslZDPJQgX8P4B1Oi5XSLHkOLeYSJsA== + dependencies: + dequal "1.0.0" + +use-window-focus@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/use-window-focus/-/use-window-focus-1.4.1.tgz#3922cd8990e684018a9f2a5c91211112c61a6b2a" + integrity sha512-GqBxPfh/0qvwODQfAkMaXkufv1sNUtgrZXrPXsyEjd1v4YrOmVCfK5axGiJimv6x6TFvUwnQWJUG4nzE1lWdQQ== diff --git a/playground/.gitignore b/playground/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/playground/.gitignore @@ -0,0 +1 @@ +build diff --git a/playground/README.md b/playground/README.md new file mode 100644 index 0000000..68b9f3f --- /dev/null +++ b/playground/README.md @@ -0,0 +1,38 @@ +# Playground + +Playground is a React App built using [CRACO](https://craco.js.org/). + +## Installing dependencies + +Run `yarn install` in the _parent_ directory. + +## Debugging And Testing + +In this directory, you can run: + +### `yarn 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.
+You will also see any lint errors in the console. + +### `yarn 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. + +### `yarn 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. + +### `yarn cy:run` + +Runs the cypress test suite. A dev server must be started before the test suite is run. diff --git a/playground/contrib/docker-entrypoint-wrapper.sh b/playground/contrib/docker-entrypoint-wrapper.sh new file mode 100755 index 0000000..4b0ce0e --- /dev/null +++ b/playground/contrib/docker-entrypoint-wrapper.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +env_file=/usr/share/nginx/html/config-env.js +nginx_conf=/etc/nginx/nginx.conf +nginx_conf_template=nginx.conf.tmpl + +. generate-config-env.sh + +validate_env "$env_file" +generate_env "$env_file" +generate_nginx "$nginx_conf_template" "$nginx_conf" + +/docker-entrypoint.sh nginx diff --git a/playground/contrib/generate-config-env.sh b/playground/contrib/generate-config-env.sh new file mode 100755 index 0000000..d8d88b3 --- /dev/null +++ b/playground/contrib/generate-config-env.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +validate_env() { + if [ -z "${PLAYGROUND_AUTHENTICATION_ENGINE}" ]; then + echo "PLAYGROUND_AUTHENTICATION_ENGINE env var not set. Defaulting to none" + fi +} + +generate_env() { + env_file=$1 + cat > "$env_file" << EOF +window._env_ = { + AUTHENTICATION_ENGINE: "${PLAYGROUND_AUTHENTICATION_ENGINE:=none}", + AUTHZED_DEVELOPER_GATEWAY_ENDPOINT: "${PLAYGROUND_AUTHZED_DEVELOPER_GATEWAY_ENDPOINT}", + AUTHZED_FRONTEND_ENDPOINT: "${PLAYGROUND_AUTHZED_FRONTEND_ENDPOINT}", + AUTHZED_FRONTEND_API_ENDPOINT: "${PLAYGROUND_AUTHZED_FRONTEND_API_ENDPOINT}", + GOOGLE_ANALYTICS_MEASUREMENT_ID: "${PLAYGROUND_GOOGLE_ANALYTICS_MEASUREMENT_ID}", + OIDC_URL_PREFIX: "${PLAYGROUND_OIDC_URL_PREFIX}", + DISCORD_CHANNEL_ID: "${PLAYGROUND_DISCORD_CHANNEL_ID}", + DISCORD_INVITE_URL: "${PLAYGROUND_DISCORD_INVITE_URL}", + DISCORD_SERVER_ID: "${PLAYGROUND_DISCORD_SERVER_ID}" +}; +EOF + echo "${env_file}:" + cat "$env_file" +} + +generate_nginx() { + conf_template=$1 + nginx_conf=$2 + envsubst '$PLAYGROUND_DEVELOPER_API_DOWNLOAD_ENDPOINT' < "$conf_template" > "$nginx_conf" + echo "${nginx_conf}:" + cat "$nginx_conf" +} diff --git a/playground/contrib/nginx.conf.tmpl b/playground/contrib/nginx.conf.tmpl new file mode 100644 index 0000000..b02ff5e --- /dev/null +++ b/playground/contrib/nginx.conf.tmpl @@ -0,0 +1,46 @@ +daemon off; + +events { +} + +http { + # default set of files and their content types + include mime.types; + # prompt user for download for any undeclared file format + default_type application/octet-stream; + # optimization when serving static files + sendfile on; + + server { + listen 3000; + root /usr/share/nginx/html; + gzip on; + gzip_types text/css application/javascript application/json image/svg+xml application/wasm application/octet-stream; + gzip_comp_level 9; + etag on; + location / { + try_files $uri $uri/ /index.html; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + location /static/ { + add_header Cache-Control max-age=31536000; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + location /index.html { + add_header Cache-Control no-cache; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + location /config.json { + add_header Cache-Control no-cache; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + location /config-env.js { + add_header Cache-Control no-cache; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + location ~ ^/s/([^/]+)/download$ { + rewrite ^/s/([^/]+)/download$ ${PLAYGROUND_DEVELOPER_API_DOWNLOAD_ENDPOINT}/$1; + add_header Content-Security-Policy "frame-ancestors 'self';" always; + } + } +} diff --git a/playground/contrib/test-config-env.sh b/playground/contrib/test-config-env.sh new file mode 100755 index 0000000..b19433a --- /dev/null +++ b/playground/contrib/test-config-env.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env sh + +. generate-config-env.sh + +env_file=test-config-env.js + +generate_env $env_file + +if [ ! -f ${env_file} ] +then + echo "${env_file} does not exist" + exit 1 +fi + +npx jshint "${env_file}" diff --git a/playground/contrib/test-nginx-conf.sh b/playground/contrib/test-nginx-conf.sh new file mode 100755 index 0000000..756b0d1 --- /dev/null +++ b/playground/contrib/test-nginx-conf.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +. generate-config-env.sh + +nginx_conf=/etc/nginx/nginx.conf.test +nginx_conf_template=nginx.conf.tmpl + +generate_nginx "$nginx_conf_template" "$nginx_conf" + +nginx -c "$nginx_conf" -t diff --git a/playground/craco.config.js b/playground/craco.config.js new file mode 100644 index 0000000..c0764ed --- /dev/null +++ b/playground/craco.config.js @@ -0,0 +1,43 @@ +// craco.config.js +const CracoEsbuildPlugin = require('craco-esbuild'); +const path = require('path'); +const { DefinePlugin } = require('webpack'); + +const resolvePackage = (relativePath) => { + return path.resolve(__dirname, relativePath); +}; + +module.exports = { + webpack: { + plugins: [ + new DefinePlugin({ + // Use build timestamp as version id + 'process.env.WASM_VERSION': DefinePlugin.runtimeValue(Date.now, true), + }), + ], + configure: (webpackConfig, { env, paths }) => { + return webpackConfig; + }, + headers: { + 'Content-Security-Policy': "frame-ancestors 'self'", + }, + }, + plugins: [ + { + plugin: CracoEsbuildPlugin, + options: { + includePaths: [ + resolvePackage('../playground-ui'), + resolvePackage('../spicedb-common'), + ], // Optional. If you want to include components which are not in src folder + enableSvgr: true, // Optional. + svgrOptions: { + removeViewBox: false, + }, + }, + }, + ], + eslint: { + enable: false, + }, +}; diff --git a/playground/cypress.config.ts b/playground/cypress.config.ts new file mode 100644 index 0000000..c32b71e --- /dev/null +++ b/playground/cypress.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'cypress'; + +export default defineConfig({ + retries: 1, + defaultCommandTimeout: 10000, + requestTimeout: 11000, + responseTimeout: 60000, + viewportHeight: 768, + viewportWidth: 1400, + chromeWebSecurity: false, + + e2e: { + baseUrl: 'http://localhost:3000', + specPattern: [ + 'cypress/integration/**/*.spec.{js,ts}', + 'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', + ], + }, +}); diff --git a/playground/cypress/integration/basic.spec.js b/playground/cypress/integration/basic.spec.js new file mode 100644 index 0000000..58863dd --- /dev/null +++ b/playground/cypress/integration/basic.spec.js @@ -0,0 +1,41 @@ +/// + +describe('Playground', () => { + beforeEach(() => { + cy.visitPlayground(); + }) + + it('displays tutorial', () => { + cy.get('.react-joyride__tooltip') + .contains('Welcome!') + .should('have.length', 1) + }); + + it('can dismiss tutorial', () => { + cy.contains('Skip') + .click(); + cy.reload(); + cy.contains('Welcome!').should('not.exist') + }); + + it('displays header buttons', () => { + cy.dismissTour(); + cy.get('a').contains('Discuss on Discord').should('exist'); + cy.get('header > button').contains('Select Example Schema').should('exist'); + cy.get('header > button').contains('Share').should('exist'); + cy.get('header > button').contains('Download').should('exist'); + cy.get('header > button').contains('Load From File').should('exist'); + cy.contains('Sign In To Import').should('exist'); + }); + + it('default validation succeeds', () => { + cy.dismissTour(); + cy.waitForWasm(); + cy.tab('Assertions'); + cy.get('button') + .contains('Run') + .click(); + cy.contains('Validated!') + .should('exist'); + }); +}); diff --git a/playground/cypress/integration/nav.spec.js b/playground/cypress/integration/nav.spec.js new file mode 100644 index 0000000..7cc1efc --- /dev/null +++ b/playground/cypress/integration/nav.spec.js @@ -0,0 +1,84 @@ +/// + +describe('Navigation', () => { + beforeEach(() => { + cy.visitPlayground(); + cy.dismissTour(); + }) + + it('displays schema tab', () => { + cy.tab('Schema'); + // Default editor content + cy.editorText() + .containsAll([ + 'definition user {}', + 'definition resource {', + '}', + ]); + // Sub-menu buttons + cy.get('button') + .contains('Format') + .should('exist'); + }); + + it('displays relationships tab', () => { + cy.tab('Test Relationships'); + // Editor mode buttons + cy.get('[aria-label="relationship editor view"]') + // Grid view + cy.contains('Highlight same types, objects and relations') + cy.get('[aria-label="code editor"]').click() + // Text view + cy.editorText() + .contains('resource:anotherresource#writer@user:somegal'); + }); + + it('displays assertions tab', () => { + cy.tab('Assertions'); + // Default editor content + cy.editorText() + .containsAll([ + 'assertTrue', + 'assertFalse', + ]); + // Sub-menu buttons + cy.contains('Validation not run') + .should('exist'); + cy.get('button') + .contains('Run') + .should('exist'); + }); + + it('displays expected relations tab', () => { + cy.tab('Expected Relations'); + // No default editor content + // Sub-menu buttons + cy.contains('Validation not run') + .should('exist'); + cy.get('button') + .contains('Run') + .should('exist'); + cy.get('button') + .contains('Re-Generate') + .should('exist'); + cy.get('button') + .contains('Compute and Diff') + .should('exist'); + }); + + it('displays panels', () => { + cy.waitForWasm(); + cy.panel('Problems'); + cy.panelText() + .contains('No problems found'); + cy.panel('Check Watches'); + cy.panelText() + .find('table.MuiTable-root'); + cy.panel('System Visualization') + cy.panelText() + .find('div.vis-network'); + cy.panel('Last Validation Run'); + cy.panelText() + .contains('Validation Not Run'); + }); +}); \ No newline at end of file diff --git a/playground/cypress/support/commands.js b/playground/cypress/support/commands.js new file mode 100644 index 0000000..c898000 --- /dev/null +++ b/playground/cypress/support/commands.js @@ -0,0 +1,70 @@ +import "cypress-wait-until"; + +// -- Parent commands -- +// Navigate to the playground URL. +Cypress.Commands.add("visitPlayground", () => { + cy.visit("/"); +}); + +// Dismiss the tour elements if displayed. +Cypress.Commands.add("dismissTour", () => { + cy.contains("Skip").click(); + cy.getCookie("dismiss-tour").then((val) => { + if (!val) { + cy.contains("Skip").click(); + } + }); +}); + +// Activate the tab with the given label. +Cypress.Commands.add("tab", (tabLabel) => { + cy.get("div[aria-label=Tabs]").contains(tabLabel).click(); +}); + +// Activate the panel with the given label. +Cypress.Commands.add("panel", (panelLabel) => { + cy.get("button").contains(panelLabel).click(); +}); + +// Get the text contents of the editor component. +Cypress.Commands.add("editorText", () => { + return cy.get(".monaco-editor"); +}); + +// Get the text contents of the panel component. +Cypress.Commands.add("panelText", () => { + return cy.get("div[role=tabpanel] > div"); +}); + +// Wait until WASM developer package is loaded +Cypress.Commands.add("waitForWasm", () => { + cy.waitUntil( + () => cy.window().then((win) => !!win.runSpiceDBDeveloperRequest), + { + errorMsg: "WASM development package not loaded", + timeout: 30000, + interval: 500, + } + ); + return; +}); + +// -- Child commands -- +// Asserts that all list items are present. +Cypress.Commands.add( + "containsAll", + { prevSubject: "element" }, + (subject, list) => { + list.forEach((line) => { + cy.wrap(subject).contains(line); + }); + } +); + +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) diff --git a/playground/cypress/support/e2e.ts b/playground/cypress/support/e2e.ts new file mode 100644 index 0000000..8ea6dee --- /dev/null +++ b/playground/cypress/support/e2e.ts @@ -0,0 +1,28 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Handle uncaught exceptions +Cypress.on('uncaught:exception', (err, runnable) => { + // TODO: Ignore transient network errors until either browser caching + // or js fixtures are supported + // https://github.com/cypress-io/cypress/issues/18335 + // https://github.com/cypress-io/cypress/issues/1271 + if (err.message.includes('Uncaught NetworkError')) { + return false; + } +}); diff --git a/playground/package.json b/playground/package.json new file mode 100644 index 0000000..dd7c91b --- /dev/null +++ b/playground/package.json @@ -0,0 +1,112 @@ +{ + "name": "playground", + "version": "0.1.0", + "private": true, + "dependencies": { + "@apollo/client": "^3.7.3", + "@apollo/link-context": "^2.0.0-beta.3", + "@code/playground-ui": "0.1.0", + "@craco/craco": "^6.4.3", + "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/free-solid-svg-icons": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@glideapps/glide-data-grid": "^4.0.2", + "@glideapps/glide-data-grid-cells": "^4.0.2", + "@material-ui/core": "^4.12.4", + "@material-ui/icons": "^4.11.3", + "@material-ui/lab": "^4.0.0-alpha.61", + "@monaco-editor/react": "^4.3.1", + "@protobuf-ts/plugin": "^2.6.0", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", + "@types/color-hash": "^1.0.2", + "@types/d3-scale-chromatic": "^3.0.0", + "@types/file-saver": "^2.0.5", + "@types/jest": "^29.5.0", + "@types/line-column": "^1.0.0", + "@types/markdown-it": "^12.2.3", + "@types/node": "^20.3.3", + "@types/parsimmon": "^1.10.6", + "@types/react": "^17.0.38", + "@types/react-copy-to-clipboard": "^5.0.4", + "@types/react-dom": "^18.0.10", + "@types/react-router-dom": "^5.3.0", + "@types/sjcl": "^1.0.30", + "@types/styled-components": "^5.1.26", + "@types/use-deep-compare-effect": "^1.5.1", + "@types/uuid": "^9.0.1", + "ansi-to-html": "^0.7.2", + "color-hash": "^2.0.2", + "craco-babel-loader": "^1.0.3", + "craco-esbuild": "^0.4.5", + "d3-scale-chromatic": "^2.0.0", + "dequal": "^2.0.2", + "file-saver": "^2.0.5", + "file-select-dialog": "^1.5.4", + "fontsource-roboto": "^4.0.0", + "google-protobuf": "^3.21.2", + "graphql": "16.6.0", + "grpc-web": "^1.3.1", + "install": "^0.13.0", + "line-column": "^1.0.2", + "lodash.throttle": "^4.1.1", + "markdown-it": "^13.0.1", + "marked": "^4.0.10", + "monaco-editor-core": "^0.39.0", + "parsimmon": "^1.18.1", + "postcss-safe-parser": "7.0.0", + "react": "^18.0.0", + "react-cookie": "^4.1.1", + "react-dom": "^18.2.0", + "react-joyride": "^2.5.3", + "react-reflex": "^4.0.9", + "react-responsive-carousel": "^3.2.23", + "react-router-dom": "^5.3.4", + "react-scripts": "^4.0.3", + "sjcl": "^1.0.8", + "string-to-color": "^2.2.2", + "string.prototype.replaceall": "^1.0.6", + "styled-components": "^5.3.6", + "typeface-roboto-mono": "^1.1.13", + "typescript": "~5.0.3", + "use-deep-compare-effect": "^1.8.1", + "use-keyboard-shortcuts": "^2.2.2", + "visjs-network": "^4.24.11", + "yaml": "^2.0.1" + }, + "resolutions": { + "*/ua-parser-js": "0.7.26", + "postcss-safe-parser": "7.0.0" + }, + "scripts": { + "start": "HTTPS=true craco start", + "build": "craco build", + "postbuild": "./scripts/setup-config.sh", + "test": "craco test", + "eject": "craco eject", + "lint": "../node_modules/.bin/eslint src", + "lint-fix": "../node_modules/.bin/eslint --fix src", + "cy:run": "yarn cypress run --browser chrome", + "cy:open": "yarn cypress open" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "cypress": "^12.9.0", + "cypress-wait-until": "^1.7.2" + } +} diff --git a/playground/public/favicon.svg b/playground/public/favicon.svg new file mode 100644 index 0000000..2aa1670 --- /dev/null +++ b/playground/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/playground/public/index.html b/playground/public/index.html new file mode 100644 index 0000000..9585ec0 --- /dev/null +++ b/playground/public/index.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + SpiceDB Playground + + + + +
+
+ + + diff --git a/playground/public/manifest.json b/playground/public/manifest.json new file mode 100644 index 0000000..41fe667 --- /dev/null +++ b/playground/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "Playground", + "name": "SpiceDB Playground", + "icons": [ + { + "src": "favicon.svg", + "sizes": "any", + "type": "image/svg+xml" + }, + { + "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/playground/public/robots.txt b/playground/public/robots.txt new file mode 100644 index 0000000..b21f088 --- /dev/null +++ b/playground/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: / diff --git a/playground/public/wasm_exec.js b/playground/public/wasm_exec.js new file mode 100644 index 0000000..bc6f210 --- /dev/null +++ b/playground/public/wasm_exec.js @@ -0,0 +1,561 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +"use strict"; + +(() => { + const enosys = () => { + const err = new Error("not implemented"); + err.code = "ENOSYS"; + return err; + }; + + if (!globalThis.fs) { + let outputBuf = ""; + globalThis.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + const nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substring(0, nl)); + outputBuf = outputBuf.substring(nl + 1); + } + return buf.length; + }, + write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + callback(enosys()); + return; + } + const n = this.writeSync(fd, buf); + callback(null, n); + }, + chmod(path, mode, callback) { callback(enosys()); }, + chown(path, uid, gid, callback) { callback(enosys()); }, + close(fd, callback) { callback(enosys()); }, + fchmod(fd, mode, callback) { callback(enosys()); }, + fchown(fd, uid, gid, callback) { callback(enosys()); }, + fstat(fd, callback) { callback(enosys()); }, + fsync(fd, callback) { callback(null); }, + ftruncate(fd, length, callback) { callback(enosys()); }, + lchown(path, uid, gid, callback) { callback(enosys()); }, + link(path, link, callback) { callback(enosys()); }, + lstat(path, callback) { callback(enosys()); }, + mkdir(path, perm, callback) { callback(enosys()); }, + open(path, flags, mode, callback) { callback(enosys()); }, + read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, + readdir(path, callback) { callback(enosys()); }, + readlink(path, callback) { callback(enosys()); }, + rename(from, to, callback) { callback(enosys()); }, + rmdir(path, callback) { callback(enosys()); }, + stat(path, callback) { callback(enosys()); }, + symlink(path, link, callback) { callback(enosys()); }, + truncate(path, length, callback) { callback(enosys()); }, + unlink(path, callback) { callback(enosys()); }, + utimes(path, atime, mtime, callback) { callback(enosys()); }, + }; + } + + if (!globalThis.process) { + globalThis.process = { + getuid() { return -1; }, + getgid() { return -1; }, + geteuid() { return -1; }, + getegid() { return -1; }, + getgroups() { throw enosys(); }, + pid: -1, + ppid: -1, + umask() { throw enosys(); }, + cwd() { throw enosys(); }, + chdir() { throw enosys(); }, + } + } + + if (!globalThis.crypto) { + throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)"); + } + + if (!globalThis.performance) { + throw new Error("globalThis.performance is not available, polyfill required (performance.now only)"); + } + + if (!globalThis.TextEncoder) { + throw new Error("globalThis.TextEncoder is not available, polyfill required"); + } + + if (!globalThis.TextDecoder) { + throw new Error("globalThis.TextDecoder is not available, polyfill required"); + } + + const encoder = new TextEncoder("utf-8"); + const decoder = new TextDecoder("utf-8"); + + globalThis.Go = class { + constructor() { + this.argv = ["js"]; + this.env = {}; + this.exit = (code) => { + if (code !== 0) { + console.warn("exit code:", code); + } + }; + this._exitPromise = new Promise((resolve) => { + this._resolveExitPromise = resolve; + }); + this._pendingEvent = null; + this._scheduledTimeouts = new Map(); + this._nextCallbackTimeoutID = 1; + + const setInt64 = (addr, v) => { + this.mem.setUint32(addr + 0, v, true); + this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true); + } + + const setInt32 = (addr, v) => { + this.mem.setUint32(addr + 0, v, true); + } + + const getInt64 = (addr) => { + const low = this.mem.getUint32(addr + 0, true); + const high = this.mem.getInt32(addr + 4, true); + return low + high * 4294967296; + } + + const loadValue = (addr) => { + const f = this.mem.getFloat64(addr, true); + if (f === 0) { + return undefined; + } + if (!isNaN(f)) { + return f; + } + + const id = this.mem.getUint32(addr, true); + return this._values[id]; + } + + const storeValue = (addr, v) => { + const nanHead = 0x7FF80000; + + if (typeof v === "number" && v !== 0) { + if (isNaN(v)) { + this.mem.setUint32(addr + 4, nanHead, true); + this.mem.setUint32(addr, 0, true); + return; + } + this.mem.setFloat64(addr, v, true); + return; + } + + if (v === undefined) { + this.mem.setFloat64(addr, 0, true); + return; + } + + let id = this._ids.get(v); + if (id === undefined) { + id = this._idPool.pop(); + if (id === undefined) { + id = this._values.length; + } + this._values[id] = v; + this._goRefCounts[id] = 0; + this._ids.set(v, id); + } + this._goRefCounts[id]++; + let typeFlag = 0; + switch (typeof v) { + case "object": + if (v !== null) { + typeFlag = 1; + } + break; + case "string": + typeFlag = 2; + break; + case "symbol": + typeFlag = 3; + break; + case "function": + typeFlag = 4; + break; + } + this.mem.setUint32(addr + 4, nanHead | typeFlag, true); + this.mem.setUint32(addr, id, true); + } + + const loadSlice = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + return new Uint8Array(this._inst.exports.mem.buffer, array, len); + } + + const loadSliceOfValues = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + const a = new Array(len); + for (let i = 0; i < len; i++) { + a[i] = loadValue(array + i * 8); + } + return a; + } + + const loadString = (addr) => { + const saddr = getInt64(addr + 0); + const len = getInt64(addr + 8); + return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len)); + } + + const timeOrigin = Date.now() - performance.now(); + this.importObject = { + _gotest: { + add: (a, b) => a + b, + }, + gojs: { + // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters) + // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported + // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function). + // This changes the SP, thus we have to update the SP used by the imported function. + + // func wasmExit(code int32) + "runtime.wasmExit": (sp) => { + sp >>>= 0; + const code = this.mem.getInt32(sp + 8, true); + this.exited = true; + delete this._inst; + delete this._values; + delete this._goRefCounts; + delete this._ids; + delete this._idPool; + this.exit(code); + }, + + // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32) + "runtime.wasmWrite": (sp) => { + sp >>>= 0; + const fd = getInt64(sp + 8); + const p = getInt64(sp + 16); + const n = this.mem.getInt32(sp + 24, true); + fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n)); + }, + + // func resetMemoryDataView() + "runtime.resetMemoryDataView": (sp) => { + sp >>>= 0; + this.mem = new DataView(this._inst.exports.mem.buffer); + }, + + // func nanotime1() int64 + "runtime.nanotime1": (sp) => { + sp >>>= 0; + setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000); + }, + + // func walltime() (sec int64, nsec int32) + "runtime.walltime": (sp) => { + sp >>>= 0; + const msec = (new Date).getTime(); + setInt64(sp + 8, msec / 1000); + this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true); + }, + + // func scheduleTimeoutEvent(delay int64) int32 + "runtime.scheduleTimeoutEvent": (sp) => { + sp >>>= 0; + const id = this._nextCallbackTimeoutID; + this._nextCallbackTimeoutID++; + this._scheduledTimeouts.set(id, setTimeout( + () => { + this._resume(); + while (this._scheduledTimeouts.has(id)) { + // for some reason Go failed to register the timeout event, log and try again + // (temporary workaround for https://github.com/golang/go/issues/28975) + console.warn("scheduleTimeoutEvent: missed timeout event"); + this._resume(); + } + }, + getInt64(sp + 8), + )); + this.mem.setInt32(sp + 16, id, true); + }, + + // func clearTimeoutEvent(id int32) + "runtime.clearTimeoutEvent": (sp) => { + sp >>>= 0; + const id = this.mem.getInt32(sp + 8, true); + clearTimeout(this._scheduledTimeouts.get(id)); + this._scheduledTimeouts.delete(id); + }, + + // func getRandomData(r []byte) + "runtime.getRandomData": (sp) => { + sp >>>= 0; + crypto.getRandomValues(loadSlice(sp + 8)); + }, + + // func finalizeRef(v ref) + "syscall/js.finalizeRef": (sp) => { + sp >>>= 0; + const id = this.mem.getUint32(sp + 8, true); + this._goRefCounts[id]--; + if (this._goRefCounts[id] === 0) { + const v = this._values[id]; + this._values[id] = null; + this._ids.delete(v); + this._idPool.push(id); + } + }, + + // func stringVal(value string) ref + "syscall/js.stringVal": (sp) => { + sp >>>= 0; + storeValue(sp + 24, loadString(sp + 8)); + }, + + // func valueGet(v ref, p string) ref + "syscall/js.valueGet": (sp) => { + sp >>>= 0; + const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16)); + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 32, result); + }, + + // func valueSet(v ref, p string, x ref) + "syscall/js.valueSet": (sp) => { + sp >>>= 0; + Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32)); + }, + + // func valueDelete(v ref, p string) + "syscall/js.valueDelete": (sp) => { + sp >>>= 0; + Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16)); + }, + + // func valueIndex(v ref, i int) ref + "syscall/js.valueIndex": (sp) => { + sp >>>= 0; + storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16))); + }, + + // valueSetIndex(v ref, i int, x ref) + "syscall/js.valueSetIndex": (sp) => { + sp >>>= 0; + Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24)); + }, + + // func valueCall(v ref, m string, args []ref) (ref, bool) + "syscall/js.valueCall": (sp) => { + sp >>>= 0; + try { + const v = loadValue(sp + 8); + const m = Reflect.get(v, loadString(sp + 16)); + const args = loadSliceOfValues(sp + 32); + const result = Reflect.apply(m, v, args); + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 56, result); + this.mem.setUint8(sp + 64, 1); + } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 56, err); + this.mem.setUint8(sp + 64, 0); + } + }, + + // func valueInvoke(v ref, args []ref) (ref, bool) + "syscall/js.valueInvoke": (sp) => { + sp >>>= 0; + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.apply(v, undefined, args); + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueNew(v ref, args []ref) (ref, bool) + "syscall/js.valueNew": (sp) => { + sp >>>= 0; + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.construct(v, args); + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueLength(v ref) int + "syscall/js.valueLength": (sp) => { + sp >>>= 0; + setInt64(sp + 16, parseInt(loadValue(sp + 8).length)); + }, + + // valuePrepareString(v ref) (ref, int) + "syscall/js.valuePrepareString": (sp) => { + sp >>>= 0; + const str = encoder.encode(String(loadValue(sp + 8))); + storeValue(sp + 16, str); + setInt64(sp + 24, str.length); + }, + + // valueLoadString(v ref, b []byte) + "syscall/js.valueLoadString": (sp) => { + sp >>>= 0; + const str = loadValue(sp + 8); + loadSlice(sp + 16).set(str); + }, + + // func valueInstanceOf(v ref, t ref) bool + "syscall/js.valueInstanceOf": (sp) => { + sp >>>= 0; + this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0); + }, + + // func copyBytesToGo(dst []byte, src ref) (int, bool) + "syscall/js.copyBytesToGo": (sp) => { + sp >>>= 0; + const dst = loadSlice(sp + 8); + const src = loadValue(sp + 32); + if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + // func copyBytesToJS(dst ref, src []byte) (int, bool) + "syscall/js.copyBytesToJS": (sp) => { + sp >>>= 0; + const dst = loadValue(sp + 8); + const src = loadSlice(sp + 16); + if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + "debug": (value) => { + console.log(value); + }, + } + }; + } + + async run(instance) { + if (!(instance instanceof WebAssembly.Instance)) { + throw new Error("Go.run: WebAssembly.Instance expected"); + } + this._inst = instance; + this.mem = new DataView(this._inst.exports.mem.buffer); + this._values = [ // JS values that Go currently has references to, indexed by reference id + NaN, + 0, + null, + true, + false, + globalThis, + this, + ]; + this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id + this._ids = new Map([ // mapping from JS values to reference ids + [0, 1], + [null, 2], + [true, 3], + [false, 4], + [globalThis, 5], + [this, 6], + ]); + this._idPool = []; // unused ids that have been garbage collected + this.exited = false; // whether the Go program has exited + + // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory. + let offset = 4096; + + const strPtr = (str) => { + const ptr = offset; + const bytes = encoder.encode(str + "\0"); + new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes); + offset += bytes.length; + if (offset % 8 !== 0) { + offset += 8 - (offset % 8); + } + return ptr; + }; + + const argc = this.argv.length; + + const argvPtrs = []; + this.argv.forEach((arg) => { + argvPtrs.push(strPtr(arg)); + }); + argvPtrs.push(0); + + const keys = Object.keys(this.env).sort(); + keys.forEach((key) => { + argvPtrs.push(strPtr(`${key}=${this.env[key]}`)); + }); + argvPtrs.push(0); + + const argv = offset; + argvPtrs.forEach((ptr) => { + this.mem.setUint32(offset, ptr, true); + this.mem.setUint32(offset + 4, 0, true); + offset += 8; + }); + + // The linker guarantees global data starts from at least wasmMinDataAddr. + // Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr. + const wasmMinDataAddr = 4096 + 8192; + if (offset >= wasmMinDataAddr) { + throw new Error("total length of command line and environment variables exceeds limit"); + } + + this._inst.exports.run(argc, argv); + if (this.exited) { + this._resolveExitPromise(); + } + await this._exitPromise; + } + + _resume() { + if (this.exited) { + throw new Error("Go program has already exited"); + } + this._inst.exports.resume(); + if (this.exited) { + this._resolveExitPromise(); + } + } + + _makeFuncWrapper(id) { + const go = this; + return function () { + const event = { id: id, this: this, args: arguments }; + go._pendingEvent = event; + go._resume(); + return event.result; + }; + } + } +})(); diff --git a/playground/scripts/setup-config.sh b/playground/scripts/setup-config.sh new file mode 100755 index 0000000..29d8a84 --- /dev/null +++ b/playground/scripts/setup-config.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh + +DIR=$(dirname "$0") +echo "setup-config directory: $DIR" +cd "$DIR/../contrib" + +env_file="../build/config-env.js" +echo "contrib directory: $(pwd)" +echo "contrib: $(ls)" + +. ./generate-config-env.sh +validate_env "$env_file" +generate_env "$env_file" diff --git a/playground/src/App.css b/playground/src/App.css new file mode 100644 index 0000000..48db423 --- /dev/null +++ b/playground/src/App.css @@ -0,0 +1,44 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300&display=swap'); + +body { + overflow: hidden +} + +.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/playground/src/App.test.tsx b/playground/src/App.test.tsx new file mode 100644 index 0000000..3ea19bd --- /dev/null +++ b/playground/src/App.test.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const _ = React; + +describe('test', () => { + it('is scaffolding only', () => {}); +}); diff --git a/playground/src/App.tsx b/playground/src/App.tsx new file mode 100644 index 0000000..cff2577 --- /dev/null +++ b/playground/src/App.tsx @@ -0,0 +1,92 @@ +import { AlertProvider } from '@code/playground-ui/src/AlertProvider'; +import { ConfirmDialogProvider } from '@code/playground-ui/src/ConfirmDialogProvider'; +import { useGoogleAnalytics } from '@code/playground-ui/src/GoogleAnalyticsHook'; +import PlaygroundUIThemed from '@code/playground-ui/src/PlaygroundUIThemed'; +import { AuthnProvider } from '@code/spicedb-common/src/authn/provider'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { BrowserRouter } from 'react-router-dom'; +import 'typeface-roboto-mono'; // Import the Roboto Mono font. +import './App.css'; +import { EmbeddedPlayground } from './components/EmbeddedPlayground'; +import { AuthedPlayground, FullPlayground } from './components/FullPlayground'; +import { InlinePlayground } from './components/InlinePlayground'; +import AppConfig from './services/configservice'; +import { PLAYGROUND_UI_COLORS } from './theme'; + +var _ = React; + +export interface AppProps { + /** + * withRouter, it specified, is the router to wrap the application with. + */ + withRouter?: any; + + /** + * forTesting indicates whether the app is for testing. + */ + forTesting?: boolean | undefined; +} + +function ForTesting() { + return ; +} + +function ThemedApp(props: { + withRouter?: any; + forTesting: boolean | undefined; +}) { + if (window.location.pathname.indexOf('/i/') >= 0) { + return ( + + + + ); + } + + if (window.location.pathname.indexOf('/e/') >= 0) { + return ( + + + + ); + } + + if (props.forTesting) { + return ( + + + + ); + } else { + return ; + } +} + +function App(props: AppProps) { + // Register GA hook. + useGoogleAnalytics(AppConfig().ga.measurementId); + + const isEmbeddedPlayground = window.location.pathname.indexOf('/e/') >= 0; + return ( + + + + + + + + ); +} + +export default App; diff --git a/playground/src/assets/discord.svg b/playground/src/assets/discord.svg new file mode 100644 index 0000000..3d42843 --- /dev/null +++ b/playground/src/assets/discord.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/playground/src/assets/favicon-dark-mode.svg b/playground/src/assets/favicon-dark-mode.svg new file mode 100644 index 0000000..142603a --- /dev/null +++ b/playground/src/assets/favicon-dark-mode.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/playground/src/assets/favicon.svg b/playground/src/assets/favicon.svg new file mode 100644 index 0000000..142603a --- /dev/null +++ b/playground/src/assets/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/playground/src/assets/logo-dark-mode.svg b/playground/src/assets/logo-dark-mode.svg new file mode 100644 index 0000000..5588ad4 --- /dev/null +++ b/playground/src/assets/logo-dark-mode.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/playground/src/assets/logo.svg b/playground/src/assets/logo.svg new file mode 100644 index 0000000..dc7a23d --- /dev/null +++ b/playground/src/assets/logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/playground/src/components/CheckDebugTraceView.tsx b/playground/src/components/CheckDebugTraceView.tsx new file mode 100644 index 0000000..02a22b4 --- /dev/null +++ b/playground/src/components/CheckDebugTraceView.tsx @@ -0,0 +1,342 @@ +import { + CaveatEvalInfo, + CaveatEvalInfo_Result, + CheckDebugTrace, + CheckDebugTrace_Permissionship, + CheckDebugTrace_PermissionType, +} from '@code/spicedb-common/src/protodevdefs/authzed/api/v1/debug'; +import { + Struct, + Value, +} from '@code/spicedb-common/src/protodevdefs/google/protobuf/struct'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +import HelpOutlineIcon from '@material-ui/icons/HelpOutline'; +import HighlightOffIcon from '@material-ui/icons/HighlightOff'; +import TreeItem from '@material-ui/lab/TreeItem'; +import TreeView from '@material-ui/lab/TreeView'; +import clsx from 'clsx'; +import React from 'react'; +import { LocalParseService } from '../services/localparse'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + backgroundColor: theme.palette.background.default, + padding: theme.spacing(0.5), + }, + dispatch: { + padding: theme.spacing(0.5), + }, + dispatchHeader: { + display: 'grid', + gridTemplateColumns: 'auto auto auto auto 1fr', + columnGap: '4px', + alignItems: 'center', + }, + success: { + color: theme.palette.success.main, + }, + subdispatches: { + paddingLeft: theme.spacing(2), + }, + permission: { + color: '#1acc92', + }, + relation: { + color: '#ffa887', + }, + resourceType: { + color: '#ccc', + }, + caveat: { + color: '#ff4271', + }, + subject: { + color: '#9676ff', + display: 'grid', + gridTemplateColumns: 'auto auto auto auto 1fr', + columnGap: '4px', + alignItems: 'center', + }, + missingRequiredContext: { + color: theme.palette.getContrastText(theme.palette.info.dark), + backgroundColor: theme.palette.info.dark, + padding: theme.spacing(1), + margin: theme.spacing(1), + marginLeft: theme.spacing(3), + marginBottom: theme.spacing(2), + }, + }) +); + +const hasPermission = (t: CheckDebugTrace) => { + return ( + t.result === CheckDebugTrace_Permissionship.HAS_PERMISSION || + (t.result === CheckDebugTrace_Permissionship.CONDITIONAL_PERMISSION && + t.caveatEvaluationInfo?.result === CaveatEvalInfo_Result.TRUE) + ); +}; + +const hasNotPermission = (t: CheckDebugTrace) => { + return ( + t.result === CheckDebugTrace_Permissionship.NO_PERMISSION || + (t.result === CheckDebugTrace_Permissionship.CONDITIONAL_PERMISSION && + t.caveatEvaluationInfo?.result === CaveatEvalInfo_Result.FALSE) + ); +}; + +export function CheckDebugTraceView(props: { + trace: CheckDebugTrace; + localParseService: LocalParseService; +}) { + const classes = useStyles(); + const defaultExpanded: string[] = []; + + const appendExpanded = (t: CheckDebugTrace) => { + if (!hasPermission(t)) { + return; + } + + t.resource?.objectId.split(',').forEach((resourceID: string) => { + defaultExpanded.push( + `${t.resource?.objectType}:${resourceID}#${t.permission}` + ); + }); + + if (t.resolution.oneofKind === 'subProblems') { + t.resolution.subProblems.traces.forEach(appendExpanded); + } + }; + + appendExpanded(props.trace); + + // Compute a new key for the treeview to ensure it is rerendered from scratch. + const key = `${props.trace.resource?.objectType}:${props.trace.resource?.objectId}#${props.trace.permission}@${props.trace.subject?.object?.objectType}:${props.trace.subject?.object?.objectId}#${props.trace.subject?.optionalRelation}`; + + return ( +
+ } + defaultExpandIcon={} + defaultExpanded={defaultExpanded} + > + + +
+ ); +} + +function CheckDebugTraceItems(props: { + trace: CheckDebugTrace; + localParseService: LocalParseService; +}) { + const classes = useStyles(); + + return ( + <> + {props.trace.resource?.objectId.split(',').map((resourceID) => { + const result = props.trace.result; + const isMember = hasPermission(props.trace); + const isNotMember = hasNotPermission(props.trace); + + const children = + props.trace.resolution.oneofKind === 'subProblems' + ? props.trace.resolution.subProblems.traces.map( + (subTrace, index) => { + return ( + + ); + } + ) + : []; + + if ( + (props.trace.result === + CheckDebugTrace_Permissionship.HAS_PERMISSION || + props.trace.result === + CheckDebugTrace_Permissionship.CONDITIONAL_PERMISSION) && + props.trace.permissionType === + CheckDebugTrace_PermissionType.RELATION && + children.length === 0 + ) { + children.push( + + + {props.trace.subject?.object?.objectType}: + {props.trace.subject?.object?.objectId} + {props.trace.subject?.optionalRelation && + `#${props.trace.subject?.optionalRelation}`} +
+ } + /> + ); + } + + const nodeID = `${props.trace.resource?.objectType}:${resourceID}#${props.trace.permission}`; + + return ( + + {isMember && ( + + )} + {isNotMember && ( + + )} + {result === + CheckDebugTrace_Permissionship.CONDITIONAL_PERMISSION && + props.trace.caveatEvaluationInfo?.result === + CaveatEvalInfo_Result.MISSING_SOME_CONTEXT && ( + + )} + + + {props.trace.resource?.objectType} + + :{resourceID} + + + {props.trace?.permission} + +
+ } + > + {props.trace.caveatEvaluationInfo?.caveatName && ( + + )} + {children} + + ); + })} + + ); +} + +function CaveatTreeItem(props: { + evalInfo: CaveatEvalInfo; + nodeIDPrefix: string; +}) { + const classes = useStyles(); + + return ( + + {props.evalInfo.result === CaveatEvalInfo_Result.TRUE && ( + + )} + {props.evalInfo.result === CaveatEvalInfo_Result.FALSE && ( + + )} + {props.evalInfo.result === + CaveatEvalInfo_Result.MISSING_SOME_CONTEXT && ( + + )} + {props.evalInfo.caveatName} + caveat + + } + > + {props.evalInfo.partialCaveatInfo?.missingRequiredContext && ( +
+ Missing required caveat context fields:{' '} + {props.evalInfo.partialCaveatInfo.missingRequiredContext.join(', ')} +
+ )} + {ContextTreeView(props.evalInfo.context)} +
+ ); +} + +function ContextTreeView(context: Struct | undefined) { + if (context === undefined) { + return null; + } + + return Object.keys(context.fields).map((key) => { + let label = {key}; + const [value, isItemValue] = ContextTreeValue(context?.fields[key]); + if (!isItemValue) { + label = ( + + {key}: {value} + + ); + } + + return ( + + {isItemValue ? value : undefined} + + ); + }); +} + +function ContextTreeValue(value: Value) { + switch (value.kind.oneofKind) { + case 'nullValue': + return [null, false]; + + case 'numberValue': + return [{value.kind.numberValue.toString()}, false]; + + case 'stringValue': + return [{value.kind.stringValue}, false]; + + case 'boolValue': + return [{value.kind.boolValue.toString()}, false]; + + case 'structValue': + return [ContextTreeView(value.kind.structValue), true]; + + case 'listValue': + return [ + value.kind.listValue.values.map((v) => { + return {ContextTreeValue(v)}; + }), + true, + ]; + } + + return [null, false]; +} diff --git a/playground/src/components/DatastoreRelationshipEditor.tsx b/playground/src/components/DatastoreRelationshipEditor.tsx new file mode 100644 index 0000000..328e46c --- /dev/null +++ b/playground/src/components/DatastoreRelationshipEditor.tsx @@ -0,0 +1,136 @@ +import { useDebouncedChecker } from '@code/playground-ui/src/debouncer'; +import { + RelationTupleHighlight, + RelationshipEditor, +} from '@code/spicedb-common/src/components/relationshipeditor/RelationshipEditor'; +import { CommentCellPrefix } from '@code/spicedb-common/src/components/relationshipeditor/columns'; +import { + RelationshipDatum, + relationshipToDatum, + toFullRelationshipString, +} from '@code/spicedb-common/src/components/relationshipeditor/data'; +import { + RelationshipOrComment, + parseRelationshipsAndComments, +} from '@code/spicedb-common/src/parsing'; +import { + DeveloperError, + DeveloperError_Source, +} from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { Theme } from '@glideapps/glide-data-grid'; +import React, { useCallback, useMemo, useState } from 'react'; +import useDeepCompareEffect from 'use-deep-compare-effect'; +import { DataStore, DataStoreItemKind } from '../services/datastore'; +import { Services } from '../services/services'; + +var _ = React; + +const partialRelationshipCommentPrefix = 'partial relationship: '; + +function fromRelationshipsString(relString: string): RelationshipDatum[] { + return parseRelationshipsAndComments(relString).map( + (value: RelationshipOrComment) => { + if ('comment' in value) { + const comment = value.comment.trim(); + if (comment.startsWith(partialRelationshipCommentPrefix)) { + return JSON.parse( + comment.substring(partialRelationshipCommentPrefix.length) + ); + } + + return { + comment: `${CommentCellPrefix} ${comment}`, + }; + } + + return relationshipToDatum(value); + } + ); +} + +function toRelationshipsString(data: RelationshipDatum[]): string { + return data + .map((datum: RelationshipDatum, index: number) => { + if ('comment' in datum) { + const hasPreviousRelationship = + index > 0 && !('comment' in data[index - 1]); + return `${hasPreviousRelationship ? '\n' : ''}${datum.comment}`; + } + + return ( + toFullRelationshipString(datum) ?? + `// ${partialRelationshipCommentPrefix}${JSON.stringify(datum)}` + ); + }) + .filter((v: string | undefined) => { + return !!v; + }) + .join('\n'); +} + +export type DatastoreRelationshipEditorProps = { + datastore: DataStore; + services: Services; + isReadOnly: boolean; + datastoreUpdated: () => void; + themeOverrides?: Partial | undefined; +} & { dimensions?: { width: number; height: number } }; + +export function DatastoreRelationshipEditor( + props: DatastoreRelationshipEditorProps +) { + const { run: debouncedUpdateDatastore } = useDebouncedChecker( + 50, + async (data: RelationshipDatum[]) => { + const editableContents = toRelationshipsString(data); + props.datastore.update(relationshipsItem, editableContents); + props.datastoreUpdated(); + } + ); + + const handleDataUpdated = useCallback( + (data: RelationshipDatum[]) => { + debouncedUpdateDatastore(data); + }, + [debouncedUpdateDatastore] + ); + + const relErrors = useMemo(() => { + return props.services.problemService.requestErrors.filter( + (error: DeveloperError) => + error.source === DeveloperError_Source.RELATIONSHIP + ); + }, [props.services.problemService.requestErrors]); + + const [highlights, setHighlights] = useState([]); + useDeepCompareEffect(() => { + setHighlights( + relErrors.map((error: DeveloperError) => { + return { + tupleString: error.context, + color: 'rgba(255, 0, 0, 0.2)', + message: error.message, + }; + }) + ); + }, [relErrors]); + + const relationshipsItem = props.datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ); + const relationshipsString = relationshipsItem.editableContents; + const relationshipData: RelationshipDatum[] = useMemo(() => { + return fromRelationshipsString(relationshipsString); + }, [relationshipsString]); + + return ( + + ); +} diff --git a/playground/src/components/EditorDisplay.tsx b/playground/src/components/EditorDisplay.tsx new file mode 100644 index 0000000..bdb4ec3 --- /dev/null +++ b/playground/src/components/EditorDisplay.tsx @@ -0,0 +1,490 @@ +import registerDSLanguage, { + DS_DARK_THEME_NAME, + DS_LANGUAGE_NAME, + DS_THEME_NAME, +} from '@code//spicedb-common/src/lang/dslang'; +import { useDebouncedChecker } from '@code/playground-ui/src/debouncer'; +import { TextRange } from '@code/spicedb-common/src/include/protobuf-parser'; +import { RelationshipFound } from '@code/spicedb-common/src/parsing'; +import { DeveloperError } from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import Editor, { DiffEditor, useMonaco } from '@monaco-editor/react'; +import lineColumn from 'line-column'; +import monaco from 'monaco-editor-core'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { flushSync } from 'react-dom'; +import 'react-reflex/styles.css'; +import { useHistory, useLocation } from 'react-router-dom'; +import { ScrollLocation, useCookieService } from '../services/cookieservice'; +import { + DataStore, + DataStoreItem, + DataStoreItemKind, +} from '../services/datastore'; +import { LocalParseState } from '../services/localparse'; +import { Services } from '../services/services'; +import { ERROR_SOURCE_TO_ITEM } from './panels/errordisplays'; +import registerTupleLanguage, { + TUPLE_DARK_THEME_NAME, + TUPLE_LANGUAGE_NAME, + TUPLE_THEME_NAME, +} from './tuplelang'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + editorContainer: { + height: '100%', + width: '100%', + }, + }) +); + +export type EditorDisplayProps = { + datastore: DataStore; + services: Services; + currentItem: DataStoreItem | undefined; + isReadOnly: boolean; + datastoreUpdated: () => void; + defaultWidth?: string; + defaultHeight?: string; + disableMouseWheelScrolling?: boolean; + diff?: string | undefined; + themeName?: string | undefined; + hideMinimap?: boolean | undefined; + fontSize?: string | undefined; + scrollBeyondLastLine?: boolean | undefined; + disableScrolling?: boolean | undefined; + onPositionChange?: (e: monaco.editor.ICursorPositionChangedEvent) => void; +} & { dimensions?: { width: number; height: number } }; + +interface LocationState { + range?: TextRange | undefined; +} + +/** + * EditorDisplays display the editor in the playground. + */ +export function EditorDisplay(props: EditorDisplayProps) { + const monacoRef = useMonaco(); + const [monacoReady, setMonacoReady] = useState(false); + const [localIndex, setLocalIndex] = useState(0); + const localParseState = useRef( + props.services.localParseService.state + ); + + // Effect: Register the languages in monaco. + useEffect(() => { + if (monacoRef) { + registerDSLanguage(monacoRef); + registerTupleLanguage(monacoRef, () => localParseState.current); + setMonacoReady(true); + } + // NOTE: We only care if the monacoRef changes; the datastore is simply a reference. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [monacoRef]); + + useEffect(() => { + localParseState.current = props.services.localParseService.state; + }, [props.services.localParseService.state]); + + const classes = useStyles(); + const history = useHistory(); + const location = useLocation(); + + const datastore = props.datastore; + const currentItem = props.currentItem; + + const editorRefs = useRef< + Record + >({}); + + // Select the theme and language. + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + + const themeName = useMemo(() => { + if (props.themeName) { + return props.themeName; + } + + switch (currentItem?.kind) { + case DataStoreItemKind.SCHEMA: + // Schema. + return prefersDarkMode ? DS_DARK_THEME_NAME : DS_THEME_NAME; + + case DataStoreItemKind.RELATIONSHIPS: + // Validation tuples. + return prefersDarkMode ? TUPLE_DARK_THEME_NAME : TUPLE_THEME_NAME; + + case DataStoreItemKind.EXPECTED_RELATIONS: + // Expected Relations YAML. + return prefersDarkMode ? 'vs-dark' : 'vs'; + + case DataStoreItemKind.ASSERTIONS: + // Assertions YAML. + return prefersDarkMode ? 'vs-dark' : 'vs'; + + case undefined: + // Schema. + return prefersDarkMode ? DS_DARK_THEME_NAME : DS_THEME_NAME; + + default: + console.log(`Unknown item kind ${currentItem?.kind} in theme name`); + return 'vs'; + } + }, [prefersDarkMode, currentItem?.kind]); + + const languageName = useMemo(() => { + switch (currentItem?.kind) { + case DataStoreItemKind.SCHEMA: + return DS_LANGUAGE_NAME; + + case DataStoreItemKind.RELATIONSHIPS: + // Validation tuples. + return TUPLE_LANGUAGE_NAME; + + case DataStoreItemKind.EXPECTED_RELATIONS: + // Expected Relations => YAML. + return 'yaml'; + + case DataStoreItemKind.ASSERTIONS: + // Assertions => YAML. + return 'yaml'; + + default: + console.log('Unknown item kind in language name'); + return 'yaml'; + } + }, [currentItem?.kind]); + + const handleEditorChange = (value: string | undefined) => { + if (props.services.validationService.isRunning || props.isReadOnly) { + return; + } + + // Necessary to ensure that the react-monaco editor's internal bound `value` + // is properly updated. + // + // NOTE: As of React 18, these state updates are batched, which causes a problem where + // the editor updates immediately, but then the datastore updates asynchronously in a + // batched fashion, causing the editor to "revert" to an older version after a few 10s of + // ms. To avoid this behavior, we tell React we want these updates to occur immediately + // via the `flushSync` call. + // See: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#automatic-batching + flushSync(() => { + setLocalIndex(localIndex + 1); + + const updated = datastore.update(currentItem!, value || ''); + if (updated && updated.pathname !== location.pathname) { + history.replace(updated.pathname); + } + + props.datastoreUpdated(); + }); + }; + + const updateMarkers = () => { + // Ensure that we are not displaying a diff editor. + if (props.diff) { + return; + } + + // Ensure that we have a reference for the current path. Every path has its + // own editor instance. + const editors = editorRefs.current; + if (currentItem?.id === undefined || !(currentItem?.id in editors)) { + return; + } + + const markers: monaco.editor.IMarkerData[] = []; + + // Generate markers for invalid validation relationships. + if (currentItem.kind === DataStoreItemKind.RELATIONSHIPS) { + props.services.problemService.invalidRelationships.forEach( + (invalid: RelationshipFound) => { + if (!('errorMessage' in invalid.parsed)) { + return; + } + + markers.push({ + startLineNumber: invalid.lineNumber + 1, + startColumn: 0, + endLineNumber: invalid.lineNumber + 1, + endColumn: invalid.text.length + 1, + message: `Malformed or invalid test data relationship: ${invalid.parsed.errorMessage}`, + severity: monacoRef.MarkerSeverity.Error, + }); + } + ); + } + + // Generate markers for all other kinds of errors. + const contents = currentItem?.editableContents ?? ''; + const finder = lineColumn(contents); + const allErrors = [ + ...props.services.problemService.requestErrors, + ...props.services.problemService.validationErrors, + ]; + allErrors.forEach((de: DeveloperError) => { + const itemKind = ERROR_SOURCE_TO_ITEM[de.source]; + if (itemKind !== currentItem.kind) { + return; + } + + let line = de.line; + let column = de.column; + let endColumn = column; + + if (de.context) { + // If there is no line information, then search for the first occurrence of the context. + if (!line) { + const index = contents.indexOf(de.context); + if (index !== undefined && index >= 0) { + const found = finder.fromIndex(index); + if (found) { + line = found.line; + column = found.col; + endColumn = column + de.context.length; + } + } + } else { + // If there is, ensure the position is still valid. + endColumn = column + de.context.length; + const index = finder.toIndex(line, column); + if (index === undefined) { + return; + } + + if ( + contents.substring(index, de.context.length + index) !== de.context + ) { + const updatedIndex = contents.indexOf(de.context, index); + if (updatedIndex < index) { + return; + } + + const translated = finder.fromIndex(updatedIndex); + if (translated?.line !== line) { + return; + } + + line = translated.line; + column = translated.col; + endColumn = column + de.context.length; + } + } + } + + if (!line || column === undefined) { + return; + } + + markers.push({ + startLineNumber: line, + startColumn: column, + endLineNumber: line, + endColumn: endColumn, + message: de.message, + severity: monacoRef.MarkerSeverity.Error, + code: de.context, + }); + }); + + monacoRef.editor.setModelMarkers( + editors[currentItem.id].getModel()!, + 'someowner', + markers + ); + }; + + const locationState = location.state as LocationState | undefined | null; + const cookieService = useCookieService(); + + const { run: debouncedSetEditorPosition } = useDebouncedChecker( + 250, + async (position: monaco.Position) => { + if (props.currentItem?.kind !== undefined) { + cookieService.storeEditorPosition(props.currentItem.kind, [ + position.lineNumber, + position.column, + ]); + } + } + ); + + const { run: debouncedSetEditorScroll } = useDebouncedChecker( + 250, + async (scrollLocation: ScrollLocation) => { + if (props.currentItem?.kind !== undefined) { + cookieService.storeEditorScroll(props.currentItem.kind, scrollLocation); + } + } + ); + + const handleEditorMounted = (editor: monaco.editor.IStandaloneCodeEditor) => { + if (currentItem !== undefined && props.diff === undefined) { + editorRefs.current = { + ...editorRefs.current, + [currentItem.id]: editor, + }; + + editor.onDidChangeCursorPosition( + (e: monaco.editor.ICursorPositionChangedEvent) => { + debouncedSetEditorPosition(e.position); + if (props.onPositionChange !== undefined) { + props.onPositionChange(e); + } + } + ); + + editor.onDidScrollChange((e: monaco.IScrollEvent) => { + debouncedSetEditorScroll([e.scrollTop, e.scrollLeft]); + }); + + updateMarkers(); + updatePosition(); + } + }; + + const updatePosition = () => { + const editors = editorRefs.current; + if (currentItem?.id === undefined || !(currentItem?.id in editors)) { + return; + } + + const editor = editors[currentItem.id!]; + const lastPosition = cookieService.lookupEditorPosition(currentItem.kind); + + // If the location's state says to jump to a range, jump to it. This is used by the + // visualization tab (and other code) to jump to a location in the editor. + if (locationState && locationState.range !== undefined) { + editor.revealRangeInCenter({ + startLineNumber: locationState.range.startIndex.line, + startColumn: locationState.range.startIndex.column, + endLineNumber: locationState.range.endIndex.line, + endColumn: locationState.range.endIndex.column, + }); + editor.setPosition({ + lineNumber: locationState.range.startIndex.line, + column: locationState.range.startIndex.column, + }); + } else if (lastPosition) { + // Otherwise, if the location last stored in cookies for the cursor is valid, + // set it in the editor. + const lineCount = editor.getModel()?.getLineCount() ?? 0; + const [line, column] = lastPosition; + if (line > lineCount) { + return; + } + + const editorPosition = { + lineNumber: line, + column: column, + }; + + const validatedPosition = editor + .getModel() + ?.validatePosition(editorPosition); + if (!validatedPosition) { + return; + } + + editor.setPosition(validatedPosition); + + // Set the scroll position to either that last stored in cookies, or, if none, + // just show the cursor on screen. + const lastScrollPosition = cookieService.lookupEditorScroll( + currentItem.kind + ); + if (lastScrollPosition) { + const [top, left] = lastScrollPosition; + editor.setScrollLeft(left); + editor.setScrollTop(top); + } else { + editor.revealRangeInCenter({ + startLineNumber: line, + startColumn: column, + endLineNumber: line, + endColumn: column, + }); + } + } + }; + + useEffect(() => { + updatePosition(); + + // NOTE: We only care if the locationState changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [locationState]); + + useEffect(() => { + if (!props.services.problemService.isUpdating) { + updateMarkers(); + } + + // NOTE: We only care if the currentItem changes or the errors change. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + currentItem?.pathname, + props.services.problemService.isUpdating, + props.services.problemService.stateKey, + ]); + + const Component = props.diff ? DiffEditor : Editor; + const extraProps = props.diff + ? { + original: props.diff, + modified: currentItem?.editableContents, + language: languageName, + } + : {}; + + return ( +
+ {monacoReady && currentItem && ( +
+ +
+ )} +
+ ); +} diff --git a/playground/src/components/EmbeddedPlayground.tsx b/playground/src/components/EmbeddedPlayground.tsx new file mode 100644 index 0000000..1c14bb8 --- /dev/null +++ b/playground/src/components/EmbeddedPlayground.tsx @@ -0,0 +1,836 @@ +import { useAlert } from '@code/playground-ui/src/AlertProvider'; +import { DS_EMBED_DARK_THEME_NAME } from '@code/spicedb-common/src/lang/dslang'; +import { + RelationshipFound, + parseRelationship, +} from '@code/spicedb-common/src/parsing'; +import { DeveloperServiceClient } from '@code/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb'; +import { + ShareRequest, + ShareResponse, +} from '@code/spicedb-common/src/protodefs/authzed/api/v0/developer_pb'; +import { + CheckOperationsResult, + CheckOperationsResult_Membership, +} from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { useDeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import { + faCaretDown, + faDatabase, + faFile, + faThumbsUp, + faUser, +} from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { Button, CircularProgress, Menu, MenuItem } from '@material-ui/core'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; +import HelpOutlineIcon from '@material-ui/icons/HelpOutline'; +import clsx from 'clsx'; +import * as grpcWeb from 'grpc-web'; +import React, { PropsWithChildren, useEffect, useMemo, useState } from 'react'; +import { useLiveCheckService } from '../services/check'; +import AppConfig from '../services/configservice'; +import { + DataStore, + DataStoreItemKind, + useReadonlyDatastore, +} from '../services/datastore'; +import { useLocalParseService } from '../services/localparse'; +import { useProblemService } from '../services/problem'; +import { Services } from '../services/services'; +import { useValidationService } from '../services/validation'; +import { DatastoreRelationshipEditor } from './DatastoreRelationshipEditor'; +import { EditorDisplay } from './EditorDisplay'; +import { ShareLoader } from './ShareLoader'; + +import { ParsedObjectDefinition } from '@code/spicedb-common/src/parsers/dsl/dsl'; +import './fonts.css'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + backgroundColor: 'rgb(14,13,17)', + height: '100vh', + width: '100vw', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + position: 'relative', + '&:hover': { + '& $openButton': { + opacity: 1, + }, + }, + fontFamily: + 'Inter,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"', + }, + openButton: { + position: 'absolute', + bottom: '10px', + right: '10px', + opacity: 0, + transition: 'opacity ease-in-out 200ms', + }, + loadedroot: { + border: '1px outset #6d49ac', + borderRadius: '16px', + height: '100vh', + width: '100vw', + display: 'grid', + gridTemplateColumns: '1fr 1px 1fr', + columnGap: '10px', + padding: '24px', + }, + column: { + display: 'grid', + gridTemplateRows: 'auto 1fr', + }, + header: { + fontSize: '85%', + display: 'inline-grid', + gridTemplateColumns: 'auto auto auto', + columnGap: '6px', + alignItems: 'center', + marginBottom: '16px', + border: `1px solid rgba(232, 232, 232, 0.21)`, + borderRadius: '8px', + textTransform: 'uppercase', + padding: '8px', + background: + 'linear-gradient(90deg, rgba(243,241,255,0.1) 0%, rgba(243,241,255,0) 100%)', + }, + queryBox: { + border: '1px outset #6d49ac', + borderRadius: '16px', + marginBottom: '16px', + padding: '8px', + display: 'grid', + gridTemplateColumns: '6px 1fr', + columnGap: '10px', + }, + queryBoxColor: { + borderRadius: '16px', + backgroundColor: '#444', + }, + queryEditor: { + padding: '6px', + }, + resultBoxColor: { + borderRadius: '16px', + backgroundColor: '#ccc', + }, + selector: { + fontSize: '85%', + display: 'inline-grid', + gridTemplateColumns: 'auto auto auto', + columnGap: '6px', + alignItems: 'center', + marginLeft: '0.5em', + marginRight: '0.5em', + border: `1px solid rgba(232, 232, 232, 0.21)`, + borderRadius: '8px', + padding: '8px', + background: + 'linear-gradient(90deg, rgba(243,241,255,0.1) 0%, rgba(243,241,255,0) 100%)', + verticalAlign: 'middle', + cursor: 'pointer', + '&:hover': { + borderColor: `rgba(232, 232, 232, 0.21) !important`, + }, + }, + resource: { + borderColor: '#E9786E', + }, + permission: { + borderColor: '#1acc92', + }, + subject: { + borderColor: '#cec2f3', + }, + indeterminate: { + backgroundColor: '#aaa', + }, + noPermission: { + backgroundColor: '#f44336', + }, + hasPermission: { + backgroundColor: '#4caf50', + }, + hasPermissionIcon: { + color: '#4caf50', + }, + maybePermission: { + backgroundColor: '#8787ff', + }, + maybePermissionIcon: { + color: '#8787ff', + }, + noPermissionIcon: { + color: '#f44336', + }, + queryResult: { + display: 'grid', + gridTemplateColumns: 'auto 1fr', + alignItems: 'center', + columnGap: '6px', + }, + caret: { + opacity: 0.5, + }, + buttonHeader: { + cursor: 'pointer', + }, + menuItem: { + display: 'grid', + gridTemplateColumns: 'auto 1fr', + alignItems: 'center', + columnGap: '6px', + }, + display: {}, + resourceDisplay: { + color: '#E9786E', + }, + permissionDisplay: { + color: '#1acc92', + }, + subjectDisplay: { + color: '#cec2f3', + }, + caveatFieldDisplay: { + color: '#8787ff', + }, + }) +); + +export function EmbeddedPlayground() { + const classes = useStyles(); + const datastore = useReadonlyDatastore(); + return ( +
+ + + +
+ ); +} + +function EmbeddedPlaygroundUI(props: { datastore: DataStore }) { + const classes = useStyles(); + const datastore = props.datastore; + + const developerService = useDeveloperService(); + const localParseService = useLocalParseService(datastore); + const liveCheckService = useLiveCheckService(developerService, datastore); + const validationService = useValidationService(developerService, datastore); + const problemService = useProblemService( + localParseService, + liveCheckService, + validationService + ); + const zedTerminalService = undefined; // not used + + const services = { + localParseService, + liveCheckService, + validationService, + problemService, + developerService, + zedTerminalService, + }; + + const [disableMouseWheelScrolling, setDisableMouseWheelScrolling] = + useState(true); + + const schema = datastore.getById( + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA).id + ); + const [resizeIndex, setResizeIndex] = useState(0); + + React.useEffect(() => { + const handler = () => { + // Force a rerender + setResizeIndex(resizeIndex + 1); + }; + + window.addEventListener('resize', handler); + return () => { + window.removeEventListener('resize', handler); + }; + }, [resizeIndex, setResizeIndex]); + + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleCloseMenu = () => { + setAnchorEl(null); + }; + + const handleOpenMenu = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const [mode, setMode] = useState<'schema' | 'relationships'>('schema'); + const setCurrentMode = (mode: 'schema' | 'relationships') => { + setMode(mode); + setAnchorEl(null); + }; + + const { showAlert } = useAlert(); + + const shareAndOpen = () => { + const developerEndpoint = AppConfig().authzed?.developerEndpoint; + if (!developerEndpoint) { + return; + } + + const service = new DeveloperServiceClient(developerEndpoint, null, null); + const schema = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relationshipsYaml = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + const assertionsYaml = datastore.getSingletonByKind( + DataStoreItemKind.ASSERTIONS + ).editableContents!; + const validationYaml = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ).editableContents!; + + // Invoke sharing. + const request = new ShareRequest(); + request.setSchema(schema); + request.setRelationshipsYaml(relationshipsYaml); + request.setAssertionsYaml(assertionsYaml); + request.setValidationYaml(validationYaml); + + service.share( + request, + {}, + (err: grpcWeb.RpcError, response: ShareResponse) => { + if (err) { + showAlert({ + title: 'Error sharing', + content: err.message, + buttonTitle: 'Okay', + }); + return; + } + + const reference = response.getShareReference(); + window.open(`${window.location.origin}/s/${reference}`); + } + ); + }; + + return ( + <> + + + setCurrentMode('schema')} + > + + Definitions + + setCurrentMode('relationships')} + > + + Relationships + + +
setDisableMouseWheelScrolling(false)} + className={clsx(classes.loadedroot)} + > +
+
+
+ {mode === 'schema' && ( + <> + + Example Definitions + + )} + {mode === 'relationships' && ( + <> + + Example Relationships + + )} + + + +
+
+ <> + {mode === 'schema' && ( + null} + disableMouseWheelScrolling={disableMouseWheelScrolling} + defaultWidth="100%" + defaultHeight="100%" + themeName={DS_EMBED_DARK_THEME_NAME} + fontSize="13px" + scrollBeyondLastLine={false} + hideMinimap + /> + )} + {mode === 'relationships' && ( + null} + dimensions={{ + width: document.body.clientWidth / 2 - 40, + height: document.body.clientHeight - 120, + }} + themeOverrides={{ + bgCell: 'rgb(14,13,17)', + bgCellMedium: '#1f1f23', + bgHeader: '#1f1f23', + }} + /> + )} + +
+
+
+
+
+
+ + + +
+ Example Query +
+
+
+ +
+
+
+ + ); +} + +function EmbeddedQuery(props: { services: Services }) { + const classes = useStyles(); + const [subject, setSubject] = useState(''); + const [permission, setPermission] = useState(''); + const [resource, setResource] = useState(''); + + const schemaText = props.services.localParseService.state.schemaText; + const relsText = props.services.localParseService.state.relsText; + + const devService = props.services.developerService; + const queryResult: CheckOperationsResult | undefined = useMemo(() => { + if (devService.state.status !== 'ready') { + return undefined; + } + + if (!resource || !permission || !subject) { + return undefined; + } + + const relationship = parseRelationship( + `${resource}#${permission}@${subject}` + ); + if (relationship === undefined) { + return undefined; + } + + const request = devService.newRequest(schemaText, relsText); + let checkResult: CheckOperationsResult = { + membership: CheckOperationsResult_Membership.UNKNOWN, + }; + request?.check( + { + resource: relationship.resourceAndRelation!, + subject: relationship.subject!, + }, + (r: CheckOperationsResult) => { + checkResult = r; + } + ); + if ( + request?.execute().developerErrors || + request?.execute().internalError + ) { + return undefined; + } + return checkResult; + }, [subject, permission, resource, devService, schemaText, relsText]); + + return ( +
+
+ +
+ Can{' '} + setSubject(v)} + />{' '} + setPermission(v)} + />{' '} + setResource(v)} + /> + ? +
+
+
+ +
+ {devService.state.status === 'loading' && ( + <> + + Loading developer system + + )} + {(devService.state.status === 'loaderror' || + devService.state.status === 'unsupported') && ( + <> + Sorry, could not load the developer system. Please try the{' '} + + standalone Playground + + + )} + {devService.state.status === 'ready' && !queryResult && ( + <> + Sorry, there is an issue in the provided schema, relationships or + query + + )} + {queryResult?.checkError !== undefined && ( + <> + +
{queryResult.checkError.message}
+ + )} + {queryResult?.membership === + CheckOperationsResult_Membership.NOT_MEMBER && ( + <> + +
+ {subject} does not have + permission {permission} on{' '} + {resource} +
+ + )} + {queryResult?.membership === + CheckOperationsResult_Membership.MEMBER && ( + <> + +
+ {subject} has permission{' '} + {permission} on{' '} + {resource} +
+ + )} + {queryResult?.membership === + CheckOperationsResult_Membership.CAVEATED_MEMBER && ( + <> + +
+ {subject} might have + permission {permission} on{' '} + {resource} depending on the + value(s) of{' '} + + {queryResult.partialCaveatInfo?.missingRequiredContext.join( + ', ' + )} + +
+ + )} +
+
+
+ ); +} + +function Display( + props: PropsWithChildren<{ + kind: 'subject' | 'permission' | 'resource' | 'caveatfields'; + }> +) { + const classes = useStyles(); + const kindClass = useMemo(() => { + return { + resource: classes.resourceDisplay, + subject: classes.subjectDisplay, + permission: classes.permissionDisplay, + caveatfields: classes.caveatFieldDisplay, + }[props.kind]; + }, [props.kind, classes]); + + return ( + {props.children} + ); +} + +function Selector(props: { + type: 'subject' | 'permission' | 'resource'; + services: Services; + currentValue: string; + currentResource?: string; + onChange: (value: string) => void; +}) { + const classes = useStyles(); + const relationships = props.services.localParseService.state.relationships; + + const filter = (values: (string | null)[]): string[] => { + const filtered = values.filter((v: string | null) => !!v); + const set = new Set(filtered); + const deduped: string[] = []; + set.forEach((value: string | null) => { + deduped.push(value!); + }); + return deduped; + }; + + const resources = useMemo(() => { + return filter( + relationships.map((r: RelationshipFound) => { + if ('resourceAndRelation' in r.parsed) { + const onr = r.parsed.resourceAndRelation; + if (onr === undefined) { + return null; + } + return `${onr.namespace}:${onr.objectId}`; + } + return null; + }) + ); + }, [relationships]); + + const subjects = useMemo(() => { + return filter( + relationships.map((r: RelationshipFound) => { + if ('resourceAndRelation' in r.parsed) { + const onr = r.parsed.subject; + if (onr === undefined) { + return null; + } + if (onr.relation !== '...') { + return `${onr.namespace}:${onr.objectId}#${onr.relation}`; + } + return `${onr.namespace}:${onr.objectId}`; + } + return null; + }) + ); + }, [relationships]); + + const parsedSchema = props.services.localParseService.state.parsed; + + const currentResource = props.currentResource; + const permissions = useMemo(() => { + const hasPermission = (resourceType: string, permission: string) => { + const found = parsedSchema?.definitions + .filter((def) => def.kind === 'objectDef') + .find((def) => def.name === resourceType); + if (!found) { + return false; + } + return !!(found as ParsedObjectDefinition).permissions.find( + (p) => p.name === permission + ); + }; + + const unfilteredPermissions = + parsedSchema?.definitions.flatMap((def) => { + if (def.kind === 'objectDef') { + return def.permissions.map((p) => p.name); + } + return []; + }) ?? []; + + const [resourceType] = currentResource + ? currentResource?.split(':', 2) + : ['']; + + return unfilteredPermissions.filter((p) => { + return !resourceType || hasPermission(resourceType, p); + }); + }, [parsedSchema, currentResource]); + + const values: string[] = { + subject: subjects, + permission: permissions, + resource: resources, + }[props.type]; + + const current = props.currentValue; + + useEffect(() => { + if (current === '' && values.length > 0) { + props.onChange(values[0]); + } + }, [current, values, props]); + + const icon = useMemo(() => { + return { + resource: , + subject: , + permission: , + }[props.type]; + }, [props.type]); + + const typeClass = useMemo(() => { + return { + resource: classes.resource, + subject: classes.subject, + permission: classes.permission, + }[props.type]; + }, [props.type, classes]); + + const [anchorEl, setAnchorEl] = React.useState(null); + const handleSelect = (value: string) => { + setAnchorEl(null); + props.onChange(value); + }; + + const handleClose = (value: string) => { + setAnchorEl(null); + }; + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + return ( + <> +
+ {icon} + {current} + + + +
+ + {values.map((v) => { + return ( + handleSelect(v)}> + {v} + + ); + })} + + + ); +} + +function SchemaIcon() { + return ( + + + + ); +} + +function RelationshipsIcon() { + return ; +} diff --git a/playground/src/components/ExamplesDropdown.tsx b/playground/src/components/ExamplesDropdown.tsx new file mode 100644 index 0000000..64b57e4 --- /dev/null +++ b/playground/src/components/ExamplesDropdown.tsx @@ -0,0 +1,107 @@ +import { Example, LoadExamples } from '@code/spicedb-common/src/examples'; +import { faCaretDown } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { CircularProgress, MenuItem } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import ListItemText from '@material-ui/core/ListItemText'; +import Menu from '@material-ui/core/Menu'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import React, { useEffect, useState } from 'react'; + +const ITEM_HEIGHT = 68; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + loading: { + margin: theme.spacing(2), + display: 'flex', + alignItems: 'center', + }, + }) +); + +export function ExamplesDropdown(props: { + className?: string; + disabled?: boolean; + exampleSelected: (example: Example) => void; +}) { + const classes = useStyles(); + + const [anchorEl, setAnchorEl] = React.useState(null); + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const [examples, setExamples] = useState(undefined); + + useEffect(() => { + const fetchExamples = async () => { + if (examples === undefined) { + setExamples(await LoadExamples()); + } + }; + fetchExamples(); + }, [examples]); + + const exampleSelected = (ex: Example) => { + props.exampleSelected(ex); + setAnchorEl(null); + }; + + return ( + <> + + + {examples === undefined && ( +
+ +
+ )} + {examples !== undefined && + examples.map((example) => { + return ( + exampleSelected(example)}> + + + ); + })} +
+ + ); +} diff --git a/playground/src/components/FullPlayground.tsx b/playground/src/components/FullPlayground.tsx new file mode 100644 index 0000000..fbaddc6 --- /dev/null +++ b/playground/src/components/FullPlayground.tsx @@ -0,0 +1,1339 @@ +import { useAlert } from '@code/playground-ui/src/AlertProvider'; +import { useConfirmDialog } from '@code/playground-ui/src/ConfirmDialogProvider'; +import { DiscordChatCrate } from '@code/playground-ui/src/DiscordChatCrate'; +import { useGoogleAnalytics } from '@code/playground-ui/src/GoogleAnalyticsHook'; +import TabLabel from '@code/playground-ui/src/TabLabel'; +import { AuthnProvider } from '@code/spicedb-common/src/authn/provider'; +import { useAuthentication } from '@code/spicedb-common/src/authn/useauthentication'; +import { Example } from '@code/spicedb-common/src/examples'; +import { DeveloperServiceClient } from '@code/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb'; +import { + ShareRequest, + ShareResponse, +} from '@code/spicedb-common/src/protodefs/authzed/api/v0/developer_pb'; +import { useDeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import { useZedTerminalService } from '@code/spicedb-common/src/services/zedterminalservice'; +import { parseValidationYAML } from '@code/spicedb-common/src/validationfileformat'; +import { LinearProgress, Tab, Tabs, Tooltip } from '@material-ui/core'; +import AppBar from '@material-ui/core/AppBar'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import ButtonGroup from '@material-ui/core/ButtonGroup'; +import TextField from '@material-ui/core/TextField'; +import Typography from '@material-ui/core/Typography'; +import { + Theme, + createStyles, + darken, + makeStyles, +} from '@material-ui/core/styles'; +import { alpha } from '@material-ui/core/styles/colorManipulator'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import AccountCircleIcon from '@material-ui/icons/AccountCircle'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import CodeIcon from '@material-ui/icons/Code'; +import CompareIcon from '@material-ui/icons/Compare'; +import DescriptionIcon from '@material-ui/icons/Description'; +import FormatTextdirectionLToRIcon from '@material-ui/icons/FormatTextdirectionLToR'; +import GetAppIcon from '@material-ui/icons/GetApp'; +import GridOnIcon from '@material-ui/icons/GridOn'; +import HighlightOffIcon from '@material-ui/icons/HighlightOff'; +import InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile'; +import RefreshIcon from '@material-ui/icons/Refresh'; +import ShareIcon from '@material-ui/icons/Share'; +import Alert from '@material-ui/lab/Alert'; +import ToggleButton from '@material-ui/lab/ToggleButton'; +import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; +import clsx from 'clsx'; +import { saveAs } from 'file-saver'; +import { fileDialog } from 'file-select-dialog'; +import * as grpcWeb from 'grpc-web'; +import React, { useEffect, useMemo, useState } from 'react'; +import { useCookies } from 'react-cookie'; +import 'react-reflex/styles.css'; +import { useHistory, useLocation } from 'react-router-dom'; +import sjcl from 'sjcl'; +import { useKeyboardShortcuts } from 'use-keyboard-shortcuts'; +import { ReactComponent as DISCORD } from '../assets/discord.svg'; +import { useLiveCheckService } from '../services/check'; +import AppConfig, { + IsAuthzedInteractionEnabled, +} from '../services/configservice'; +import { + RelationshipsEditorType, + useCookieService, +} from '../services/cookieservice'; +import { + DataStore, + DataStoreItem, + DataStoreItemKind, + DataStorePaths, + usePlaygroundDatastore, +} from '../services/datastore'; +import { useLocalParseService } from '../services/localparse'; +import { ProblemService, useProblemService } from '../services/problem'; +import { Services } from '../services/services'; +import { + ValidationResult, + ValidationStatus, + useValidationService, +} from '../services/validation'; +import { + createValidationYAML, + normalizeValidationYAML, +} from '../services/validationfileformat'; +import { DatastoreRelationshipEditor } from './DatastoreRelationshipEditor'; +import { EditorDisplay, EditorDisplayProps } from './EditorDisplay'; +import { ExamplesDropdown } from './ExamplesDropdown'; +import { GuidedTour, TourElementClass } from './GuidedTour'; +import { AT, ET, NS, VL } from './KindIcons'; +import { NormalLogo, SmallLogo } from './Logos'; +import { ShareLoader } from './ShareLoader'; +import { UserDisplayAndDeploy } from './UserDisplayAndDeploy'; +import { ValidateButton } from './ValidationButton'; +import { Panel, useSummaryStyles } from './panels/base/common'; +import { ReflexedPanelDisplay } from './panels/base/reflexed'; +import { PlaygroundPanelLocation } from './panels/panels'; +import { ProblemsPanel, ProblemsSummary } from './panels/problems'; +import { TerminalPanel, TerminalSummary } from './panels/terminal'; +import { ValidationPanel, ValidationSummary } from './panels/validation'; +import { VisualizerPanel, VisualizerSummary } from './panels/visualizer'; +import { WatchesPanel, WatchesSummary } from './panels/watches'; + +export interface AppProps { + /** + * withRouter, it specified, is the router to wrap the application with. + */ + withRouter?: any; +} + +const TOOLBAR_BREAKPOINT = 1550; // pixels + +interface StyleProps { + prefersDarkMode: boolean; +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + '@global': { + '.reflex-splitter': { + backgroundColor: theme.palette.divider + '!important', + borderColor: theme.palette.divider + '!important', + borderLeftWidth: '0px !important', + borderTopWidth: '0px !important', + }, + }, + root: { + position: 'absolute', + top: '0px', + left: '0px', + right: '0px', + bottom: '0px', + }, + reflexContainerContainer: { + position: 'absolute', + top: '98px', + left: '0px', + right: '0px', + bottom: '0px', + [theme.breakpoints.down(TOOLBAR_BREAKPOINT)]: { + top: '144px', + }, + }, + topBar: { + borderBottom: '1px solid transparent', + borderBottomColor: theme.palette.divider, + height: '48px', + zIndex: 4, + display: 'grid', + alignItems: 'center', + justifyContent: 'flex-end', + flexDirection: 'row', + columnGap: '10px', + gridTemplateColumns: 'auto auto 1fr auto auto auto auto auto auto', + backgroundColor: (props: StyleProps) => + props.prefersDarkMode ? '#111' : theme.palette.background.default, + '& .MuiTab-root': { + minWidth: 0, + }, + '& .Mui-selected': { + backgroundColor: '#222', + color: 'white !important', + }, + '& .MuiTabs-indicator': { + top: 0, + }, + }, + toolBar: { + backgroundColor: (props: StyleProps) => + props.prefersDarkMode ? '#202020' : theme.palette.background.default, + display: 'grid', + flexDirection: 'row', + columnGap: '10px', + gridTemplateColumns: 'auto 1fr', + '& .MuiTab-root': { + minWidth: 0, + backgroundColor: (props: StyleProps) => + props.prefersDarkMode + ? '#1b1b1b' + : darken(theme.palette.background.default, 0.05), + }, + '& .Mui-selected': { + backgroundColor: () => alpha(theme.palette.primary.light, 0.15), + color: `${theme.palette.text.primary} !important`, + }, + [theme.breakpoints.down(TOOLBAR_BREAKPOINT)]: { + gridTemplateColumns: '100%', + gridTemplateRows: 'auto auto', + backgroundColor: (props: StyleProps) => + props.prefersDarkMode + ? '#1b1b1b' + : darken(theme.palette.background.default, 0.05), + }, + }, + contextToolbar: { + display: 'grid', + flexDirection: 'row', + alignItems: 'center', + gridTemplateColumns: 'auto 1fr auto', + margin: '6px', + marginLeft: '0px', + [theme.breakpoints.down(TOOLBAR_BREAKPOINT)]: { + backgroundColor: (props: StyleProps) => + props.prefersDarkMode ? '#202020' : theme.palette.background.default, + padding: '6px', + margin: '0px', + }, + }, + contextTools: { + display: 'grid', + flexDirection: 'row', + alignItems: 'center', + gridTemplateColumns: 'auto auto auto', + columnGap: theme.spacing(1), + '& .MuiButton-root': { + borderColor: 'transparent', + backgroundColor: 'rgba(255, 255, 255, 0.12)', + color: `${theme.palette.text.primary} !important`, + }, + '& .MuiButton-root:hover': { + backgroundColor: 'rgba(255, 255, 255, 0.25)', + }, + }, + expectedActions: {}, + logoContainer: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + height: '1em', + fontSize: '125%', + padding: theme.spacing(1), + fontFamily: 'Roboto Mono, monospace', + [theme.breakpoints.down('sm')]: { + paddingTop: theme.spacing(1), + }, + }, + docsLink: { + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + normalLogo: { + '& svg': { + height: '1em', + marginRight: theme.spacing(1), + }, + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + '& a': { + textDecoration: 'none', + color: 'inherit', + }, + }, + smallLogo: { + display: 'none', + [theme.breakpoints.down('sm')]: { + display: 'flex', + alignItems: 'center', + '& a': { + height: '1.5em', + }, + }, + '& svg': { + width: '1.5em', + height: '1.5em', + }, + }, + shareUrl: { + marginRight: theme.spacing(1), + width: '100%', + }, + mainContent: { + position: 'absolute', + top: '0px', + left: '0px', + right: '0px', + bottom: '0px', + }, + landing: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: '60vh', + width: '100%', + }, + editorContainer: { + height: '60vh', + width: '100%', + }, + hideTextOnMed: { + [theme.breakpoints.down('md')]: { + justifyContent: 'flex-start', + overflow: 'hidden', + width: '28px', + minWidth: '28px', + '& .MuiButton-label': { + justifyContent: 'flex-start', + overflow: 'hidden', + width: '28px', + '& .MuiButton-startIcon.MuiButton-iconSizeSmall': { + marginLeft: '0px', + }, + }, + }, + }, + hide: { + display: 'none', + }, + title: { + textAlign: 'center', + padding: theme.spacing(0.5), + backgroundColor: theme.palette.background.default, + display: 'grid', + gridTemplateColumns: '1fr auto', + alignItems: 'center', + }, + btnAccept: { + '& .MuiSvgIcon-root': { + fill: theme.palette.success.main, + }, + color: theme.palette.getContrastText(theme.palette.success.main), + }, + btnRevert: { + '& .MuiSvgIcon-root': { + fill: theme.palette.error.main, + }, + color: theme.palette.getContrastText(theme.palette.error.main), + }, + tenantGraphContainer: { + width: '100%', + height: '100%', + backgroundColor: theme.palette.background.default, + backgroundSize: '20px 20px', + backgroundImage: ` + linear-gradient(to right, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px), + linear-gradient(to bottom, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px) + `, + }, + tenantGraphBar: { + padding: theme.spacing(1), + display: 'grid', + gridTemplateColumns: 'auto 1fr auto', + columnGap: theme.spacing(1), + alignItems: 'center', + }, + loadBar: { + padding: theme.spacing(1), + display: 'grid', + gridTemplateColumns: 'auto 500px', + columnGap: theme.spacing(1), + alignItems: 'center', + }, + }) +); + +enum SharingStatus { + NOT_RUN = 0, + SHARING = 1, + SHARED = 2, + SHARE_ERROR = 3, +} + +interface SharingState { + status: SharingStatus; + shareReference?: string; +} + +export function FullPlayground(props: { withRouter?: any }) { + return ( + + + + ); +} + +export function AuthedPlayground(props: { withRouter?: any }) { + return ( + <> + + + + ); +} + +function ApolloedPlayground(props: { withRouter?: any }) { + const datastore = usePlaygroundDatastore(); + const Router = props.withRouter ? props.withRouter : Box; + return ( + + + + + + ); +} + +export function ThemedAppView(props: { datastore: DataStore }) { + const { pushEvent } = useGoogleAnalytics(); + const { showAlert } = useAlert(); + const { showConfirm } = useConfirmDialog(); + + const [sharingState, setSharingState] = useState({ + status: SharingStatus.NOT_RUN, + }); + + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + + const classes = useStyles({ prefersDarkMode: prefersDarkMode }); + const location = useLocation(); + const history = useHistory(); + + const datastore = props.datastore; + + const { + user, + isLoading: isAuthnLoading, + loginWithPopup, + logout, + } = useAuthentication(); + + const developerService = useDeveloperService(); + const localParseService = useLocalParseService(datastore); + const liveCheckService = useLiveCheckService(developerService, datastore); + const validationService = useValidationService(developerService, datastore); + const problemService = useProblemService( + localParseService, + liveCheckService, + validationService + ); + const zedTerminalService = useZedTerminalService(); + + const services = { + localParseService, + liveCheckService, + validationService, + problemService, + developerService, + zedTerminalService, + }; + + const currentItem = datastore.get(location.pathname); + + const [cookies, setCookie] = useCookies(['dismiss-tour']); + const [showTour, setShowTour] = useState(cookies['dismiss-tour'] !== 'true'); + + const handleLogin = () => { + (async () => { + await loginWithPopup(); + })(); + }; + + const handleLogout = () => { + (async () => { + await logout(); + })(); + }; + + useKeyboardShortcuts([ + { + keys: ['ctrl', 's'], + onEvent: (event) => { + // Do nothing. We save automatically. + }, + }, + ]); + + // Effect: If the user lands on the `/` route, redirect them to the schema editor. + useEffect(() => { + (async () => { + if (currentItem === undefined) { + history.replace(DataStorePaths.Schema()); + } + })(); + }, [datastore, currentItem, history]); + + const conductDownload = () => { + const yamlContents = createValidationYAML(datastore); + const bitArray = sjcl.hash.sha256.hash(yamlContents); + const hash = sjcl.codec.hex.fromBits(bitArray).substring(0, 6); + const blob = new Blob([yamlContents], { type: 'text/yaml;charset=utf-8' }); + saveAs(blob, `authzed-download-${hash}.yaml`); + }; + + const conductUpload = () => { + (async () => { + const file = await fileDialog({ + multiple: false, + strict: true, + accept: '.yaml', + }); + if (file) { + pushEvent('load-yaml', { + filename: file.name, + }); + + const contents = await getFileContentsAsText(file); + const uploaded = parseValidationYAML(contents); + if ('message' in uploaded) { + showAlert({ + title: 'Could not load uploaded YAML', + content: `The uploaded validation YAML is invalid: ${uploaded.message}`, + buttonTitle: 'Okay', + }); + return; + } + + services.liveCheckService.clear(); + + datastore.loadFromParsed(uploaded); + datastoreUpdated(); + + history.replace(DataStorePaths.Schema()); + } + })(); + }; + + const formatSchema = () => { + const schema = datastore.getSingletonByKind( + DataStoreItemKind.SCHEMA + ).editableContents; + const request = developerService.newRequest(schema, ''); + request?.formatSchema((result) => { + datastore.update( + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA), + result.formattedSchema + ); + }); + request?.execute(); + }; + + const conductSharing = (callback?: (reference: string) => void) => { + const developerEndpoint = AppConfig().authzed?.developerEndpoint; + if (!developerEndpoint) { + return; + } + + if (callback !== undefined && sharingState.shareReference !== undefined) { + callback(sharingState.shareReference); + return; + } + + setSharingState({ + status: SharingStatus.SHARING, + }); + + const service = new DeveloperServiceClient(developerEndpoint, null, null); + + const schema = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relationshipsYaml = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + const assertionsYaml = datastore.getSingletonByKind( + DataStoreItemKind.ASSERTIONS + ).editableContents!; + const validationYaml = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ).editableContents!; + + // Invoke sharing. + const request = new ShareRequest(); + request.setSchema(schema); + request.setRelationshipsYaml(relationshipsYaml); + request.setAssertionsYaml(assertionsYaml); + request.setValidationYaml(validationYaml); + + service.share( + request, + {}, + (err: grpcWeb.RpcError, response: ShareResponse) => { + if (err) { + showAlert({ + title: 'Error sharing', + content: err.message, + buttonTitle: 'Okay', + }); + setSharingState({ + status: SharingStatus.SHARE_ERROR, + }); + return; + } + + const reference = response.getShareReference(); + pushEvent('shared', { + reference: reference, + }); + + setSharingState({ + status: SharingStatus.SHARED, + shareReference: reference, + }); + + if (callback !== undefined) { + callback(reference); + } + } + ); + }; + + const datastoreUpdated = () => { + if (sharingState.status !== SharingStatus.NOT_RUN) { + setSharingState({ + status: SharingStatus.NOT_RUN, + }); + } + }; + + const askLoadExampleData = async (ex: Example) => { + const [result] = await showConfirm({ + title: `Replace contents with "${ex.title}"?`, + content: `This will replace all current Playground data with the example data for "${ex.title}"`, + buttons: [ + { title: 'Cancel', value: 'undefined' }, + { + title: `Replace With Example`, + variant: 'contained', + color: 'primary', + value: 'load', + }, + ], + }); + + if (result !== 'load') { + return; + } + + pushEvent('load-example', { + id: ex.id, + }); + + datastore.loadFromParsed(ex.data); + datastoreUpdated(); + + services.liveCheckService.clear(); + history.replace(DataStorePaths.Schema()); + }; + + const [previousValidationForDiff, setPreviousValidationForDiff] = useState< + string | undefined + >(undefined); + + const conductValidation = () => { + validationService.conductValidation((validated: boolean) => { + return false; + }); + }; + + const handleGenerateAndUpdate = (diff: boolean) => { + if (previousValidationForDiff !== undefined) { + setPreviousValidationForDiff(undefined); + return; + } + + setPreviousValidationForDiff(undefined); + validationService.conductValidation( + (validated: boolean, result: ValidationResult) => { + if (result.updatedValidationYaml) { + const updatedYaml = normalizeValidationYAML( + result.updatedValidationYaml + ); + const expectedRelations = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ); + + if (updatedYaml === expectedRelations.editableContents) { + return false; + } + + if (diff) { + setPreviousValidationForDiff(expectedRelations.editableContents); + } + + if (!updatedYaml) { + return false; + } + + datastore.update(expectedRelations, updatedYaml); + datastoreUpdated(); + + // Rerun validation to remove any errors. + conductValidation(); + return false; + } + return false; + } + ); + }; + + const handleAcceptDiff = () => { + setPreviousValidationForDiff(undefined); + }; + + const handleRevertDiff = () => { + if (previousValidationForDiff !== undefined) { + const expectedRelations = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ); + datastore.update(expectedRelations, previousValidationForDiff); + + datastoreUpdated(); + setPreviousValidationForDiff(undefined); + + // Rerun validation to remove any errors. + conductValidation(); + } + }; + + const validationState = validationService.state; + + const handleChangeTab = ( + event: React.ChangeEvent<{}>, + selectedTabValue: string + ) => { + const item = datastore.getById(selectedTabValue)!; + history.push(item.pathname); + }; + + const setDismissTour = () => { + setShowTour(false); + setCookie('dismiss-tour', true); + history.push(DataStorePaths.Schema()); + }; + + const handleTourBeforeStep = (selector: string) => { + // Activate the Assertions tab before the assertions dialogs + if (selector.includes(TourElementClass.assert)) { + history.push(DataStorePaths.Assertions()); + } + }; + + const isOutOfDate = props.datastore.isOutOfDate(); + const cookieService = useCookieService(); + + const [relationshipsEditor, setRelationshipEditor] = + useState(() => { + if (services.problemService.invalidRelationships.length > 0) { + return 'code'; + } + + return cookieService.relationshipsEditorType; + }); + const handleChangeRelationshipEditor = ( + event: React.MouseEvent, + value: any + ) => { + const type = value ? value.toString() : 'grid'; + if ( + type === 'grid' && + services.problemService.invalidRelationships.length > 0 + ) { + return; + } + + cookieService.setRelationshipsEditorType(type); + setRelationshipEditor(type); + }; + + const appConfig = AppConfig(); + const isSharingEnabled = !!appConfig.authzed?.developerEndpoint; + const isAuthzedInteractionEnabled = IsAuthzedInteractionEnabled(appConfig); + + return ( +
+ {!global.WebAssembly && ( + + WebAssembly is disabled but is required for Playground debugging. All + debugging tools will be disabled. + + )} + {isOutOfDate && ( + + The contents of the Playground have been updated in another tab. + Please close this Playground tab. + + )} + + +
+
+ + + {' '} + Playground +
+
+ + + +
+
+ {!isOutOfDate && ( + <> + +
+ {sharingState.status === SharingStatus.SHARED && ( + + )} +
+ {AppConfig().discord.inviteUrl ? ( + + ) : ( + + )} + + + + {isAuthnLoading && isAuthzedInteractionEnabled && ( + Signing in... + )} + {!isAuthnLoading && isAuthzedInteractionEnabled && ( +
+ {user !== undefined && ( + + )} + {!user && ( + + )} +
+ )} + + )} +
+ + + } + title="Schema" + /> + } + /> + } + title="Test Relationships" + /> + } + /> + } + title="Assertions" + /> + } + /> + } + title="Expected Relations" + /> + } + /> + + +
+
+ {currentItem?.kind === DataStoreItemKind.SCHEMA && ( + + )} + + {currentItem?.kind === DataStoreItemKind.RELATIONSHIPS && ( +
+ + 0 + } + > + + + + + + + + + + +
+ )} + + {currentItem?.kind === DataStoreItemKind.ASSERTIONS && ( + + )} + + {currentItem?.kind === DataStoreItemKind.EXPECTED_RELATIONS && ( + + )} + + {currentItem?.kind === DataStoreItemKind.EXPECTED_RELATIONS && + previousValidationForDiff === undefined && ( + + + + + )} + {currentItem?.kind === DataStoreItemKind.EXPECTED_RELATIONS && + previousValidationForDiff !== undefined && ( + + + + + )} +
+
+ {currentItem?.kind === DataStoreItemKind.SCHEMA && ( + + )} + + {currentItem?.kind === DataStoreItemKind.RELATIONSHIPS && ( + + )} + + {currentItem?.kind === DataStoreItemKind.ASSERTIONS && ( + + )} + + {currentItem?.kind === DataStoreItemKind.EXPECTED_RELATIONS && ( + + )} +
+ + +
+ +
+
+ ); +} + +const TabLabelWithCount = (props: { + problemService: ProblemService; + kind: DataStoreItemKind; + icon: React.ReactChild; + title: string; +}) => { + const classes = useSummaryStyles(); + const problemService = props.problemService; + const problemCount = problemService.getProblemCount(props.kind); + + return ( +
+ + 0 ? 'inline-flex' : 'none' }} + className={clsx(classes.badge, { + [classes.failBadge]: problemCount > 0, + })} + > + {problemCount} + +
+ ); +}; + +const panels: Panel[] = [ + { + id: 'problems', + summary: ProblemsSummary, + content: ProblemsPanel, + }, + { + id: 'watches', + summary: WatchesSummary, + content: WatchesPanel, + }, + { + id: 'visualizer', + summary: VisualizerSummary, + content: VisualizerPanel, + }, + { + id: 'validation', + summary: ValidationSummary, + content: ValidationPanel, + }, + { + id: 'terminal', + summary: TerminalSummary, + content: TerminalPanel, + }, +]; + +function MainPanel( + props: { + datastore: DataStore; + services: Services; + currentItem: DataStoreItem | undefined; + sharingState: SharingState; + previousValidationForDiff: string | undefined; + relationshipsEditor: RelationshipsEditorType; + datastoreUpdated: () => void; + } & { dimensions?: { width: number; height: number } } +) { + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + const classes = useStyles({ prefersDarkMode: prefersDarkMode }); + + const datastore = props.datastore; + const currentItem = props.currentItem; + const sharingState = props.sharingState; + const devServerState = props.services.developerService.state; + + const devServerStatusDisplay = useMemo(() => { + switch (devServerState.status) { + case 'initializing': + return
Initializing Development System
; + + case 'loading': + return ( +
+ Loading Developer System: + +
+ ); + + case 'loaderror': + return ( + + Could not start the Development System. Please make sure you have + WebAssembly enabled. + + ); + + case 'unsupported': + return ( + + Your browser does not support WebAssembly + + ); + + case 'ready': + return undefined; + } + }, [devServerState, classes.loadBar]); + + return ( +
+ {!currentItem && ( +
+ To get started, please add a namespace configuration. +
+ )} + + + {props.currentItem?.kind === DataStoreItemKind.RELATIONSHIPS && + props.relationshipsEditor === 'grid' && ( + + )} + {(props.currentItem?.kind !== DataStoreItemKind.RELATIONSHIPS || + props.relationshipsEditor === 'code') && ( + + )} + +
+ ); +} + +// NOTE: This is isolated into its own component so that calling setLocalUpdateIndex only calls +// React rerendering on the editor itself, rather than the displays around it as well. +function IsolatedEditorDisplay(props: EditorDisplayProps) { + const [localUpdateIndex, setLocalUpdateIndex] = useState(0); + + const datastoreUpdated = () => { + props.datastoreUpdated(); + setLocalUpdateIndex(localUpdateIndex + 1); + }; + + return ; +} + +const getFileContentsAsText = async (file: File): Promise => { + return new Promise( + ( + resolve: (value: string | PromiseLike) => void, + reject: (reason?: any) => void + ) => { + const reader = new FileReader(); + reader.onloadend = function (e: ProgressEvent) { + resolve(e.target?.result?.toString() ?? ''); + }; + reader.onerror = reject; + reader.readAsText(file); + } + ); +}; diff --git a/playground/src/components/GuidedTour.tsx b/playground/src/components/GuidedTour.tsx new file mode 100644 index 0000000..6e4b44f --- /dev/null +++ b/playground/src/components/GuidedTour.tsx @@ -0,0 +1,150 @@ +import { Theme, useTheme } from '@material-ui/core/styles'; +import React from 'react'; +import Joyride, { ACTIONS, EVENTS, Step } from 'react-joyride'; + +var _ = React; + +export const TourElementClass = { + schema: 'tec-schema', + browse: 'tec-browse', + testrel: 'tec-testrel', + assert: 'tec-assert', + run: 'tec-run', + problems: 'tec-problems', + checkwatch: 'tec-checkwatch', + share: 'tec-share', +}; + +const steps: Step[] = [ + { + target: `.${TourElementClass.schema}`, + title: 'Welcome!', + content: "Begin by editing permission system's schema here...", + disableBeacon: true, + }, + { + target: `.${TourElementClass.browse}`, + title: 'Browse', + content: '...or start with a pre-built example', + }, + { + target: `.${TourElementClass.testrel}`, + title: 'Test Relationships', + content: 'Add test relationships into your database...', + }, + { + target: `.${TourElementClass.assert}`, + title: 'Assertions', + content: + '...and then define assertions to validate your schema and relationships', + }, + { + target: `.${TourElementClass.run}`, + title: 'Validate', + content: + 'Click Run to test your assertions against your permissions system', + }, + { + target: `.${TourElementClass.problems}`, + title: 'Problems', + content: 'Any problems in your schema or assertions will appear here', + }, + { + target: `.${TourElementClass.checkwatch}`, + title: 'Check Watches', + content: 'Permission checks can also be evaluated live by adding them here', + }, + { + target: `.${TourElementClass.share}`, + title: 'Share', + content: + 'Click Share to get a shareable link. Contact us with any questions as your build out your system!', + }, + { + target: `.${TourElementClass.schema}`, + title: 'Start editing!', + content: 'You are all ready to start editing your permission schema!', + }, +]; + +const styles = (theme: Theme) => { + return { + options: { + // modal arrow and background color + arrowColor: theme.palette.background.paper, + backgroundColor: theme.palette.background.paper, + // button color + primaryColor: theme.palette.secondary.main, + // text color + textColor: theme.palette.text.primary, + zIndex: 999, + }, + }; +}; + +const handleEvents = ( + onSkip: () => void, + onTourEnd: () => void, + onEnterStep: (className: string) => void +) => { + return (data: { + action: string; + index: number; + size: number; + type: string; + step: any; + }) => { + const { action, index, size, type, step } = data; + + const properties = { Step: step.title, StepIndex: index, StepsCount: size }; + // Tour start + if (ACTIONS.START === action && EVENTS.TOUR_START === type) { + // No-op + } + // Tour finish + if (ACTIONS.NEXT === action && EVENTS.TOUR_END === type) { + onTourEnd(); + } + // Tour before step + if (ACTIONS.NEXT === action && EVENTS.STEP_BEFORE === type) { + onEnterStep(step.target); + } + // Tour step + if (ACTIONS.UPDATE === action && EVENTS.TOOLTIP === type) { + // No-op + } + // Tour skip + if ( + (ACTIONS.SKIP === action && EVENTS.TOUR_END === type) || + ACTIONS.CLOSE === action + ) { + onSkip(); + } + }; +}; + +export function GuidedTour(props: { + show: boolean; + onSkip: () => void; + onTourEnd: () => void; + onEnterStep: (className: string) => void; +}) { + const theme = useTheme(); + const { show, onSkip, onTourEnd, onEnterStep } = props; + + return ( + <> + {show && ( + + )} + + ); +} diff --git a/playground/src/components/InlinePlayground.tsx b/playground/src/components/InlinePlayground.tsx new file mode 100644 index 0000000..c3dbbb2 --- /dev/null +++ b/playground/src/components/InlinePlayground.tsx @@ -0,0 +1,242 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import TenantGraph from '@code/spicedb-common/src/components/graph/TenantGraph'; +import { parseSchema } from '@code/spicedb-common/src/parsers/dsl/dsl'; +import { parseRelationships } from '@code/spicedb-common/src/parsing'; +import { useDeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import AppBar from '@material-ui/core/AppBar'; +import Button from '@material-ui/core/Button'; +import { + createStyles, + darken, + makeStyles, + Theme, +} from '@material-ui/core/styles'; +import Tab from '@material-ui/core/Tab'; +import Tabs from '@material-ui/core/Tabs'; +import BubbleChartIcon from '@material-ui/icons/BubbleChart'; +import LaunchIcon from '@material-ui/icons/Launch'; +import clsx from 'clsx'; +import React, { useState } from 'react'; +import { useLiveCheckService } from '../services/check'; +import { + DataStore, + DataStoreItemKind, + useReadonlyDatastore, +} from '../services/datastore'; +import { useLocalParseService } from '../services/localparse'; +import { useProblemService } from '../services/problem'; +import { useValidationService } from '../services/validation'; +import { DatastoreRelationshipEditor } from './DatastoreRelationshipEditor'; +import { EditorDisplay } from './EditorDisplay'; +import { AT, ET, NS, VL } from './KindIcons'; +import { ShareLoader } from './ShareLoader'; + +export function InlinePlayground() { + const datastore = useReadonlyDatastore(); + return ( + + + + ); +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + tabBar: { + display: 'grid', + gridTemplateColumns: '1fr auto auto', + columnGap: theme.spacing(0.25), + }, + buttonContainer: { + padding: theme.spacing(1), + }, + root: { + display: 'grid', + gridTemplateRows: 'auto 1fr', + height: '100vh', + }, + tabPanel: { + height: '100%', + '& > div': { + height: '100%', + }, + '& > div > div': { + height: '100%', + }, + }, + tabRoot: { + minWidth: '0px', + }, + graphTab: {}, + tenantGraphContainer: { + width: '100%', + height: '98vh', + backgroundColor: theme.palette.background.default, + backgroundSize: '20px 20px', + backgroundImage: ` + linear-gradient(to right, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px), + linear-gradient(to bottom, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px) + `, + }, + }) +); + +function InlinePlaygroundUI(props: { datastore: DataStore }) { + const classes = useStyles(); + const datastore = props.datastore; + + const developerService = useDeveloperService(); + const localParseService = useLocalParseService(datastore); + const liveCheckService = useLiveCheckService(developerService, datastore); + const validationService = useValidationService(developerService, datastore); + const problemService = useProblemService( + localParseService, + liveCheckService, + validationService + ); + const zedTerminalService = undefined; // not used + + const services = { + localParseService, + liveCheckService, + validationService, + problemService, + developerService, + zedTerminalService, + }; + + const [disableMouseWheelScrolling, setDisableMouseWheelScrolling] = + useState(true); + const [currentTabName, setCurrentTabName] = useState( + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA).id + ); + + const handleChangeTab = ( + event: React.ChangeEvent<{}>, + selectedTabName: string + ) => { + setCurrentTabName(selectedTabName); + }; + + const currentItem = datastore.getById(currentTabName); + const parsedSchema = parseSchema( + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA).editableContents! + ); + const relationships = parseRelationships( + datastore.getSingletonByKind(DataStoreItemKind.RELATIONSHIPS) + .editableContents! + ); + const [resizeIndex, setResizeIndex] = useState(0); + + React.useEffect(() => { + const handler = () => { + // Force a rerender + setResizeIndex(resizeIndex + 1); + }; + + window.addEventListener('resize', handler); + return () => { + window.removeEventListener('resize', handler); + }; + }, [resizeIndex, setResizeIndex]); + + return ( +
setDisableMouseWheelScrolling(false)} + className={clsx(classes.root)} + > + + + } title="Schema" />} + /> + } title="Test Data" />} + /> + } title="Graph" />} + /> + } title="Assert" />} + /> + } title="Expected" />} + /> + +
+ +
+
+ + {currentTabName === '$graph' && ( +
+ +
+ )} + + {currentItem?.kind === DataStoreItemKind.RELATIONSHIPS && ( + null} + dimensions={{ + width: document.body.clientWidth, + height: document.body.clientHeight, + }} + /> + )} + + {currentItem !== undefined && + currentItem.kind !== DataStoreItemKind.RELATIONSHIPS && ( + null} + disableMouseWheelScrolling={disableMouseWheelScrolling} + defaultWidth="100vw" + defaultHeight="100%" + /> + )} +
+ ); +} diff --git a/playground/src/components/KindIcons.tsx b/playground/src/components/KindIcons.tsx new file mode 100644 index 0000000..911ece0 --- /dev/null +++ b/playground/src/components/KindIcons.tsx @@ -0,0 +1,60 @@ +import { faDatabase } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import WarningIcon from '@material-ui/icons/Warning'; +import React from 'react'; +import 'react-reflex/styles.css'; + +interface StyleProps { + small?: boolean +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + ns: { + fontFamily: 'Roboto Mono, monospace', + color: '#8787ff', + fontSize: (props: StyleProps) => props.small ? '85%' : '125%', + fontWeight: 'bold' + }, + vl: { + fontFamily: 'Roboto Mono, monospace', + color: '#87deff', + fontSize: (props: StyleProps) => props.small ? '85%' : '125%', + fontWeight: 'bold' + }, + at: { + fontFamily: 'Roboto Mono, monospace', + '& svg': { + color: 'orange', + fontSize: (props: StyleProps) => props.small ? '85%' : '125%', + }, + fontWeight: 'bold' + }, + et: { + fontFamily: 'Roboto Mono, monospace', + color: '#3dc9b0', + fontSize: (props: StyleProps) => props.small ? '85%' : '125%', + fontWeight: 'bold' + }, + })); + +export function NS(props: { small?: boolean }) { + const classes = useStyles(props); + return DEF; +} + +export function VL(props: { small?: boolean }) { + const classes = useStyles(props); + return ; +} + +export function AT(props: { small?: boolean }) { + const classes = useStyles(props); + return ; +} + +export function ET(props: { small?: boolean }) { + const classes = useStyles(props); + return []; +} diff --git a/playground/src/components/Logos.tsx b/playground/src/components/Logos.tsx new file mode 100644 index 0000000..0190160 --- /dev/null +++ b/playground/src/components/Logos.tsx @@ -0,0 +1,17 @@ +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import React from 'react'; +import { ReactComponent as AUTHZED_DM_SMALL_LOGO } from '../assets/favicon-dark-mode.svg'; +import { ReactComponent as AUTHZED_SMALL_LOGO } from '../assets/favicon.svg'; + +var _ = React; + +export function NormalLogo() { + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + // return prefersDarkMode ? : ; + return prefersDarkMode ? SpiceDB : SpiceDB; +} + +export function SmallLogo() { + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + return prefersDarkMode ? : ; +} diff --git a/playground/src/components/ShareLoader.tsx b/playground/src/components/ShareLoader.tsx new file mode 100644 index 0000000..975d554 --- /dev/null +++ b/playground/src/components/ShareLoader.tsx @@ -0,0 +1,203 @@ +import { useAlert } from '@code/playground-ui/src/AlertProvider'; +import { useConfirmDialog } from '@code/playground-ui/src/ConfirmDialogProvider'; +import LoadingView from '@code/playground-ui/src/LoadingView'; +import { DeveloperServiceClient } from '@code/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb'; +import { + LookupShareRequest, + LookupShareResponse, +} from '@code/spicedb-common/src/protodefs/authzed/api/v0/developer_pb'; +import Alert from '@material-ui/lab/Alert'; +import * as grpcWeb from 'grpc-web'; +import React, { useEffect, useState } from 'react'; +import 'react-reflex/styles.css'; +import { useHistory, useLocation } from 'react-router-dom'; +import AppConfig from '../services/configservice'; +import { DataStore } from '../services/datastore'; + +enum SharedLoadingStatus { + NOT_CHECKED = -1, + NOT_APPLICABLE = 0, + LOADING = 1, + LOADED = 2, + LOAD_ERROR = 3, + CONFIRMING = 4, +} + +/** + * ShareLoader is a component which loads the shared data (if any) before rendering + * the child playground. + */ +export function ShareLoader(props: { + shareUrlRoot: string; + datastore: DataStore; + children: React.ReactNode; + sharedRequired: boolean; +}) { + const { showAlert } = useAlert(); + const { showConfirm } = useConfirmDialog(); + const history = useHistory(); + const location = useLocation(); + + const datastore = props.datastore; + const urlPrefix = `/${props.shareUrlRoot}/`; + const [loadingStatus, setLoadingStatus] = useState( + SharedLoadingStatus.NOT_CHECKED + ); + + // Register an effect to load shared data if the URL specifies to do so. + useEffect(() => { + if (loadingStatus !== SharedLoadingStatus.NOT_CHECKED) { + return; + } + + if (!location.pathname.startsWith(urlPrefix)) { + setLoadingStatus(SharedLoadingStatus.NOT_APPLICABLE); + return; + } + + if (!AppConfig().authzed?.developerEndpoint) { + setLoadingStatus(SharedLoadingStatus.NOT_APPLICABLE); + return; + } + + setLoadingStatus(SharedLoadingStatus.LOADING); + + // Load the shared data. + (async () => { + const service = new DeveloperServiceClient( + AppConfig().authzed!.developerEndpoint!, + null, + null + ); + + const pieces = location.pathname.substr(urlPrefix.length).split('/'); + if (pieces.length < 1 && !props.sharedRequired) { + history.push('/'); + return; + } + + const shareReference = pieces[0]; + + const request = new LookupShareRequest(); + request.setShareReference(shareReference); + + service.lookupShared( + request, + {}, + (err: grpcWeb.RpcError, response: LookupShareResponse) => { + const handler = async () => { + // Error handling. + if ( + err || + response.getStatus() === + LookupShareResponse.LookupStatus.FAILED_TO_LOOKUP + ) { + setLoadingStatus(SharedLoadingStatus.LOAD_ERROR); + if (props.sharedRequired) { + return; + } + + await showAlert({ + title: 'Error loading shared playground', + content: err ? err.message : 'Invalid sharing reference', + buttonTitle: 'Okay', + }); + history.replace('/'); + return; + } + + // Unknown reference. + if ( + response.getStatus() === + LookupShareResponse.LookupStatus.UNKNOWN_REFERENCE + ) { + setLoadingStatus(SharedLoadingStatus.LOAD_ERROR); + if (props.sharedRequired) { + return; + } + + await showAlert({ + title: 'Shared playground not found', + content: 'The shared playground specified does not exist', + buttonTitle: 'Okay', + }); + history.replace('/'); + return; + } + + // Valid reference. + let updateDatastore = true; + if (!props.sharedRequired && datastore.isPopulated()) { + setLoadingStatus(SharedLoadingStatus.CONFIRMING); + const [result] = await showConfirm({ + title: `Replace your existing Playground content?`, + content: `Are you sure you want to replace your existing Playground contents with those from the shared link? They will overwrite your existing contents.`, + buttons: [ + { title: 'Keep Existing', value: 'nevermind' }, + { + title: `Replace Contents`, + variant: 'contained', + color: 'secondary', + value: 'replace', + }, + ], + }); + updateDatastore = result === 'replace'; + } + + if (updateDatastore) { + datastore.load({ + schema: response.getSchema(), + relationshipsYaml: response.getRelationshipsYaml(), + assertionsYaml: response.getAssertionsYaml(), + verificationYaml: response.getValidationYaml(), + }); + } + + if (!props.sharedRequired) { + history.replace( + location.pathname.substr( + urlPrefix.length + shareReference.length + ) + ); + } + + setLoadingStatus(SharedLoadingStatus.LOADED); + }; + + handler(); + } + ); + })(); + }, [ + location.pathname, + loadingStatus, + datastore, + history, + showAlert, + showConfirm, + urlPrefix, + props.sharedRequired, + ]); + + if ( + location.pathname.startsWith(urlPrefix) && + loadingStatus !== SharedLoadingStatus.LOADED + ) { + return ( +
+ {loadingStatus === SharedLoadingStatus.NOT_APPLICABLE && ( + Could not load shared playground + )} + {loadingStatus === SharedLoadingStatus.LOADING && ( + + )} + {loadingStatus === SharedLoadingStatus.LOAD_ERROR && ( + Could not load shared playground + )} +
+ ); + } + + return
{props.children}
; +} diff --git a/playground/src/components/UserDisplayAndDeploy.tsx b/playground/src/components/UserDisplayAndDeploy.tsx new file mode 100644 index 0000000..1194173 --- /dev/null +++ b/playground/src/components/UserDisplayAndDeploy.tsx @@ -0,0 +1,101 @@ +import UserCard from '@code/playground-ui/src/UserCard'; +import { UserProps } from '@code/spicedb-common/src/authn/user'; +import Avatar from '@material-ui/core/Avatar'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; +import Typography from '@material-ui/core/Typography'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import ExitToApp from '@material-ui/icons/ExitToApp'; +import React from 'react'; +import { DataStore } from '../services/datastore'; +import { ProblemService } from '../services/problem'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + userAvatar: { + width: theme.spacing(3), + height: theme.spacing(3), + }, + }) +); + +/** + * UserDisplayAndDeploy is the UI for displaying the currently logged in user and the deploy + * button. + */ +export function UserDisplayAndDeploy(props: { + problemService: ProblemService; + datastore: DataStore; + user: UserProps; + handleLogout: () => void; +}) { + return ( +
+ +
+ ); +} + +function UserMenuAndIcon(props: { user: UserProps; handleLogout: () => void }) { + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + const classes = useStyles({ prefersDarkMode: prefersDarkMode }); + + const user = props.user; + + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleProfileMenuOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleMenuClose = () => { + setAnchorEl(null); + }; + + const isProfileMenuOpen = Boolean(anchorEl); + const renderProfileMenu = ( + + + + + + + + + + Sign Out + + + ); + + return ( + <> + + + + {renderProfileMenu} + + ); +} diff --git a/playground/src/components/ValidationButton.tsx b/playground/src/components/ValidationButton.tsx new file mode 100644 index 0000000..44b6576 --- /dev/null +++ b/playground/src/components/ValidationButton.tsx @@ -0,0 +1,152 @@ +import { DeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import Button from '@material-ui/core/Button'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import { fade } from '@material-ui/core/styles/colorManipulator'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import CheckCircleOutlineIcon from '@material-ui/icons/CheckCircleOutline'; +import ErrorIcon from '@material-ui/icons/Error'; +import PlayCircleFilledIcon from '@material-ui/icons/PlayCircleFilled'; +import clsx from 'clsx'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { DataStore } from '../services/datastore'; +import { ValidationState, ValidationStatus } from '../services/validation'; +import { TourElementClass } from './GuidedTour'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + gcm: { + color: 'green', + display: 'inherit', + }, + rem: { + color: 'red', + display: 'inherit', + }, + gray: { + color: 'gray', + display: 'inherit', + }, + lastRun: { + display: 'grid', + gridTemplateColumns: 'auto 150px', + alignItems: 'center', + columnGap: theme.spacing(1), + backgroundColor: 'rgba(255, 255, 255, 0.05)', + height: '100%', + padding: '4px', + paddingLeft: '8px', + }, + validated: { + backgroundColor: fade(theme.palette.success.light, 0.2), + }, + validationError: { + backgroundColor: fade(theme.palette.error.light, 0.2), + }, + validationDisplay: { + display: 'grid', + gridTemplateColumns: 'auto auto', + alignItems: 'center', + columnGap: theme.spacing(1), + }, + }) +); + +export function ValidateButton(props: { + conductValidation: () => void; + datastore: DataStore; + validationState: ValidationState; + developerService: DeveloperService; +}) { + const validated = + props.validationState.status === ValidationStatus.VALIDATED || + props.validationState.status === ValidationStatus.VALIDATION_ERROR; + const upToDate = + validated && + props.validationState.validationDatastoreIndex === + props.datastore.currentIndex(); + + const classes = useStyles(); + + return ( +
+
+ + {upToDate && + props.validationState.status === ValidationStatus.VALIDATED && + 'Validated!'} + {upToDate && + props.validationState.status === ValidationStatus.VALIDATION_ERROR && + 'Failed to Validate'} + {props.validationState.status === ValidationStatus.CALL_ERROR && + 'Dev service loading'} + {props.validationState.status !== ValidationStatus.CALL_ERROR && + !upToDate && + 'Validation not run'} +
+ +
+ ); +} + +export function ValidationIcon(props: { + small?: boolean; + datastore: DataStore; + validationState: ValidationState; +}) { + const classes = useStyles(); + if ( + props.validationState.status === ValidationStatus.VALIDATED && + props.datastore.currentIndex() === + props.validationState.validationDatastoreIndex + ) { + return ( + + + + ); + } + + if ( + props.validationState.status === ValidationStatus.VALIDATION_ERROR && + props.datastore.currentIndex() === + props.validationState.validationDatastoreIndex + ) { + return ( + + + + ); + } + + return ( + + + + ); +} diff --git a/playground/src/components/fonts.css b/playground/src/components/fonts.css new file mode 100644 index 0000000..fbed141 --- /dev/null +++ b/playground/src/components/fonts.css @@ -0,0 +1 @@ +@import url('https://fonts.googleapis.com/css?family=Inter'); diff --git a/playground/src/components/panels/base/common.tsx b/playground/src/components/panels/base/common.tsx new file mode 100644 index 0000000..a54be47 --- /dev/null +++ b/playground/src/components/panels/base/common.tsx @@ -0,0 +1,101 @@ +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import 'react-reflex/styles.css'; +import { DataStore } from '../../../services/datastore'; +import { Services } from '../../../services/services'; + +/** + * Panel defines a single panel found in the panel display component. + */ +export interface Panel { + /** + * id is the unique ID for the panel. Must be stable across loads. + */ + id: string + + /** + * summary is the React tag to render for displaying the summary of the panel. + */ + summary: (props: PanelSummaryProps) => JSX.Element + + /** + * content is the React tag to render for displaying the contents of the panel. + */ + content: (props: PanelProps) => JSX.Element +} + +/** + * PanelProps are the props passed to all panels content tags. + */ +export interface PanelProps { + datastore: DataStore + services: Services + location: L +} + +/** + * PanelSummaryProps are the props passed to all panel summary tags. + */ +export interface PanelSummaryProps { + services: Services + location: L +} + +/** + * useSummaryStyles are common styles used by panel summary components. + */ +export const useSummaryStyles = makeStyles((theme: Theme) => + createStyles({ + throbber: { + color: theme.palette.text.primary, + }, + summaryBar: { + display: 'grid', + paddingLeft: theme.spacing(1), + paddingRight: theme.spacing(1), + columnGap: theme.spacing(1), + alignItems: 'center', + }, + badge: { + display: 'inline-flex', + padding: theme.spacing(0.5), + borderRadius: '6px', + width: '1.5em', + height: '1.5em', + alignItems: 'center', + justifyContent: 'center', + fontSize: '85%', + backgroundColor: theme.palette.divider, + color: theme.palette.getContrastText(theme.palette.divider), + }, + successBadge: { + backgroundColor: theme.palette.success.dark, + color: theme.palette.getContrastText(theme.palette.success.dark), + }, + caveatedBadge: { + backgroundColor: '#8787ff', + color: theme.palette.getContrastText('#8787ff'), + }, + invalidBadge: { + backgroundColor: theme.palette.warning.dark, + color: theme.palette.getContrastText(theme.palette.warning.dark), + }, + failBadge: { + backgroundColor: theme.palette.error.dark, + color: theme.palette.getContrastText(theme.palette.error.dark), + }, + checkTab: { + display: 'grid', + alignItems: 'center', + }, + checkTabWithItems: { + gridTemplateColumns: 'auto auto auto auto auto', + columnGap: '10px', + }, + problemTab: { + display: 'grid', + gridTemplateColumns: 'auto auto', + columnGap: '10px', + alignItems: 'center', + }, + }) +); diff --git a/playground/src/components/panels/base/components.tsx b/playground/src/components/panels/base/components.tsx new file mode 100644 index 0000000..60d14c4 --- /dev/null +++ b/playground/src/components/panels/base/components.tsx @@ -0,0 +1,252 @@ +import TabPanel from '@code/playground-ui/src/TabPanel'; +import { Button, Tooltip, Typography } from '@material-ui/core'; +import AppBar from '@material-ui/core/AppBar'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import IconButton from '@material-ui/core/IconButton'; +import Tab from '@material-ui/core/Tab'; +import Tabs from '@material-ui/core/Tabs'; +import Toolbar from '@material-ui/core/Toolbar'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import CloseIcon from '@material-ui/icons/Close'; +import React, { useCallback } from 'react'; +import { DataStore } from '../../../services/datastore'; +import { Services } from '../../../services/services'; +import { Panel, useSummaryStyles } from './common'; +import { LocationData, PanelsCoordinator } from './coordinator'; + +export const SUMMARY_BAR_HEIGHT = 48; // Pixels + +/** + * PanelSummaryBar is the summary bar displayed when a panel display is closed. + */ +export function PanelSummaryBar(props: { + location: L; + coordinator: PanelsCoordinator; + services: Services; + disabled?: boolean | undefined; + overrideSummaryDisplay?: React.ReactChild; +}) { + const classes = useSummaryStyles(); + + const coordinator = props.coordinator; + const panels = + props.overrideSummaryDisplay === undefined + ? coordinator.panelsInLocation(props.location) + : []; + + return ( + + ) => 'auto') + .join(' ')} 1fr auto`, + }} + variant="dense" + > + {props.overrideSummaryDisplay !== undefined && + props.overrideSummaryDisplay} + {panels.map((panel: Panel) => { + // NOTE: Using this as a tag here is important for React's state system. Otherwise, + // it'll run hooks outside of the normal flow, which breaks things. + const Summary = panel.summary; + return ( + + ); + })} + + + {props.services.problemService.isUpdating && ( + + )} + + + + ); +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + validationToolBar: { + display: 'grid', + gridTemplateColumns: '1fr auto auto', + width: '100%', + padding: 0, + paddingRight: theme.spacing(1), + }, + apiOutput: { + fontFamily: 'Roboto Mono, monospace', + padding: theme.spacing(2), + }, + tabContent: { + overflow: 'auto', + borderRadius: 0, + height: '100%', + }, + notRun: { + color: theme.palette.grey[500], + }, + link: { + color: theme.palette.text.primary, + }, + validationErrorContainer: { + padding: theme.spacing(1), + marginBottom: theme.spacing(1), + }, + validationErrorContext: { + padding: theme.spacing(1), + backgroundColor: theme.palette.background.default, + }, + noPanels: { + padding: theme.spacing(2), + textAlign: 'center', + }, + }) +); + +const TOOLBAR_HEIGHT = 48; // Pixels + +/** + * PanelDisplay displays the panels in a specific location. + */ +export function PanelDisplay( + props: { + location: L; + coordinator: PanelsCoordinator; + datastore: DataStore; + services: Services; + } & { + dimensions?: { width: number; height: number }; + } +) { + const classes = useStyles(); + const coordinator = props.coordinator; + + const currentTabName = coordinator.getActivePanel(props.location)?.id || ''; + + const handleChangeTab = useCallback( + (event: React.ChangeEvent<{}>, selectedPanelId: string) => { + coordinator.setActivePanel(selectedPanelId, props.location); + }, + [coordinator, props.location] + ); + + const panels = coordinator.panelsInLocation(props.location); + const adjustedDimensions = props.dimensions + ? { + width: props.dimensions.width, + height: props.dimensions.height - TOOLBAR_HEIGHT, + } + : undefined; + + const contentProps = { + ...props, + dimensions: adjustedDimensions, + }; + + return ( +
+ + + + {panels.map((panel: Panel) => { + // NOTE: Using this as a tag here is important for React's state system. Otherwise, + // it'll run hooks outside of the normal flow, which breaks things. + const Summary = panel.summary; + return ( + } + /> + ); + })} + + + + {currentTabName && + coordinator.listLocations().map((locData: LocationData) => { + if (locData.location === props.location) { + return
; + } + return ( + + + coordinator.showPanel( + coordinator.getActivePanel(props.location)!, + locData.location + ) + } + > + {locData.metadata.icon} + + + ); + })} + + + coordinator.closeDisplay(props.location)} + > + + + + + + {panels.map((panel: Panel) => { + // NOTE: Using this as a tag here is important for React's state system. Otherwise, + // it'll run hooks outside of the normal flow, which breaks things. + const Content = panel.content; + const height = + props.dimensions?.height ?? 0 >= 48 + ? (props.dimensions?.height ?? 0) - 48 + : 'auto'; + + return ( + + {currentTabName === panel.id && } + + ); + })} + + {panels.length === 0 && ( + + No Panels are attached here + + )} +
+ ); +} diff --git a/playground/src/components/panels/base/coordinator.tsx b/playground/src/components/panels/base/coordinator.tsx new file mode 100644 index 0000000..85d29fb --- /dev/null +++ b/playground/src/components/panels/base/coordinator.tsx @@ -0,0 +1,336 @@ +import { useState } from "react"; +import { Panel } from "./common"; + +/** + * LocationData is a location and its metadata. + */ +export interface LocationData { + location: L + metadata: PanelLocation +} + +/** + * PanelsCoordinator defines the interface for the panels coordinator. + */ +export interface PanelsCoordinator { + /** + * panelsInLocation returns all panels found in a specific location. + */ + panelsInLocation: (location: L) => Panel[]; + + /** + * showPanel displays that panel, moving it to the correct location if necessary. + */ + showPanel: (panel: Panel, location: L) => void; + + /** + * getActivePanel returns the active panel in a specific location. + */ + getActivePanel: (location: L) => Panel | undefined; + + /** + * setActivePanel sets the active panel for a location. Moves the panel to the location + * if necessary. + */ + setActivePanel: (panelId: string, location: L) => void; + + /** + * isDisplayVisible returns true if the display for a specific location is currently + * visible. + */ + isDisplayVisible: (location: L) => boolean; + + /** + * closeDisplay marks a display location as collapsed. + */ + closeDisplay: (location: L) => void; + + /** + * hasPanels returns true if the specified location has any panels. + */ + hasPanels: (location: L) => boolean; + + /** + * listLocations lists all the locations defined. + */ + listLocations: () => LocationData[]; +} + +/** + * PanelLocation defines a location for a panel. + */ +export interface PanelLocation { + /** + * title is the human-readable title for the location. + */ + title: string + + /** + * icon is the icon to render for this location. + */ + icon: React.ReactNode +} + +export interface PanelCoordinatorProps { + /** + * panels are the panels defined. + */ + panels: Panel[] + + /** + * locations are the locations defined. + */ + locations: Record + + /** + * defaultLocation is the location in which to place panels by default. + */ + defaultLocation: L + + /** + * autoCloseDisplayWhenEmpty, if true, specifes that a display should be closed + * when it becomes empty. + */ + autoCloseDisplayWhenEmpty?: boolean +} + +interface CoordinatorState { + panelLocations: Record + displaysVisible: Record + activeTabs: Record +} + +const COORDINATOR_STATE_KEY = 'panel-coordinator-state'; + +/** + * usePanelsCoordinator creates a coordinator for user with PanelsDisplay's and PanelsSummaryBar's. + * + * Example: + + ``` + enum SomeLocationEnum { + FIRST = 'first', + SECOND = 'second', + THIRD = 'third', + } + + const panels: Panel[] = [ + { + id: 'foo', + summary: FooSummary, + content: FooPanel, + }, + { + id: 'bar', + summary: BarSummary, + content: BarPanel, + }, + ]; + + const coordinator = usePanelsCoordinator({ + panels: props.panels, + locations: { + [SomeLocationEnum.FIRST]: { + title: 'First', + icon: + }, + [ReflexedPanelLocation.SECOND]: { + title: 'Second', + icon: + }, + [ReflexedPanelLocation.THIRD]: { + title: 'Special Panel', + icon: + } + }, + defaultLocation: SomeLocationEnum.THIRD + }); + + + location={ReflexedPanelLocation.FIRST} + coordinator={coordinator} + services={props.services} + datastore={props.datastore} /> + ``` + */ +export function usePanelsCoordinator(props: PanelCoordinatorProps): PanelsCoordinator { + const [coordinatorState, internalSetCoordinatorState] = useState>(() => { + // Try to parse from local storage. + try { + const foundState = JSON.parse(localStorage.getItem(COORDINATOR_STATE_KEY) ?? ''); + if ('panelLocations' in foundState && 'displaysVisible' in foundState && 'activeTabs' in foundState) { + if (Object.keys(foundState.panelLocations).length === props.panels.length) { + return foundState; + } + } + } catch (e) { + // Do nothing. + } + + const locations: Record = {}; + props.panels.forEach((panel: Panel) => { + locations[panel.id] = props.defaultLocation; + }); + + const displays: Record = {} as Record; + Object.keys(props.locations).forEach((locationStr: string) => { + displays[(locationStr as unknown) as L] = false; + }); + + return { + panelLocations: locations, + displaysVisible: displays, + activeTabs: {} as Record, + } + }); + + const setCoordinatorStateAndSave = (state: CoordinatorState) => { + internalSetCoordinatorState(state); + localStorage.setItem(COORDINATOR_STATE_KEY, JSON.stringify(state)); + }; + + const panelsInLocation = (location: L, state?: CoordinatorState) => { + const checkState = state ?? coordinatorState; + return props.panels.filter((panel: Panel) => { + return checkState.panelLocations[panel.id] === location; + }); + }; + + const showPanel = (panel: Panel, location: L) => { + setActivePanel(panel.id, location); + }; + + const getActivePanel = (location: L) => { + const allowedPanels = panelsInLocation(location); + return allowedPanels.find((panel: Panel) => panel.id === coordinatorState.activeTabs[location]); + }; + + const setActivePanel = (panelId: string, location: L) => { + let updatedState = { + ...coordinatorState + }; + + const existingLocation = coordinatorState.panelLocations[panelId]; + if (existingLocation !== location) { + // Update the active tab for the location. + const active = getActivePanel(existingLocation); + if (active?.id === panelId) { + const panels = panelsInLocation(existingLocation).filter((found: Panel) => found.id !== panelId); + if (panels.length) { + updatedState = { + ...updatedState, + activeTabs: { + ...updatedState.activeTabs, + [existingLocation]: panels[0].id + } + } + } else { + updatedState = { + ...updatedState, + activeTabs: { + ...updatedState.activeTabs, + [existingLocation]: undefined + } + } + } + } + + updatedState = { + ...updatedState, + panelLocations: { + ...updatedState.panelLocations, + [panelId]: location + } + } + + // Check for auto-close. + if (props.autoCloseDisplayWhenEmpty === true) { + Object.keys(props.locations).forEach((locationStr: string) => { + const location = locationStr as L; + if (!panelsInLocation(location, updatedState).length) { + updatedState = { + ...updatedState, + displaysVisible: { + ...coordinatorState.displaysVisible, + [location]: false, + } + }; + } + }); + } + } + + updatedState = { + ...updatedState, + activeTabs: { + ...updatedState.activeTabs, + [location]: panelId + } + } + + if (!isDisplayVisible(location)) { + updatedState = { + ...updatedState, + displaysVisible: { + ...updatedState.displaysVisible, + [location]: true, + } + } + } + + setCoordinatorStateAndSave(updatedState); + }; + + const closeDisplay = (location: L) => { + let updatedState = { + ...coordinatorState, + displaysVisible: { + ...coordinatorState.displaysVisible, + [location]: false, + } + }; + + let updatedLocations = { ...updatedState.panelLocations }; + Object.keys(coordinatorState.panelLocations).forEach((panelId: string) => { + if (coordinatorState.panelLocations[panelId] === location) { + updatedLocations[panelId] = props.defaultLocation; + } + }); + + updatedState = { + ...updatedState, + panelLocations: updatedLocations + }; + + setCoordinatorStateAndSave(updatedState); + }; + + const isDisplayVisible = (location: L) => { + return coordinatorState.displaysVisible[location]; + }; + + const hasPanels = (location: L) => { + return panelsInLocation(location).length > 0; + }; + + const listLocations = () => { + return Object.keys(props.locations).map((locationStr: string) => { + const locationKey = locationStr as L; + return { + location: locationKey, + metadata: props.locations[locationKey], + } + }); + }; + + return { + panelsInLocation: panelsInLocation, + hasPanels: hasPanels, + showPanel: showPanel, + getActivePanel: getActivePanel, + setActivePanel: setActivePanel, + closeDisplay: closeDisplay, + isDisplayVisible: isDisplayVisible, + listLocations: listLocations, + }; +} \ No newline at end of file diff --git a/playground/src/components/panels/base/reflexed.tsx b/playground/src/components/panels/base/reflexed.tsx new file mode 100644 index 0000000..3a106e5 --- /dev/null +++ b/playground/src/components/panels/base/reflexed.tsx @@ -0,0 +1,314 @@ +import { createStyles, makeStyles, Theme } from "@material-ui/core/styles"; +import HorizontalSplitIcon from "@material-ui/icons/HorizontalSplit"; +import VerticalSplitIcon from "@material-ui/icons/VerticalSplit"; +import React, { PropsWithChildren, useEffect, useState } from "react"; +import { + HandlerProps, + ReflexContainer, + ReflexElement, + ReflexSplitter, +} from "react-reflex"; +import "react-reflex/styles.css"; +import { DataStore } from "../../../services/datastore"; +import { Services } from "../../../services/services"; +import { Panel } from "./common"; +import { + PanelDisplay, + PanelSummaryBar, + SUMMARY_BAR_HEIGHT, +} from "./components"; +import { PanelsCoordinator, usePanelsCoordinator } from "./coordinator"; + +const HORIZONTAL_FLEX_KEY = "horizontal-flex"; +const VERTICAL_FLEX_KEY = "vertical-flex"; + +const DEFAULT_VERTICAL_FLEX = 0.3; +const DEFAULT_HORIZONTAL_FLEX = 0; + +const MINIMUM_HORIZONTAL_FLEX = 0.2; +const MINIMUM_VERTICAL_FLEX = 0.2; + +const MINIMUM_HORIZONTAL_SIZE = 200; +const MINIMUM_VERTICAL_SIZE = 200; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + noOverflow: { + overflow: "hidden !important", + }, + }) +); + +export enum ReflexedPanelLocation { + HORIZONTAL = "h", + VERTICAL = "v", +} + +interface CommonProps { + datastore: DataStore; + services: Services; +} + +interface PanelDefProps { + panels: Panel[]; + extraProps?: E | undefined; + disabled?: boolean | undefined; + overrideSummaryDisplay?: React.ReactChild; +} + +interface Dimensions { + width: number; + height: number; +} + +interface DimensionsProp { + dimensions?: Dimensions | undefined; +} + +/** + * ReflexedPanelDisplay is a panel display component with two pre-defined panels (horizontal + * and vertical), with the horizonal being collapsed into a summary bar when not visible, and with + * automatic support for user-resizing. + */ +export function ReflexedPanelDisplay( + props: PropsWithChildren & CommonProps> +) { + const classes = useStyles(); + + const coordinator = usePanelsCoordinator({ + panels: props.panels, + locations: { + [ReflexedPanelLocation.HORIZONTAL]: { + title: "Bottom", + icon: , + }, + [ReflexedPanelLocation.VERTICAL]: { + title: "Side", + icon: , + }, + }, + defaultLocation: ReflexedPanelLocation.HORIZONTAL, + autoCloseDisplayWhenEmpty: true, + }); + + const horizontalDisplayVisible = + coordinator.isDisplayVisible(ReflexedPanelLocation.HORIZONTAL) && + !props.disabled; + + const cachedHorizontalFlex = parseFloat( + localStorage.getItem(HORIZONTAL_FLEX_KEY) ?? + DEFAULT_HORIZONTAL_FLEX.toString() + ); + const [horizontalFlex, setHorizontalFlex] = useState( + horizontalDisplayVisible + ? Math.max(cachedHorizontalFlex, MINIMUM_HORIZONTAL_FLEX) + : 0 + ); + + const handleHorizontalResize = (event: HandlerProps) => { + const { flex } = event.component.props; + if (!flex || flex < MINIMUM_HORIZONTAL_FLEX) { + return; + } + + setHorizontalFlex(flex!); + localStorage.setItem(HORIZONTAL_FLEX_KEY, flex!.toString()); + }; + + useEffect(() => { + if (horizontalDisplayVisible && horizontalFlex < MINIMUM_HORIZONTAL_FLEX) { + setHorizontalFlex( + Math.max(cachedHorizontalFlex, MINIMUM_HORIZONTAL_FLEX) + ); + } else if (!horizontalDisplayVisible && horizontalFlex > 0) { + setHorizontalFlex(0); + } + }, [horizontalFlex, horizontalDisplayVisible, cachedHorizontalFlex]); + + return ( +
+ + + coordinator={coordinator} {...props} /> + + + {horizontalDisplayVisible && } + + 0 ? MINIMUM_HORIZONTAL_SIZE : undefined} + propagateDimensionsRate={50} + propagateDimensions={true} + onResize={handleHorizontalResize} + > + {horizontalDisplayVisible ? ( + + {...props.extraProps} + location={ReflexedPanelLocation.HORIZONTAL} + coordinator={coordinator} + services={props.services} + datastore={props.datastore} + /> + ) : ( + + )} + + +
+ ); +} + +function MainDisplayWithSummaryBar( + props: PropsWithChildren< + { + coordinator: PanelsCoordinator; + extraProps?: E | undefined; + disabled?: boolean | undefined; + } & CommonProps & + DimensionsProp + > +) { + const coordinator = props.coordinator; + const displayVisible = + coordinator.isDisplayVisible(ReflexedPanelLocation.HORIZONTAL) && + !props.disabled; + + /* + * NOTE: The comparison to window.innerHeight below ensures that we only render the + * summary display once the height information has been propagated by the parent + * reflex component. Otherwise, it can show an annoying briefly "flash" of the bottom + * summary bar. + */ + const HEIGHT_COMPARISON = 10 + 144; // 144 is the max AppBar height. + const displaySummaryBar = + !displayVisible && + coordinator.hasPanels(ReflexedPanelLocation.HORIZONTAL) && + window.innerHeight - (props.dimensions?.height ?? 0) < HEIGHT_COMPARISON; + + return ( +
+ {...props} /> + {displaySummaryBar && ( + + location={ReflexedPanelLocation.HORIZONTAL} + {...props} + /> + )} +
+ ); +} + +type EnrichedChildren = { + children?: React.ReactNode; +} & DimensionsProp; + +function MainDisplayAndVertical( + props: PropsWithChildren< + { + coordinator: PanelsCoordinator; + extraProps?: E | undefined; + } & CommonProps & + DimensionsProp + > +) { + const classes = useStyles(); + + const coordinator = props.coordinator; + const verticalDisplayVisible = coordinator.isDisplayVisible( + ReflexedPanelLocation.VERTICAL + ); + const horizontalDisplayVisible = coordinator.isDisplayVisible( + ReflexedPanelLocation.HORIZONTAL + ); + + const cachedVerticalFlex = parseFloat( + localStorage.getItem(VERTICAL_FLEX_KEY) ?? DEFAULT_VERTICAL_FLEX.toString() + ); + const [verticalFlex, setVerticalFlex] = useState( + verticalDisplayVisible + ? Math.max(cachedVerticalFlex, MINIMUM_VERTICAL_FLEX) + : 0 + ); + + useEffect(() => { + if (verticalDisplayVisible && verticalFlex < MINIMUM_VERTICAL_FLEX) { + setVerticalFlex(Math.max(cachedVerticalFlex, MINIMUM_VERTICAL_FLEX)); + } else if (!verticalDisplayVisible && verticalFlex > 0) { + setVerticalFlex(0); + } + }, [verticalFlex, verticalDisplayVisible, cachedVerticalFlex]); + + const handleVerticalResize = (event: HandlerProps) => { + const { flex } = event.component.props; + if (!flex || flex < MINIMUM_VERTICAL_FLEX) { + return; + } + + setVerticalFlex(flex!); + localStorage.setItem(VERTICAL_FLEX_KEY, flex!.toString()); + }; + + const contentHeight = + horizontalDisplayVisible || + !coordinator.hasPanels(ReflexedPanelLocation.HORIZONTAL) + ? props.dimensions?.height ?? 0 + : (props.dimensions?.height ?? 0) - SUMMARY_BAR_HEIGHT; + const contentDimensions: Dimensions | undefined = props.dimensions + ? { width: props.dimensions.width, height: contentHeight } + : undefined; + + const adjustedChildren = React.Children.map(props.children, (child) => { + // Based on: https://stackoverflow.com/a/55486160 + if (!React.isValidElement(child)) { + return child; + } + + const elementChild: React.ReactElement = child; + return React.cloneElement( + elementChild, + { dimensions: contentDimensions, ...child.props }, + null + ); + }); + + return ( +
+ + + {adjustedChildren} + + + {verticalDisplayVisible && } + + 0 ? MINIMUM_VERTICAL_SIZE : undefined} + propagateDimensionsRate={200} + propagateDimensions={true} + onResize={handleVerticalResize} + > + + {...props.extraProps} + location={ReflexedPanelLocation.VERTICAL} + coordinator={coordinator} + services={props.services} + datastore={props.datastore} + /> + + +
+ ); +} diff --git a/playground/src/components/panels/errordisplays.tsx b/playground/src/components/panels/errordisplays.tsx new file mode 100644 index 0000000..21d39ce --- /dev/null +++ b/playground/src/components/panels/errordisplays.tsx @@ -0,0 +1,152 @@ +import { + DeveloperError, + DeveloperError_Source, +} from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import Alert from '@material-ui/lab/Alert'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { Link } from 'react-router-dom'; +import { DataStoreItemKind, DataStorePaths } from '../../services/datastore'; + +var _ = React; + +export const ERROR_SOURCE_TO_ITEM = { + [DeveloperError_Source.SCHEMA]: DataStoreItemKind.SCHEMA, + [DeveloperError_Source.RELATIONSHIP]: DataStoreItemKind.RELATIONSHIPS, + [DeveloperError_Source.ASSERTION]: DataStoreItemKind.ASSERTIONS, + [DeveloperError_Source.VALIDATION_YAML]: DataStoreItemKind.EXPECTED_RELATIONS, + [DeveloperError_Source.CHECK_WATCH]: undefined, + [DeveloperError_Source.UNKNOWN_SOURCE]: undefined, +}; + +const useErrorDisplayStyles = makeStyles((theme: Theme) => + createStyles({ + validationError: { + border: 0, + }, + foundVia: { + marginTop: theme.spacing(1), + }, + foundViaList: { + margin: 0, + fontFamily: 'Roboto Mono, monospace', + listStyleType: 'none', + '& li::after': { + content: '" →"', + }, + '& li:last-child::after': { + content: '""', + }, + }, + editorContainer: { + display: 'grid', + alignItems: 'center', + gridTemplateColumns: 'auto 1fr', + }, + dot: { + display: 'inline-block', + marginRight: theme.spacing(1), + borderRadius: '50%', + width: '8px', + height: '8px', + }, + progress: { + color: theme.palette.text.primary, + }, + success: { + color: theme.palette.success.main, + }, + gray: { + color: theme.palette.grey[500], + }, + warning: { + color: theme.palette.warning.main, + }, + }) +); + +export function DeveloperErrorDisplay(props: { error: DeveloperError }) { + const classes = useErrorDisplayStyles(); + return ( + + {props.error.message} + {!!props.error.path && props.error.path.length > 0 && ( +
+ Found Via: +
    + {props.error.path.map((item: string, index: number) => { + return
  • {item}
  • ; + })} +
+
+ )} +
+ ); +} + +const useSourceDisplayStyles = makeStyles((theme: Theme) => + createStyles({ + link: { + color: theme.palette.text.primary, + }, + validationErrorContext: { + padding: theme.spacing(1), + backgroundColor: theme.palette.background.default, + }, + }) +); + +export function DeveloperSourceDisplay(props: { error: DeveloperError }) { + const ve = props.error; + const classes = useSourceDisplayStyles(); + + // TODO: unify with error source above. + return ( +
+ {ve.source === DeveloperError_Source.SCHEMA && ( +
+ In{' '} + + Schema + + : +
+ )} + {ve.source === DeveloperError_Source.ASSERTION && ( +
+ In{' '} + + Assertions + + : +
+ )} + {ve.source === DeveloperError_Source.RELATIONSHIP && ( +
+ In{' '} + + Test Data + + : +
+ )} + {ve.source === DeveloperError_Source.VALIDATION_YAML && ( +
+ In{' '} + + Expected Relations + + : +
+ )} +
+ ); +} diff --git a/playground/src/components/panels/panels.tsx b/playground/src/components/panels/panels.tsx new file mode 100644 index 0000000..e7187d0 --- /dev/null +++ b/playground/src/components/panels/panels.tsx @@ -0,0 +1,3 @@ +import { ReflexedPanelLocation } from "./base/reflexed"; + +export type PlaygroundPanelLocation = ReflexedPanelLocation; \ No newline at end of file diff --git a/playground/src/components/panels/problems.tsx b/playground/src/components/panels/problems.tsx new file mode 100644 index 0000000..7eaef6b --- /dev/null +++ b/playground/src/components/panels/problems.tsx @@ -0,0 +1,127 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import { RelationshipFound } from '@code/spicedb-common/src/parsing'; +import { DeveloperError } from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import Paper from '@material-ui/core/Paper'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; +import clsx from 'clsx'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { Link } from 'react-router-dom'; +import { DataStorePaths } from '../../services/datastore'; +import { TourElementClass } from '../GuidedTour'; +import { PanelProps, PanelSummaryProps, useSummaryStyles } from './base/common'; +import { DeveloperErrorDisplay, DeveloperSourceDisplay } from './errordisplays'; +import { PlaygroundPanelLocation } from './panels'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + apiOutput: { + fontFamily: 'Roboto Mono, monospace', + padding: theme.spacing(2), + }, + link: { + color: theme.palette.text.primary, + }, + errorContainer: { + padding: theme.spacing(1), + marginBottom: theme.spacing(1), + display: 'grid', + gridTemplateRows: '1fr auto', + width: '100%', + columnGap: theme.spacing(2), + }, + validationErrorContext: { + padding: theme.spacing(1), + backgroundColor: theme.palette.background.default, + }, + tupleError: { + padding: theme.spacing(1), + }, + helpButton: {}, + }) +); + +/** + * ProblemsSummary displays a summary of the problems found. + */ +export function ProblemsSummary( + props: PanelSummaryProps +) { + const classes = useSummaryStyles(); + const problemCount = props.services.problemService.problemCount; + + return ( +
+ + } + title="Problems" + /> + 0, + })} + > + {problemCount} + +
+ ); +} + +export function ProblemsPanel(props: PanelProps) { + const classes = useStyles(); + + return ( +
+ {!props.services.problemService.hasProblems && ( + No problems found + )} + {props.services.problemService.invalidRelationships.map( + (invalid: RelationshipFound, index: number) => { + if (!('errorMessage' in invalid.parsed)) { + return; + } + + return ( + +
+
+ In{' '} + + Test Relationships + + : +
+
+ Invalid relationship {invalid.text} on line{' '} + {invalid.lineNumber + 1}: {invalid.parsed.errorMessage} +
+
+
+ ); + } + )} + {props.services.problemService.requestErrors.map( + (de: DeveloperError, index: number) => { + return ( + +
+ + +
+
+ ); + } + )} +
+ ); +} diff --git a/playground/src/components/panels/terminal.tsx b/playground/src/components/panels/terminal.tsx new file mode 100644 index 0000000..e796971 --- /dev/null +++ b/playground/src/components/panels/terminal.tsx @@ -0,0 +1,345 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import { mergeRelationshipsStringAndComments } from '@code/spicedb-common/src/parsing'; +import { TerminalSection } from '@code/spicedb-common/src/services/zedterminalservice'; +import { faTerminal } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import Input from '@material-ui/core/Input'; +import InputAdornment from '@material-ui/core/InputAdornment'; +import LinearProgress from '@material-ui/core/LinearProgress'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import { Alert, Color } from '@material-ui/lab'; +import Convert from 'ansi-to-html'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import 'react-reflex/styles.css'; +import useDeepCompareEffect from 'use-deep-compare-effect'; +import { DataStoreItemKind } from '../../services/datastore'; +import { PanelProps, PanelSummaryProps } from './base/common'; +import { PlaygroundPanelLocation } from './panels'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + terminalOutputDisplay: { + fontFamily: 'Roboto Mono, monospace', + overflowY: 'auto', + }, + terminalOutput: { + padding: theme.spacing(1), + margin: theme.spacing(1), + backgroundColor: theme.palette.getContrastText( + theme.palette.text.primary + ), + border: '1px solid transparent', + borderColor: theme.palette.divider, + }, + input: { + width: '100%', + fontFamily: 'Roboto Mono, monospace', + }, + root: { + padding: theme.spacing(1), + position: 'absolute', + top: '0px', + left: '0px', + right: '0px', + bottom: '0px', + overflow: 'auto', + }, + loadBar: { + padding: theme.spacing(1), + display: 'grid', + gridTemplateColumns: 'auto 1fr', + columnGap: theme.spacing(1), + alignItems: 'center', + }, + }) +); + +export function TerminalSummary( + props: PanelSummaryProps +) { + return ( + } + title="Zed Terminal" + /> + ); +} + +export function TerminalPanel(props: PanelProps) { + const classes = useStyles(); + const zts = props.services.zedTerminalService!; + + useEffect(() => { + zts.start(); + }, [zts]); + + const [command, setCommand] = useState(''); + const [historyIndex, setHistoryIndex] = useState(zts.commandHistory.length); + + const datastore = props.datastore; + const endOfContainer = useRef(null); + + useDeepCompareEffect(() => { + if (endOfContainer.current) { + endOfContainer.current?.scrollIntoView(); + } + }, [zts.outputSections]); + + const handleKeyUp = (e: React.KeyboardEvent) => { + if (e.key.toLowerCase() === 'arrowup') { + const updatedHistoryIndex = historyIndex - 1; + if (updatedHistoryIndex < 0) { + return; + } + + setCommand(zts.commandHistory[updatedHistoryIndex]); + setHistoryIndex(updatedHistoryIndex); + } + + if (e.key.toLowerCase() === 'arrowdown') { + const updatedHistoryIndex = historyIndex + 1; + if (updatedHistoryIndex >= zts.commandHistory.length) { + setCommand(''); + return; + } + + setCommand(zts.commandHistory[updatedHistoryIndex]); + setHistoryIndex(updatedHistoryIndex); + } + + const cmd = command.trim(); + if (e.key.toLowerCase() === 'enter' && cmd.length > 0) { + const schema = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relationshipsString = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + const [result, historyCount] = zts.runCommand( + cmd, + schema, + relationshipsString + ); + setCommand(''); + setHistoryIndex(historyCount); + + if (result?.updatedRelationships) { + const relItem = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ); + const merged = mergeRelationshipsStringAndComments( + relItem.editableContents, + result.updatedRelationships + ); + datastore.update(relItem, merged); + } + } + }; + + const handleCommandChanged = (e: React.ChangeEvent) => { + setCommand(e.target.value); + }; + + const zedState = zts.state; + const zedStateStatusDisplay = useMemo(() => { + switch (zedState.status) { + case 'initializing': + return
Initializing Terminal
; + + case 'loading': + return ( +
+ Loading Terminal: + +
+ ); + + case 'loaderror': + return ( + + Could not start the Terminal. Please make sure you have WebAssembly + enabled. + + ); + + case 'unsupported': + return ( + + Your browser does not support WebAssembly + + ); + + case 'ready': + return undefined; + } + }, [zedState, classes.loadBar]); + + const inputRef = useRef(); + + const handleRefocus = () => { + inputRef.current?.focus(); + }; + + const handleMouseUp = (event: React.MouseEvent) => { + const hasSelection = !!getSelectedTextWithin(event.target as Element); + if (!hasSelection) { + inputRef.current?.focus(); + } + }; + + // Focus the command input when the tab is shown. + useEffect(() => { + inputRef.current?.focus(); + }, []); + + return ( +
+ {zedStateStatusDisplay} + {zedState.status === 'ready' && ( + <> + + $} + onKeyUp={handleKeyUp} + value={command} + onChange={handleCommandChanged} + disableUnderline + /> +
+ + )} +
+ ); +} + +function convertStringOutput(convert: Convert, o: string, showLogs: boolean) { + let isLog = false; + if (o.startsWith('{')) { + try { + const parsed = JSON.parse(o); + isLog = parsed['is-log']; + if (isLog) { + if (!showLogs) { + return undefined; + } + + const severity: Record = { + trace: 'info', + debug: 'info', + info: 'info', + warning: 'warning', + error: 'error', + }; + return ( + + {Object.keys(parsed).map((k) => { + if (k === 'is-log') { + return undefined; + } + + return ( + + {k}: {JSON.stringify(parsed[k])}  + + ); + })} + + ); + } + } catch (e) { + // Do nothing. + } + } + + const output = + convert.toHtml(o.replaceAll(' ', '\xa0').replaceAll('\t', '\xa0\xa0')) || + ' '; + return
; +} + +function TerminalOutputDisplay(props: { + sections: TerminalSection[]; + showLogs?: boolean; + onRefocus?: () => void; +}) { + const classes = useStyles(); + const convert = new Convert({ + escapeXML: true, + }); + const children = props.sections.flatMap( + (section: TerminalSection): React.ReactNode => { + if ('command' in section) { + return
$ {section.command}
; + } else { + return ( +
+ {section.output + .split('\n') + .map((o) => + convertStringOutput(convert, o, props.showLogs ?? false) + )} +
+ ); + } + } + ); + const handleMouseUp = (event: React.MouseEvent) => { + const hasSelection = !!getSelectedTextWithin(event.target as Element); + if (props.onRefocus && !hasSelection) { + props.onRefocus(); + } + if (hasSelection) { + event.stopPropagation(); + } + }; + + return ( +
+ {children} +
+ ); +} + +// Based on: https://stackoverflow.com/a/5801903 +function getSelectedTextWithin(el: Element) { + var selectedText = ''; + if (typeof window.getSelection != 'undefined') { + var sel = window.getSelection(), + rangeCount; + if (sel && (rangeCount = sel.rangeCount) > 0) { + var range = document.createRange(); + for (var i = 0, selRange; i < rangeCount; ++i) { + range.selectNodeContents(el); + selRange = sel.getRangeAt(i); + if ( + selRange.compareBoundaryPoints(range.START_TO_END, range) == 1 && + selRange.compareBoundaryPoints(range.END_TO_START, range) == -1 + ) { + if ( + selRange.compareBoundaryPoints(range.START_TO_START, range) == 1 + ) { + range.setStart(selRange.startContainer, selRange.startOffset); + } + if (selRange.compareBoundaryPoints(range.END_TO_END, range) == -1) { + range.setEnd(selRange.endContainer, selRange.endOffset); + } + selectedText += range.toString(); + } + } + } + } + return selectedText; +} diff --git a/playground/src/components/panels/validation.tsx b/playground/src/components/panels/validation.tsx new file mode 100644 index 0000000..702810c --- /dev/null +++ b/playground/src/components/panels/validation.tsx @@ -0,0 +1,86 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import { DeveloperError } from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { Paper } from '@material-ui/core'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import PlaylistAddCheckIcon from '@material-ui/icons/PlaylistAddCheck'; +import clsx from 'clsx'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { ValidationStatus } from '../../services/validation'; +import { PanelProps, PanelSummaryProps } from './base/common'; +import { DeveloperErrorDisplay, DeveloperSourceDisplay } from './errordisplays'; +import { PlaygroundPanelLocation } from './panels'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + apiOutput: { + fontFamily: 'Roboto Mono, monospace', + padding: theme.spacing(2), + }, + notRun: { + color: theme.palette.grey[500], + }, + validationErrorContainer: { + padding: theme.spacing(1), + marginBottom: theme.spacing(1), + }, + }) +); + +export function ValidationSummary( + props: PanelSummaryProps +) { + return ( + + } + title="Last Validation Run" + /> + ); +} + +export function ValidationPanel(props: PanelProps) { + const classes = useStyles(); + const validationState = props.services.validationService.state; + + return ( +
+ {validationState.status === ValidationStatus.NOT_RUN && ( + Validation Not Run + )} + {validationState.status === ValidationStatus.CALL_ERROR && ( + Validation Call Failed. Please try again shortly. + )} + {validationState.status === ValidationStatus.RUNNING && ( + + )} + {validationState.status === ValidationStatus.VALIDATED && ( + Validation Completed Successfully! + )} + {validationState.status === ValidationStatus.VALIDATION_ERROR && ( + + {validationState.validationErrors?.map( + (de: DeveloperError, index: number) => { + return ( + + + + + ); + } + )} + + )} +
+ ); +} diff --git a/playground/src/components/panels/visualizer.tsx b/playground/src/components/panels/visualizer.tsx new file mode 100644 index 0000000..0211429 --- /dev/null +++ b/playground/src/components/panels/visualizer.tsx @@ -0,0 +1,97 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import TenantGraph from '@code/spicedb-common/src/components/graph/TenantGraph'; +import { TextRange } from '@code/spicedb-common/src/include/protobuf-parser'; +import { RelationshipFound } from '@code/spicedb-common/src/parsing'; +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import { + createStyles, + darken, + makeStyles, + Theme, +} from '@material-ui/core/styles'; +import BubbleChartIcon from '@material-ui/icons/BubbleChart'; +import monaco from 'monaco-editor-core'; +import React from 'react'; +import 'react-reflex/styles.css'; +import { useHistory } from 'react-router-dom'; +import { + DataStoreItem, + DataStoreItemKind, + DataStorePaths, +} from '../../services/datastore'; +import { PanelProps, PanelSummaryProps } from './base/common'; +import { PlaygroundPanelLocation } from './panels'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + tenantGraphContainer: { + width: '100%', + height: '100%', + backgroundColor: theme.palette.background.default, + backgroundSize: '20px 20px', + backgroundImage: ` + linear-gradient(to right, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px), + linear-gradient(to bottom, ${darken( + theme.palette.background.default, + 0.1 + )} 1px, transparent 1px) + `, + }, + }) +); + +export function VisualizerSummary( + props: PanelSummaryProps +) { + return } title="System Visualization" />; +} + +export function VisualizerPanel( + props: PanelProps & { + dimensions?: { width: number; height: number }; + } & { + editorPosition?: monaco.Position | undefined; + currentItem?: DataStoreItem | undefined; + } +) { + const classes = useStyles(); + const currentItem = props.currentItem; + const history = useHistory(); + + const handleBrowseRequested = (range: TextRange | undefined) => { + history.push(DataStorePaths.Schema(), { + range: range, + }); + }; + + const relationships = props.services.localParseService.state.relationships + .filter((tf: RelationshipFound) => !('errorMessage' in tf.parsed)) + .map((tf: RelationshipFound) => tf.parsed) as Relationship[]; + + return ( +
+ +
+ ); +} diff --git a/playground/src/components/panels/watches.tsx b/playground/src/components/panels/watches.tsx new file mode 100644 index 0000000..d98e560 --- /dev/null +++ b/playground/src/components/panels/watches.tsx @@ -0,0 +1,723 @@ +import TabLabel from '@code/playground-ui/src/TabLabel'; +import { + ParsedPermission, + ParsedRelation, +} from '@code/spicedb-common/src/parsers/dsl/dsl'; +import { parseRelationships } from '@code/spicedb-common/src/parsing'; +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import IconButton from '@material-ui/core/IconButton'; +import Paper from '@material-ui/core/Paper'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import TextField from '@material-ui/core/TextField'; +import Tooltip from '@material-ui/core/Tooltip'; +import { + Theme, + createStyles, + makeStyles, + useTheme, +} from '@material-ui/core/styles'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import ControlPointIcon from '@material-ui/icons/ControlPoint'; +import DeleteForeverIcon from '@material-ui/icons/DeleteForever'; +import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +import HelpOutlineIcon from '@material-ui/icons/HelpOutline'; +import HighlightOffIcon from '@material-ui/icons/HighlightOff'; +import RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked'; +import RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline'; +import VisibilityIcon from '@material-ui/icons/Visibility'; +import WarningIcon from '@material-ui/icons/Warning'; +import Alert from '@material-ui/lab/Alert'; +import Autocomplete from '@material-ui/lab/Autocomplete'; +import clsx from 'clsx'; +import { + interpolateBlues, + interpolateOranges, + interpolatePurples, +} from 'd3-scale-chromatic'; +import React, { useMemo, useState } from 'react'; +import 'react-reflex/styles.css'; +import { + LiveCheckItem, + LiveCheckItemStatus, + LiveCheckService, + LiveCheckStatus, +} from '../../services/check'; +import { DataStore, DataStoreItemKind } from '../../services/datastore'; +import { LocalParseService } from '../../services/localparse'; +import { CheckDebugTraceView } from '../CheckDebugTraceView'; +import { TourElementClass } from '../GuidedTour'; +import { PanelProps, PanelSummaryProps, useSummaryStyles } from './base/common'; +import { ReflexedPanelLocation } from './base/reflexed'; +import { PlaygroundPanelLocation } from './panels'; + +var _ = React; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + validationError: { + border: 0, + }, + foundVia: { + marginTop: theme.spacing(1), + }, + foundViaList: { + margin: 0, + fontFamily: 'Roboto Mono, monospace', + listStyleType: 'none', + '& li::after': { + content: '" →"', + }, + '& li:last-child::after': { + content: '""', + }, + }, + editorContainer: { + display: 'grid', + alignItems: 'center', + gridTemplateColumns: 'auto 1fr', + }, + dot: { + display: 'inline-block', + marginRight: theme.spacing(1), + borderRadius: '50%', + width: '8px', + height: '8px', + }, + progress: { + color: theme.palette.text.primary, + }, + success: { + color: theme.palette.success.main, + }, + caveated: { + color: '#8787ff', + }, + gray: { + color: theme.palette.grey[500], + }, + warning: { + color: theme.palette.warning.main, + }, + verticalCell: { + padding: theme.spacing(1), + border: 0, + }, + }) +); + +/** + * WatchesSummary displays the a summary of the check watches. + */ +export function WatchesSummary( + props: PanelSummaryProps +) { + const classes = useSummaryStyles(); + + const liveCheckService = props.services.liveCheckService; + + const hasItems = liveCheckService.items.length > 0; + const foundItems = liveCheckService.items.filter( + (item: LiveCheckItem) => item.status === LiveCheckItemStatus.FOUND + ); + const caveatedItems = liveCheckService.items.filter( + (item: LiveCheckItem) => item.status === LiveCheckItemStatus.CAVEATED + ); + const notFoundItems = liveCheckService.items.filter( + (item: LiveCheckItem) => item.status === LiveCheckItemStatus.NOT_FOUND + ); + const invalidItems = liveCheckService.items.filter( + (item: LiveCheckItem) => item.status === LiveCheckItemStatus.INVALID + ); + const hasServerErr = !!liveCheckService.state.serverErr; + + return ( +
+ + } + title="Check Watches" + /> + {!hasServerErr && hasItems && ( + + 0, + })} + > + {foundItems.length} + + + )} + {!hasServerErr && hasItems && ( + + 0, + })} + > + {caveatedItems.length} + + + )} + {!hasServerErr && hasItems && ( + + 0, + })} + > + {invalidItems.length} + + + )} + {!hasServerErr && hasItems && ( + + 0, + })} + > + {notFoundItems.length} + + + )} + {hasServerErr && } +
+ ); +} + +export function WatchesPanel(props: PanelProps) { + const liveCheckService = props.services.liveCheckService; + const localParseService = props.services.localParseService; + const datastore = props.datastore; + const editorUpdateIndex = -1; // FIXME + + return ( + + + + + + + {props.location === ReflexedPanelLocation.HORIZONTAL && ( + <> + Resource + Permission + Subject + Context (optional) + + )} + {props.location === ReflexedPanelLocation.VERTICAL && ( + <> + Resource, Permission, Subject, Context + + )} + + + + + + + + {liveCheckService.state.status === LiveCheckStatus.PARSE_ERROR && ( + + + + + Checks not run: There is an error in the schema or test + relationships + + + + + )} + {liveCheckService.state.status === LiveCheckStatus.NEVER_RUN && ( + + + + + Developer system is currently loading + + + + + )} + {liveCheckService.state.status === LiveCheckStatus.SERVICE_ERROR && ( + + + + + {liveCheckService.state.serverErr} + + + + + )} + + {liveCheckService.items.length > 0 && + liveCheckService.items.map((item: LiveCheckItem, index: number) => { + return ( + + ); + })} + +
+
+ ); +} + +const filter = (values: (string | null)[]): string[] => { + const filtered = values.filter((v: string | null) => !!v); + const set = new Set(filtered); + const deduped: string[] = []; + set.forEach((value: string | null) => { + deduped.push(value!); + }); + return deduped; +}; + +function LiveCheckRow(props: { + location: PlaygroundPanelLocation; + service: LiveCheckService; + item: LiveCheckItem; + editorUpdateIndex: number | undefined; + datastore: DataStore; + localParseService: LocalParseService; +}) { + const classes = useStyles(); + const item = props.item; + const datastore = props.datastore; + const liveCheckService = props.service; + + const handleDeleteRow = () => { + liveCheckService.removeItem(item); + }; + + const [object, setObject] = useState(item.object); + const [action, setAction] = useState(item.action); + const [subject, setSubject] = useState(item.subject); + const [context, setContext] = useState(() => { + // Remove the `default:` prefix we add below. + if (item.context) { + return item.context.substring('default:'.length); + } + + return ''; + }); + const [isExpanded, setIsExpanded] = useState(false); + + const [objectInputValue, setObjectInputValue] = useState(item.object); + const [actionInputValue, setActionInputValue] = useState(item.action); + const [subjectInputValue, setSubjectInputValue] = useState(item.subject); + + const handleChangeObjectInput = (event: any, newValue: string) => { + setObjectInputValue(newValue); + item.object = newValue; + liveCheckService.itemUpdated(item); + }; + + const handleChangeObject = (event: any, newValue: string | null) => { + setObject(newValue ?? ''); + item.object = newValue ?? ''; + }; + + const handleChangeActionInput = (event: any, newValue: string) => { + setActionInputValue(newValue); + item.action = newValue; + liveCheckService.itemUpdated(item); + }; + + const handleChangeAction = (event: any, newValue: string | null) => { + setAction(newValue ?? ''); + item.action = newValue ?? ''; + }; + + const handleChangeSubjectInput = (event: any, newValue: string) => { + setSubjectInputValue(newValue); + item.subject = newValue; + liveCheckService.itemUpdated(item); + }; + + const handleChangeSubject = (event: any, newValue: string | null) => { + setSubject(newValue ?? ''); + item.subject = newValue ?? ''; + }; + + const handleChangeContextInput = (event: any) => { + const newValue = event.target.value; + setContext(newValue ?? ''); + // NOTE: adding a dummy caveat name to support only specifying the context with checks + // while preserving the simple approach of parsing all checks as relationships + item.context = newValue ? `default:${newValue}` : ''; + liveCheckService.itemUpdated(item); + }; + + const relationshipContents = + props.datastore.getSingletonByKind(DataStoreItemKind.RELATIONSHIPS) + .editableContents ?? ''; + const relationships = useMemo(() => { + return parseRelationships(relationshipContents); + }, [relationshipContents]); + + const objects = useMemo(() => { + return filter( + relationships.map((r: Relationship) => { + const onr = r.resourceAndRelation; + if (onr === undefined) { + return null; + } + + return `${onr.namespace}:${onr.objectId}`; + }) + ); + }, [relationships]); + + const actions = useMemo(() => { + const [definitionPath] = objectInputValue.split(':', 2); + const definition = props.localParseService.lookupDefinition(definitionPath); + if (definition !== undefined) { + return definition + .listRelationsAndPermissions() + .map((r: ParsedRelation | ParsedPermission) => r.name); + } + + return filter( + relationships.map((r: Relationship) => { + const onr = r.resourceAndRelation; + if (onr === undefined) { + return null; + } + + return onr.relation; + }) + ); + + // NOTE: we include editorUpdateIndex to ensure this is recomputed on + // editor changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [datastore, relationships, objectInputValue, props.editorUpdateIndex]); + + const subjects = useMemo(() => { + return filter( + relationships.map((r: Relationship) => { + const subject = r.subject; + if (subject === undefined) { + return null; + } + + if (subject.objectId === '*') { + return null; + } + + if (subject.relation === '...') { + return `${subject.namespace}:${subject.objectId}`; + } + return `${subject.namespace}:${subject.objectId}#${subject.relation}`; + }) + ); + }, [relationships]); + + const renderOption = ( + option: string | undefined, + optionSet: (string | undefined)[], + colorSet: (n: number) => string + ) => { + return ( +
+ + {option} +
+ ); + }; + + const status = liveCheckService.state.status; + const theme = useTheme(); + const wrap = (content: JSX.Element, width: string) => { + if (props.location === ReflexedPanelLocation.VERTICAL) { + return ( + + + {content} + +
+ ); + } + + return {content}; + }; + + return ( + <> + {item.status === LiveCheckItemStatus.INVALID && ( + + + {item.errorMessage}: + + + )} + + + {item.debugInformation !== undefined && ( + setIsExpanded(!isExpanded)}> + {isExpanded ? : } + + )} + + + +
+ {status === LiveCheckStatus.CHECKING && ( + + )} + {status === LiveCheckStatus.PARSE_ERROR && ( + + )} + {status === LiveCheckStatus.SERVICE_ERROR && ( + + )} + {status === LiveCheckStatus.NEVER_RUN && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.FOUND && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.NOT_FOUND && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.NOT_CHECKED && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.NOT_VALID && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.INVALID && ( + + )} + {status === LiveCheckStatus.NOT_CHECKING && + item.status === LiveCheckItemStatus.CAVEATED && ( + + )} +
+
+ {wrap( +
+ + option} + renderOption={(option) => + renderOption(option, objects, interpolatePurples) + } + value={object} + inputValue={objectInputValue} + onInputChange={handleChangeObjectInput} + onChange={handleChangeObject} + fullWidth + disableClearable + renderInput={(params) => ( + + )} + /> +
, + '28%' + )} + {wrap( +
+ + option} + renderOption={(option) => + renderOption(option, actions, interpolateBlues) + } + value={action} + inputValue={actionInputValue} + onInputChange={handleChangeActionInput} + onChange={handleChangeAction} + fullWidth + disableClearable + renderInput={(params) => ( + + )} + /> +
, + '18%' + )} + {wrap( +
+ + option} + renderOption={(option) => + renderOption(option, subjects, interpolateOranges) + } + value={subject} + inputValue={subjectInputValue} + onInputChange={handleChangeSubjectInput} + onChange={handleChangeSubject} + fullWidth + disableClearable + renderInput={(params) => ( + + )} + /> +
, + '28%' + )} + {wrap( +
+ +
, + '26%' + )} + + + + + +
+ {item.debugInformation !== undefined && isExpanded && ( + + + + + + )} + + ); +} + +function DotDisplay(props: { + colorSet: (n: number) => string; + valueSet: (string | undefined)[]; + value: string; +}) { + const classes = useStyles(); + const color = props.colorSet(1 - props.valueSet.indexOf(props.value) / 9); + return ( +
= 0 ? color : 'transparent', + }} + /> + ); +} diff --git a/playground/src/components/tuplelang.ts b/playground/src/components/tuplelang.ts new file mode 100644 index 0000000..9f8bdd1 --- /dev/null +++ b/playground/src/components/tuplelang.ts @@ -0,0 +1,289 @@ +import { CancellationToken, editor, Position } from 'monaco-editor-core'; +import { LocalParseState } from '../services/localparse'; +import { + getCaveatDefinitions, + getRelatableDefinitions, + getStorableRelations, + getSubjectDefinitions, + StorableRelation, + SubjectDefinition, +} from '../services/semantics'; + +export const TUPLE_LANGUAGE_NAME = 'tuple'; +export const TUPLE_THEME_NAME = 'tuple-theme'; +export const TUPLE_DARK_THEME_NAME = 'tuple-theme-dark'; + +export default function registerTupleLanguage( + monaco: any, + localParseState: () => LocalParseState +) { + // Based on: https://raw.githubusercontent.com/Aedron/monaco-protobuf/master/index.js + monaco.languages.register({ id: TUPLE_LANGUAGE_NAME }); + monaco.languages.setMonarchTokensProvider(TUPLE_LANGUAGE_NAME, { + keywords: ['...'], + tokenizer: { + root: [ + [/([a-z0-9_]+\/)*[a-z0-9_]+/, 'namespace'], + [/:/, { token: 'object.start', bracket: '@open', next: '@object' }], + [/@/, { token: 'userset.start', bracket: '@open', next: '@userset' }], + [/#/, { token: 'relation.start', bracket: '@open', next: '@relation' }], + [ + /\[([^\]]+)\]/, + { token: 'userset-caveat', bracket: '@close', next: '@popall' }, + ], + [/[A-Za-z0-9]+/, 'invalid'], + + { include: '@whitespace' }, + ], + object: [ + [ + /[a-zA-Z0-9/_|\-=+]+/, + { token: 'object', bracket: '@close', next: '@popall' }, + ], + ], + relation: [ + [ + /[a-z0-9_]+/, + { token: 'relation', bracket: '@close', next: '@popall' }, + ], + [ + /\.\.\./, + { token: 'dotdotdotrel', bracket: '@close', next: '@popall' }, + ], + ], + whitespace: [ + [/\s+/, 'white'], + [/\/\/.*$/, 'comment'], + ], + caveatorend: [ + [/$/, { token: 'userset.end', bracket: '@close', next: '@popall' }], + [ + /\[([^\]]+)\]$/, + { token: 'userset-caveat', bracket: '@close', next: '@popall' }, + ], + ], + relationorcaveatorend: [ + [/$/, { token: 'userset.end', bracket: '@close', next: '@popall' }], + [ + /#[a-z0-9_]+$/, + { + token: 'userset-relation', + bracket: '@close', + next: '@popall', + }, + ], + [ + /#[a-z0-9_]+/, + { + token: 'userset-relation', + bracket: '@close', + next: '@caveatorend', + }, + ], + [ + /\[([^\]]+)\]$/, + { token: 'userset-caveat', bracket: '@close', next: '@popall' }, + ], + ], + userset: [ + [/$/, { token: 'userset.end', bracket: '@close', next: '@popall' }], + [/([a-z0-9_]+\/)?[a-z0-9_]+/, 'userset-namespace'], + [ + /#[a-z0-9_]+/, + { + token: 'userset-relation', + bracket: '@close', + next: '@caveatorend', + }, + ], + [ + /#\.\.\./, + { + token: 'userset-dotdotdotrel', + next: '@caveatorend', + }, + ], + [ + /:[a-zA-Z0-9/_|\-=+]+$/, + { token: 'userset-object', bracket: '@close', next: '@popall' }, + ], + [ + /:\*$/, + { + token: 'userset-wildcard-object', + next: '@popall', + }, + ], + [ + /:\*/, + { + token: 'userset-wildcard-object', + next: '@caveatorend', + }, + ], + [ + /:[a-zA-Z0-9/_|\-=+]+/, + { + token: 'userset-object', + next: '@relationorcaveatorend', + }, + ], + ], + }, + }); + + monaco.languages.registerCompletionItemProvider(TUPLE_LANGUAGE_NAME, { + triggerCharacters: ['/', '#', '@', '['], + + // Function to generate autocompletion results + provideCompletionItems: function ( + model: editor.ITextModel, + position: Position, + token: CancellationToken + ) { + // Based on: https://gist.github.com/mwrouse/05d8c11cd3872c19c684bd1904a2202e + // Split everything the user has typed on the current line up at each space, and only look at the last word + var lastChars = model.getValueInRange({ + startLineNumber: position.lineNumber, + startColumn: 0, + endLineNumber: position.lineNumber, + endColumn: position.column, + }); + var words = lastChars.replace('\t', '').split(' '); + var activeTyping = words[words.length - 1]; // What the user is currently typing (everything after the last space) + + switch (activeTyping[activeTyping.length - 1]) { + case '/': + return { + suggestions: getRelatableDefinitions(localParseState()).map( + (namespaceName: string) => { + const hasPrefix = namespaceName.indexOf('/') > -1; + return { + label: namespaceName, + kind: monaco.languages.CompletionItemKind.Module, + detail: '', + insertText: hasPrefix + ? namespaceName.split('/')[1] + : namespaceName, + }; + } + ), + }; + + case '#': + return { + suggestions: getStorableRelations( + words[words.length - 1], + localParseState() + ).map((found: StorableRelation) => { + return { + label: found.name, + kind: found.isPermission + ? monaco.languages.CompletionItemKind.Property + : monaco.languages.CompletionItemKind.Field, + detail: '', + insertText: found.name, + }; + }), + }; + + case '@': + return { + suggestions: getSubjectDefinitions( + words[words.length - 1], + localParseState() + ).map((sd: SubjectDefinition) => { + return { + label: sd.name, + kind: sd.isUserDefinition + ? monaco.languages.CompletionItemKind.User + : monaco.languages.CompletionItemKind.Class, + detail: '', + insertText: sd.name, + }; + }), + }; + + case '[': + return { + suggestions: getCaveatDefinitions(localParseState()).map( + (caveatName: string) => { + return { + label: caveatName, + kind: monaco.languages.CompletionItemKind.Function, + detail: '', + insertText: caveatName, + }; + } + ), + }; + } + + return { + suggestions: [], + }; + }, + }); + + monaco.editor.defineTheme(TUPLE_THEME_NAME, { + base: 'vs', + inherit: true, + rules: [ + { token: 'namespace', foreground: '4242ff' }, + { token: 'relation', foreground: '883425' }, + { token: 'dotdotdotrel', foreground: '0a5ed7' }, + { token: 'object', foreground: '000000' }, + + { token: 'relation.start', foreground: 'aaaaaa' }, + { token: 'object.start', foreground: 'aaaaaa' }, + + { token: 'userset-namespace', foreground: '4242ff', fontStyle: 'italic' }, + { token: 'userset-relation', foreground: '44778a', fontStyle: 'italic' }, + { + token: 'userset-dotdotdotrel', + foreground: 'aaaaaa', + fontStyle: 'italic', + }, + { token: 'userset-object', foreground: '000000', fontStyle: 'italic' }, + { token: 'userset-caveat', foreground: 'ff87a6', fontStyle: 'italic' }, + { + token: 'userset-wildcard-object', + foreground: '00ffe5', + fontStyle: 'italic', + }, + + { token: 'userset.start', foreground: '000000', fontStyle: 'bold' }, + ], + }); + + monaco.editor.defineTheme(TUPLE_DARK_THEME_NAME, { + base: 'vs-dark', + inherit: true, + rules: [ + { token: 'namespace', foreground: '8787ff' }, + { token: 'relation', foreground: 'ff8887' }, + { token: 'dotdotdotrel', foreground: '0a5ed7' }, + { token: 'object', foreground: 'ffffff' }, + + { token: 'relation.start', foreground: 'cccccc' }, + { token: 'object.start', foreground: 'cccccc' }, + + { token: 'userset-namespace', foreground: '8787ff', fontStyle: 'italic' }, + { token: 'userset-relation', foreground: '87deff', fontStyle: 'italic' }, + { + token: 'userset-dotdotdotrel', + foreground: 'cccccc', + fontStyle: 'italic', + }, + { token: 'userset-object', foreground: 'ffffff', fontStyle: 'italic' }, + { token: 'userset-caveat', foreground: 'ff87a6', fontStyle: 'italic' }, + { + token: 'userset-wildcard-object', + foreground: '00ffe5', + fontStyle: 'italic', + }, + + { token: 'userset.start', foreground: 'ffffff', fontStyle: 'bold' }, + ], + }); +} diff --git a/playground/src/config.json b/playground/src/config.json new file mode 100644 index 0000000..d91cc26 --- /dev/null +++ b/playground/src/config.json @@ -0,0 +1,15 @@ +{ + "authentication": "none", + "authzed": null, + "ga": { + "measurementId": "" + }, + "oidc": { + "urlPrefix": "" + }, + "discord": { + "inviteUrl": "https://authzed.com/discord", + "serverId": "", + "channelId": "" + } +} diff --git a/playground/src/index.css b/playground/src/index.css new file mode 100644 index 0000000..4109e9b --- /dev/null +++ b/playground/src/index.css @@ -0,0 +1,10 @@ +body { + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/playground/src/index.tsx b/playground/src/index.tsx new file mode 100644 index 0000000..c98ec42 --- /dev/null +++ b/playground/src/index.tsx @@ -0,0 +1,19 @@ +import "fontsource-roboto"; +import React from "react"; +import ReactDOM from "react-dom"; +import { BrowserRouter } from "react-router-dom"; +import App from "./App"; +import "./index.css"; +import * as serviceWorker from "./serviceWorker"; + +ReactDOM.render( + + + , + document.getElementById("root") +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/playground/src/react-app-env.d.ts b/playground/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/playground/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/playground/src/serviceWorker.ts b/playground/src/serviceWorker.ts new file mode 100644 index 0000000..b09523f --- /dev/null +++ b/playground/src/serviceWorker.ts @@ -0,0 +1,149 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +type Config = { + onSuccess?: (registration: ServiceWorkerRegistration) => void; + onUpdate?: (registration: ServiceWorkerRegistration) => void; +}; + +export function register(config?: Config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL( + process.env.PUBLIC_URL, + window.location.href + ); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl: string, config?: Config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl: string, config?: Config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' } + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/playground/src/services/check.ts b/playground/src/services/check.ts new file mode 100644 index 0000000..84a3abe --- /dev/null +++ b/playground/src/services/check.ts @@ -0,0 +1,252 @@ +import { parseRelationship } from '@code/spicedb-common/src/parsing'; +import { DebugInformation } from '@code/spicedb-common/src/protodevdefs/authzed/api/v1/debug'; +import { + CheckOperationsResult_Membership, + DeveloperError, + DeveloperResponse, +} from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { + DeveloperService, + DeveloperServiceError, +} from '@code/spicedb-common/src/services/developerservice'; +import { useDebouncedChecker } from '@code/playground-ui/src/debouncer'; +import { useCallback, useEffect, useState } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import { DataStore, DataStoreItemKind } from './datastore'; + +export enum LiveCheckStatus { + PARSE_ERROR = -2, + SERVICE_ERROR = -1, + NOT_CHECKING = 0, + CHECKING = 1, + NEVER_RUN = 2, +} + +export enum LiveCheckItemStatus { + NOT_VALID = -1, + NOT_CHECKED = 0, + NOT_FOUND = 1, + FOUND = 2, + INVALID = 3, + CAVEATED = 4, +} + +export interface LiveCheckItem { + id: string; + object: string; + action: string; + subject: string; + context: string; + status: LiveCheckItemStatus; + errorMessage: string | undefined; + debugInformation?: DebugInformation; +} + +export interface LiveCheckRunState { + status: LiveCheckStatus; + lastRun?: Date; + requestErrors?: DeveloperError[]; + serverErr?: DeveloperServiceError; +} + +export interface LiveCheckService { + state: LiveCheckRunState; + + items: LiveCheckItem[]; + + addItem: () => void; + itemUpdated: (item: LiveCheckItem) => void; + removeItem: (item: LiveCheckItem) => void; + clear: () => void; +} + +function liveCheckItemToString(item: LiveCheckItem): string { + let subject = item.subject; + if (subject.indexOf('#') < 0) { + subject = `${subject}#...`; + } + const caveat = item.context ? `[${item.context}]` : ''; + return `${item.object}#${item.action}@${subject}${caveat}`; +} + +function runEditCheckWasm( + developerService: DeveloperService, + datastore: DataStore, + items: LiveCheckItem[] +): DeveloperResponse | undefined { + const schema = + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA).editableContents ?? + ''; + let relationshipsString = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents; + + const request = developerService.newRequest(schema, relationshipsString); + if (request === undefined) { + return; + } + + // Build the relationships to be checked, validating as we go. + items.forEach((item: LiveCheckItem) => { + const parsed = parseRelationship(liveCheckItemToString(item)); + if (parsed === undefined) { + item.status = LiveCheckItemStatus.NOT_VALID; + item.debugInformation = undefined; + return; + } + + item.status = LiveCheckItemStatus.NOT_CHECKED; + request.check( + { + resource: parsed.resourceAndRelation!, + subject: parsed.subject!, + caveatContext: parsed.caveat?.context, + }, + (result) => { + if (result.checkError) { + item.status = LiveCheckItemStatus.INVALID; + item.errorMessage = result.checkError.message; + item.debugInformation = undefined; + return; + } + + if ( + result.partialCaveatInfo?.missingRequiredContext && + result.partialCaveatInfo?.missingRequiredContext.length > 0 + ) { + item.status = LiveCheckItemStatus.CAVEATED; + item.debugInformation = result.resolvedDebugInformation; + item.errorMessage = undefined; + return; + } + + item.debugInformation = result.resolvedDebugInformation; + item.status = + result.membership === CheckOperationsResult_Membership.MEMBER + ? LiveCheckItemStatus.FOUND + : LiveCheckItemStatus.NOT_FOUND; + item.errorMessage = undefined; + } + ); + }); + + return request.execute(); +} + +/** + * useLiveCheckService is a hook which manages the definitions of live checking, + * including live parsing and check watches. + */ +export function useLiveCheckService( + developerService: DeveloperService, + datastore: DataStore +): LiveCheckService { + const [items, setItems] = useState([]); + const [state, setState] = useState({ + status: LiveCheckStatus.NEVER_RUN, + }); + + const devServiceStatus = developerService.state.status; + const runCheck = useCallback( + async (itemsToCheck: LiveCheckItem[]) => { + if (devServiceStatus !== 'ready') { + return; + } + + setState({ status: LiveCheckStatus.CHECKING }); + const response = runEditCheckWasm( + developerService, + datastore, + itemsToCheck + ); + if (response === undefined) { + setState({ status: LiveCheckStatus.NOT_CHECKING }); + + if (itemsToCheck.length > 0) { + setState({ + status: LiveCheckStatus.SERVICE_ERROR, + lastRun: new Date(), + requestErrors: [], + serverErr: + 'Cannot instantiate developer service. Please make sure you have WebAssembly enabled.', + }); + } + return; + } + + const serverErr: string | undefined = response.internalError || undefined; + const devErrs: DeveloperError[] = response.developerErrors + ? response.developerErrors.inputErrors + : []; + const status = serverErr + ? LiveCheckStatus.SERVICE_ERROR + : devErrs.length > 0 + ? LiveCheckStatus.PARSE_ERROR + : LiveCheckStatus.NOT_CHECKING; + + setState({ + status: status, + lastRun: new Date(), + requestErrors: devErrs, + serverErr: serverErr, + }); + }, + [developerService, devServiceStatus, datastore] + ); + + const { run: check } = useDebouncedChecker(500, runCheck); + + // Setup an effect which registers the listener for the datastore changes and processes items. + useEffect(() => { + return datastore.registerListener(() => { + check(items); + }); + }, [datastore, items, check]); + + // Setup an effect which runs the check initially once the developer service is ready. + useEffect(() => { + if ( + state.status === LiveCheckStatus.NEVER_RUN && + devServiceStatus === 'ready' + ) { + check(items); + } + }, [state, items, check, devServiceStatus]); + + return { + items: items, + state: state, + + addItem: () => { + const newItems = [ + ...items, + { + id: uuidv4(), + object: '', + action: '', + subject: '', + context: '', + status: LiveCheckItemStatus.NOT_CHECKED, + errorMessage: undefined, + }, + ]; + setItems(newItems); + }, + itemUpdated: (item: LiveCheckItem) => { + check(items); + }, + removeItem: (item: LiveCheckItem) => { + const index = items.indexOf(item); + if (index < 0) { + return; + } + + const newItems = [...items]; + newItems.splice(index, 1); + setItems(newItems); + }, + clear: () => { + setItems([]); + }, + }; +} diff --git a/playground/src/services/configservice.ts b/playground/src/services/configservice.ts new file mode 100644 index 0000000..203ecaa --- /dev/null +++ b/playground/src/services/configservice.ts @@ -0,0 +1,186 @@ +import { + AllowedAuthenticationTypes, + OIDCConfig, +} from '@code/spicedb-common/src/authn/provider'; +import { env } from 'process'; +import * as config from '../config.json'; + +/** + * Configuration that we get through an environment js file. + */ +interface EnvConfig { + OIDC_URL_PREFIX?: string; + AUTHENTICATION_ENGINE?: string; + + AUTHZED_FRONTEND_ENDPOINT?: string | undefined | null; + AUTHZED_FRONTEND_API_ENDPOINT?: string | undefined | null; + AUTHZED_DEVELOPER_GATEWAY_ENDPOINT?: string | undefined | null; + GOOGLE_ANALYTICS_MEASUREMENT_ID?: string; + + DISCORD_CHANNEL_ID?: string; + DISCORD_INVITE_URL?: string; + DISCORD_SERVER_ID?: string; +} + +declare global { + interface Window { + _env_?: EnvConfig; + } +} + +interface AuthzedConfig { + /** + * endpoint is the endpoint for the Authzed developer gateway. Must include + * http:// or https://. + */ + developerEndpoint?: string | undefined | null; + + /** + * frontendEndpoint is the endpoint for the Authzed UI frontend. Must include + * http:// or https://. + */ + frontendEndpoint?: string | undefined | null; + + /** + * frontendApiEndpoint is the endpoint for the Authzed UI frontend API. Must include + * http:// or https://. + */ + frontendApiEndpoint?: string | undefined | null; +} + +/** + * GoogleAnalyticsConfig is the configuration for Google Analytics. + */ +interface GoogleAnalyticsConfig { + /** + * measurementId is the GA monitoring ID for the app. + */ + measurementId: string; +} + +/** + * DiscordConfig is the configuration for Discord. + */ +interface DiscordConfig { + /** + * channelId is the ID of the main channel on the Discord server. + */ + channelId: string; + + /** + * inviteUrl is the full URL for being invited into the Discord server. + */ + inviteUrl: string; + + /** + * serverId is the ID of the Discord server. + */ + serverId: string; +} + +interface ApplicationConfig { + authentication: AllowedAuthenticationTypes; + authzed?: AuthzedConfig | undefined; + ga: GoogleAnalyticsConfig; + + discord: DiscordConfig; + + oidc: OIDCConfig; +} + +/** + * IsAuthzedInteractionEnabled indicates whether interaction with the Authzed UI and API + * is enabled for this playground instance. + */ +export function IsAuthzedInteractionEnabled( + config: ApplicationConfig +): boolean { + return ( + !!config.authzed?.frontendApiEndpoint && !!config.authzed?.frontendEndpoint + ); +} + +/** + * AppConfig returns the ApplicationConfig. + */ +export default function AppConfig(): ApplicationConfig { + let typed = { + authentication: config.authentication as AllowedAuthenticationTypes, + authzed: config.authzed ?? ({} as AuthzedConfig), + ga: config.ga, + oidc: config.oidc, + discord: config.discord, + }; + + // Environment variable overrides. + if (window._env_) { + if (window._env_.AUTHENTICATION_ENGINE) { + typed.authentication = window._env_ + .AUTHENTICATION_ENGINE as AllowedAuthenticationTypes; + } + + if (window._env_.AUTHZED_DEVELOPER_GATEWAY_ENDPOINT) { + typed.authzed.developerEndpoint = + window._env_.AUTHZED_DEVELOPER_GATEWAY_ENDPOINT; + } + + if (window._env_.AUTHZED_FRONTEND_ENDPOINT) { + typed.authzed.frontendEndpoint = window._env_.AUTHZED_FRONTEND_ENDPOINT; + } + + if (window._env_.AUTHZED_FRONTEND_API_ENDPOINT) { + typed.authzed.frontendApiEndpoint = + window._env_.AUTHZED_FRONTEND_API_ENDPOINT; + } + + if (window._env_.GOOGLE_ANALYTICS_MEASUREMENT_ID) { + typed.ga.measurementId = window._env_.GOOGLE_ANALYTICS_MEASUREMENT_ID; + } + + if (window._env_.OIDC_URL_PREFIX) { + typed.oidc.urlPrefix = window._env_.OIDC_URL_PREFIX; + } + + if (window._env_.DISCORD_CHANNEL_ID) { + typed.discord.channelId = window._env_.DISCORD_CHANNEL_ID; + } + + if (window._env_.DISCORD_INVITE_URL) { + typed.discord.inviteUrl = window._env_.DISCORD_INVITE_URL; + } + + if (window._env_.DISCORD_SERVER_ID) { + typed.discord.serverId = window._env_.DISCORD_SERVER_ID; + } + } + + if (env.NODE_ENV === 'test') { + return typed; + } + + if ( + typed.authzed.developerEndpoint && + !typed.authzed.developerEndpoint.startsWith('http:') && + !typed.authzed.developerEndpoint.startsWith('https:') + ) { + throw Error('Invalid Authzed developer endpoint'); + } + + if ( + typed.authzed.frontendEndpoint && + !typed.authzed.frontendEndpoint.startsWith('http:') && + !typed.authzed.frontendEndpoint.startsWith('https:') + ) { + throw Error('Invalid Authzed frontend endpoint'); + } + + if ( + typed.authzed.frontendApiEndpoint && + !typed.authzed.frontendApiEndpoint.startsWith('http:') && + !typed.authzed.frontendApiEndpoint.startsWith('https:') + ) { + throw Error('Invalid Authzed frontend API endpoint'); + } + + return typed; +} diff --git a/playground/src/services/cookieservice.ts b/playground/src/services/cookieservice.ts new file mode 100644 index 0000000..a92568f --- /dev/null +++ b/playground/src/services/cookieservice.ts @@ -0,0 +1,55 @@ +import { useCookies } from "react-cookie"; +import { DataStoreItemKind } from "./datastore"; + +export type EditorPosition = [number, number]; // line, column +export type ScrollLocation = [number, number]; // top, left + +type EditorPositions = Record; +type EditorScrolls = Record; + +export type RelationshipsEditorType = "grid" | "code" + +export interface CookieService { + lookupEditorPosition(itemKind: DataStoreItemKind): EditorPosition | undefined + storeEditorPosition(itemKind: DataStoreItemKind, position: EditorPosition): void + + lookupEditorScroll(itemKind: DataStoreItemKind): ScrollLocation | undefined + storeEditorScroll(itemKind: DataStoreItemKind, location: ScrollLocation): void + + /** + * relationshipsEditorType is the chosen type of relationship editor to display. + */ + relationshipsEditorType: RelationshipsEditorType + setRelationshipsEditorType: (type: RelationshipsEditorType) => void +} + +/** + * useCookieService is a service that provides quick access to various settings stored in cookies. + */ +export function useCookieService(): CookieService { + const [cookies, setCookies] = useCookies(['editor-positions', 'editor-scrolls', 'relgrid-type']); + return { + lookupEditorPosition: (itemKind: DataStoreItemKind): EditorPosition | undefined => { + const existing: EditorPositions = cookies['editor-positions'] ?? {}; + return existing[itemKind]; + }, + storeEditorPosition: (itemKind: DataStoreItemKind, position: EditorPosition) => { + const existing: EditorPositions = cookies['editor-positions'] ?? {}; + existing[itemKind] = position; + setCookies('editor-positions', existing); + }, + lookupEditorScroll: (itemKind: DataStoreItemKind): ScrollLocation | undefined => { + const existing: EditorScrolls = cookies['editor-scrolls'] ?? {}; + return existing[itemKind]; + }, + storeEditorScroll: (itemKind: DataStoreItemKind, scrollLocation: ScrollLocation) => { + const existing: EditorScrolls = cookies['editor-scrolls'] ?? {}; + existing[itemKind] = scrollLocation; + setCookies('editor-scrolls', existing); + }, + relationshipsEditorType: cookies['relgrid-type'] ?? 'grid', + setRelationshipsEditorType: (type: RelationshipsEditorType): void => { + setCookies("relgrid-type", type); + } + } +} diff --git a/playground/src/services/datastore.ts b/playground/src/services/datastore.ts new file mode 100644 index 0000000..a006e25 --- /dev/null +++ b/playground/src/services/datastore.ts @@ -0,0 +1,327 @@ +import { ParsedValidation } from '@code/spicedb-common/src/validationfileformat'; +import { useRef } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import yaml from 'yaml'; + +// NOTE: Remember to set lineWidth to 0 for yaml.stringify. Important to prevent string folding. + +/** + * DataStorePaths defines functions for mapping from names to the associated + * URL path for a specific section stored in the datastore. + */ +export const DataStorePaths = { + Schema: () => '/schema', + Relationships: () => '/relationships', + Assertions: () => '/assertions', + ExpectedRelations: () => '/expected', +}; + +export enum DataStoreItemKind { + SCHEMA = 0, + RELATIONSHIPS = 1, + EXPECTED_RELATIONS = 2, + ASSERTIONS = 3, +} + +type ID = string; + +export interface DataStoreItem { + id: ID; + kind: DataStoreItemKind; + pathname: string; + editableContents: string; +} + +interface DataStorageData { + items: Record; + editIndex: string; +} + +const EMPTY_STORE = { + editIndex: '', + items: { + [DataStorePaths.Schema()]: { + id: '(schema)', + kind: DataStoreItemKind.SCHEMA, + pathname: DataStorePaths.Schema(), + editableContents: `definition user {} + +/** + * resource is an example resource. + */ +definition resource { + relation writer: user + relation viewer: user + + permission write = writer + permission view = viewer + writer +} +`, + }, + [DataStorePaths.ExpectedRelations()]: { + id: '(expected)', + kind: DataStoreItemKind.EXPECTED_RELATIONS, + pathname: DataStorePaths.ExpectedRelations(), + editableContents: ``, + }, + [DataStorePaths.Relationships()]: { + id: '(relationships)', + kind: DataStoreItemKind.RELATIONSHIPS, + pathname: DataStorePaths.Relationships(), + editableContents: `// Some example relationships +resource:someresource#viewer@user:somegal +resource:someresource#writer@user:anotherguy +resource:anotherresource#writer@user:somegal`, + }, + [DataStorePaths.Assertions()]: { + id: '(asserts)', + kind: DataStoreItemKind.ASSERTIONS, + pathname: DataStorePaths.Assertions(), + editableContents: `assertTrue: + - resource:someresource#view@user:somegal + - resource:someresource#view@user:anotherguy + - resource:someresource#write@user:anotherguy +assertFalse: + - resource:someresource#write@user:somegal`, + }, + }, +}; + +export type ListenerCallback = (index: string) => void; +export type RemovalCallback = () => void; + +/** + * DataStore defines the storage layer for data in the playground. + */ +export abstract class DataStore { + abstract getStored(): DataStorageData; + abstract setStored(data: DataStorageData): void; + abstract isOutOfDate(): boolean; + abstract isPopulated(): boolean; + + private listeners: Record = {}; + + private setStoredAndReport(data: DataStorageData): void { + this.setStored(data); + const editIndex = this.getStored().editIndex; + + Object.values(this.listeners).forEach((callback: ListenerCallback) => { + callback(editIndex); + }); + } + + /** + * registerListener registers a listener callback to be invoked whenever the + * datastore's contents have changed. + * @param callback The callback to be invoked on change. + * @returns A callback to invoke to remove the listener. + */ + public registerListener(callback: ListenerCallback): RemovalCallback { + const key = uuidv4(); + this.listeners[key] = callback; + return () => { + delete this.listeners[key]; + }; + } + + /** + * currentIndex returns the current edit index for the datastore, which will + * change whenever the datastore's data changes. + */ + public currentIndex(): string { + const deserialized = this.getStored(); + return deserialized.editIndex; + } + + /** + * getById returns the datastore item with the given ID or undefined if none. + */ + public getById(id: string): DataStoreItem | undefined { + const deserialized = this.getStored(); + const items = Object.values(deserialized.items); + return items.find((item: DataStoreItem) => item.id === id); + } + + /** + * get returns the datastore item with the given path or undefined if none. + */ + public get(pathname: string): DataStoreItem | undefined { + const deserialized = this.getStored(); + const items = Object.values(deserialized.items); + return items.find((item: DataStoreItem) => item.pathname === pathname); + } + + /** + * getSingletonByKind returns the single datastore item with the given kind. + * Throws an error if not found or more than one is found. + */ + public getSingletonByKind(kind: DataStoreItemKind): DataStoreItem { + const deserialized = this.getStored(); + const items = Object.values(deserialized.items); + const found = items.filter((item: DataStoreItem) => item.kind === kind); + if (found.length !== 1) { + throw Error('Found non-singleton'); + } + return found[0]; + } + + /** + * update sets the new editable contents for an existing item, updating the item's + * path if necessary. + * @param item The item to update. + * @param newEditableContents The new editable contents for the item. + * @returns The updated item, or undefined if the item was not found. + */ + public update( + item: DataStoreItem, + newEditableContents: string + ): DataStoreItem | undefined { + const deserialized = this.getStored(); + + // Add back the new/updated item. + const newItem = { + ...item, + editableContents: newEditableContents, + pathname: item.pathname, + }; + + // For existing references. + item.editableContents = newEditableContents; + + deserialized.items[item.pathname] = newItem; + this.setStoredAndReport(deserialized); + return newItem; + } + + /** + * load loads the given parsed data into the datastore, + * erasing any data already existing in the store. + */ + public load({ + schema, + relationshipsYaml, + assertionsYaml, + verificationYaml, + }: { + schema: string; + relationshipsYaml: string; + assertionsYaml: string; + verificationYaml: string; + }) { + // NOTE: Quick way to deep clone. + const store: DataStorageData = JSON.parse(JSON.stringify(EMPTY_STORE)); + + // Add the schema. + store.items[DataStorePaths.Schema()].editableContents = schema; + + // Add the relationships. + store.items[DataStorePaths.Relationships()].editableContents = + relationshipsYaml; + + // Add the assertions data. + store.items[DataStorePaths.Assertions()].editableContents = + assertionsYaml ?? ''; + + // Add the expected config. + store.items[DataStorePaths.ExpectedRelations()].editableContents = + verificationYaml; + + this.setStoredAndReport(store); + } + + /** + * loadFromParsed loads the given parsed validation data into the datastore, + * erasing any data already existing in the store. + */ + public loadFromParsed(p: ParsedValidation) { + this.load({ + schema: p.schema, + relationshipsYaml: p.relationships, + assertionsYaml: yaml.stringify( + p.assertions ?? { assertTrue: [], assertFalse: [] }, + { lineWidth: 0 } + ), + verificationYaml: yaml.stringify(p.validation, { lineWidth: 0 }), + }); + } +} + +const LOCAL_STORAGE_DATASTORE_KEY_PREFIX = 'playgrounddata'; +const LOCAL_STORAGE_DATASTORE_VERSION = '0.21'; +const LOCAL_STORAGE_DATASTORE_KEY = `${LOCAL_STORAGE_DATASTORE_KEY_PREFIX}-${LOCAL_STORAGE_DATASTORE_VERSION}`; + +class LocalStorageDataStore extends DataStore { + private lastStoredIndex: string | undefined = undefined; + + getStored(): DataStorageData { + try { + const loaded = JSON.parse( + localStorage.getItem(LOCAL_STORAGE_DATASTORE_KEY) || 'null' + ); + if (loaded) { + return loaded; + } + } catch (e) { + console.log(e); + } + return EMPTY_STORE; + } + + setStored(data: DataStorageData): void { + data.editIndex = uuidv4(); + this.lastStoredIndex = data.editIndex; + localStorage.setItem(LOCAL_STORAGE_DATASTORE_KEY, JSON.stringify(data)); + } + + isOutOfDate(): boolean { + return ( + this.lastStoredIndex !== undefined && + this.lastStoredIndex !== this.getStored().editIndex + ); + } + + isPopulated(): boolean { + return this.getStored() !== EMPTY_STORE; + } +} + +class EphemeralDataStore extends DataStore { + private data: DataStorageData = EMPTY_STORE; + private wasEdited: boolean = false; + + getStored(): DataStorageData { + return this.data; + } + + setStored(data: DataStorageData): void { + data.editIndex = uuidv4(); + this.data = data; + this.wasEdited = true; + } + + isOutOfDate(): boolean { + return false; + } + + isPopulated(): boolean { + return this.wasEdited; + } +} + +/** + * useReadonlyDatastore returns a read-only datastore, which can be loaded into + * but otherwise not modified. + */ +export function useReadonlyDatastore(): DataStore { + const datastoreRef = useRef(new EphemeralDataStore()); + return datastoreRef.current; +} + +/** + * usePlaygroundDatastore returns a hook for interacting with the backing datastore + * for the playground. Data is retrieved and stored in local storage. + */ +export function usePlaygroundDatastore(): DataStore { + const datastoreRef = useRef(new LocalStorageDataStore()); + return datastoreRef.current; +} diff --git a/playground/src/services/events.ts b/playground/src/services/events.ts new file mode 100644 index 0000000..12b70b4 --- /dev/null +++ b/playground/src/services/events.ts @@ -0,0 +1,19 @@ +/** + * User initiated events. + * Event names generally follow the format: present-tense verb + object syntax + */ +export enum UserEvent { + ClickShare = 'Click Playground Share', + ClickLoadExample = 'Click Playground Load Example', + ClickValidation = 'Click Playground Validation', + ClickDownload = 'Click Playground Download', + ClickUpload= 'Click Playground Upload', + ClickAddCheck = 'Click Playground Add Check', + ViewTab = 'View Playground Tab', + ViewPanel = 'View Playground Panel', + // Guided Tour + StartTour = 'Start Step', + ViewTourStep = 'View Tour Step', + CompleteTour = 'Complete Tour', + SkipTour = 'Skip Tour', +} diff --git a/playground/src/services/localparse.ts b/playground/src/services/localparse.ts new file mode 100644 index 0000000..cf75e3f --- /dev/null +++ b/playground/src/services/localparse.ts @@ -0,0 +1,114 @@ +import { + ParsedSchema, + parseSchema, +} from '@code/spicedb-common/src/parsers/dsl/dsl'; +import { + ResolvedDefinition, + Resolver, +} from '@code/spicedb-common/src/parsers/dsl/resolution'; +import { + parseRelationshipsWithErrors, + RelationshipFound, +} from '@code/spicedb-common/src/parsing'; +import { useDebouncedChecker } from '@code/playground-ui/src/debouncer'; +import { useEffect, useMemo, useState } from 'react'; +import { DataStore, DataStoreItemKind } from './datastore'; + +export interface LocalParseService { + state: LocalParseState; + lookupDefinition: (name: string) => ResolvedDefinition | undefined; +} + +export interface LocalParseState { + schemaText: string; + resolver: Resolver | undefined; + parsed: ParsedSchema | undefined; + + relsText: string; + relationships: RelationshipFound[]; +} + +/** + * useLocalParseService is a hook which monitors the datastore and checks for invalid + * validation tuples by locally parsing. + */ +export function useLocalParseService(datastore: DataStore): LocalParseService { + const [state, setState] = useState({ + relsText: '', + schemaText: '', + + parsed: undefined, + resolver: undefined, + relationships: [], + }); + + const runCheck = async ({ + schemaText, + relsText, + }: { + schemaText: string; + relsText: string; + }) => { + if (relsText === state.relsText && schemaText === state.schemaText) { + return; + } + + const rels = + relsText === state.relsText + ? state.relationships + : parseRelationshipsWithErrors(relsText); + const parsed = + schemaText === state.schemaText ? state.parsed : parseSchema(schemaText); + setState({ + relsText: relsText, + schemaText: schemaText, + relationships: rels, + parsed: parsed, + resolver: parsed ? new Resolver(parsed) : undefined, + }); + }; + + const { run: check } = useDebouncedChecker(250, runCheck); + + useEffect(() => { + // Kick off the initial check. + const schemaText = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relsText = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + check({ schemaText: schemaText, relsText: relsText }); + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + return datastore.registerListener(() => { + const schemaText = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relsText = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + check({ schemaText: schemaText, relsText: relsText }); + }); + + // NOTE: we do not want to rely on `check` changing, since it is merely + // a function. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [datastore]); + + const lookupDefinition = useMemo(() => { + return (name: string): ResolvedDefinition | undefined => { + if (state.resolver === undefined) { + return undefined; + } + + return state.resolver.lookupDefinition(name); + }; + }, [state.resolver]); + + return { + state: state, + lookupDefinition: lookupDefinition, + }; +} diff --git a/playground/src/services/problem.ts b/playground/src/services/problem.ts new file mode 100644 index 0000000..bc034c2 --- /dev/null +++ b/playground/src/services/problem.ts @@ -0,0 +1,104 @@ +import { RelationshipFound } from '@code/spicedb-common/src/parsing'; +import { DeveloperError } from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { ERROR_SOURCE_TO_ITEM } from '../components/panels/errordisplays'; +import { LiveCheckService, LiveCheckStatus } from './check'; +import { DataStoreItemKind } from './datastore'; +import { LocalParseService } from './localparse'; +import { ValidationService } from './validation'; + +export interface ProblemService { + /** + * stateKey is a shorthand key for watching for changes in the problem service. + */ + stateKey: string; + + /** + * isUpdating is true if any of the underlying services are currently processing. + */ + isUpdating: boolean; + + /** + * requestErrors are errors raised by the API calls. + */ + requestErrors: DeveloperError[]; + + /** + * validationErrors are errors raised by the last call to validation. + */ + validationErrors: DeveloperError[]; + + /** + * invalidRelationships are those validation relationships that are invalid, if any. + */ + invalidRelationships: RelationshipFound[]; + + /** + * hasProblems indicates whether any problems were found. + */ + hasProblems: boolean; + + /** + * problemCount is the count of the problems found, if any. + */ + problemCount: number; + + /** + * getProblemCount returns the number of errors in the specific item. + */ + getProblemCount: (kind: DataStoreItemKind) => number; +} + +interface ProblemsResult { + requestErrors?: DeveloperError[]; +} + +/** + * useProblemService is a hook which exposes any problems (namespace parse errors, + * validation errors, etc) raised by live check or validation. + */ +export function useProblemService( + localParseService: LocalParseService, + liveCheckService: LiveCheckService, + validationService: ValidationService +): ProblemService { + // Collect the errors from the most recently run service. + const problemsResult: ProblemsResult = + (liveCheckService.state.lastRun?.getTime() ?? 0) >= + (validationService.state.lastRun?.getTime() ?? 0) + ? liveCheckService.state + : validationService.state; + const requestErrors = problemsResult.requestErrors ?? []; + const invalidRelationships = localParseService.state.relationships.filter( + (rel: RelationshipFound) => 'errorMessage' in rel.parsed + ); + const problemCount = requestErrors.length + invalidRelationships.length; + + const getProblemCount = (kind: DataStoreItemKind) => { + const allProblems = Array.from(requestErrors); + allProblems.push(...(validationService.state.validationErrors ?? [])); + let foundCount = allProblems.filter( + (problem: DeveloperError) => ERROR_SOURCE_TO_ITEM[problem.source] === kind + ).length; + if (kind === DataStoreItemKind.RELATIONSHIPS) { + foundCount += invalidRelationships.length; + } + return foundCount; + }; + + const isUpdating = + liveCheckService.state.status === LiveCheckStatus.CHECKING || + validationService.isRunning; + const validationErrors = validationService.state.validationErrors ?? []; + const stateKey = `${isUpdating}:${problemCount}-${validationErrors.length}-${invalidRelationships.length}`; + + return { + stateKey: stateKey, + isUpdating: isUpdating, + hasProblems: problemCount > 0, + problemCount: problemCount, + requestErrors: requestErrors, + validationErrors: validationErrors, + invalidRelationships: invalidRelationships, + getProblemCount: getProblemCount, + }; +} diff --git a/playground/src/services/semantics.ts b/playground/src/services/semantics.ts new file mode 100644 index 0000000..daaf812 --- /dev/null +++ b/playground/src/services/semantics.ts @@ -0,0 +1,177 @@ +import { + ParsedPermission, + ParsedRelation, + TypeRef, +} from '../../../spicedb-common/src/parsers/dsl/dsl'; +import { + ResolvedCaveatDefinition, + ResolvedDefinition, +} from '../../../spicedb-common/src/parsers/dsl/resolution'; +import { LocalParseState } from './localparse'; + +const TYPE_AND_OBJECT_REGEX = /(?[^:@]+):(?[^#]+)(#?)/g; +const TYPE_OBJECT_AND_REL_REGEX = + /(?[^:@]+):(?[^#]+)#(?[^@]+)/g; + +/** + * getRelatableDefinitions returns the name of all definitions found in the local parse state. + */ +export const getRelatableDefinitions = ( + localParseState: LocalParseState +): string[] => { + const resolver = localParseState.resolver; + if (resolver === undefined) { + return []; + } + + return resolver + .listDefinitions() + .filter((def: ResolvedDefinition) => def.definition.relations.length > 0) + .map((def: ResolvedDefinition) => def.definition.name); +}; + +/** + * StorableRelation is a relation in which data can be stored. + */ +export interface StorableRelation { + name: string; + isPermission: boolean; +} + +/** + * getStorableRelations returns all relations (and permissions if the subject) defined in the + * local parse state in which data can be stored. Note that whether we treat the listing for + * the left hand side or right hand side of the relation depends on how many ONRs we find in + * the string. + */ +export const getStorableRelations = ( + onrs: string, + localParseState: LocalParseState +): StorableRelation[] => { + const resolver = localParseState.resolver; + if (resolver === undefined) { + return []; + } + + const found = []; + while (true) { + const matched = TYPE_AND_OBJECT_REGEX.exec(onrs); + if (!matched || !matched?.groups) { + break; + } + found.push(matched.groups!); + } + + if (!found.length) { + return []; + } + + const info = found[found.length - 1]!; + const definition = resolver.lookupDefinition(info['typepath']); + if (definition === undefined) { + return []; + } + + if (found.length === 1) { + return definition.listRelationNames().map((name: string) => { + return { + name: name, + isPermission: false, + }; + }); + } + + const rels = definition + .listRelationsAndPermissions() + .map((relOrPerm: ParsedPermission | ParsedRelation) => { + return { + name: relOrPerm.name, + isPermission: relOrPerm.kind === 'permission', + }; + }); + if (rels.length === 0) { + return [ + { + name: '...', + isPermission: false, + }, + ]; + } + return rels; +}; + +export interface SubjectDefinition { + name: string; + isUserDefinition: boolean; +} + +/** + * getSubjectDefinitions returns the definitions which can be used as the right hand side subject + * of a tuple. + */ +export const getSubjectDefinitions = ( + objectString: string, + localParseState: LocalParseState +): SubjectDefinition[] => { + const resolver = localParseState.resolver; + if (resolver === undefined) { + return []; + } + + const matched = TYPE_OBJECT_AND_REL_REGEX.exec(objectString); + if (!matched || !matched?.groups) { + return []; + } + + // Resolve the type definition. + const definition = resolver.lookupDefinition(matched.groups['typepath']); + if (definition !== undefined) { + // Resolve the relation. + const relation = definition.lookupRelation(matched.groups['rel']); + if (relation !== undefined) { + return resolver + .listDefinitions() + .filter((def: ResolvedDefinition) => { + return ( + relation.allowedTypes.types.findIndex((allowedType: TypeRef) => { + return allowedType.path === def.definition.name; + }) >= 0 + ); + }) + .map((def: ResolvedDefinition) => { + return { + name: def.definition.name, + isUserDefinition: + def.definition.permissions.length + + def.definition.relations.length === + 0, + }; + }); + } + } + + return resolver.listDefinitions().map((def: ResolvedDefinition) => { + return { + name: def.definition.name, + isUserDefinition: + def.definition.permissions.length + def.definition.relations.length === + 0, + }; + }); +}; + +/** + * getCaveatDefinitions returns the name of all caveats found in the local parse state. + */ +export const getCaveatDefinitions = ( + localParseState: LocalParseState +): string[] => { + const resolver = localParseState.resolver; + if (resolver === undefined) { + return []; + } + + return resolver + .listCaveats() + .map((def: ResolvedCaveatDefinition) => def.definition.name); +}; diff --git a/playground/src/services/services.ts b/playground/src/services/services.ts new file mode 100644 index 0000000..bbe56c5 --- /dev/null +++ b/playground/src/services/services.ts @@ -0,0 +1,16 @@ +import { DeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import { ZedTerminalService } from '@code/spicedb-common/src/services/zedterminalservice'; +import { LiveCheckService } from './check'; +import { LocalParseService } from './localparse'; + +import { ProblemService } from './problem'; +import { ValidationService } from './validation'; + +export interface Services { + localParseService: LocalParseService; + liveCheckService: LiveCheckService; + validationService: ValidationService; + problemService: ProblemService; + developerService: DeveloperService; + zedTerminalService: ZedTerminalService | undefined; +} diff --git a/playground/src/services/validation.ts b/playground/src/services/validation.ts new file mode 100644 index 0000000..3b3eb18 --- /dev/null +++ b/playground/src/services/validation.ts @@ -0,0 +1,183 @@ +import { DeveloperError } from '@code/spicedb-common/src/protodevdefs/developer/v1/developer'; +import { DeveloperService } from '@code/spicedb-common/src/services/developerservice'; +import { useAlert } from '@code/playground-ui/src/AlertProvider'; +import { useGoogleAnalytics } from '@code/playground-ui/src/GoogleAnalyticsHook'; +import { useTheme } from '@material-ui/core/styles'; +import { useState } from 'react'; +import 'react-reflex/styles.css'; +import { DataStore, DataStoreItemKind } from '../services/datastore'; +import { + buildAssertionsYaml, + buildValidationBlockYaml, +} from './validationfileformat'; + +export enum ValidationStatus { + NOT_RUN = 0, + RUNNING = 1, + VALIDATED = 2, + VALIDATION_ERROR = 3, + CALL_ERROR = 4, +} + +export interface ValidationState { + status: ValidationStatus; + requestErrors?: DeveloperError[]; + validationErrors?: DeveloperError[]; + runError?: string | undefined; + validationDatastoreIndex?: string; + lastRun?: Date; +} + +export interface ValidationResult { + updatedValidationYaml: string | null; +} + +export type ValidationCallback = ( + validated: boolean, + response: ValidationResult +) => boolean; + +/** + * runsValidation over the data found in the datastore, invoking the callback when complete + * and setValidationState on each state change. + */ +function runValidation( + datastore: DataStore, + developerService: DeveloperService, + callback: ValidationCallback, + setValidationState: (state: ValidationState) => void +) { + setValidationState({ + status: ValidationStatus.RUNNING, + }); + + const datastoreIndex = datastore.currentIndex(); + + const schema = + datastore.getSingletonByKind(DataStoreItemKind.SCHEMA).editableContents ?? + ''; + const relationshipsString = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents; + const request = developerService.newRequest(schema, relationshipsString); + if (request === undefined) { + setValidationState({ + status: ValidationStatus.CALL_ERROR, + }); + return; + } + + const validationYaml = buildValidationBlockYaml(datastore); + const assertionsYaml = buildAssertionsYaml(datastore); + + const inputDevErrors: DeveloperError[] = []; + const validationDevErrors: DeveloperError[] = []; + + request.runAssertions(assertionsYaml, (result) => { + if (result.inputError) { + inputDevErrors.push(result.inputError); + return; + } + + validationDevErrors.push(...result.validationErrors); + }); + + let updatedValidationYaml: string | null = null; + request.runValidation(validationYaml, (result) => { + updatedValidationYaml = result.updatedValidationYaml; + + if (result.inputError) { + inputDevErrors.push(result.inputError); + return; + } + + validationDevErrors.push(...result.validationErrors); + }); + + const response = request.execute(); + if (response.internalError) { + setValidationState({ + status: ValidationStatus.VALIDATION_ERROR, + validationDatastoreIndex: datastoreIndex, + runError: response.internalError, + lastRun: new Date(), + }); + return; + } + + if (response.developerErrors) { + inputDevErrors.push(...response.developerErrors.inputErrors); + } + + const validated = + inputDevErrors.length === 0 && validationDevErrors.length === 0; + setValidationState({ + status: validated + ? ValidationStatus.VALIDATED + : ValidationStatus.VALIDATION_ERROR, + requestErrors: inputDevErrors, + validationErrors: validationDevErrors, + validationDatastoreIndex: datastoreIndex, + lastRun: new Date(), + }); + callback(validated, { updatedValidationYaml: updatedValidationYaml }); +} + +export interface ValidationService { + state: ValidationState; + isRunning: boolean; + validationStatusColor: string; + conductValidation: (callback: ValidationCallback) => void; +} + +export function useValidationService( + developerService: DeveloperService, + datastore: DataStore +): ValidationService { + const theme = useTheme(); + + const [validationState, setValidationState] = useState({ + status: ValidationStatus.NOT_RUN, + }); + + const validationStatusColor = { + [ValidationStatus.NOT_RUN]: 'grey', + [ValidationStatus.CALL_ERROR]: 'grey', + [ValidationStatus.RUNNING]: 'white', + [ValidationStatus.VALIDATED]: theme.palette.success.main, + [ValidationStatus.VALIDATION_ERROR]: theme.palette.error.main, + }[validationState.status]; + + const { showAlert } = useAlert(); + const { pushEvent } = useGoogleAnalytics(); + + const conductValidation = (callback: ValidationCallback) => { + runValidation( + datastore, + developerService, + (validated: boolean, result: ValidationResult) => { + pushEvent('conduct-validation', { + success: validated, + }); + return callback(validated, result); + }, + (state: ValidationState) => { + setValidationState(state); + if (state.runError) { + showAlert({ + title: 'Error running validation', + content: state.runError, + buttonTitle: 'Okay', + }); + } + } + ); + }; + + return { + state: validationState, + isRunning: validationState.status === ValidationStatus.RUNNING, + validationStatusColor: validationStatusColor, + conductValidation: conductValidation, + }; +} diff --git a/playground/src/services/validationfileformat.ts b/playground/src/services/validationfileformat.ts new file mode 100644 index 0000000..e64f651 --- /dev/null +++ b/playground/src/services/validationfileformat.ts @@ -0,0 +1,66 @@ +import { + AssertionData, + ValidationData, +} from '@code/spicedb-common/src/validationfileformat'; +import yaml from 'yaml'; +import { DataStore, DataStoreItemKind } from './datastore'; + +/** + * buildValidationYaml builds the YAML validation block. + */ +export const buildValidationBlockYaml = (datastore: DataStore): string => { + const expectedRelations = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ); + const validationBlock = expectedRelations.editableContents; + return validationBlock || '{}'; +}; + +/** + * buildAssertionsYaml builds the YAML assertions block. + */ +export const buildAssertionsYaml = (datastore: DataStore): string => { + const assertions = datastore.getSingletonByKind(DataStoreItemKind.ASSERTIONS); + const assertionsBlock = assertions.editableContents; + return assertionsBlock || '{}'; +}; + +/** + * createValidationYAML creates the full validation YAML file format contents from + * the datastore. + */ +export const createValidationYAML = (datastore: DataStore): string => { + const schema = datastore.getSingletonByKind(DataStoreItemKind.SCHEMA) + .editableContents!; + const relationships = datastore.getSingletonByKind( + DataStoreItemKind.RELATIONSHIPS + ).editableContents!; + const assertions = datastore.getSingletonByKind(DataStoreItemKind.ASSERTIONS) + .editableContents!; + const expectedRelations = datastore.getSingletonByKind( + DataStoreItemKind.EXPECTED_RELATIONS + ).editableContents!; + + const parsed = { + schema: schema, + relationships: relationships, + assertions: yaml.parse(assertions) as AssertionData, + validation: yaml.parse(expectedRelations) as ValidationData, + }; + + return yaml.stringify(parsed, { lineWidth: 0 }); +}; + +/** + * normalizeValidationYAML reformats the expected relations YAML into a YAML string as produced + * by the Playground, to ensure diffs have minimal changes. + */ +export const normalizeValidationYAML = (expectedRelations: string) => { + if (!expectedRelations.trim()) { + return ''; + } + + return yaml.stringify(yaml.parse(expectedRelations) as ValidationData, { + lineWidth: 0, + }); +}; diff --git a/playground/src/setupTests.ts b/playground/src/setupTests.ts new file mode 100644 index 0000000..8194b6f --- /dev/null +++ b/playground/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; \ No newline at end of file diff --git a/playground/src/theme.ts b/playground/src/theme.ts new file mode 100644 index 0000000..0e02712 --- /dev/null +++ b/playground/src/theme.ts @@ -0,0 +1,4 @@ +export const PLAYGROUND_UI_COLORS = { + lightColor: '#A33150', + darkColor: '#85374c', +}; diff --git a/playground/src/types.d.ts b/playground/src/types.d.ts new file mode 100644 index 0000000..2d1af8c --- /dev/null +++ b/playground/src/types.d.ts @@ -0,0 +1,19 @@ +declare module '*.yaml' { + const data: any + export default data +} + +declare module '*.md' { + const data: any + export default data +} + +declare module 'string.prototype.replaceall' { + const fn: (value: string, find: string, replace: string) => string + export default fn +} + +declare module 'visjs-network' { + const data: any + export default data +} diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 0000000..e18c413 --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src" + ] +} diff --git a/playground/yarn.lock b/playground/yarn.lock new file mode 100644 index 0000000..0197409 --- /dev/null +++ b/playground/yarn.lock @@ -0,0 +1,13308 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apidevtools/json-schema-ref-parser@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz#9eb749499b3f8d919e90bb141e4b6f67aee4692d" + integrity sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw== + dependencies: + "@jsdevtools/ono" "^7.1.0" + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + +"@apidevtools/openapi-schemas@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.0.4.tgz#bae1cef77ebb2b3705c7cc6911281da5153c1ab3" + integrity sha512-ob5c4UiaMYkb24pNhvfSABShAwpREvUGCkqjiz/BX9gKZ32y/S22M+ALIHftTAuv9KsFVSpVdIDzi9ZzFh5TCA== + +"@apidevtools/swagger-methods@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-9.0.1.tgz#592e39dc412452ac4b34507a765e4d74ff6eda14" + integrity sha512-Irqybg4dQrcHhZcxJc/UM4vO7Ksoj1Id5e+K94XUOzllqX1n47HEA50EKiXTCQbykxuJ4cYGIivjx/MRSTC5OA== + dependencies: + "@apidevtools/json-schema-ref-parser" "^8.0.0" + "@apidevtools/openapi-schemas" "^2.0.2" + "@apidevtools/swagger-methods" "^3.0.0" + "@jsdevtools/ono" "^7.1.0" + call-me-maybe "^1.0.1" + openapi-types "^1.3.5" + z-schema "^4.2.2" + +"@apollo/client@^3.0.0-beta.23", "@apollo/client@^3.2.9": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.2.9.tgz#a24a7792519adb3af8a74a60d9e83732238d0afd" + integrity sha512-AUvYITKhJNfRNU/Cf8t/N628ADdVah1+l9Qtjd09IwScRfDGvbBTkHMAgcb6hl7vuBVqGwQRq6fPKzHgWRlisg== + dependencies: + "@graphql-typed-document-node/core" "^3.0.0" + "@types/zen-observable" "^0.8.0" + "@wry/context" "^0.5.2" + "@wry/equality" "^0.2.0" + fast-json-stable-stringify "^2.0.0" + graphql-tag "^2.11.0" + hoist-non-react-statics "^3.3.2" + optimism "^0.13.0" + prop-types "^15.7.2" + symbol-observable "^2.0.0" + ts-invariant "^0.5.0" + tslib "^1.10.0" + zen-observable "^0.8.14" + +"@apollo/link-context@^2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@apollo/link-context/-/link-context-2.0.0-beta.3.tgz#0da6cec0cf63ccc180c27bdfb77990c19f4ebab6" + integrity sha512-oqdPayK9opMB80U+/vFiEwoSjtGLchys2vSysaCOE93LdotwQlmO0W0G2INN+tAgUfb+JEAj7rBwlBoXrHOy8A== + dependencies: + "@apollo/client" "^3.0.0-beta.23" + tslib "^1.9.3" + +"@auth0/auth0-react@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@auth0/auth0-react/-/auth0-react-1.1.0.tgz#deeb5f1872f7c0d813cdb9115dfdf0a70a34e1c2" + integrity sha512-FqRzdSkraM2GFOl8NhdlpocALxCd9oNRxiPpIV0Lm5ophHUQRXaE8raTGjnPhHleJGJMw9XoEJ3ye9mjbkvweQ== + dependencies: + "@auth0/auth0-spa-js" "^1.12.1" + +"@auth0/auth0-spa-js@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@auth0/auth0-spa-js/-/auth0-spa-js-1.12.1.tgz#791cdda722afa25f4c8879b93b8d7ab54a26e4c1" + integrity sha512-YdXtA1T2wK4iNG79VlGS/CPfNNezS1nqZURerj71jKSf8ICVKmvJgUNXFEZEwNNU/KFdCCPCHd5wMeWLDyEILw== + dependencies: + abortcontroller-polyfill "^1.5.0" + browser-tabs-lock "^1.2.9" + core-js "^3.6.5" + es-cookie "^1.3.2" + fast-text-encoding "^1.0.3" + promise-polyfill "^8.1.3" + unfetch "^4.1.0" + +"@babel/code-frame@7.10.4", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.1.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4", "@babel/core@^7.9.0": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.5": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.0.tgz#0f67adea4ec39dad6e63345f70eec33014d78c89" + integrity sha512-onl4Oy46oGCzymOXtKMQpI7VXtCbTSHK1kqBydZ6AmzuNcacEVqGk9tZtAS+48IA9IstZcDCgIg8hQKnb7suRw== + dependencies: + "@babel/types" "^7.9.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-builder-react-jsx-experimental@^7.12.4": + version "7.12.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" + integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helpers@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.0.tgz#ab2c1bc4821af766cab51d4868a5038874ea5a12" + integrity sha512-/9GvfYTCG1NWCNwDj9e+XlnSCmWW/r9T794Xi58vPF9WCcnZCAZ0kWLSn54oqP40SUvh1T2G6VwKmFO5AOlW3A== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.0.tgz#f821b32313f07ee570976d3f6238e8d2d66e0a8e" + integrity sha512-Iwyp00CZsypoNJcpXCbq3G4tcDgphtlMwMVrMhhZ//XBkqjXF7LW6V511yk0+pBX3ZwwGnPea+pTKNJiqA7pUg== + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + +"@babel/parser@^7.12.3", "@babel/parser@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@7.12.1", "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-decorators@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.8" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" + integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd" + integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-flow-strip-types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-constant-elements@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz#4471f0851feec3231cc9aaa0dccde39947c1ac1e" + integrity sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@7.12.1", "@babel/plugin-transform-react-display-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz#4c2a647de79c7e2b16bfe4540677ba3121e82a08" + integrity sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" + integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" + integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f" + integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-env@^7.8.4", "@babel/preset-env@^7.9.5": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" + integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.7" + core-js-compat "^3.7.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + 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" + +"@babel/preset-react@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.9.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b" + integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.7" + "@babel/plugin-transform-react-jsx-development" "^7.12.7" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.10.2": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz#02c3029743150188edeb66541195f54600278419" + integrity sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.1.5", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/template@^7.12.7", "@babel/template@^7.3.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/traverse@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" + integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.3.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== + +"@date-io/core@1.x", "@date-io/core@^1.3.13": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" + integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== + +"@date-io/date-fns@^1.1.0": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-1.3.13.tgz#7798844041640ab393f7e21a7769a65d672f4735" + integrity sha512-yXxGzcRUPcogiMj58wVgFjc9qUYrCnnU9eLcyNbsQCmae4jPuZCDoIBR21j8ZURsM7GRtU62VOw5yNd4dDHunA== + dependencies: + "@date-io/core" "^1.3.13" + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@fortawesome/fontawesome-common-types@^0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz#3436795d5684f22742989bfa08f46f50f516f259" + integrity sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w== + +"@fortawesome/fontawesome-svg-core@^1.2.32": + version "1.2.32" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz#da092bfc7266aa274be8604de610d7115f9ba6cf" + integrity sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.32" + +"@fortawesome/free-solid-svg-icons@^5.15.1": + version "5.15.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz#e1432676ddd43108b41197fee9f86d910ad458ef" + integrity sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.32" + +"@fortawesome/react-fontawesome@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.11.tgz#c1a95a2bdb6a18fa97b355a563832e248bf6ef4a" + integrity sha512-sClfojasRifQKI0OPqTy8Ln8iIhnxR/Pv/hukBhWnBz9kQRmqi6JSH3nghlhAY7SUeIIM7B5/D2G8WjX0iepVg== + dependencies: + prop-types "^15.7.2" + +"@graphql-typed-document-node/core@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" + integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + 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" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.0", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71" + integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^26.6.0", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jsdevtools/ono@^7.1.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@material-ui/core@^4.11.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a" + integrity sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/styles" "^4.10.0" + "@material-ui/system" "^4.9.14" + "@material-ui/types" "^5.1.0" + "@material-ui/utils" "^4.10.2" + "@types/react-transition-group" "^4.2.0" + clsx "^1.0.4" + hoist-non-react-statics "^3.3.2" + popper.js "1.16.1-lts" + prop-types "^15.7.2" + react-is "^16.8.0" + react-transition-group "^4.4.0" + +"@material-ui/icons@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.9.1.tgz#fdeadf8cb3d89208945b33dbc50c7c616d0bd665" + integrity sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg== + dependencies: + "@babel/runtime" "^7.4.4" + +"@material-ui/lab@^4.0.0-alpha.56": + version "4.0.0-alpha.56" + resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.56.tgz#ff63080949b55b40625e056bbda05e130d216d34" + integrity sha512-xPlkK+z/6y/24ka4gVJgwPfoCF4RCh8dXb1BNE7MtF9bXEBLN/lBxNTK8VAa0qm3V2oinA6xtUIdcRh0aeRtVw== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.10.2" + clsx "^1.0.4" + prop-types "^15.7.2" + react-is "^16.8.0" + +"@material-ui/pickers@^3.2.2": + version "3.2.10" + resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae" + integrity sha512-B8G6Obn5S3RCl7hwahkQj9sKUapwXWFjiaz/Bsw1fhYFdNMnDUolRiWQSoKPb1/oKe37Dtfszoywi1Ynbo3y8w== + dependencies: + "@babel/runtime" "^7.6.0" + "@date-io/core" "1.x" + "@types/styled-jsx" "^2.2.8" + clsx "^1.0.2" + react-transition-group "^4.0.0" + rifm "^0.7.0" + +"@material-ui/styles@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071" + integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/hash" "^0.8.0" + "@material-ui/types" "^5.1.0" + "@material-ui/utils" "^4.9.6" + clsx "^1.0.4" + csstype "^2.5.2" + hoist-non-react-statics "^3.3.2" + jss "^10.0.3" + jss-plugin-camel-case "^10.0.3" + jss-plugin-default-unit "^10.0.3" + jss-plugin-global "^10.0.3" + jss-plugin-nested "^10.0.3" + jss-plugin-props-sort "^10.0.3" + jss-plugin-rule-value-function "^10.0.3" + jss-plugin-vendor-prefixer "^10.0.3" + prop-types "^15.7.2" + +"@material-ui/system@^4.9.14": + version "4.9.14" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f" + integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.9.6" + csstype "^2.5.2" + prop-types "^15.7.2" + +"@material-ui/types@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b" + integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ== + dependencies: + "@types/react" "*" + +"@material-ui/types@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== + +"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.9.6": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321" + integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw== + dependencies: + "@babel/runtime" "^7.4.4" + prop-types "^15.7.2" + react-is "^16.8.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + dependencies: + mkdirp "^1.0.4" + +"@pmmmwh/react-refresh-webpack-plugin@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.2.tgz#1f9741e0bde9790a0e13272082ed7272a083620d" + integrity sha512-Loc4UDGutcZ+Bd56hBInkm6JyjyCwWy4t2wcDXzN8EDPANgVRj0VP8Nxn0Zq2pc+WKauZwEivQgbDGg4xZO20A== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz#7dd84c17755d62b509577f2db37eb524d7ca88ca" + integrity sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sheerun/mutationobserver-shim@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25" + integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@stripe/react-stripe-js@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.1.2.tgz#a7f5ef5b4d7dc7fa723501b706644414cfe6dcba" + integrity sha512-07hu8RJXwWKGbvdvd1yt1cYvGtDB8jFX+q10f7FQuItUt9rlSo0am3WIx845iMHANiYgxyRb1PS201Yle9xxPQ== + dependencies: + prop-types "^15.7.2" + +"@stripe/stripe-js@^1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.11.0.tgz#00e812d72a7760dae08237875066d263671478ee" + integrity sha512-SDNZKuETBEVkernd1tq8tL6wNfVKrl24Txs3p+4NYxoaIbNaEO7mrln/2Y/WRcQBWjagvhDIM5I6+X1rfK0qhQ== + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + dependencies: + ejs "^2.6.1" + magic-string "^0.25.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.4.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.4.0", "@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.4.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.4.0.tgz#b68bc86e29cf007292b96ced65f80971175632e0" + integrity sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg== + dependencies: + "@babel/core" "^7.9.0" + "@babel/plugin-transform-react-constant-elements" "^7.9.0" + "@babel/preset-env" "^7.9.5" + "@babel/preset-react" "^7.9.4" + "@svgr/core" "^5.4.0" + "@svgr/plugin-jsx" "^5.4.0" + "@svgr/plugin-svgo" "^5.4.0" + loader-utils "^2.0.0" + +"@testing-library/dom@*": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.2.tgz#6d2b7dd21efbd5358b98c2777fc47c252f3ae55e" + integrity sha512-ERxcZSoHx0EcN4HfshySEWmEf5Kkmgi+J7O79yCJ3xggzVlBJ2w/QjJUC+EBkJJ2OeSw48i3IoePN4w8JlVUIA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.10.3" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.1" + pretty-format "^26.4.2" + +"@testing-library/dom@^6.15.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.16.0.tgz#04ada27ed74ad4c0f0d984a1245bb29b1fd90ba9" + integrity sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA== + dependencies: + "@babel/runtime" "^7.8.4" + "@sheerun/mutationobserver-shim" "^0.3.2" + "@types/testing-library__dom" "^6.12.1" + aria-query "^4.0.2" + dom-accessibility-api "^0.3.0" + pretty-format "^25.1.0" + wait-for-expect "^3.0.2" + +"@testing-library/jest-dom@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742" + integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg== + dependencies: + "@babel/runtime" "^7.5.1" + chalk "^2.4.1" + css "^2.2.3" + css.escape "^1.5.1" + jest-diff "^24.0.0" + jest-matcher-utils "^24.0.0" + lodash "^4.17.11" + pretty-format "^24.0.0" + redent "^3.0.0" + +"@testing-library/react@^9.3.2": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.5.0.tgz#71531655a7890b61e77a1b39452fbedf0472ca5e" + integrity sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg== + dependencies: + "@babel/runtime" "^7.8.4" + "@testing-library/dom" "^6.15.0" + "@types/testing-library__react" "^9.1.2" + +"@testing-library/user-event@^7.1.2": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-7.2.1.tgz#2ad4e844175a3738cb9e7064be5ea070b8863a1c" + integrity sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA== + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/aria-query@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/babel__traverse@^7.0.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + dependencies: + "@babel/types" "^7.3.0" + +"@types/color-hash@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/color-hash/-/color-hash-1.0.0.tgz#2671e71d46ce07248ca149ca058bdc01c2dbb975" + integrity sha512-Vj9gPc43pJeILnI0Yh0ds4+1toNUmvVqKxg/5sY8ESZafKo24TY5eCKXwXPym1xcgEMb2Qxy3dRwaYOro4U5Tg== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + +"@types/eslint@^7.2.4": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" + integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + dependencies: + "@types/node" "*" + +"@types/history@*": + version "4.7.7" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.7.tgz#613957d900fab9ff84c8dfb24fa3eef0c2a40896" + integrity sha512-2xtoL22/3Mv6a70i4+4RB7VgbDDORoWwjcqeNysojZA0R7NK17RbY5Gof/2QiFfJgX+KkWghbwJ+d/2SB8Ndzg== + +"@types/hoist-non-react-statics@^3.0.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^24.0.0": + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== + dependencies: + jest-diff "^24.3.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/linkify-it@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" + integrity sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw== + +"@types/lodash.throttle@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/lodash.throttle/-/lodash.throttle-4.1.6.tgz#f5ba2c22244ee42ff6c2c49e614401a870c1009c" + integrity sha512-/UIH96i/sIRYGC60NoY72jGkCJtFN5KVPhEMMMTjol65effe1gPn0tycJqV5tlSwMTzX8FqzB5yAj0rfGHTPNg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*", "@types/lodash@^4.14.164": + version "4.14.164" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.164.tgz#52348bcf909ac7b4c1bcbeda5c23135176e5dfa0" + integrity sha512-fXCEmONnrtbYUc5014avwBeMdhHHO8YJCkOBflUL9EoJBSKZ1dei+VO74fA7JkTHZ1GvZack2TyIw5U+1lT8jg== + +"@types/markdown-it@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-10.0.2.tgz#f93334b9c7821ddb19865dfd91ecf688094c2626" + integrity sha512-FGKiVW1UgeIEAChYAuHcfCd0W4LsMEyrSyTVaZiuJhwR4BwSVUD8JKnzmWAMK2FHNLZSPGUaEkpa/dkZj2uq1w== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "13.9.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349" + integrity sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg== + +"@types/node@^12.0.0": + version "12.12.58" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.58.tgz#46dae9b2b9ee5992818c8f7cee01ff4ce03ab44c" + integrity sha512-Be46CNIHWAagEfINOjmriSxuv7IVcqbGe+sDSg2SYCEz/0CRBy7LRASGfRbD8KZkqoePU73Wsx3UvOSFcq/9hA== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + +"@types/raf@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" + integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== + +"@types/react-copy-to-clipboard@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-4.3.0.tgz#8e07becb4f11cfced4bd36038cb5bdf5c2658be5" + integrity sha512-iideNPRyroENqsOFh1i2Dv3zkviYS9r/9qD9Uh3Z9NNoAAqqa2x53i7iGndGNnJFIo20wIu7Hgh77tx1io8bgw== + dependencies: + "@types/react" "*" + +"@types/react-dom@*", "@types/react-dom@^16.9.0": + version "16.9.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + dependencies: + "@types/react" "*" + +"@types/react-router-dom@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.5.tgz#7c334a2ea785dbad2b2dcdd83d2cf3d9973da090" + integrity sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.8.tgz#4614e5ba7559657438e17766bb95ef6ed6acc3fa" + integrity sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-transition-group@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" + integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.0": + version "16.9.49" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" + integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/stripe-checkout@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/stripe-checkout/-/stripe-checkout-1.0.3.tgz#fdb8104536501d784deb5b5efd943a1e871f6822" + integrity sha512-7JIyo1ou6w6+ee2SETytZocTvYgtGkivv5NVQ53xKv8WbVIYYhNPWwVzg56E47E4S4O55L1UywRR4FC+XgXPWA== + dependencies: + "@types/stripe-v3" "*" + +"@types/stripe-v3@*": + version "3.1.21" + resolved "https://registry.yarnpkg.com/@types/stripe-v3/-/stripe-v3-3.1.21.tgz#24bce837d7e3bc6c959d0b7b77bffac8153953e9" + integrity sha512-lvGDxj4ninw8k7gX0PTU49Hr4sEuYPTNdxpJdF8aKLtSj3W/tUDTeBnkl1ozXkHG+YwflyTUZovWRp/gnqmzcQ== + +"@types/styled-jsx@^2.2.8": + version "2.2.8" + resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.8.tgz#b50d13d8a3c34036282d65194554cf186bab7234" + integrity sha512-Yjye9VwMdYeXfS71ihueWRSxrruuXTwKCbzue4+5b2rjnQ//AtyM7myZ1BEhNhBQ/nL/RE7bdToUoLln2miKvg== + dependencies: + "@types/react" "*" + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/testing-library__dom@*": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-7.5.0.tgz#e0a00dd766983b1d6e9d10d33e708005ce6ad13e" + integrity sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g== + dependencies: + "@testing-library/dom" "*" + +"@types/testing-library__dom@^6.12.1": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz#1aede831cb4ed4a398448df5a2c54b54a365644e" + integrity sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA== + dependencies: + pretty-format "^24.3.0" + +"@types/testing-library__react@^9.1.2": + version "9.1.3" + resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.3.tgz#35eca61cc6ea923543796f16034882a1603d7302" + integrity sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w== + dependencies: + "@types/react-dom" "*" + "@types/testing-library__dom" "*" + pretty-format "^25.1.0" + +"@types/turndown@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/turndown/-/turndown-5.0.0.tgz#2b763b36f783e4e237cea62cdc8f8592b72b9285" + integrity sha512-Y7KZn6SfSv1vzjByJGijrM9w99HoUbLiAgYwe+sGH6RYi5diIGLYOcr4Z1YqR2biFs9K5PnxKv/Fbkmh57pvzg== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^13.0.0": + version "13.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" + integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + dependencies: + "@types/yargs-parser" "*" + +"@types/zen-observable@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.1.tgz#5668c0bce55a91f2b9566b1d8a4c0a8dbbc79764" + integrity sha512-wmk0xQI6Yy7Fs/il4EpOcflG4uonUpYGqvZARESLc2oy4u69fkatFLbJOeW4Q6awO15P4rduAe6xkwHevpXcUQ== + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.9.1.tgz#66758cbe129b965fe9c63b04b405d0cf5280868b" + integrity sha512-QRLDSvIPeI1pz5tVuurD+cStNR4sle4avtHhxA+2uyixWGFjKzJ+EaFVRW6dA/jOgjV5DTAjOxboQkRDE8cRlQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.9.1" + "@typescript-eslint/scope-manager" "4.9.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.9.1", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.9.1.tgz#86633e8395191d65786a808dc3df030a55267ae2" + integrity sha512-c3k/xJqk0exLFs+cWSJxIjqLYwdHCuLWhnpnikmPQD2+NGAx9KjLYlBDcSI81EArh9FDYSL6dslAUSwILeWOxg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.9.1.tgz#2d74c4db5dd5117379a9659081a4d1ec02629055" + integrity sha512-Gv2VpqiomvQ2v4UL+dXlQcZ8zCX4eTkoIW+1aGVWT6yTO+6jbxsw7yQl2z2pPl/4B9qa5JXeIbhJpONKjXIy3g== + dependencies: + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.9.1.tgz#cc2fde310b3f3deafe8436a924e784eaab265103" + integrity sha512-sa4L9yUfD/1sg9Kl8OxPxvpUcqxKXRjBeZxBuZSSV1v13hjfEJkn84n0An2hN8oLQ1PmEl2uA6FkI07idXeFgQ== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/types@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.9.1.tgz#a1a7dd80e4e5ac2c593bc458d75dd1edaf77faa2" + integrity sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz#6e5b86ff5a5f66809e1f347469fadeec69ac50bf" + integrity sha512-bzP8vqwX6Vgmvs81bPtCkLtM/Skh36NE6unu6tsDeU/ZFoYthlTXbBmpIrvosgiDKlWTfb2ZpPELHH89aQjeQw== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/visitor-keys@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz#d76374a58c4ead9e92b454d186fea63487b25ae1" + integrity sha512-9gspzc6UqLQHd7lXQS7oWs+hrYggspv/rk6zzEMhCbYwPE/sF7oxo7GAjkS35Tdlt7wguIG+ViWCPtVZHz/ybQ== + dependencies: + "@typescript-eslint/types" "4.9.1" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@wry/context@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.5.2.tgz#f2a5d5ab9227343aa74c81e06533c1ef84598ec7" + integrity sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw== + dependencies: + tslib "^1.9.3" + +"@wry/equality@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.2.0.tgz#a312d1b6a682d0909904c2bcd355b02303104fb7" + integrity sha512-Y4d+WH6hs+KZJUC8YKLYGarjGekBrhslDbf/R20oV+AakHPINSitHfDRQz3EGcEWc1luXYNUvMhawWtZVWNGvQ== + dependencies: + tslib "^1.9.3" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abortcontroller-polyfill@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.5.0.tgz#2c562f530869abbcf88d949a2b60d1d402e87a7c" + integrity sha512-O6Xk757Jb4o0LMzMOMdWvxpHWrQzruYBaUruFaIOfAQRnWFxfdXYobw12jrVHGtoXk6WiiyYzc0QWN9aL62HQA== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.0, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + 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" + +ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + 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" + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^4.0.2, aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +attr-accept@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" + integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== + +autoprefixer@^9.6.1: + version "9.7.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" + integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== + dependencies: + browserslist "^4.8.3" + caniuse-lite "^1.0.30001020" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.26" + postcss-value-parser "^4.0.2" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +axe-core@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz#70a7855888e287f7add66002211a423937063eaf" + integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ== + +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== + dependencies: + babylon "^6.18.0" + +babel-jest@^26.6.0, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-named-asset-import@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@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-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== + dependencies: + "@babel/core" "7.12.3" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-proposal-decorators" "7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" + "@babel/plugin-proposal-numeric-separator" "7.12.1" + "@babel/plugin-proposal-optional-chaining" "7.12.1" + "@babel/plugin-transform-flow-strip-types" "7.12.1" + "@babel/plugin-transform-react-display-name" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.1" + "@babel/preset-env" "7.12.1" + "@babel/preset-react" "7.12.1" + "@babel/preset-typescript" "7.12.1" + "@babel/runtime" "7.12.1" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" + integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bath-es5@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bath-es5/-/bath-es5-3.0.3.tgz#4e2808e8b33b4a5e3328ec1e9032f370f042193d" + integrity sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-tabs-lock@^1.2.9: + version "1.2.11" + resolved "https://registry.yarnpkg.com/browser-tabs-lock/-/browser-tabs-lock-1.2.11.tgz#59d72c6653b827685b54fca1c0e6eb4aee08ef52" + integrity sha512-R0xXMzQ8CU0v52zSFn3EDGIfsjteMFJ6oIhhZK6+Vhz5NYzSxCP2epLD9PN7e2HprQl2QTReFptwp6c9tdOF0g== + dependencies: + lodash ">=4.17.19" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +browserslist@^4.0.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.8.3: + version "4.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== + dependencies: + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" + +browserslist@^4.14.5, browserslist@^4.15.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" + integrity sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ== + dependencies: + caniuse-lite "^1.0.30001164" + colorette "^1.2.1" + electron-to-chromium "^1.3.612" + escalade "^3.1.1" + node-releases "^1.1.67" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001035: + version "1.0.30001241" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz" + integrity sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ== + +caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001164: + version "1.0.30001241" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz" + integrity sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ== + +canvg@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.6.tgz#4f82a34acc433daa06c494fc255420cbbb05f903" + integrity sha512-eFUy8R/4DgocR93LF8lr+YUxW4PYblUe/Q1gz2osk/cI5n8AsYdassvln0D9QPhLXQ6Lx7l8hwtT8FLvOn2Ihg== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/raf" "^3.4.0" + core-js "3" + raf "^3.4.1" + rgbcolor "^1.0.1" + stackblur-canvas "^2.0.0" + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +clsx@^1.0.2, clsx@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-hash@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/color-hash/-/color-hash-1.0.3.tgz#c0e7952f06d022e548e65da239512bd67d3809ee" + integrity sha1-wOeVLwbQIuVI5l2iOVEr1n04Ce4= + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colornames@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" + integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0, commander@^2.7.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookie@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-to-clipboard@^3: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + dependencies: + browserslist "^4.8.3" + semver "7.0.0" + +core-js-compat@^3.7.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + dependencies: + browserslist "^4.15.0" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" + integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== + +core-js@3, core-js@^3.6.0, core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + 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" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +crypto-random-string@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-3.3.0.tgz#c7a4682b2a87146a1f8b7378ea2606f95775e7e6" + integrity sha512-teWAwfMb1d6brahYyKqcBEb5Yp8PJPvPOdOonXDnvaKOTmKDFNVE8E3Y2XQuzjNV/3XMwHbrX9fHWvrhRKt4Gg== + dependencies: + type-fest "^0.8.1" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-box-model@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== + dependencies: + tiny-invariant "^1.0.6" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-line-break@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-1.1.1.tgz#d5e9bdd297840099eb0503c7310fd34927a026ef" + integrity sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA== + dependencies: + base64-arraybuffer "^0.2.0" + +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== + dependencies: + "@babel/runtime" "^7.8.3" + is-in-browser "^1.0.2" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^2.0.0, css@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + dependencies: + css-tree "1.0.0-alpha.37" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^2.5.2: + version "2.6.13" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" + integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== + +csstype@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" + integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dag-map@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-1.0.2.tgz#e8379f041000ed561fc515475c1ed2c85eece8d7" + integrity sha1-6DefBBAA7VYfxRVHXB7SyF7s6Nc= + +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-fns@^2.0.0-alpha.27: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + +debounce@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz#511e5993dd673b97c87ea47dba0e3892f7e0c983" + integrity sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA== + +dom-accessibility-api@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz#ef3cdb5d3f0d599d8f9c8b18df2fb63c9793739d" + integrity sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA== + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" + integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +dompurify@^2.0.12: + version "2.0.16" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.0.16.tgz#9358430b9df8e7d742441f12355f1341e6cfb749" + integrity sha512-MMNzUQdlvmbXhD0NVxME4hNI72eOlcz9TzO9L8KfmUcI+h97ISON5XagIUm40+JRwV4fGHYqxRpSy844fT9iow== + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.378: + version "1.3.379" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz#81dc5e82a3e72bbb830d93e15bc35eda2bbc910e" + integrity sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg== + +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.612: + version "1.3.619" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.619.tgz#4dc529ae802f5c9c31e7eea830144340539b62b4" + integrity sha512-WFGatwtk7Fw0QcKCZzfGD72hvbcXV8kLY8aFuj0Ip0QRnOtyLYMsc+wXbSjb2w4lk1gcAeNU1/lQ20A+tvuypQ== + +elliptic@^6.0.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a" + integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0, entities@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-cookie@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/es-cookie/-/es-cookie-1.3.2.tgz#80e831597f72a25721701bdcb21d990319acd831" + integrity sha512-UTlYYhXGLOy05P/vKVT2Ui7WtC7NiRzGtJyAKKn32g5Gvcjn7KAClLPWlipCtxIus934dFg9o9jXiBL0nP+t9Q== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-react-app@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== + dependencies: + confusing-browser-globals "^1.0.10" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.0.tgz#a4bef5dc18f9b2bdb41569a4ab05d73805a3d261" + integrity sha512-z7ULdTxuhlRJcEe1MVljePXricuPOrsWfScRXFhNzVD5dmTHWjIF57AxD0e7AbEoLSbjSsaA5S+hCg43WvpXJQ== + dependencies: + lodash "^4.17.15" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jest@^24.1.0: + version "24.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" + integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== + dependencies: + "@typescript-eslint/experimental-utils" "^4.0.1" + +eslint-plugin-jsx-a11y@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.21.5: + version "7.21.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-plugin-testing-library@^3.9.2: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.1.tgz#4dd02306d601c3238fdabf1d1dbc5f2a8e85d531" + integrity sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ== + dependencies: + "@typescript-eslint/experimental-utils" "^3.10.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-webpack-plugin@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.1.tgz#9353ec46a31d29558734a38a05eb14c5760a7144" + integrity sha512-cj8iPWZKuAiVD8MMgTSunyMCAvxQxp5mxoPHZl1UMGkApFXaXJHdCFcCR+oZEJbBNhReNa5SjESIn34uqUbBtg== + dependencies: + "@types/eslint" "^7.2.4" + arrify "^2.0.1" + jest-worker "^26.6.2" + micromatch "^4.0.2" + schema-utils "^3.0.0" + +eslint@^7.11.0: + version "7.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" + integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.0, expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@2.0.1, fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-text-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" + integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + +file-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-selector@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.13.tgz#5efd977ca2bca1700992df1b10e254f4e73d2df4" + integrity sha512-T2efCBY6Ps+jLIWdNQsmzt/UnAjKOEAlsZVdnQztg/BtAZGNL4uX1Jet9cMM8gify/x4CSudreji2HssGBNVIQ== + dependencies: + tslib "^2.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filefy@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/filefy/-/filefy-0.1.10.tgz#174677c8e2fa5bc39a3af0ed6fb492f16b8fbf42" + integrity sha512-VgoRVOOY1WkTpWH+KBy8zcU1G7uQTVsXqhWEgzryB9A5hg2aqCyZ6aQ/5PSzlqM5+6cnVrX6oYV0XqD3HZSnmQ== + +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + 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" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +fontsource-roboto@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fontsource-roboto/-/fontsource-roboto-3.0.3.tgz#99c312babeabce22b3e933b3edf2951d4508f4f7" + integrity sha512-kfsC9qAP6XhwnSDAhg2lhWeaUJfLGXZh7GcLxFiz/4lXdkV2pVhWv2Xp9ES3b3BHdc9UuPrWXXLOphzHIStcOw== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.12" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2, fsevents@^2.1.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== + +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@11.0.1, globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graphql-tag@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" + integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== + +graphql@^15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278" + integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +harmony-reflect@^1.4.6: + version "1.6.1" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" + integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hex-rgb@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.2.0.tgz#fb377f2e5658fc924f1efa189685922e56ecaf0f" + integrity sha512-I7DkKeQ2kR2uyqgbxPgNgClH/rfs1ioKZhZW8VTIAirsxCR5EyhYeywgZbhMScgUbKCkgo6bb6JwA0CLTn9beA== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.2.1, html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" + integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + +html-minifier-terser@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.4.tgz#e8cc02748acb983bd7912ea9660bd31c0702ec32" + integrity sha512-fHwmKQ+GzhlqdxEtwrqLT7MSuheiA+rif5/dZgbz3GjoMXJzcRzy1L9NXoiiyxrnap+q5guSiv8Tz5lrh9g42g== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +html2canvas@^1.0.0-rc.5: + version "1.0.0-rc.7" + resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-rc.7.tgz#70c159ce0e63954a91169531894d08ad5627ac98" + integrity sha512-yvPNZGejB2KOyKleZspjK/NruXVQuowu8NnV2HYG7gW7ytzl+umffbtUI62v2dCHQLDdsK6HIDtyJZ0W3neerA== + dependencies: + css-line-break "1.1.1" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +hyphenate-style-name@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/immer/-/immer-7.0.9.tgz#28e7552c21d39dd76feccd2b800b7bc86ee4a62e" + integrity sha512-Vs/gxoM4DqNAYR7pugIxi0Xc8XAun/uy7AQu4fLLqaTBHxjOP9pJ266Q9MWA/ly4z6rAFZbvViOtihxUZ7O28A== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +install@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776" + integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.0.0, is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= + +is-invalid-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ= + dependencies: + is-glob "^2.0.0" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-valid-path@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8= + dependencies: + is-invalid-path "^0.1.0" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-circus@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" + integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.0" + "@jest/test-result" "^26.6.0" + "@jest/types" "^26.6.0" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.0" + is-generator-fn "^2.0.0" + jest-each "^26.6.0" + jest-matcher-utils "^26.6.0" + jest-message-util "^26.6.0" + jest-runner "^26.6.0" + jest-runtime "^26.6.0" + jest-snapshot "^26.6.0" + jest-util "^26.6.0" + pretty-format "^26.6.0" + stack-utils "^2.0.2" + throat "^5.0.0" + +jest-cli@^26.6.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.0, jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^24.0.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.0, jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" + integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + dependencies: + "@jest/types" "^26.6.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.0, jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.0, jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watch-typeahead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^26.5.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" + integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + dependencies: + "@jest/core" "^26.6.0" + import-local "^3.0.2" + jest-cli "^26.6.0" + +js-base64@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.6.0.tgz#773e1de628f4f298d65a7e9842c50244751f5756" + integrity sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.2.0, jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-deref-sync@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz#cb08b4ff435a48b5a149652d7750fdd071009823" + integrity sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg== + dependencies: + clone "^2.1.2" + dag-map "~1.0.0" + is-valid-path "^0.1.1" + lodash "^4.17.13" + md5 "~2.2.0" + memory-cache "~0.2.0" + traverse "~0.6.6" + valid-url "~1.0.9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" + integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema-draft4@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz#f0af2005054f0f0ade7ea2118614b69dc512d865" + integrity sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU= + +jsonschema@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz#a46bac5d3506a254465bc548876e267c6d0d6464" + integrity sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw== + +jspdf-autotable@3.5.9: + version "3.5.9" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.5.9.tgz#8a625ef2aead44271da95e9f649843c401536925" + integrity sha512-ZRfiI5P7leJuWmvC0jGVXu227m68C2Jfz1dkDckshmDYDeVFCGxwIBYdCUXJ8Eb2CyFQC2ok82fEWO+xRDovDQ== + +jspdf@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.0.0.tgz#cade1cb458cdb75487197284ba942f952d7f4116" + integrity sha512-4qDyU2T6jp0IcTun1mXO1azrZhoQnY2fbaegwBETa6faN7gXKTLRVHYT7cZ4rUNwoqDpz+XydW/sWJ7YT+An+A== + dependencies: + atob "^2.1.2" + btoa "^1.2.1" + optionalDependencies: + canvg "^3.0.6" + core-js "^3.6.0" + dompurify "^2.0.12" + html2canvas "^1.0.0-rc.5" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jss-plugin-camel-case@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.4.0.tgz#46c75ff7fd61c304984c21af5817823f0f501ceb" + integrity sha512-9oDjsQ/AgdBbMyRjc06Kl3P8lDCSEts2vYZiPZfGAxbGCegqE4RnMob3mDaBby5H9vL9gWmyyImhLRWqIkRUCw== + dependencies: + "@babel/runtime" "^7.3.1" + hyphenate-style-name "^1.0.3" + jss "10.4.0" + +jss-plugin-default-unit@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.4.0.tgz#2b10f01269eaea7f36f0f5fd1cfbfcc76ed42854" + integrity sha512-BYJ+Y3RUYiMEgmlcYMLqwbA49DcSWsGgHpVmEEllTC8MK5iJ7++pT9TnKkKBnNZZxTV75ycyFCR5xeLSOzVm4A== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.4.0" + +jss-plugin-global@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.4.0.tgz#19449425a94e4e74e113139b629fd44d3577f97d" + integrity sha512-b8IHMJUmv29cidt3nI4bUI1+Mo5RZE37kqthaFpmxf5K7r2aAegGliAw4hXvA70ca6ckAoXMUl4SN/zxiRcRag== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.4.0" + +jss-plugin-nested@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.4.0.tgz#017d0c02c0b6b454fd9d7d3fc33470a15eea9fd1" + integrity sha512-cKgpeHIxAP0ygeWh+drpLbrxFiak6zzJ2toVRi/NmHbpkNaLjTLgePmOz5+67ln3qzJiPdXXJB1tbOyYKAP4Pw== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.4.0" + tiny-warning "^1.0.2" + +jss-plugin-props-sort@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.4.0.tgz#7110bf0b6049cc2080b220b506532bf0b70c0e07" + integrity sha512-j/t0R40/2fp+Nzt6GgHeUFnHVY2kPGF5drUVlgkcwYoHCgtBDOhTTsOfdaQFW6sHWfoQYgnGV4CXdjlPiRrzwA== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.4.0" + +jss-plugin-rule-value-function@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.4.0.tgz#7cff4a91e84973536fa49b6ebbdbf7f339b01c82" + integrity sha512-w8504Cdfu66+0SJoLkr6GUQlEb8keHg8ymtJXdVHWh0YvFxDG2l/nS93SI5Gfx0fV29dO6yUugXnKzDFJxrdFQ== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.4.0" + tiny-warning "^1.0.2" + +jss-plugin-vendor-prefixer@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.4.0.tgz#2a78f3c5d57d1e024fe7ad7c41de34d04e72ecc0" + integrity sha512-DpF+/a+GU8hMh/948sBGnKSNfKkoHg2p9aRFUmyoyxgKjOeH9n74Ht3Yt8lOgdZsuWNJbPrvaa3U4PXKwxVpTQ== + dependencies: + "@babel/runtime" "^7.3.1" + css-vendor "^2.0.8" + jss "10.4.0" + +jss@10.4.0, jss@^10.0.3: + version "10.4.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.4.0.tgz#473a6fbe42e85441020a07e9519dac1e8a2e79ca" + integrity sha512-l7EwdwhsDishXzqTc3lbsbyZ83tlUl5L/Hb16pHCvZliA9lRDdNBZmHzeJHP0sxqD0t1mrMmMR8XroR12JBYzw== + dependencies: + "@babel/runtime" "^7.3.1" + csstype "^3.0.2" + is-in-browser "^1.1.3" + tiny-warning "^1.0.2" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.1" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +linkify-it@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.2.tgz#f55eeb8bc1d3ae754049e124ab3bb56d97797fb8" + integrity sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ== + dependencies: + uc.micro "^1.0.1" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + +lodash.trimstart@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" + integrity sha1-j/TexTLYJIavWVc8OURZFOlEp/E= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.words@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-4.2.0.tgz#5ecfeaf8ecf8acaa8e0c8386295f1993c9cf4036" + integrity sha1-Xs/q+Oz4rKqODIOGKV8Zk8nPQDY= + +"lodash@>=3.5 <5", lodash@>=4.17.19, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + dependencies: + semver "^6.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-it@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-11.0.1.tgz#b54f15ec2a2193efa66dda1eb4173baea08993d6" + integrity sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ== + dependencies: + argparse "^1.0.7" + entities "~2.0.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +material-table@^1.69.0: + version "1.69.0" + resolved "https://registry.yarnpkg.com/material-table/-/material-table-1.69.0.tgz#9761821c532e750051e512f2ecf714112a1f07ac" + integrity sha512-Pkm/c5ldXwc+/d245dbRH0zSY+00pJ6aWaDD4rBvDBwVGzZfAa+0Ktan13kM+ZujtsAOcDJYFhNx91CMp8Z++Q== + dependencies: + "@date-io/date-fns" "^1.1.0" + "@material-ui/pickers" "^3.2.2" + classnames "^2.2.6" + date-fns "^2.0.0-alpha.27" + debounce "^1.2.0" + fast-deep-equal "2.0.1" + filefy "0.1.10" + jspdf "2.0.0" + jspdf-autotable "3.5.9" + prop-types "^15.6.2" + react-beautiful-dnd "^13.0.0" + react-double-scrollbar "0.0.15" + +material-ui-confirm@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/material-ui-confirm/-/material-ui-confirm-2.1.1.tgz#dbc3ff66502a183966a3f0a2ebb2ff8ba22a148d" + integrity sha512-d671LgozdJP54buZTv+Eemo0ySYTCXF3QqfYKO7axoG/8g659G5+aD7PovYupsfSSOXOzyzpYRhjbIhE4yrPHA== + +material-ui-dropzone@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/material-ui-dropzone/-/material-ui-dropzone-3.5.0.tgz#2d7f36032db96c24ce97b42e4d0053f94e91a9fc" + integrity sha512-3BC6mz/4OEM4ZpbqMfuMN065JQyqfEbifT6/VzIua7Zj4b0DaR5YPCgpN+fL/e8yBgTs9MGBZJQY06p5pfKwvw== + dependencies: + "@babel/runtime" "^7.4.4" + clsx "^1.0.2" + react-dropzone "^10.2.1" + +material-ui-popup-state@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/material-ui-popup-state/-/material-ui-popup-state-1.6.1.tgz#fc1a93c9111ee20370488aef9c6f2b2da5707604" + integrity sha512-I1Cu8hc3RPPTZ7p946q6qQB+n68JuhoiOxclV+wft8bplYGHFLjbNmF59wQMTN6oRZD42QuVtTxDv7LIi0eB8w== + dependencies: + "@babel/runtime" "^7.1.5" + "@material-ui/types" "^4.1.1" + classnames "^2.2.6" + prop-types "^15.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +md5@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memoize-one@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + +memory-cache@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" + integrity sha1-eJCwHVLADI68nVM+H46xfjA0hxo= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime-types@^2.1.27: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-create-react-context@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" + integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== + dependencies: + "@babel/runtime" "^7.5.5" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== + dependencies: + minimist "^1.2.5" + +mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanoid@^3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.52: + version "1.1.52" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" + integrity sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ== + dependencies: + semver "^6.3.0" + +node-releases@^1.1.61, node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +openapi-client-axios@^3.4.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/openapi-client-axios/-/openapi-client-axios-3.6.1.tgz#8e93f4beca97f13f39fe481170c6369a987d8361" + integrity sha512-2p2atwatcbIqMaIncyteUYYj03fLZJ6rWF8m7mXYZrmyvNoZaxQWjIHmNIby1ez11Of8X+5uFvO+8pDQF7bkSg== + dependencies: + axios "^0.19.0" + bath-es5 "^3.0.3" + json-schema-deref-sync "^0.13.0" + lodash "^4.17.15" + openapi-schema-validation "^0.4.2" + openapi-types "^1.3.4" + query-string "^6.5.0" + swagger-parser "^9.0.1" + +openapi-schema-validation@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz#895c29021be02e000f71c51f859da52118eb1e21" + integrity sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w== + dependencies: + jsonschema "1.2.4" + jsonschema-draft4 "^1.0.0" + swagger-schema-official "2.0.0-bab6bed" + +openapi-types@^1.3.4, openapi-types@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-1.3.5.tgz#6718cfbc857fe6c6f1471f65b32bdebb9c10ce40" + integrity sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimism@^0.13.0: + version "0.13.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.13.1.tgz#df2e6102c973f870d6071712fffe4866bb240384" + integrity sha512-16RRVYZe8ODcUqpabpY7Gb91vCAbdhn8FHjlUb2Hqnjjow1j8Z1dlppds+yAsLbreNTVylLC+tNX6DuC2vt3Kw== + dependencies: + "@wry/context" "^0.5.2" + +optimize-css-assets-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + 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" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + dependencies: + dot-case "^3.0.3" + tslib "^1.10.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4: + version "2.2.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== + +picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0, pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +popper.js@1.16.1-lts: + version "1.16.1-lts" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + dependencies: + postcss "^7" + +postcss-calc@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" + integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== + dependencies: + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-safe-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + dependencies: + postcss "^8.1.0" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== + +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.32: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.0.tgz#214be4eda36db762eb8a89d7c7362b9341156eb5" + integrity sha512-vZ8cb6AlN53hHlnPvR+oj7fA46LU05Ysv7O7sNh1ixQrCbtx+d8/h+5tDER9XAccVhkf3aYskAiWmh0DdjNLbw== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +pretty-bytes@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" + integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== + +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-format@^25.1.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^26.4.2, pretty-format@^26.6.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-polyfill@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" + integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== + +promise@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.1, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^6.5.0: + version "6.13.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.2.tgz#3585aa9412c957cbd358fd5eaca7466f05586dda" + integrity sha512-BMmDaUiLDFU1hlM38jTFcRt7HYiGP/zt1sRzrIWm5zpeEuO1rkbPS0ELI3uehoLuuhHDCS8u8lhFN3fEN4JzPQ== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +raf-schd@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" + integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" + integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + dependencies: + core-js "^3.6.5" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + whatwg-fetch "^3.4.1" + +react-beautiful-dnd@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#f70cc8ff82b84bc718f8af157c9f95757a6c3b40" + integrity sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg== + dependencies: + "@babel/runtime" "^7.8.4" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.1.1" + redux "^4.0.4" + use-memo-one "^1.1.1" + +react-contenteditable@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/react-contenteditable/-/react-contenteditable-3.3.5.tgz#febff7a46570fdb2f5ff199e506c512e5924e22e" + integrity sha512-38A7hlRQfb2KQAQT0kIJC2YlQUU7jcyYM4eh1fj6kAYb3Hmk6hHlr0snelyxVSpPXjPdFllrnSsPkzUS5AtrEA== + dependencies: + fast-deep-equal "^2.0.1" + prop-types "^15.7.1" + +react-cookie@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-4.0.3.tgz#ba8e5ea0047c916516e1181a3ad394c9b7580b56" + integrity sha512-cmi6IpdVgTSvjqssqIEvo779Gfqc4uPGHRrKMEdHcqkmGtPmxolGfsyKj95bhdLEKqMdbX8MLBCwezlnhkHK0g== + dependencies: + "@types/hoist-non-react-statics" "^3.0.1" + hoist-non-react-statics "^3.0.0" + universal-cookie "^4.0.0" + +react-copy-to-clipboard@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz#d82a437e081e68dfca3761fbd57dbf2abdda1316" + integrity sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg== + dependencies: + copy-to-clipboard "^3" + prop-types "^15.5.8" + +react-dev-utils@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.1.tgz#30106c2055acfd6b047d2dc478a85c356e66fe45" + integrity sha512-rlgpCupaW6qQqvu0hvv2FDv40QG427fjghV56XyPcP5aKtOAPzNAhQ7bHqk1YdS2vpW1W7aSV3JobedxuPlBAA== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "7.0.9" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.8" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-double-scrollbar@0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/react-double-scrollbar/-/react-double-scrollbar-0.0.15.tgz#e915ab8cb3b959877075f49436debfdb04288fe4" + integrity sha1-6RWrjLO5WYdwdfSUNt6/2wQoj+Q= + +react-dropzone@^10.2.1: + version "10.2.2" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815" + integrity sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA== + dependencies: + attr-accept "^2.0.0" + file-selector "^0.1.12" + prop-types "^15.7.2" + +react-error-overlay@^6.0.8: + version "6.0.8" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.8.tgz#474ed11d04fc6bda3af643447d85e9127ed6b5de" + integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== + +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + +react-onesignal@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-onesignal/-/react-onesignal-1.7.0.tgz#856b3b86567d16da4e5ca1fa7f8152644948ac09" + integrity sha512-iPMchTzpxBpqDISDX0aTjyYS3M6gRLtK9Teb+7X6kLOkW/+alZlL3zAvadexJrg0shKGar1VRSAEuK2/NEovLQ== + +react-openapi-client@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/react-openapi-client/-/react-openapi-client-0.1.5.tgz#41ac840c05ca4520e08e18e957150fde8b20ec08" + integrity sha512-SE1y4sUxjRpQ8Cu6AsGkdzVAKpfHZbPF3LknFooHGUlfvFaFkQi7+e7jmf9yDnUi+82H3ueIlRGsQaqflyJoBA== + dependencies: + openapi-client-axios "^3.4.1" + urs "0.0.5" + +react-redux@^7.1.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985" + integrity sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg== + dependencies: + "@babel/runtime" "^7.5.5" + hoist-non-react-statics "^3.3.0" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.9.0" + +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-transition-group@^4.0.0, react-transition-group@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + 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" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redux@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url-loader@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rgb-hex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-3.0.0.tgz#eab0168cc1279563b18a14605315389142e2e487" + integrity sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rgbcolor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" + integrity sha1-1lBezbMEplldom+ktDMHMGd1lF0= + +rifm@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" + integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ== + dependencies: + "@babel/runtime" "^7.3.1" + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-babel@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-terser@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.31.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + +sass-loader@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.1, schema-utils@^2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" + integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + 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" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.4, sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + 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" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + 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" + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +stackblur-canvas@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.4.0.tgz#2b2eba910cb46f6feae918e1c402f863d602c01b" + integrity sha512-Z+HixfgYV0ss3C342DxPwc+UvN1SYWqoz7Wsi3xEDWEnaBkSCL3Ey21gF4io+WlLm8/RIrSnCrDBIEcH4O+q5Q== + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-to-color@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/string-to-color/-/string-to-color-2.2.2.tgz#46210bf7777dc9198dcdf997bd18ae6749cc9a73" + integrity sha512-XeA2goP7PNsSlz8RRn6KhYswnMf5Tl+38ajfy8n4oZJyMGC4qqKgHNHsZ/3qwvr42NRIjf9eSr721SyetDeMkA== + dependencies: + colornames "^1.1.1" + hex-rgb "^4.1.0" + lodash.padend "^4.6.1" + lodash.trimstart "^4.5.1" + lodash.words "^4.2.0" + rgb-hex "^3.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0, strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +swagger-parser@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/swagger-parser/-/swagger-parser-9.0.1.tgz#338e7e1ec10699069741535a7ef227a6efccbcd4" + integrity sha512-oxOHUaeNetO9ChhTJm2fD+48DbGbLD09ZEOwPOWEqcW8J6zmjWxutXtSuOiXsoRgDWvORYlImbwM21Pn+EiuvQ== + dependencies: + "@apidevtools/swagger-parser" "9.0.1" + +swagger-schema-official@2.0.0-bab6bed: + version "2.0.0-bab6bed" + resolved "https://registry.yarnpkg.com/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz#70070468d6d2977ca5237b2e519ca7d06a2ea3fd" + integrity sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0= + +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +symbol-observable@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" + integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + 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" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.3: + version "4.6.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^4.6.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +traverse@~0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-invariant@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.5.1.tgz#4171fdb85f72a40381c147afd97c12154ada2abc" + integrity sha512-k3UpDNrBZpqJFnAAkAHNmSHtNuCxcU6xLiziPgalHRKZHme6T6jnKC8CcXDmk1zbHLQM8pc+rNC1Q6FvXMAl+g== + dependencies: + tslib "^1.9.3" + +ts-pnp@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +ts-pnp@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a" + integrity sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^1.8.1, tslib@^1.9.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +turndown@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/turndown/-/turndown-6.0.0.tgz#c083d6109a9366be1b84b86b20af09140ea4b413" + integrity sha512-UVJBhSyRHCpNKtQ00mNWlYUM/i+tcipkb++F0PrOpt0L7EhNd0AX9mWEpL2dRFBu7LWXMp4HgAMA4OeKKnN7og== + dependencies: + jsdom "^16.2.0" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@~3.7.2: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +unfetch@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" + integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universal-cookie@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" + integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== + dependencies: + "@types/cookie" "^0.3.3" + cookie "^0.4.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +urs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/urs/-/urs-0.0.5.tgz#fe2b8b4feac71acd392b3e51bbca9dbfb13cce8c" + integrity sha512-2pHTJHCdQbRTRsKLDmSrVrmASIePBmsK+m1sAIHsj5e5iTs5Xy8EA1HGHYr1yaY5S1aX2rFmNMgz7X1vFtwHnQ== + +use-memo-one@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" + integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +valid-url@~1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validator@^12.0.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-12.2.0.tgz#660d47e96267033fd070096c3b1a6f2db4380a0a" + integrity sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +wait-for-expect@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" + integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.4.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" + integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.3.0.tgz#d1e11e565334486cdb280d3101b9c3fd1c867582" + integrity sha512-BQRf/ej5Rp3+n7k0grQXZj9a1cHtsp4lqj01p59xBWFKdezR8sO37XnpafwNqiFac/v2Il12EIMjX/Y4VZtT8Q== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workbox-background-sync@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" + integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + dependencies: + workbox-core "^5.1.4" + +workbox-broadcast-update@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" + integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + dependencies: + workbox-core "^5.1.4" + +workbox-build@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" + integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^8.1.0" + glob "^7.1.6" + lodash.template "^4.5.0" + pretty-bytes "^5.3.0" + rollup "^1.31.1" + rollup-plugin-babel "^4.3.3" + rollup-plugin-terser "^5.3.1" + source-map "^0.7.3" + source-map-url "^0.4.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + tempy "^0.3.0" + upath "^1.2.0" + workbox-background-sync "^5.1.4" + workbox-broadcast-update "^5.1.4" + workbox-cacheable-response "^5.1.4" + workbox-core "^5.1.4" + workbox-expiration "^5.1.4" + workbox-google-analytics "^5.1.4" + workbox-navigation-preload "^5.1.4" + workbox-precaching "^5.1.4" + workbox-range-requests "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + workbox-streams "^5.1.4" + workbox-sw "^5.1.4" + workbox-window "^5.1.4" + +workbox-cacheable-response@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" + integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + dependencies: + workbox-core "^5.1.4" + +workbox-core@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" + integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + +workbox-expiration@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" + integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + dependencies: + workbox-core "^5.1.4" + +workbox-google-analytics@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" + integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + dependencies: + workbox-background-sync "^5.1.4" + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + +workbox-navigation-preload@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" + integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + dependencies: + workbox-core "^5.1.4" + +workbox-precaching@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" + integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + dependencies: + workbox-core "^5.1.4" + +workbox-range-requests@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" + integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + dependencies: + workbox-core "^5.1.4" + +workbox-routing@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" + integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + dependencies: + workbox-core "^5.1.4" + +workbox-strategies@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" + integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-streams@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" + integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-sw@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" + integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + +workbox-webpack-plugin@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" + integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + dependencies: + "@babel/runtime" "^7.5.5" + fast-json-stable-stringify "^2.0.0" + source-map-url "^0.4.0" + upath "^1.1.2" + webpack-sources "^1.3.0" + workbox-build "^5.1.4" + +workbox-window@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" + integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + dependencies: + workbox-core "^5.1.4" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yaml@^1.7.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.2.tgz#a29c03f578faafd57dcb27055f9a5d569cb0c3d9" + integrity sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg== + dependencies: + "@babel/runtime" "^7.8.7" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +z-schema@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-4.2.3.tgz#85f7eea7e6d4fe59a483462a98f511bd78fe9882" + integrity sha512-zkvK/9TC6p38IwcrbnT3ul9in1UX4cm1y/VZSs4GHKIiDCrlafc+YQBgQBUdDXLAoZHf2qvQ7gJJOo6yT1LH6A== + dependencies: + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + validator "^12.0.0" + optionalDependencies: + commander "^2.7.1" + +zen-observable@^0.8.14: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/scripts/copy-build.sh b/scripts/copy-build.sh new file mode 100755 index 0000000..333da43 --- /dev/null +++ b/scripts/copy-build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +cp wasm/*.wasm playground/build/static +mkdir -p playground/build/static/schemas +cp -R examples/schemas/* playground/build/static/schemas +ls playground/build/static/schemas > playground/build/static/schemas/_all + +mkdir -p build +cp -R playground/build/* build diff --git a/scripts/update-spicedb.sh b/scripts/update-spicedb.sh new file mode 100755 index 0000000..5bceb52 --- /dev/null +++ b/scripts/update-spicedb.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh + +set -e +if [ ! -d "spicedb" ] ; then + git clone https://github.com/authzed/spicedb.git +fi +cd spicedb +git checkout 3b37d794c689d635f62d94b868abe3cb66e109f0 +cd pkg/development/wasm +GOOS=js GOARCH=wasm go build -o main.wasm +mv main.wasm ../../../../wasm diff --git a/scripts/update-zed.sh b/scripts/update-zed.sh new file mode 100755 index 0000000..0c5016f --- /dev/null +++ b/scripts/update-zed.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh + +set -e +if [ ! -d "zed" ] ; then + git clone https://github.com/authzed/zed.git +fi +cd zed +git checkout e4815f1475e320c0b008f7d016db59ee158a965c +cd pkg/wasm +GOOS=js GOARCH=wasm go build -o zed.wasm +mv zed.wasm ../../../wasm diff --git a/spicedb-common/README.md b/spicedb-common/README.md new file mode 100644 index 0000000..0589c3e --- /dev/null +++ b/spicedb-common/README.md @@ -0,0 +1,13 @@ +# SpiceDB Common + +SpiceDB Common contains general data and functions for interacting with SpiceDB and SpiceDB related functionality such as parsers, generated code from protodefs, and service interfaces. + +## Installing dependencies + +Run `yarn install` in the *parent* directory. + +### Referencing + +```ts +import parseFileFormat from "@code/spicedb-common/src/fileformat"; +``` diff --git a/spicedb-common/buf.dev.gen.yaml b/spicedb-common/buf.dev.gen.yaml new file mode 100755 index 0000000..f38a1f4 --- /dev/null +++ b/spicedb-common/buf.dev.gen.yaml @@ -0,0 +1,9 @@ +#!/usr/bin/env -S buf generate ../../spicedb/proto/internal/developer/v1/developer.proto --template +--- +version: 'v1' +plugins: + - plugin: buf.build/community/timostamm-protobuf-ts:v2.9.1 + out: 'src/protodevdefs' + opt: + - long_type_string + - generate_dependencies diff --git a/spicedb-common/package.json b/spicedb-common/package.json new file mode 100644 index 0000000..ab32678 --- /dev/null +++ b/spicedb-common/package.json @@ -0,0 +1,43 @@ +{ + "name": "@code/spicedb-common", + "version": "0.1.0", + "description": "", + "scripts": { + "test": "react-scripts test", + "lint": "../node_modules/.bin/eslint src", + "lint-fix": "../node_modules/.bin/eslint --fix src" + }, + "author": "", + "eslintConfig": { + "extends": "react-app" + }, + "peerDependencies": { + "@apollo/client": "^3.3.21", + "@apollo/link-context": "^2.0.0-beta.3", + "@material-ui/core": "^4.11.2", + "@material-ui/icons": "^4.11.2", + "@material-ui/labs": "^4.11.2", + "@types/parsimmon": "^1.10.6", + "google-protobuf": "^3.15.0-rc.1", + "graphql": "16.0.1", + "grpc-web": "^1.2.1", + "parsimmon": "^1.16.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", + "string-to-color": "^2.2.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.4.0", + "@fortawesome/free-solid-svg-icons": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@glideapps/glide-data-grid": "^4.0.2", + "@glideapps/glide-data-grid-cells": "^4.0.2", + "@protobuf-ts/plugin": "^2.6.0", + "ajv": "^8.11.0", + "dequal": "^2.0.2", + "react-cookie": "^4.1.1", + "string-to-color": "^2.2.2" + } +} diff --git a/spicedb-common/src/authn/provider.tsx b/spicedb-common/src/authn/provider.tsx new file mode 100644 index 0000000..4a34c6e --- /dev/null +++ b/spicedb-common/src/authn/provider.tsx @@ -0,0 +1,86 @@ +import React, { PropsWithChildren, useEffect } from 'react'; +import { OIDCProvider, useAuthentication } from './useauthentication'; + +/** + * OIDCConfig is the configuration for OIDC authentication. + */ +export interface OIDCConfig { + /** + * urlPrefix is the prefix for all OIDC urls. + */ + urlPrefix: string; +} + +/** + * AuthnConfig is the generic application configuration for the authentication provider. + */ +export type AuthnConfig = + | { + authentication: 'oidc'; + oidc: OIDCConfig; + } + | { + authentication: 'none'; + }; + +export type AllowedAuthenticationTypes = 'oidc' | 'none'; + +const AUTHN_ENGINES = ['oidc', 'none']; + +/** + * AuthnProvider is a provider which injects the correct Authentication service provider into + * the current context. + */ +export function AuthnProvider( + props: PropsWithChildren<{ config: AuthnConfig }> +) { + if (!props.config.authentication) { + throw Error('Missing authentication configuration'); + } + + if (!AUTHN_ENGINES.includes(props.config.authentication)) { + throw Error( + `Invalid authentication engine configured: ${props.config.authentication}` + ); + } + + return ( + + {props.config.authentication === 'oidc' && ( + {props.children} + )} + {props.config.authentication === 'none' && <>{props.children}} + + ); +} + +export const AuthnConfigContext = React.createContext( + undefined +); + +/** + * AuthenticationRequired is a wrapping component which will only render its children if the user + * is authenticated. Otherwise, the loadingView will be displayed and the user will be redirected + * to login. + */ +export function AuthenticationRequired( + props: PropsWithChildren<{ loadingView: () => JSX.Element }> +) { + const { user, isLoading, login } = useAuthentication(); + useEffect(() => { + if (isLoading) { + return; + } + + if (!user) { + login(); + } + }, [isLoading, user, login]); + + return ( +
+ {isLoading && props.loadingView()} + {user !== undefined && props.children} +
+ ); +} diff --git a/spicedb-common/src/authn/useauthentication.tsx b/spicedb-common/src/authn/useauthentication.tsx new file mode 100644 index 0000000..7fe610e --- /dev/null +++ b/spicedb-common/src/authn/useauthentication.tsx @@ -0,0 +1,200 @@ +import React, { + createContext, + PropsWithChildren, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; +import { AuthnConfigContext, OIDCConfig } from './provider'; +import { UserProps } from './user'; + +/** + * AuthenticationService defines the interface for any authentication services used in the frontend. + */ +export interface AuthenticationService { + /** + * user is the current user or undefined if none. + */ + user: UserProps | undefined; + + /** + * isLoading indicates whether the current user is loading. + */ + isLoading: boolean; + + /** + * login performs the login operation, *including the redirect* + */ + login: () => void; + + /** + * loginWithPopup performs login withn popup, if applicable. + */ + loginWithPopup: () => void; + + /** + * logout performs the logout operation, *including the redirect* + */ + logout: () => void; + + /** + * getAuthToken returns the token for the current user (if any) to be sent to API calls. + */ + getAuthToken: () => Promise; +} + +/** + * useAuthentication returns an AuthenticationService. Note that this hook can *ONLY* be used under + * an AuthnProvider in context. + */ +export function useAuthentication(): AuthenticationService { + let authnConfig = undefined; + try { + authnConfig = useContext(AuthnConfigContext); + } catch (e) { + // NOTE: in testing, useContext will fail. + } + + if (!authnConfig) { + return { + user: undefined, + isLoading: true, + login: () => undefined, + loginWithPopup: () => undefined, + logout: () => undefined, + getAuthToken: async () => undefined, + }; + } + + switch (authnConfig.authentication) { + case 'oidc': + return useOIDCService(authnConfig.oidc); + + default: + return useNoAuthService(); + } +} + +/** + * OIDCStateContext holds the state in context for the OIDC provider. + */ +const OIDCStateContext = createContext(undefined); + +interface OIDCState { + called: boolean; + loading: boolean; + error: string | undefined; + currentUser: UserProps | undefined; +} + +/** + * OIDCProvider is the authentication provider implementation for OIDC. Should be instantiated + * by AuthnProvider. + */ +export function OIDCProvider(props: PropsWithChildren<{ config: OIDCConfig }>) { + const [currentState, setCurrentState] = useState({ + called: false, + loading: true, + error: undefined, + currentUser: undefined, + }); + + if (props.config.urlPrefix.endsWith('/')) { + throw Error('OIDC URL prefix must be without an ending slash'); + } + + useEffect(() => { + if (props.config.urlPrefix && !currentState.called) { + setCurrentState({ + called: true, + loading: true, + error: undefined, + currentUser: undefined, + }); + + (async () => { + const result = await fetch(`${props.config.urlPrefix}/userinfo`); + if (result.status === 403) { + setCurrentState({ + called: true, + loading: false, + error: undefined, + currentUser: undefined, + }); + return; + } + + if (result.status / 100 == 5) { + setCurrentState({ + called: true, + loading: false, + error: await result.text(), + currentUser: undefined, + }); + return; + } + + setCurrentState({ + called: true, + loading: false, + error: undefined, + currentUser: await result.json(), + }); + })(); + } + }, [props.config, currentState]); + + return ( + + {props.children} + + ); +} + +function useOIDCService(oidc: OIDCConfig): AuthenticationService { + const currentState = useContext(OIDCStateContext); + const login = useCallback(() => { + if (!currentState || currentState.error || currentState.loading) { + return; + } + + window.location.assign(`${oidc.urlPrefix}/login`); + }, [currentState]); + + const logout = useCallback(() => { + window.location.assign(`${oidc.urlPrefix}/logout`); + }, []); + + const service = useMemo(() => { + return { + user: currentState?.currentUser, + isLoading: + currentState === undefined || + currentState.loading || + !currentState.called, + login: login, + loginWithPopup: login, + logout: logout, + getAuthToken: async () => undefined, + }; + }, [currentState, login, logout]); + + return service; +} + +function useNoAuthService(): AuthenticationService { + return { + user: undefined, + isLoading: false, + loginWithPopup: () => { + throw Error('Login disabled'); + }, + login: () => { + throw Error('Login disabled'); + }, + logout: () => {}, + getAuthToken: async () => undefined, + }; +} diff --git a/spicedb-common/src/authn/user.ts b/spicedb-common/src/authn/user.ts new file mode 100644 index 0000000..65f3775 --- /dev/null +++ b/spicedb-common/src/authn/user.ts @@ -0,0 +1,29 @@ +/** + * Defines the properties for a User. Should be a superset of the type defined in playground-ui. + */ +export interface UserProps { + /** + * id is the unique ID for the user. + */ + id: string; + + /** + * The username of the user. + */ + username: string; + + /** + * The user's avatar URL, if any. + */ + avatarUrl?: string | null; + + /** + * The full name of the user. + */ + fullName?: string | null; + + /** + * The email address for the user, if any. + */ + emailAddress?: string | null; +} diff --git a/spicedb-common/src/components/ExamplesDialog.tsx b/spicedb-common/src/components/ExamplesDialog.tsx new file mode 100644 index 0000000..ad80476 --- /dev/null +++ b/spicedb-common/src/components/ExamplesDialog.tsx @@ -0,0 +1,147 @@ +import MarkdownView from '@code/playground-ui/src/MarkdownView'; +import TabPanel from '@code/playground-ui/src/TabPanel'; +import { Tabs } from '@material-ui/core'; +import AppBar from '@material-ui/core/AppBar'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import IconButton from '@material-ui/core/IconButton'; +import Slide from '@material-ui/core/Slide'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import Tab from '@material-ui/core/Tab'; +import { TransitionProps } from '@material-ui/core/transitions/transition'; +import CloseIcon from '@material-ui/icons/Close'; +import React, { useEffect, useState } from 'react'; +import { Example, LoadExamples } from '../examples'; + +const Transition = React.forwardRef(function Transition( + props: TransitionProps & { children?: React.ReactElement }, + ref: React.Ref +) { + return ; +}); + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + appBar: { + display: 'grid', + gridTemplateColumns: '1fr auto', + }, + markdown: { + padding: theme.spacing(2), + backgroundColor: theme.palette.background.default, + '& img': { + maxWidth: '75%', + padding: theme.spacing(2), + border: '1px solid transparent', + borderColor: theme.palette.background.paper, + backgroundColor: '#F6F6F6', + }, + '& a': { + color: theme.palette.getContrastText(theme.palette.background.default), + }, + '& code': { + backgroundColor: theme.palette.background.paper, + padding: theme.spacing(0.25), + }, + '& pre': { + backgroundColor: theme.palette.background.paper, + border: '1px solid transparent', + borderColor: theme.palette.background.default, + padding: theme.spacing(2), + '& code': { + padding: 0, + }, + }, + }, + exButtonBar: { + padding: theme.spacing(2), + backgroundColor: theme.palette.background.default, + float: 'right', + }, + exampleBar: { + backgroundColor: theme.palette.background.paper, + }, + }) +); + +export default function ExamplesDialog(props: { + offset: number; + loadExampleData: (ex: Example) => void; +}) { + const classes = useStyles(); + const [open, setOpen] = useState(true); + const [examples, setExamples] = useState([]); + const [currentTabIndex, setCurrentTabIndex] = useState(''); + + const handleClose = () => { + setOpen(false); + }; + + useEffect(() => { + (async () => { + const examples = await LoadExamples(); + setExamples(examples); + setCurrentTabIndex(examples[0].id); + })(); + }, []); + + const loadExampleData = (ex: Example) => { + props.loadExampleData(ex); + setOpen(false); + }; + + return ( +
+ + + , + selectedTabIndex: string + ) => setCurrentTabIndex(selectedTabIndex)} + aria-label="Tabs" + indicatorColor="primary" + > + {examples.map((ex: Example) => { + return ; + })} + + + + + + {examples.map((ex: Example) => { + return ( + +
+ +
+
+ +
+
+ ); + })} +
+
+ ); +} diff --git a/spicedb-common/src/components/ReadOnlyRelationshipsGrid.tsx b/spicedb-common/src/components/ReadOnlyRelationshipsGrid.tsx new file mode 100644 index 0000000..f0fc212 --- /dev/null +++ b/spicedb-common/src/components/ReadOnlyRelationshipsGrid.tsx @@ -0,0 +1,74 @@ +import { createStyles, makeStyles, Theme } from "@material-ui/core/styles"; +import Table from "@material-ui/core/Table"; +import TableBody from "@material-ui/core/TableBody"; +import TableCell from "@material-ui/core/TableCell"; +import TableHead from "@material-ui/core/TableHead"; +import TableRow from "@material-ui/core/TableRow"; +import React from "react"; +import { RelationTuple as Relationship } from "../protodevdefs/core/v1/core"; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + table: { + backgroundColor: theme.palette.background.default, + }, + def: { + color: "#8787ff", + }, + rel: { + color: "#ffa887", + }, + cell: { + fontWeight: "bold", + width: "16%", + }, + }) +); + +export function ReadOnlyRelationshipsGrid(props: { + relationships: Relationship[]; + hideSubjectRelation?: boolean; +}) { + const classes = useStyles(); + + return ( + + + + Object Type + Object ID + Relation + Subject Type + Subject ID + {props.hideSubjectRelation !== true && ( + Subject Relation + )} + + + + {props.relationships.map((relationship: Relationship) => { + return ( + + + {relationship.resourceAndRelation?.namespace} + + + {relationship.resourceAndRelation?.objectId} + + + {relationship.resourceAndRelation?.relation} + + + {relationship.subject?.namespace} + + {relationship.subject?.objectId} + {props.hideSubjectRelation !== true && ( + {relationship.subject?.relation} + )} + + ); + })} + +
+ ); +} diff --git a/spicedb-common/src/components/TenantLogo.tsx b/spicedb-common/src/components/TenantLogo.tsx new file mode 100644 index 0000000..5c5b253 --- /dev/null +++ b/spicedb-common/src/components/TenantLogo.tsx @@ -0,0 +1,95 @@ +import { faProjectDiagram } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import Avatar from '@material-ui/core/Avatar'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import React from "react"; +import stc from 'string-to-color'; + +/** + * TenantKind holds the different kinds for a tenant. + */ +export enum TenantKind { + DEVELOPMENT = "DEVELOPMENT", + PRODUCTION = "PRODUCTION", + SYSTEM = "SYSTEM" +} + +/** + * Tenant represents a single tenant under an organization. + */ +export interface Tenant { + /** + * id is the unique ID for the tenant. + */ + id: string + + /** + * slug is the unique slug for the tenant. + */ + slug: string + + /** + * name is the human-readable name of the tenant. + */ + name: string + + /** + * description is the human-readable description for the tenant. + */ + description: string + + /** + * kind is the kind of the tenant. + */ + kind: TenantKind + +} + +interface styleProps { + avatarColor: string + large: boolean | undefined + kind: TenantKind +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + avatar: { + height: (props: styleProps) => props.large ? '3rem' : '1.5rem', + width: (props: styleProps) => props.large ? '3rem' : '1.5rem', + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + '& svg': { + marginRight: 0 + }, + }, + })); + +/** + * Defines the properties for the TenantLogo. + */ +interface TenantLogoProps { + /** + * The tenant. + */ + tenant: Tenant; + + /** + * className is the custom CSS class name for this component, if any. + */ + className?: string + + /** + * large indicates the logo should be large. + */ + large?: boolean +} + +export default function TenantLogo(props: TenantLogoProps) { + let avatarColor = stc(props.tenant.slug); + const classes = useStyles({ 'avatarColor': avatarColor, 'large': props.large, 'kind': props.tenant.kind }); + + return + + +} \ No newline at end of file diff --git a/spicedb-common/src/components/graph/TenantGraph.tsx b/spicedb-common/src/components/graph/TenantGraph.tsx new file mode 100644 index 0000000..7512b60 --- /dev/null +++ b/spicedb-common/src/components/graph/TenantGraph.tsx @@ -0,0 +1,157 @@ +import VisNetworkGraph from '@code/playground-ui/src/VisNetworkGraph'; +import { ParsedSchema } from '@code/spicedb-common/src/parsers/dsl/dsl'; +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; +import useMediaQuery from '@material-ui/core/useMediaQuery'; +import React from 'react'; +import { TextRange } from '../../parsers/dsl/dsl'; +import { + ActiveInfo, + findActive, + generateTenantGraph, + LocalEdge, + LocalNode, + RELATIONSHIP_TABLE_CLASS_NAME, +} from './builder'; + +export interface TenantGraphProps { + /** + * schema is the parsed schema. + */ + schema: ParsedSchema | undefined; + + /** + * relationships are the test relationships for the schema. + */ + relationships?: Relationship[] | undefined; + + /** + * onBrowseRequested is invoked if the user has requested a browse to the specific + * range in the schema. + */ + onBrowseRequested?: (range: TextRange | undefined) => void; + + /** + * active contains the active namespace and position information for highlighting + * in the graph. + */ + active?: ActiveInfo; +} + +interface StyleProps { + prefersDarkMode: boolean; +} + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + graph: { + '& .vis-tooltip': { + backgroundColor: theme.palette.background.paper, + color: theme.palette.text.primary, + }, + [`& .${RELATIONSHIP_TABLE_CLASS_NAME}`]: { + borderCollapse: 'collapse', + '& td': { + padding: 0, + margin: 0, + color: (props: StyleProps) => + props.prefersDarkMode + ? theme.palette.grey[500] + : theme.palette.grey[700], + fontSize: '85%', + '&:nth-child(1)': { + color: (props: StyleProps) => + props.prefersDarkMode ? '#8787ff' : '#4242ff', + }, + '&:nth-child(3)': { + color: theme.palette.text.primary, + fontSize: '95%', + fontWeight: 'bold', + }, + '&:nth-child(5)': { + color: (props: StyleProps) => + props.prefersDarkMode ? '#ffa887' : '#883425', + }, + '&:nth-child(7)': { + color: (props: StyleProps) => + props.prefersDarkMode ? '#8787ff' : '#4242ff', + }, + '&:nth-child(9)': { + color: theme.palette.text.primary, + fontSize: '95%', + fontWeight: 'bold', + }, + '&:nth-child(11)': { + color: theme.palette.text.secondary, + fontSize: '95%', + }, + '&.target-permission': { + color: (props: StyleProps) => + props.prefersDarkMode ? '#1acc92' : '#1acc92', + fontSize: '95%', + }, + '&.target-relation': { + color: (props: StyleProps) => + props.prefersDarkMode ? '#ffa887' : '#883425', + fontSize: '95%', + }, + }, + }, + }, + graphContainer: { + width: '100%', + height: '100%', + position: 'relative', + }, + toggle: { + position: 'absolute', + bottom: theme.spacing(1), + right: theme.spacing(1), + }, + }) +); + +/** + * TenantGraph renders a graphical view of the schema configured in a Tenant. + */ +export default function TenantGraph(props: TenantGraphProps) { + const graph = generateTenantGraph(props.schema, props.relationships); + + const handleDoubleClicked = (nodes: LocalNode[], edges: LocalEdge[]) => { + if (props.onBrowseRequested === undefined) { + return; + } + + let rangeToShow: TextRange | undefined = undefined; + + if (nodes.length === 0 && edges.length === 1) { + rangeToShow = edges[0].sourceInfo?.parserRange; + } else if (nodes.length === 1) { + rangeToShow = nodes[0].sourceInfo?.parserRange; + } + + if (rangeToShow !== undefined) { + props.onBrowseRequested(rangeToShow); + } + }; + + const { nodes, edges } = graph; + const selected = { + nodes: findActive(nodes, props.active) ?? [], + edges: findActive(edges, props.active) ?? [], + }; + + const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); + const classes = useStyles({ prefersDarkMode }); + + return ( +
+ + className={classes.graph} + graph={graph} + selected={selected} + onDblClicked={handleDoubleClicked} + /> +
+ ); +} diff --git a/spicedb-common/src/components/graph/builder.ts b/spicedb-common/src/components/graph/builder.ts new file mode 100644 index 0000000..337142a --- /dev/null +++ b/spicedb-common/src/components/graph/builder.ts @@ -0,0 +1,639 @@ +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import { VisEdge, VisNode } from '@code/playground-ui/src/VisNetworkGraph'; +import { emphasize } from '@material-ui/core/styles'; +import { schemeCategory10 } from 'd3-scale-chromatic'; +import { + ParsedArrowExpression, + ParsedBinaryExpression, + ParsedExpression, + ParsedRelationRefExpression, + ParsedSchema, + TextRange, + TypeRef, +} from '../../parsers/dsl/dsl'; +import { + PermissionHandle, + RelationHandle, + RelationLink, + RelationOrPermissionHandle, + TypeHandle, + TypeSet, +} from './typeset'; + +export interface ActiveInfo { + isSchema?: boolean; + position: { + lineNumber: number; + column: number; + }; +} + +export type LocalNode = VisNode & WithSourceInfo; +export type LocalEdge = VisEdge & WithSourceInfo; + +export const RELATIONSHIP_TABLE_CLASS_NAME = 'relationship-table'; + +export const COLORS = { + tenant: '#aaaaaa11', + type: '#8787ff', + relation: '#ffa887', + typetorelation: '#ffa88722', + permission: '#1acc92', + typetopermission: '#1acc9222', + userset: '#ab00a4', + highlight: (color: string) => emphasize(color, 0.4), + dataref: '#fff', +}; + +const REWRITE_COLORS = { + union: 'green', + intersection: 'orange', + exclusion: 'red', +}; + +const REWRITE_OPS = { + union: '+', + intersection: '&', + exclusion: '-', +}; + +const exprId = (expr: ParsedExpression) => { + return `${expr.range.startIndex.line}${expr.range.startIndex.column}${expr.range.endIndex.offset}`; +}; + +const NodeIDs = { + Root: `root`, + ObjectType: (ref: TypeHandle) => `ns-${ref.index}`, + Relation: (ref: RelationHandle) => `rel-${ref.index}-${ref.parentType.index}`, + Permission: (ref: PermissionHandle) => + `perm-${ref.index}-${ref.parentType.index}`, + RelationOrPermission: (ref: RelationOrPermissionHandle) => { + switch (ref.kind) { + case 'relation': + return NodeIDs.Relation(ref as RelationHandle); + + default: + return NodeIDs.Permission(ref as PermissionHandle); + } + }, + Binary: (ref: ParsedBinaryExpression) => `binary-${exprId(ref)}`, + Arrow: (ref: ParsedArrowExpression) => `arrow-${exprId(ref)}`, +}; + +const EdgeIDs = { + TypeToRoot: (ref: TypeHandle) => + `${NodeIDs.ObjectType(ref)}->${NodeIDs.Root}`, + TypeToRelation: (ref: RelationHandle) => + `${NodeIDs.ObjectType(ref.parentType)}->${NodeIDs.Relation(ref)}`, + TypeToPermission: (ref: PermissionHandle) => + `${NodeIDs.ObjectType(ref.parentType)}->${NodeIDs.Permission(ref)}`, + ReferencedRelationOrPermission: ( + startNodeID: string, + ref: RelationOrPermissionHandle + ) => `${startNodeID}->${NodeIDs.RelationOrPermission(ref)}`, + RelationToDataType: (ref: RelationHandle, typeRef: TypeHandle) => + `${NodeIDs.Relation(ref)}-->${NodeIDs.ObjectType(typeRef)}`, + ExpressionChild: (exprNodeID: string, parentNodeID: string) => + `${parentNodeID}-e->${exprNodeID}`, + ArrowRelationOutward: ( + expr: ParsedArrowExpression, + target: RelationOrPermissionHandle + ) => `${NodeIDs.Arrow(expr)}->${NodeIDs.RelationOrPermission(target)}}`, +}; + +interface SourceInfo { + parserRange: TextRange | undefined; +} + +interface WithSourceInfo { + sourceInfo: SourceInfo | undefined; +} + +/** + * findActive finds the items (node or edges) that are active given the current active position + * information from the editor. + */ +export function findActive( + items: T[], + active: ActiveInfo | undefined +): T[] | undefined { + if (!active?.isSchema) { + return undefined; + } + + return items.filter((item: T) => { + if (item.sourceInfo?.parserRange === undefined) { + return false; + } + + if ( + item.sourceInfo.parserRange.endIndex.line <= active.position.lineNumber || + item.sourceInfo.parserRange.startIndex.line > active.position.lineNumber + ) { + return false; + } + + if ( + item.sourceInfo.parserRange.startIndex.line === active.position.lineNumber + ) { + if ( + item.sourceInfo.parserRange.startIndex.column >= active.position.column + ) { + return false; + } + } + + if ( + item.sourceInfo.parserRange.endIndex.line === active.position.lineNumber + ) { + if ( + item.sourceInfo.parserRange.endIndex.column <= active.position.column + ) { + return false; + } + } + + return true; + }); +} + +/** + * generateTenantGraph generates the VisJs Network graph for the tenant. + * @param schema The schema for the tenant. + * @param relationships The existing relationships in the testing environment. If specified, will be used for edge inference. + * @returns The graph for subsequent calls. + */ +export function generateTenantGraph( + schema: ParsedSchema | undefined, + relationships: Relationship[] | undefined +) { + if (schema === undefined) { + return { + nodes: [], + edges: [], + }; + } + + const nodes: LocalNode[] = []; + const edges: LocalEdge[] = []; + + let pathCounter = 0; + const getTuplesetPathColor = (): string => { + const color = schemeCategory10[pathCounter % schemeCategory10.length]; + pathCounter++; + return color; + }; + + const typeSet = new TypeSet(schema, relationships); + + // Generate the subgraph per namespace. + typeSet.forEachType((type: TypeHandle) => { + const { nodes: defNodes, edges: defEdges } = generateTypeSubgraph( + type, + typeSet, + getTuplesetPathColor + ); + nodes.push(...defNodes); + edges.push(...defEdges); + }); + + // Add the tenant node. + /* + nodes.push({ + id: NodeIDs.Root, + label: 'Permissions System', + group: 'tenant', + shape: 'star', + color: COLORS.tenant, + sourceInfo: undefined + }); + */ + + // Filter out any duplicate nodes or edges to prevent errors from being raised + // by the visualizer. + const seenNodeIDs = new Set(); + const seenEdgeIDs = new Set(); + + return { + nodes: nodes.filter((node: LocalNode) => { + if (seenNodeIDs.has(node.id)) { + return false; + } + seenNodeIDs.add(node.id); + return true; + }), + edges: edges.filter((edge: LocalEdge) => { + if (seenEdgeIDs.has(edge.id)) { + return false; + } + seenEdgeIDs.add(edge.id); + return true; + }), + }; +} + +function generateTypeSubgraph( + typeHandle: TypeHandle, + typeSet: TypeSet, + getTuplesetPathColor: () => string +) { + const nodes: LocalNode[] = []; + const edges: LocalEdge[] = []; + + // Add nodes for each relation. + Object.values(typeHandle.relations).forEach( + (relationHandle: RelationHandle) => { + // Add the relation node. + nodes.push({ + id: NodeIDs.Relation(relationHandle), + label: relationHandle.relation.name, + group: 'relation', + shape: 'diamond', + color: { + background: COLORS.relation, + border: COLORS.relation, + }, + sourceInfo: { + parserRange: relationHandle.relation.range, + }, + }); + + // Connect the relation to the type. + edges.push({ + id: EdgeIDs.TypeToRelation(relationHandle), + from: NodeIDs.ObjectType(relationHandle.parentType), + to: NodeIDs.Relation(relationHandle), + color: { color: COLORS.typetorelation }, + sourceInfo: { + parserRange: relationHandle.relation.range, + }, + }); + + // Connect the relation via data edges to any data referenced namespaces. + const links = typeSet.lookupRelationLinks(relationHandle); + links.forEach((link: RelationLink) => { + const referencedType = link.subjectType; + const tableContents = link.relationships + .map((rel: Relationship) => { + // NOTE: VisJS is doing the sanitizing of the input here. This was verified + // manually by jschorr. + return ` + ${rel.resourceAndRelation?.namespace} + : + ${rel.resourceAndRelation?.objectId} + # + ${rel.resourceAndRelation?.relation} + @ + ${rel.subject?.namespace} + : + ${rel.subject?.objectId} + ${ + rel.subject?.relation === '...' ? '' : `#${rel.subject?.relation}` + } + ${ + rel.caveat?.caveatName + ? `[${rel.caveat.caveatName}]` + : '' + } + `; + }) + .join(''); + + const relationshipListStr = `${tableContents}
`; + edges.push({ + id: EdgeIDs.RelationToDataType(relationHandle, referencedType), + to: link.subjectRelation + ? NodeIDs.RelationOrPermission(link.subjectRelation) + : NodeIDs.ObjectType(referencedType), + from: NodeIDs.Relation(relationHandle), + color: { color: COLORS.dataref }, + dashes: [1, 5], + arrows: { + to: { enabled: true }, + }, + title: `Relationships defined from ${relationHandle.relation.name} to ${referencedType.definition.name}:
${relationshipListStr}`, + sourceInfo: { + parserRange: undefined, + }, + }); + }); + } + ); + + // Add nodes for each permission. + Object.values(typeHandle.permissions).forEach( + (permissionHandle: PermissionHandle) => { + // Add the permission node. + nodes.push({ + id: NodeIDs.Permission(permissionHandle), + label: permissionHandle.permission.name, + group: 'permission', + shape: 'diamond', + color: { + background: 'transparent', + border: COLORS.permission, + }, + sourceInfo: { + parserRange: permissionHandle.permission.range, + }, + }); + + // Add nodes and edges representing the permission's expression. + const { nodes: exNodes, edges: exEdges } = generateExpressionGraph( + permissionHandle.permission.expr, + NodeIDs.Permission(permissionHandle), + typeHandle, + typeSet, + getTuplesetPathColor + ); + nodes.push(...exNodes); + edges.push(...exEdges); + + // Connect the permission to the type. + edges.push({ + id: EdgeIDs.TypeToPermission(permissionHandle), + from: NodeIDs.ObjectType(permissionHandle.parentType), + to: NodeIDs.Permission(permissionHandle), + color: { color: COLORS.typetopermission }, + sourceInfo: { + parserRange: permissionHandle.permission.range, + }, + }); + } + ); + + // Add the type's node. + nodes.push({ + id: NodeIDs.ObjectType(typeHandle), + label: typeHandle.definition.name, + group: 'objecttype', + color: COLORS.type, + title: `definition ${typeHandle.definition.name}`, + sourceInfo: { + parserRange: typeHandle.definition.range, + }, + }); + + // Connect the the type to the tenant. + /*edges.push({ + id: EdgeIDs.TypeToRoot(typeHandle), + from: NodeIDs.Root, + to: NodeIDs.ObjectType(typeHandle), + sourceInfo: undefined + });*/ + + return { + nodes, + edges, + }; +} + +function generateExpressionGraph( + expression: ParsedExpression, + parentNodeID: string, + typeHandle: TypeHandle, + typeSet: TypeSet, + getTuplesetPathColor: () => string +) { + const nodes: LocalNode[] = []; + const edges: LocalEdge[] = []; + + switch (expression.kind) { + case 'relationref': + const found = typeHandle.lookupRelationOrPermission( + expression.relationName + ); + if (found) { + edges.push({ + id: EdgeIDs.ReferencedRelationOrPermission(parentNodeID, found), + from: parentNodeID, + to: NodeIDs.RelationOrPermission(found), + arrows: { + to: { enabled: true }, + }, + title: `include subjects found in ${expression.relationName}`, + sourceInfo: { + parserRange: expression.range, + }, + }); + } + + break; + + case 'arrow': + const resolved = typeHandle.lookupRelation( + expression.sourceRelation.relationName + ); + if (resolved !== undefined) { + const arrowColor = getTuplesetPathColor(); + edges.push({ + id: EdgeIDs.ExpressionChild(NodeIDs.Arrow(expression), parentNodeID), + from: parentNodeID, + to: NodeIDs.RelationOrPermission(resolved), + dashes: [2, 10], + arrows: { + to: { enabled: true }, + }, + color: { + color: arrowColor, + }, + title: `Walk relationships found in ${expression.sourceRelation.relationName}...`, + sourceInfo: { + parserRange: expression.range, + }, + }); + + resolved.relation.allowedTypes.types.forEach((typeRef: TypeRef) => { + const resolvedType = typeSet.lookupType(typeRef.path); + if (resolvedType === undefined) { + return; + } + + const resolvdRelOrPerm = resolvedType.lookupRelationOrPermission( + expression.targetRelationOrPermission + ); + if (resolvdRelOrPerm === undefined) { + return; + } + + edges.push({ + id: EdgeIDs.ArrowRelationOutward(expression, resolvdRelOrPerm), + from: NodeIDs.RelationOrPermission(resolved), + to: NodeIDs.RelationOrPermission(resolvdRelOrPerm), + dashes: true, + arrows: { + to: { enabled: true }, + }, + color: { + color: arrowColor, + }, + title: `...to relationships found in ${expression.targetRelationOrPermission}`, + sourceInfo: { + parserRange: expression.range, + }, + }); + }); + } + break; + + case 'binary': + const unionedRelations = collectUnionedRelations( + expression, + parentNodeID, + typeHandle, + typeSet, + getTuplesetPathColor + ); + if (unionedRelations) { + const { relations, nodes: urNodes, edges: urEdges } = unionedRelations; + relations.forEach((expr: ParsedRelationRefExpression) => { + const referenced = typeHandle.lookupRelationOrPermission( + expr.relationName + ); + if (referenced) { + edges.push({ + id: EdgeIDs.ExpressionChild( + NodeIDs.RelationOrPermission(referenced), + parentNodeID + ), + from: parentNodeID, + to: NodeIDs.RelationOrPermission(referenced), + arrows: { + to: { enabled: true }, + }, + sourceInfo: { + parserRange: expr.range, + }, + }); + } + }); + + nodes.push(...urNodes); + edges.push(...urEdges); + } else { + nodes.push({ + id: NodeIDs.Binary(expression), + label: REWRITE_OPS[expression.operator], + group: 'expr', + color: { + background: 'transparent', + border: REWRITE_COLORS[expression.operator], + }, + sourceInfo: { + parserRange: expression.range, + }, + }); + + edges.push({ + id: EdgeIDs.ExpressionChild(NodeIDs.Binary(expression), parentNodeID), + from: parentNodeID, + to: NodeIDs.Binary(expression), + arrows: { + to: { enabled: true }, + }, + sourceInfo: { + parserRange: expression.range, + }, + }); + + const { nodes: lNodes, edges: lEdges } = generateExpressionGraph( + expression.left, + NodeIDs.Binary(expression), + typeHandle, + typeSet, + getTuplesetPathColor + ); + const { nodes: rNodes, edges: rEdges } = generateExpressionGraph( + expression.right, + NodeIDs.Binary(expression), + typeHandle, + typeSet, + getTuplesetPathColor + ); + nodes.push(...lNodes); + nodes.push(...rNodes); + + edges.push(...lEdges); + edges.push(...rEdges); + } + break; + } + + return { + nodes: nodes, + edges: edges, + }; +} + +function collectUnionedRelations( + expr: ParsedExpression, + parentNodeID: string, + typeHandle: TypeHandle, + typeSet: TypeSet, + getTuplesetPathColor: () => string +): + | { + relations: ParsedRelationRefExpression[]; + nodes: LocalNode[]; + edges: LocalEdge[]; + } + | undefined { + switch (expr.kind) { + case 'binary': + if (expr.operator !== 'union') { + return undefined; + } + + const left = collectUnionedRelations( + expr.left, + parentNodeID, + typeHandle, + typeSet, + getTuplesetPathColor + ); + if (left === undefined) { + return undefined; + } + + const right = collectUnionedRelations( + expr.right, + parentNodeID, + typeHandle, + typeSet, + getTuplesetPathColor + ); + if (right === undefined) { + return undefined; + } + + return { + relations: [...left.relations, ...right.relations], + nodes: [...left.nodes, ...right.nodes], + edges: [...left.edges, ...right.edges], + }; + + case 'arrow': + const { nodes, edges } = generateExpressionGraph( + expr, + parentNodeID, + typeHandle, + typeSet, + getTuplesetPathColor + ); + return { + relations: [], + nodes: nodes, + edges: edges, + }; + + case 'nil': + return undefined; + + default: + return { relations: [expr], nodes: [], edges: [] }; + } +} diff --git a/spicedb-common/src/components/graph/typeset.ts b/spicedb-common/src/components/graph/typeset.ts new file mode 100644 index 0000000..5c5244b --- /dev/null +++ b/spicedb-common/src/components/graph/typeset.ts @@ -0,0 +1,257 @@ +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import { + ObjectOrCaveatDefinition, + ParsedObjectDefinition, + ParsedPermission, + ParsedRelation, + ParsedSchema, + TextRange, +} from '../../parsers/dsl/dsl'; + +export interface RelationLink { + key: string; + objectRelation: RelationHandle; + subjectType: TypeHandle; + subjectRelation: RelationOrPermissionHandle | undefined; + relationships: Relationship[]; +} + +export type RelationOrPermissionHandle = RelationHandle | PermissionHandle; + +/** + * TypeSet is a helper class which wraps a parsed schema and creates easy handles + * for referencing the types, relations and permissions within. + */ +export class TypeSet { + private tracker: RelationTracker; + public types: Record; + + constructor( + private schema: ParsedSchema, + private relationships: Relationship[] | undefined + ) { + const objectDefs = this.schema.definitions.filter( + (def) => def.kind === 'objectDef' + ); + + this.types = Object.fromEntries( + objectDefs.map((def: ObjectOrCaveatDefinition, index: number) => { + return [def.name, new TypeHandle(def as ParsedObjectDefinition, index)]; + }) + ); + this.tracker = new RelationTracker(relationships, this); + } + + /** + * lookupType returns the handle of the type with the given name as defined in the schema + * or undefined if none. + */ + public lookupType(name: string): TypeHandle | undefined { + if (!(name in this.types)) { + return undefined; + } + return this.types[name]; + } + + /** + * forEachType executes the handler for each type defined in the schema. + */ + public forEachType(handler: (tr: TypeHandle) => void) { + return Object.values(this.types).forEach(handler); + } + + /** + * lookupRelationLinks returns the list of all relation links for the given relation. + */ + public lookupRelationLinks(relation: RelationHandle): RelationLink[] { + return this.tracker.lookupLinks(relation); + } +} + +/** + * RelationTracker is a helper class for tracking relations and their associated + * links while building the graph, based on the given test relationships. + */ +export class RelationTracker { + private inferredLinks: RelationLink[] = []; + + constructor( + relationships: Relationship[] | undefined, + private typeSet: TypeSet + ) { + if (!relationships?.length) { + return; + } + + relationships.forEach((rel: Relationship) => { + this.addRelationLink(rel); + }); + } + + /** + * lookupLinks returns all relation links from the given relation in + * the test relationship data set. If no tuples were defined, returns an empty list. + */ + public lookupLinks(relation: RelationHandle): RelationLink[] { + return this.inferredLinks.filter((link: RelationLink) => { + return link.objectRelation.key() === relation.key(); + }); + } + + private addRelationLink(rel: Relationship) { + const leftType = rel.resourceAndRelation?.namespace; + const rightType = rel.subject?.namespace; + const leftRelation = rel.resourceAndRelation?.relation; + const rightRelation = rel.subject?.relation; + if (!leftType || !leftRelation || !rightType || !rightRelation) { + return; + } + + const objectType = this.typeSet.lookupType(leftType); + const subjectType = this.typeSet.lookupType(rightType); + if (!objectType || !subjectType) { + return; + } + + const objectRelation = objectType.lookupRelation(leftRelation); + if (!objectRelation) { + return; + } + + const subjectRelation = + rightRelation && rightRelation !== '...' + ? subjectType.lookupRelationOrPermission(rightRelation) + : undefined; + const key = `${objectRelation.key()}=>${subjectType.key()}${ + subjectRelation ? `#${subjectRelation}` : '' + }`; + const existing = this.inferredLinks.find( + (link: RelationLink) => link.key === key + ); + if (existing !== undefined) { + existing.relationships.push(rel); + } + + this.inferredLinks.push({ + key: key, + objectRelation: objectRelation, + subjectType: subjectType, + subjectRelation: subjectRelation, + relationships: [rel], + }); + } +} + +/** + * TypeHandle is a reference to a defined type. + */ +export class TypeHandle { + /** + * relations are the relations defined under the type, by name. + */ + public relations: Record; + + /** + * permissions are the permissions defined under the type, by name. + */ + public permissions: Record; + + constructor(public definition: ParsedObjectDefinition, public index: number) { + let relOrPermCounter = 0; + this.relations = Object.fromEntries( + definition.relations.map((rel: ParsedRelation) => { + relOrPermCounter += 1; + return [rel.name, new RelationHandle(rel, this, relOrPermCounter)]; + }) + ); + this.permissions = Object.fromEntries( + definition.permissions.map((perm: ParsedPermission) => { + relOrPermCounter += 1; + return [perm.name, new PermissionHandle(perm, this, relOrPermCounter)]; + }) + ); + } + + /** + * lookupRelation returns the handle of the relation with the given name in the type, + * or undefined if none. + */ + public lookupRelation(name: string): RelationHandle | undefined { + if (!(name in this.relations)) { + return undefined; + } + return this.relations[name]; + } + + /** + * lookupPermission returns the handle of the permission with the given name in the type, + * or undefined if none. + */ + public lookupPermission(name: string): PermissionHandle | undefined { + if (!(name in this.permissions)) { + return undefined; + } + return this.permissions[name]; + } + + /** + * lookupRelationOrPermission returns the handle of the relation or permission with the given name in the type, + * or undefined if none. + */ + public lookupRelationOrPermission( + name: string + ): RelationOrPermissionHandle | undefined { + const relation = this.lookupRelation(name); + if (relation !== undefined) { + return relation; + } + + return this.lookupPermission(name); + } + + /** + * key returns a unique key for this type. + */ + public key(): string { + return `type-${this.index}`; + } +} + +/** + * RelationHandle is a reference to a defined relation. + */ +export class RelationHandle { + public kind = 'relation'; + public range: TextRange; + + constructor( + public relation: ParsedRelation, + public parentType: TypeHandle, + public index: number + ) { + this.range = relation.range; + } + + /** + * key returns a unique key for this relation. + */ + public key(): string { + return `rel-${this.parentType.key()}-${this.index}`; + } +} + +/** + * PermissionHandle is a reference to a defined permission. + */ +export class PermissionHandle { + public kind = 'permission'; + public range: TextRange; + + constructor( + public permission: ParsedPermission, + public parentType: TypeHandle, + public index: number + ) { + this.range = permission.range; + } +} diff --git a/spicedb-common/src/components/relationshipeditor/RelationshipEditor.tsx b/spicedb-common/src/components/relationshipeditor/RelationshipEditor.tsx new file mode 100644 index 0000000..5aebd8b --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/RelationshipEditor.tsx @@ -0,0 +1,1033 @@ +import { + ParseRelationshipError, + parseRelationshipsWithComments, + parseRelationshipWithError, +} from '@code/spicedb-common/src/parsing'; +import DataEditor, { + CompactSelection, + EditableGridCell, + GridCell, + GridCellKind, + GridColumn, + GridMouseEventArgs, + GridSelection, + Rectangle, + Theme, +} from '@glideapps/glide-data-grid'; +import { Highlight } from '@glideapps/glide-data-grid/dist/ts/data-grid/data-grid-render'; +import { + Checkbox, + FormControlLabel, + IconButton, + Snackbar, + Tooltip, + Typography, +} from '@material-ui/core'; +import { + createStyles, + makeStyles, + Theme as MuiTheme, + useTheme, +} from '@material-ui/core/styles'; +import { Assignment, Comment, Delete } from '@material-ui/icons'; +import Alert from '@material-ui/lab/Alert'; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; +import { useCookies } from 'react-cookie'; +import { ThemeProvider } from 'styled-components'; +import { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare'; +import { Resolver } from '../../parsers/dsl/resolution'; +import { RelationTuple as Relationship } from '../../protodevdefs/core/v1/core'; +import { useRelationshipsService } from '../../services/relationshipsservice'; +import { + Column, + COLUMNS, + CommentCellPrefix, + DataKind, + DataRegex, + MIN_COLUMN_WIDTH, + validate, +} from './columns'; +import { + COMMENT_CELL_KIND, + CommentCell, + copyDataForCommentCell, +} from './commentcell'; +import { RelEditorCustomCell, useCustomCells } from './customcells'; +import { + AnnotatedData, + datumToAnnotated, + emptyAnnotatedDatum, + fromExternalData, + getColumnData, + PartialRelationship, + RelationshipDatum, + RelationshipDatumAndMetadata, + relationshipToColumnData, + relationshipToDatum, + toExternalData, + toRelationshipString, + updateRowInData, +} from './data'; +import { + CAVEATCONTEXT_CELL_KIND, + CaveatContextCell, + CAVEATNAME_CELL_KIND, + CaveatNameCell, + OBJECTID_CELL_KIND, + ObjectIdCell, + RELATION_CELL_KIND, + RelationCell, + TYPE_CELL_KIND, + TypeCell, +} from './fieldcell'; + +const useStyles = makeStyles((theme: MuiTheme) => + createStyles({ + root: { + '& input': { + backgroundColor: `${theme.palette.background.paper} !important`, + }, + position: 'relative', + }, + fab: { + position: 'absolute', + bottom: theme.spacing(4), + right: theme.spacing(2), + zIndex: 9999, + }, + speedDialTooltip: { + whiteSpace: 'nowrap', + }, + tooltip: { + position: 'fixed', + zIndex: 99999, + whiteSpace: 'nowrap', + padding: '8px 12px', + color: 'white', + font: '500 13px', + fontFamily: theme.typography.fontFamily, + backgroundColor: 'rgba(0, 0, 0, 0.85)', + borderRadius: 9, + }, + toolbar: { + backgroundColor: theme.palette.background.default, + borderBottom: '1px solid transparent', + borderBottomColor: theme.palette.divider, + display: 'grid', + gridTemplateColumns: 'auto auto 1fr auto', + alignItems: 'center', + }, + toolbarCheckbox: { + padding: '4px', + }, + }) +); + +export type RelationTupleHighlight = { + tupleString: string; + color: string; + message: string; +}; + +export type RelationshipEditorProps = { + relationshipData?: RelationshipDatum[]; + highlights?: RelationTupleHighlight[]; + isReadOnly: boolean; + dataUpdated: (updatedData: RelationshipDatum[]) => void; + resolver?: Resolver | undefined; + themeOverrides?: Partial | undefined; +} & { dimensions?: { width: number; height: number } }; + +interface TooltipData { + message: string; + bounds: { + left: number; + top: number; + width: number; + height: number; + }; +} + +/** + * RelationshipEditor defines a grid-based editor for editing relationships. + */ +export function RelationshipEditor(props: RelationshipEditorProps) { + // data holds the grid data+metadata array for the grid, indexed by row. + const [data, setDataDirectly] = useState(() => { + return fromExternalData(props.relationshipData); + }); + + useDeepCompareEffect(() => { + const converted = fromExternalData(props.relationshipData); + setDataDirectly(converted); + }, [props.relationshipData]); + + const setData = (data: AnnotatedData) => { + if (props.isReadOnly) { + return; + } + setDataDirectly(data); + }; + + // inFlightData holds the state of the grid while being edited, before setData has been resolved. + const inFlightData = useRef(data); + const dataUpdated = props.dataUpdated; + + useEffect(() => { + inFlightData.current = data; + dataUpdated(toExternalData(data)); + + // NOTE: we do not want to rerun this if the dataUpdated callback has changed (which it should + // not, ideally). + }, [data]); + + // relationships holds a filtered form of the grid, containing only valid relationships. + const relationships = useDeepCompareMemo(() => { + return data + .filter((item: RelationshipDatumAndMetadata) => { + if ('comment' in item.datum) { + return false; + } + + return ( + item.datum.resourceType && + item.datum.resourceId && + item.datum.relation && + item.datum.subjectId && + item.datum.subjectType + ); + }) + .map((value: RelationshipDatumAndMetadata) => { + const relData = value.datum as PartialRelationship; + const caveatContext = relData.caveatContext + ? `:${relData.caveatContext}` + : ''; + const str = `${relData.resourceType}:${relData.resourceId}#${ + relData.relation + }@${relData.subjectType}:${relData.subjectId}${ + relData.subjectRelation ? `#${relData.subjectRelation}` : '' + }${ + relData.caveatName ? `[${relData.caveatName}${caveatContext}]` : '' + }`; + return parseRelationshipWithError(str); + }) + .filter((value: Relationship | ParseRelationshipError) => { + return !('errorMessage' in value); + }) + .map((value: Relationship | ParseRelationshipError) => { + return value as Relationship; + }); + }, [data]); + + // relationshipsService is a service for quickly accessing the types, ids and relations defined + // for all *valid* relationships. + const relationshipsService = useRelationshipsService(relationships); + + const adjustData = (dataRowIndex: number, newColumnData: string[]) => { + if (props.isReadOnly) { + return; + } + + const updated = updateRowInData( + inFlightData.current, + dataRowIndex, + newColumnData + ); + inFlightData.current = updated; + setData(updated); + }; + + const [gridSelection, setGridSelection] = useState( + undefined + ); + const handleGridSelectionChanged = ( + newSelection: GridSelection | undefined + ) => { + // Prevent column-only selection. + if (newSelection?.columns && newSelection.columns.length > 0) { + return; + } + + setGridSelection(newSelection); + }; + + const handleCellEdited = ( + cellPosition: readonly [number, number], + newValue: EditableGridCell + ) => { + const [col, row] = cellPosition; + if (row >= inFlightData.current.length || col >= COLUMNS.length) { + return; + } + + const cell = newValue as unknown as RelEditorCustomCell; + if ('comment' in inFlightData.current[row].datum) { + // If the comment cell doesn't start with `// `, convert into a relationship. + if (!cell.data.dataValue.startsWith(CommentCellPrefix)) { + const parsed = parseRelationshipWithError(cell.data.dataValue.trim()); + if ('errorMessage' in parsed) { + return; + } + + const adjustedData = Array.from(inFlightData.current); + adjustedData[row] = datumToAnnotated( + relationshipToDatum(parsed), + adjustedData[row].dataRowIndex + ); + setData(adjustedData); + return; + } + + const adjustedData = Array.from(inFlightData.current); + adjustedData[row].datum = { comment: cell.data.dataValue }; + adjustedData[row].columnData = [cell.data.dataValue]; + setData(adjustedData); + return; + } + + // If the cell data starts with `// ` and this is the first column, convert to a comment. + if (col === 0 && cell.data.dataValue.startsWith(CommentCellPrefix)) { + const adjustedData = Array.from(inFlightData.current); + const commentString = [ + cell.data.dataValue, + ...adjustedData[row].columnData.slice(1), + ].join(' '); + adjustedData[row].datum = { comment: commentString }; + adjustedData[row].columnData = [commentString]; + setData(adjustedData); + return; + } + + // Update the column data for the changed column. + const existingColumnData = inFlightData.current[row].columnData; + const newColumnData = Array.from(existingColumnData); + const validator = DataRegex[COLUMNS[col].dataKind]; + const validated = validate(validator, cell.data.dataValue); + if (!validated) { + const regex = DataRegex[COLUMNS[col].dataKind]; + setSnackbarMessage( +
+ + Expected format for {COLUMNS[col].title}: + + {regex instanceof RegExp && ( + {regex.toString()} + )} + {!(regex instanceof RegExp) && ( + + {COLUMNS[col].dataDescription} + + )} +
+ ); + } + + newColumnData[col] = validated ? cell.data.dataValue : ''; + + adjustData(row, newColumnData); + + // Jump to cell to the right, but only if the next cell is empty. + if ( + newColumnData[col] && + col < COLUMNS.length - 1 && + existingColumnData[col + 1] === '' + ) { + // NOTE: timeout needed for glide grid to apply its own grid selection change before we do. + const range = { + x: col + 1, + y: row, + width: 1, + height: 1, + }; + + setTimeout(() => { + setGridSelection({ + current: { + cell: [col + 1, row], + range: range, + rangeStack: [], + }, + columns: CompactSelection.empty(), + rows: CompactSelection.empty(), + }); + }, 10); + } + }; + + const handleRowAppended = async (): Promise<'bottom'> => { + if (props.isReadOnly) { + return 'bottom'; + } + + const updatedData = Array.from(data); + updatedData.push(emptyAnnotatedDatum(updatedData.length)); + setData(updatedData); + return 'bottom'; + }; + + const handleDelete = (selection: GridSelection): GridSelection | boolean => { + if (selection.current?.range) { + let adjustedData = Array.from(data); + const range = selection.current.range; + + for (let y = range.y; y < range.y + range.height; y++) { + const newColData: string[] = []; + for (let x = range.x; x < range.x + range.width; x++) { + newColData.push(''); + } + + adjustedData = updateRowInData(adjustedData, y, newColData, range.x); + } + + inFlightData.current = adjustedData; + setGridSelection(undefined); + setData(adjustedData); + return false; + } + + if (selection.rows) { + const adjustedData = Array.from(data); + for ( + var row = selection.rows.last() ?? 0; + row >= (selection.rows.first() ?? 1); + row-- + ) { + if (!selection.rows.hasIndex(row)) { + continue; + } + + adjustedData.splice(row, 1); + } + + inFlightData.current = adjustedData; + setData(adjustedData); + setGridSelection(undefined); + return false; + } + + // NOTE: We explicitly ignore deletion by column. + return false; + }; + + const theme = useTheme(); + const themeOverrides = props.themeOverrides; + const dataEditorTheme: Theme = useMemo(() => { + return { + accentColor: theme.palette.primary.light, + accentFg: theme.palette.getContrastText(theme.palette.action.focus), + accentLight: theme.palette.action.focus, + + textDark: theme.palette.text.primary, + textMedium: theme.palette.text.primary, + textLight: theme.palette.grey[500], + textBubble: theme.palette.text.primary, + + editorFontSize: `${theme.typography.fontSize}px`, + + bgIconHeader: theme.palette.text.primary, + fgIconHeader: theme.palette.text.primary, + textHeader: theme.palette.text.primary, + textGroupHeader: theme.palette.text.primary, + textHeaderSelected: theme.palette.text.primary, + + bgCell: theme.palette.background.paper, + bgCellMedium: theme.palette.background.default, + bgHeader: theme.palette.background.default, + bgHeaderHasFocus: theme.palette.primary.main, + bgHeaderHovered: theme.palette.primary.dark, + + bgBubble: 'black', + bgBubbleSelected: 'black', + + bgSearchResult: theme.palette.primary.light, + + borderColor: theme.palette.divider, + horizontalBorderColor: theme.palette.divider, + drilldownBorder: theme.palette.divider, + + linkColor: theme.palette.primary.main, + + cellHorizontalPadding: 8, + cellVerticalPadding: 3, + + headerFontStyle: '600 13px', + baseFontStyle: '13px', + fontFamily: + 'Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif', + ...(themeOverrides ?? {}), + }; + }, [theme, themeOverrides]); + + const getCellData = useCallback( + ([col, row]: readonly [number, number]): GridCell => { + if (row >= data.length) { + return { + kind: GridCellKind.Text, + data: '', + allowOverlay: true, + displayData: '', + }; + } + + const rowData = data[row]; + if ('comment' in rowData.datum) { + return { + kind: GridCellKind.Custom, + data: { + kind: COMMENT_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[0], + }, + allowOverlay: true, + copyData: copyDataForCommentCell(data[row].columnData[0]), + span: [0, COLUMNS.length - 1], + } as CommentCell; + } + + if (col >= data[row].columnData.length) { + return { + kind: GridCellKind.Text, + data: '', + allowOverlay: true, + displayData: '', + }; + } + + switch (COLUMNS[col].dataKind) { + case DataKind.RESOURCE_TYPE: + case DataKind.SUBJECT_TYPE: + return { + kind: GridCellKind.Custom, + data: { + kind: TYPE_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[col], + }, + allowOverlay: true, + copyData: data[row].columnData[col], + } as TypeCell; + + case DataKind.RESOURCE_ID: + case DataKind.SUBJECT_ID: + return { + kind: GridCellKind.Custom, + data: { + kind: OBJECTID_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[col], + }, + allowOverlay: true, + copyData: data[row].columnData[col], + } as ObjectIdCell; + + case DataKind.SUBJECT_RELATION: + case DataKind.RELATION: + return { + kind: GridCellKind.Custom, + data: { + kind: RELATION_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[col], + }, + allowOverlay: true, + copyData: data[row].columnData[col], + } as RelationCell; + + case DataKind.CAVEAT_NAME: + return { + kind: GridCellKind.Custom, + data: { + kind: CAVEATNAME_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[col], + }, + allowOverlay: true, + copyData: data[row].columnData[col], + } as CaveatNameCell; + + case DataKind.CAVEAT_CONTEXT: + return { + kind: GridCellKind.Custom, + data: { + kind: CAVEATCONTEXT_CELL_KIND, + row: row, + col: col, + dataValue: data[row].columnData[col], + }, + allowOverlay: true, + copyData: data[row].columnData[col], + } as CaveatContextCell; + + default: + return { + kind: GridCellKind.Text, + data: data[row].columnData[col], + allowOverlay: true, + displayData: data[row].columnData[col], + }; + } + }, + [data] + ); + + const getCellsForSelection = React.useCallback( + (selection: Rectangle): readonly (readonly GridCell[])[] => { + const result: GridCell[][] = []; + for (let y = selection.y; y < selection.y + selection.height; y++) { + // NOTE: This can happen when search is called and indicates that the entire + // grid is "selected" for search (i.e. there is no active selection). + if (y >= data.length) { + continue; + } + + const row: GridCell[] = []; + for (let x = selection.x; x < selection.x + selection.width; x++) { + row.push({ + kind: GridCellKind.Text, + data: data[y].columnData[x], + allowOverlay: true, + displayData: data[y].columnData[x], + }); + } + result.push(row); + } + + return result; + }, + [data] + ); + + const classes = useStyles(); + const handleRowMoved = (startIndex: number, endIndex: number) => { + if (props.isReadOnly) { + return; + } + + const adjustedData = Array.from(data); + const removed = adjustedData.splice(startIndex, 1); + if (removed.length) { + adjustedData.splice(endIndex, 0, removed[0]); + setData(adjustedData); + } + }; + + const handlePaste = ( + target: readonly [number, number], + values: readonly (readonly string[])[] + ) => { + if (props.isReadOnly) { + return false; + } + + const [oneIndexedColumn, startingRow] = target; + const startingCol = oneIndexedColumn - 1; // col is +1 for the checkbox. + + let adjustedData = inFlightData.current; + let rowOffset = 0; + values.forEach((newColDataOrRelationships: readonly string[]) => { + const rowToUpdate = startingRow + rowOffset; + + // Determine if the pasted data contains a tuple string. If so, parse it + // into column data. + let columnData = newColDataOrRelationships; + if (columnData.length === 0) { + return; + } + + if (!columnData[0].startsWith(CommentCellPrefix)) { + if (columnData.length === 1) { + const asRelationship = parseRelationshipsWithComments(columnData[0]); + if (asRelationship.length === 1) { + columnData = + relationshipToColumnData(asRelationship[0]) ?? columnData; + } + } + + columnData = columnData.map((value: string, cIndex: number) => { + const columnIndex = startingCol + cIndex; + const dataKind = COLUMNS[columnIndex].dataKind; + const validator = DataRegex[dataKind]; + if (validate(validator, value)) { + return value; + } + + return ''; + }); + } + + // Skip empty/invalid rows. + if (columnData.filter((v) => !!v).length === 0) { + return; + } + + adjustedData = updateRowInData( + adjustedData, + rowToUpdate, + columnData, + startingCol + ); + rowOffset++; + }); + + inFlightData.current = adjustedData; + setData(adjustedData); + return false; + }; + + const highlightRegions = useDeepCompareMemo(() => { + return (props.highlights ?? []) + .map((highlight: RelationTupleHighlight) => { + const rowIndex = data.findIndex( + (datum: RelationshipDatumAndMetadata) => { + return toRelationshipString(datum) === highlight.tupleString; + } + ); + if (rowIndex === undefined) { + return undefined; + } + + return { + color: highlight.color, + range: { + x: 0, + y: rowIndex, + width: COLUMNS.length, + height: 1, + }, + }; + }) + .filter((highlight: Highlight | undefined) => { + return !!highlight; + }) as Highlight[]; + }, [props.highlights, data]); + + const highlightsByRowIndex = useDeepCompareMemo(() => { + const byRowIndex: Record = {}; + (props.highlights ?? []).forEach((highlight: RelationTupleHighlight) => { + const rowIndex = data.findIndex((datum: RelationshipDatumAndMetadata) => { + return toRelationshipString(datum) === highlight.tupleString; + }); + if (rowIndex === undefined) { + return; + } + + byRowIndex[rowIndex] = highlight; + }); + return byRowIndex; + }, [props.highlights, data]); + + const deleteSelectedRows = () => { + if (gridSelection) { + handleDelete(gridSelection); + } + }; + + const copySelectedRows = () => { + if (gridSelection?.rows) { + const selected = data.filter((annotated: RelationshipDatumAndMetadata) => + gridSelection?.rows.hasIndex(annotated.dataRowIndex) + ); + if (selected) { + const data = selected + .map((annotated: RelationshipDatumAndMetadata) => { + if ('comment' in annotated.datum) { + return `${CommentCellPrefix} ${annotated.datum.comment.trim()}`; + } + + return toRelationshipString(annotated) || ''; + }) + .join('\n'); + + navigator.clipboard.writeText(data); + } + } + }; + + const convertSelectedRows = () => { + if (gridSelection?.rows) { + const updated = data.map((annotated: RelationshipDatumAndMetadata) => { + if (!gridSelection?.rows.hasIndex(annotated.dataRowIndex)) { + return annotated; + } + + if ('comment' in annotated.datum) { + const parsed = parseRelationshipWithError( + annotated.datum.comment.substring(CommentCellPrefix.length).trim() + ); + if ('errorMessage' in parsed) { + return annotated; + } + + const datum = relationshipToDatum(parsed); + return { + ...annotated, + columnData: getColumnData(datum), + datum: datum, + }; + } + + const relString = toRelationshipString(annotated) ?? ''; + return { + ...annotated, + columnData: [`${CommentCellPrefix} ${relString}`], + datum: { + comment: `${CommentCellPrefix} ${relString}`, + }, + }; + }); + setData(updated); + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (props.isReadOnly) { + return; + } + + // NOTE: the input check is to ensure that hitting `/` inside an editor does not convert + // the cell into a comment. + const nodeName = + 'nodeName' in e.target + ? (e.target as HTMLElement).nodeName.toLowerCase() + : undefined; + if (e.key === '/' && gridSelection?.current?.cell && nodeName !== 'input') { + const [col, row] = gridSelection.current.cell; + if (col === 0) { + const rowData = data[row].columnData; + if (rowData.filter((v) => !!v).length === 0) { + const adjustedData = Array.from(data); + adjustedData[row] = { + ...data[row], + columnData: [`${CommentCellPrefix} a comment`], + datum: { + comment: `${CommentCellPrefix} a comment`, + }, + }; + setData(adjustedData); + } + } + } + }; + + const [tooltip, setTooltip] = React.useState(); + + const handleItemHovered = useCallback( + (args: GridMouseEventArgs) => { + if (args.kind !== 'cell') { + setTooltip(undefined); + return; + } + + const [, row] = args.location; + if (!(row in highlightsByRowIndex)) { + setTooltip(undefined); + return; + } + + const found = highlightsByRowIndex[row]; + setTooltip({ + message: found.message, + bounds: { + left: args.bounds.x, + top: args.bounds.y + args.bounds.height, + width: args.bounds.width, + height: args.bounds.height, + }, + }); + }, + [highlightsByRowIndex, setTooltip] + ); + + const width = props.dimensions?.width ?? 1200; + const height = props.dimensions?.height ?? 300; + const toolbarHeight = 50; + const hasCheckedRows = + gridSelection?.rows !== undefined && gridSelection.rows.length > 0; + const allRowsChecked = + gridSelection?.rows !== undefined && + data.length > 0 && + gridSelection.rows.length === data.length; + const toggleCheckedRows = () => { + if (allRowsChecked) { + setGridSelection({ + current: undefined, + columns: CompactSelection.empty(), + rows: CompactSelection.empty(), + }); + return; + } + + setGridSelection({ + current: undefined, + columns: CompactSelection.empty(), + rows: CompactSelection.fromSingleSelection([0, data.length]), + }); + }; + + const [cookies, setCookies] = useCookies(['relgrid-similar-highlighting']); + const [similarHighlighting, setSimilarHighlighting] = useState( + cookies['relgrid-similar-highlighting'] !== '0' + ); + const handleToggleSimilarHighlighting = () => { + const updated = !similarHighlighting; + setSimilarHighlighting(updated); + setCookies('relgrid-similar-highlighting', updated ? '1' : '0'); + }; + + const [overriddenColumnWidths, setOverriddenColumnWidths] = useState< + Record + >({}); + + const columnsWithWidths = useMemo(() => { + const defaultColWidth = Math.max( + width / (COLUMNS.length + 0.5), + MIN_COLUMN_WIDTH + ); // +0.5 to give some padding + return COLUMNS.map((col: Column) => { + return { + ...col, + width: + col.id! in overriddenColumnWidths + ? overriddenColumnWidths[col.id!] + : defaultColWidth, + trailingRowOptions: props.isReadOnly + ? undefined + : col.trailingRowOptions, + }; + }); + }, [width, overriddenColumnWidths, props.isReadOnly]); + + const handleColumnResize = (col: GridColumn, newSize: number) => { + if (newSize < MIN_COLUMN_WIDTH) { + return; + } + + setOverriddenColumnWidths({ + ...overriddenColumnWidths, + [col.id!]: newSize, + }); + }; + + const { drawCell, provideEditor } = useCustomCells( + relationshipsService, + data, + gridSelection, + props.resolver, + similarHighlighting, + columnsWithWidths, + props.isReadOnly + ); + + const [snackbarMessage, setSnackbarMessage] = useState< + React.ReactChild | undefined + >(undefined); + + return ( +
+ +
+ setSnackbarMessage(undefined)} + > + setSnackbarMessage(undefined)} + severity="info" + variant="filled" + > + {snackbarMessage} + + +
+
+ {!props.isReadOnly && ( + + )} + {props.isReadOnly && } + {hasCheckedRows && !props.isReadOnly && ( + + + + + + + + + + + + + + + + + + )} + {(!hasCheckedRows || props.isReadOnly) && } + + + } + label="Highlight same types, objects and relations" + /> +
+ +
+ {tooltip !== undefined && ( +
+ {tooltip?.message} +
+ )} +
+ ); +} diff --git a/spicedb-common/src/components/relationshipeditor/columns.ts b/spicedb-common/src/components/relationshipeditor/columns.ts new file mode 100644 index 0000000..4a9b724 --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/columns.ts @@ -0,0 +1,170 @@ +import { SizedGridColumn } from "@glideapps/glide-data-grid"; +import { + CAVEAT_NAME_EXPR, + NAMESPACE_REGEX, + RELATION_REGEX, + RESOURCE_ID_REGEX, + SUBJECT_ID_REGEX, +} from "../../parsing"; + +/** + * DataKind defines the different kinds of data that can be found in columns. + */ +export enum DataKind { + NONE = 0, + RESOURCE_TYPE = 1, + RESOURCE_ID = 2, + RELATION = 3, + SUBJECT_TYPE = 4, + SUBJECT_ID = 5, + SUBJECT_RELATION = 6, + CAVEAT_NAME = 7, + CAVEAT_CONTEXT = 8, +} + +export type DataValidator = RegExp | ((input: string) => boolean); + +export function validate( + validator: DataValidator, + dataValue: string | undefined +): boolean { + const isValid = + typeof validator === "function" + ? validator(dataValue ?? "") + : validator instanceof RegExp + ? validator.test(dataValue ?? "") + : false; + return isValid; +} + +/** + * DataRegex defines the regular expressions for validating the various data types. + */ +export const DataRegex: Record = { + [DataKind.NONE]: /.+/, + [DataKind.RESOURCE_TYPE]: NAMESPACE_REGEX, + [DataKind.RESOURCE_ID]: RESOURCE_ID_REGEX, + [DataKind.RELATION]: RELATION_REGEX, + [DataKind.SUBJECT_TYPE]: NAMESPACE_REGEX, + [DataKind.SUBJECT_ID]: SUBJECT_ID_REGEX, + [DataKind.SUBJECT_RELATION]: RELATION_REGEX, + [DataKind.CAVEAT_NAME]: new RegExp(`^${CAVEAT_NAME_EXPR}$`), + [DataKind.CAVEAT_CONTEXT]: (input: string) => { + try { + const result = JSON.parse(input); + return typeof result === "object" && Object.keys(result).length > 0; + } catch { + return false; + } + }, +}; + +export const DataTitle: Record = { + [DataKind.NONE]: "", + [DataKind.RESOURCE_TYPE]: "resource type", + [DataKind.RESOURCE_ID]: "resource id", + [DataKind.RELATION]: "relation", + [DataKind.SUBJECT_TYPE]: "subject type", + [DataKind.SUBJECT_ID]: "subject id", + [DataKind.SUBJECT_RELATION]: "", + [DataKind.CAVEAT_NAME]: "", + [DataKind.CAVEAT_CONTEXT]: "", +}; + +export enum RelationshipSection { + NONE = 0, + RESOURCE = 1, + SUBJECT = 2, + CAVEAT = 3, +} + +export type Column = SizedGridColumn & { + dataKind: DataKind; + section: RelationshipSection; + dataDescription: string; +}; + +// CommentCellPrefix is the prefix expected on all data in comment cells. +export const CommentCellPrefix = "//"; + +export const DEFAULT_COLUMN_WIDTH = 200; +export const MIN_COLUMN_WIDTH = 100; + +export const COLUMNS: Column[] = [ + { + title: "Type", + id: "type", + width: DEFAULT_COLUMN_WIDTH, + group: "Resource", + dataKind: DataKind.RESOURCE_TYPE, + section: RelationshipSection.RESOURCE, + dataDescription: "definition name", + }, + { + title: "ID", + id: "id", + width: DEFAULT_COLUMN_WIDTH, + group: "Resource", + dataKind: DataKind.RESOURCE_ID, + section: RelationshipSection.RESOURCE, + trailingRowOptions: { + hint: "Add relationship", + targetColumn: 0, + }, + dataDescription: "object ID", + }, + { + title: "Relation", + id: "relation", + width: DEFAULT_COLUMN_WIDTH, + group: "Resource", + dataKind: DataKind.RELATION, + section: RelationshipSection.RESOURCE, + dataDescription: "relation", + }, + { + title: "Type", + id: "subject-type", + width: DEFAULT_COLUMN_WIDTH, + group: "Subject", + dataKind: DataKind.SUBJECT_TYPE, + section: RelationshipSection.SUBJECT, + dataDescription: "definition name", + }, + { + title: "ID", + id: "subject-id", + width: DEFAULT_COLUMN_WIDTH, + group: "Subject", + dataKind: DataKind.SUBJECT_ID, + section: RelationshipSection.SUBJECT, + dataDescription: "object id", + }, + { + title: "Subject Relation (optional)", + id: "subject-relation", + width: MIN_COLUMN_WIDTH, + group: "Subject", + dataKind: DataKind.SUBJECT_RELATION, + section: RelationshipSection.SUBJECT, + dataDescription: "relation", + }, + { + title: "Name", + id: "caveat-name", + width: DEFAULT_COLUMN_WIDTH, + group: "Caveat (optional)", + dataKind: DataKind.CAVEAT_NAME, + section: RelationshipSection.CAVEAT, + dataDescription: "caveat name", + }, + { + title: "Context", + id: "caveat-context", + width: DEFAULT_COLUMN_WIDTH, + group: "Caveat (optional)", + dataKind: DataKind.CAVEAT_CONTEXT, + section: RelationshipSection.CAVEAT, + dataDescription: "JSON", + }, +]; diff --git a/spicedb-common/src/components/relationshipeditor/commentcell.tsx b/spicedb-common/src/components/relationshipeditor/commentcell.tsx new file mode 100644 index 0000000..19e771a --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/commentcell.tsx @@ -0,0 +1,128 @@ +import { CustomCell } from "@glideapps/glide-data-grid"; +import { CustomCellRenderer } from "@glideapps/glide-data-grid-cells/dist/ts/types"; +import TextField from "@material-ui/core/TextField"; +import React, { MutableRefObject, useEffect, useRef } from "react"; +import { Column, CommentCellPrefix } from "./columns"; +import { FieldCellRendererProps } from "./fieldcell"; + +export const COMMENT_CELL_KIND = "comment-cell"; + +interface CommentCellProps { + readonly kind: "comment-cell"; + readonly dataValue: string; + readonly row: number; + readonly col: number; +} + +/** + * CommentCell is a cell for viewing and editing comments. + */ +export type CommentCell = CustomCell; + +export function copyDataForCommentCell(dataValue: string): string { + if (!dataValue.startsWith(CommentCellPrefix)) { + dataValue = `${CommentCellPrefix} ${dataValue.trim()}`; + } + + return dataValue; +} + +const CommentCellEditor = (props: { + columnsWithWidths: Column[]; + onChange: (newValue: CommentCell) => void; + value: CommentCell; + initialValue: string | undefined; +}) => { + // From: https://github.com/mui/material-ui/issues/12779 + // Ensures that the autofocus jumps to the end of the input's value. + const handleFocus = ( + event: React.ChangeEvent + ) => { + const lengthOfInput = event.target.value.length; + return event.target.setSelectionRange(lengthOfInput, lengthOfInput); + }; + + let adjustedInitialValue = props.initialValue; + if ( + adjustedInitialValue && + !adjustedInitialValue.startsWith(CommentCellPrefix) + ) { + adjustedInitialValue = `${CommentCellPrefix} ${adjustedInitialValue}`; + } + + const defaultValue = adjustedInitialValue || props.value.data.dataValue || ""; + const width = props.columnsWithWidths + .slice(props.value.data.col) + .map((col: Column) => col.width) + .reduce((n, m) => n + m); + const fieldRef = useRef(null); + + // NOTE: This is necessary to ensure that the container for the comment editor can span + // the entire width of the comment cell span. The data grid by default sets a max width + // of ~400px on the parent element, which was cutting off the editor. + useEffect(() => { + if (fieldRef.current) { + if (fieldRef.current.parentElement?.parentElement) { + fieldRef.current.parentElement.parentElement.style.maxWidth = "none"; + } + } + }, []); + + return ( + { + props.onChange({ + ...props.value, + copyData: copyDataForCommentCell(e.target.value), + data: { + ...props.value.data, + dataValue: e.target.value, + }, + }); + }} + /> + ); +}; + +export const CommentCellRenderer = ( + props: MutableRefObject +): CustomCellRenderer => { + return { + isMatch: (cell: CustomCell): cell is CommentCell => + (cell.data as any).kind === COMMENT_CELL_KIND, + draw: (args, cell) => { + const { ctx, rect } = args; + const { dataValue } = cell.data; + ctx.save(); + ctx.fillStyle = args.theme.bgHeader; + ctx.fillRect(rect.x, rect.y, rect.width, rect.height); + ctx.fillStyle = "#608b4e"; + ctx.font = "10pt Courier"; + ctx.fillText( + dataValue, + rect.x + 10, + rect.y + rect.height / 2 + 1, + rect.width + ); + ctx.restore(); + return true; + }, + provideEditor: () => (p) => { + const { onChange, value, initialValue } = p; + return ( + + ); + }, + }; +}; diff --git a/spicedb-common/src/components/relationshipeditor/customcells.ts b/spicedb-common/src/components/relationshipeditor/customcells.ts new file mode 100644 index 0000000..9a1e3ee --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/customcells.ts @@ -0,0 +1,260 @@ +import { + DataEditorProps, + GridCell, + GridCellKind, + GridSelection, + ProvideEditorCallback, +} from "@glideapps/glide-data-grid"; +import { useCallback, useMemo, useRef } from "react"; +import { Resolver } from "../../parsers/dsl/resolution"; +import { RelationshipsService } from "../../services/relationshipsservice"; +import { COLUMNS, Column, DataKind } from "./columns"; +import { CommentCell, CommentCellRenderer } from "./commentcell"; +import { AnnotatedData } from "./data"; +import { + CaveatContextCell, + CaveatContextCellRenderer, + CaveatNameCell, + CaveatNameCellRenderer, + ObjectIdCell, + ObjectIdCellRenderer, + RelationCell, + RelationCellRenderer, + TypeCell, + TypeCellRenderer, +} from "./fieldcell"; + +/** + * RelEditorCustomCell defines the custom cell types supported by the editor. + */ +export type RelEditorCustomCell = + | CommentCell + | TypeCell + | ObjectIdCell + | RelationCell + | CaveatNameCell + | CaveatContextCell; + +// Copied from: https://github.com/glideapps/glide-data-grid/blob/6b0a04f9d6550378890580b4db1e1168e4268c54/packages/cells/src/index.ts#L12 +export type DrawCallback = NonNullable; + +/** + * useCustomCells is a hook which provides drawCell and provideEditor callbacks for + * handling all custom cell types in the relationship editor. + */ +export function useCustomCells( + relationshipsService: RelationshipsService, + annotatedData: AnnotatedData, + gridSelection: GridSelection | undefined, + resolver: Resolver | undefined, + similarHighlighting: boolean, + columnsWithWidths: Column[], + isReadOnly: boolean +): { + drawCell: DrawCallback; + provideEditor: ProvideEditorCallback; +} { + const selectedType = useMemo(() => { + if (!gridSelection?.current?.cell) { + return undefined; + } + + const [col, row] = gridSelection.current.cell; + if (row >= annotatedData.length) { + return undefined; + } + + if (col >= COLUMNS.length) { + return undefined; + } + + const dataKind = COLUMNS[col].dataKind; + if ( + dataKind !== DataKind.RESOURCE_TYPE && + dataKind !== DataKind.SUBJECT_TYPE + ) { + return undefined; + } + + return { type: annotatedData[row].columnData[col] }; + }, [gridSelection, annotatedData]); + + const selectedObject = useMemo(() => { + if (!gridSelection?.current?.cell) { + return undefined; + } + + const [col, row] = gridSelection.current.cell; + if (row >= annotatedData.length) { + return undefined; + } + + if (col >= COLUMNS.length) { + return undefined; + } + + const dataKind = COLUMNS[col].dataKind; + if (dataKind !== DataKind.RESOURCE_ID && dataKind !== DataKind.SUBJECT_ID) { + return undefined; + } + + return { + type: annotatedData[row].columnData[col - 1], + objectid: annotatedData[row].columnData[col], + }; + }, [gridSelection, annotatedData]); + + const selectedRelation = useMemo(() => { + if (!gridSelection?.current?.cell) { + return undefined; + } + + const [col, row] = gridSelection.current.cell; + if (row >= annotatedData.length) { + return undefined; + } + + if (col >= COLUMNS.length) { + return undefined; + } + + const dataKind = COLUMNS[col].dataKind; + if (dataKind !== DataKind.RELATION) { + return undefined; + } + + return { + type: annotatedData[row].columnData[col - 2], + objectid: annotatedData[row].columnData[col - 1], + relation: annotatedData[row].columnData[col], + }; + }, [gridSelection, annotatedData]); + + const selectedCaveatName = useMemo(() => { + if (!gridSelection?.current?.cell) { + return undefined; + } + + const [col, row] = gridSelection.current.cell; + if (row >= annotatedData.length) { + return undefined; + } + + if (col >= COLUMNS.length) { + return undefined; + } + + const dataKind = COLUMNS[col].dataKind; + if (dataKind !== DataKind.CAVEAT_NAME) { + return undefined; + } + + return { + type: annotatedData[row].columnData[col - 6], + objectid: annotatedData[row].columnData[col - 5], + relation: annotatedData[row].columnData[col - 4], + caveatname: annotatedData[row].columnData[col], + }; + }, [gridSelection, annotatedData]); + + const selectedCaveatContext = useMemo(() => { + if (!gridSelection?.current?.cell) { + return undefined; + } + + const [col, row] = gridSelection.current.cell; + if (row >= annotatedData.length) { + return undefined; + } + + if (col >= COLUMNS.length) { + return undefined; + } + + const dataKind = COLUMNS[col].dataKind; + if (dataKind !== DataKind.CAVEAT_CONTEXT) { + return undefined; + } + + return { caveatcontext: annotatedData[row].columnData[col] }; + }, [gridSelection, annotatedData]); + + const props = useRef({ + relationshipsService: relationshipsService, + annotatedData: annotatedData, + gridSelection: gridSelection, + resolver: resolver, + selected: { + selectedType: selectedType, + selectedObject: selectedObject, + selectedRelation: selectedRelation, + selectedCaveatName: selectedCaveatName, + selectedCaveatContext: selectedCaveatContext, + }, + similarHighlighting: similarHighlighting, + columnsWithWidths: columnsWithWidths, + }); + + // NOTE: we always set the current value on the props to ensure that the renderers + // have the most up-to-date version of this information. + props.current = { + relationshipsService: relationshipsService, + annotatedData: annotatedData, + gridSelection: gridSelection, + resolver: resolver, + selected: { + selectedType: selectedType, + selectedObject: selectedObject, + selectedRelation: selectedRelation, + selectedCaveatName: selectedCaveatName, + selectedCaveatContext: selectedCaveatContext, + }, + similarHighlighting: similarHighlighting, + columnsWithWidths: columnsWithWidths, + }; + + // renderers defines the custom cell types supported by the RelationshipEditor. + const renderers = useMemo(() => { + return [ + CommentCellRenderer(props), + TypeCellRenderer(props), + ObjectIdCellRenderer(props), + RelationCellRenderer(props), + CaveatNameCellRenderer(props), + CaveatContextCellRenderer(props), + ]; + }, []); + + const drawCell = useCallback( + (args) => { + const { cell } = args; + if (cell.kind !== GridCellKind.Custom) return false; + for (const r of renderers) { + if (r.isMatch(cell)) { + return r.draw(args, cell as any); + } + } + return false; + }, + [renderers] + ); + + const provideEditor = useCallback>( + (cell) => { + if (cell.kind !== GridCellKind.Custom || isReadOnly) return undefined; + + for (const r of renderers) { + if (r.isMatch(cell)) { + return r.provideEditor(cell as any) as ReturnType< + ProvideEditorCallback + >; + } + } + + return undefined; + }, + [renderers, isReadOnly] + ); + + return { drawCell, provideEditor }; +} diff --git a/spicedb-common/src/components/relationshipeditor/data.ts b/spicedb-common/src/components/relationshipeditor/data.ts new file mode 100644 index 0000000..06fd587 --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/data.ts @@ -0,0 +1,311 @@ +import { RelationshipWithComments } from '../../parsing'; +import { RelationTuple as Relationship } from '../../protodevdefs/core/v1/core'; +import { Struct } from '../../protodevdefs/google/protobuf/struct'; +import { COLUMNS } from './columns'; + +/** + * ColumnData holds raw column data for the grid. + */ +export type ColumnData = readonly string[]; + +/** + * Comment represents a comment in the grid. + */ +export type Comment = { + comment: string; +}; + +/** + * PartialRelationship represents a (possibly partial) relationship. + */ +export type PartialRelationship = { + resourceType: string; + resourceId: string; + relation: string; + subjectType: string; + subjectId: string; + subjectRelation: string; + caveatName: string; + caveatContext: string; +}; + +/** + * RelationshipDatum represents a single row in the grid. + */ +export type RelationshipDatum = PartialRelationship | Comment; + +/** + * RelationshipDatumAndMetadata is a type which holds both the datum, as well as the metadata for + * the rel grid. + */ +export interface RelationshipDatumAndMetadata { + /** + * datum is the datum forming the row in the grid. + */ + datum: RelationshipDatum; + + /** + * dataRowIndex is the index of the datum in the array from which this + * item was constructed. + */ + dataRowIndex: number; + + /** + * columnData holds the raw column data for the row. + */ + columnData: ColumnData; +} + +/** + * AnnotatedData represents the data found in the grid, as an array of RelationshipDatumAndMetadata, + * one per row. + */ +export type AnnotatedData = RelationshipDatumAndMetadata[]; + +/** + * toExternalData converts the annotated data into a simple RelationshipDatum array. + */ +export function toExternalData(data: AnnotatedData): RelationshipDatum[] { + return data.map((datum: RelationshipDatumAndMetadata) => datum.datum); +} + +/** + * fromExternalData converts a simple RelationshipDatum array into the annotated data. + */ +export function fromExternalData( + externalData: RelationshipDatum[] | undefined +): AnnotatedData { + return (externalData ?? []).map(datumToAnnotated); +} + +/** + * emptyAnnotatedDatum returns an empty annotated datum for the grid, at the given index. + */ +export function emptyAnnotatedDatum( + index: number +): RelationshipDatumAndMetadata { + return datumToAnnotated( + { + resourceType: '', + resourceId: '', + relation: '', + subjectType: '', + subjectId: '', + subjectRelation: '', + caveatName: '', + caveatContext: '', + }, + index + ); +} + +/** + * toRelationshipString converts the given annotated datum into a relationship string. If the + * datum is a comment or not a full relationship, returns undefined. + */ +export function toRelationshipString( + annotated: RelationshipDatumAndMetadata +): string | undefined { + if ('comment' in annotated.datum) { + return undefined; + } + + return toFullRelationshipString(annotated.datum); +} + +/** + * toFullRelationshipString returns the full relationship found, or undefined if none. + */ +export function toFullRelationshipString( + annotated: PartialRelationship +): string | undefined { + if ( + !annotated.resourceType || + !annotated.resourceId || + !annotated.relation || + !annotated.subjectType || + !annotated.subjectId + ) { + return undefined; + } + return toPartialRelationshipString(annotated); +} + +/** + * toPartialRelationshipString returns a relationship string with the given relationship's data. + */ +export function toPartialRelationshipString( + annotated: PartialRelationship +): string | undefined { + const caveatContext = annotated.caveatContext + ? `:${annotated.caveatContext}` + : ''; + const caveat = annotated.caveatName + ? `[${annotated.caveatName}${caveatContext}]` + : ''; + return `${annotated.resourceType}:${annotated.resourceId}#${ + annotated.relation + }@${annotated.subjectType}:${annotated.subjectId}${ + annotated.subjectRelation ? `#${annotated.subjectRelation}` : '' + }${caveat}`; +} + +/** + * datumToAnnotated returns an annotated datum with the given row index. + */ +export function datumToAnnotated( + datum: RelationshipDatum, + index: number +): RelationshipDatumAndMetadata { + return { + datum: datum, + dataRowIndex: index, + columnData: getColumnData(datum), + }; +} + +/** + * getColumnData returns the column data for a datum. + */ +export function getColumnData(datum: RelationshipDatum) { + if ('comment' in datum) { + return [datum.comment]; + } + + const colData = [ + datum.resourceType, + datum.resourceId, + datum.relation, + datum.subjectType, + datum.subjectId, + datum.subjectRelation ?? '', + datum.caveatName ?? '', + datum.caveatContext ?? '', + ]; + + return colData; +} + +/** + * relationshipToDatum converts a relationship into a datum row. + */ +export function relationshipToDatum(rel: Relationship): PartialRelationship { + let subRel = rel.subject?.relation; + if (subRel === '...') { + subRel = ''; + } + + return { + resourceType: rel.resourceAndRelation?.namespace ?? '', + resourceId: rel.resourceAndRelation?.objectId ?? '', + relation: rel.resourceAndRelation?.relation ?? '', + subjectType: rel.subject?.namespace ?? '', + subjectId: rel.subject?.objectId ?? '', + subjectRelation: subRel ?? '', + caveatName: rel.caveat?.caveatName ?? '', + caveatContext: rel.caveat?.context + ? Struct.toJsonString(rel.caveat?.context) + : '', + }; +} + +/** + * fromColumnData converts column data into a partial relationship. + */ +function fromColumnData(columnData: ColumnData): PartialRelationship | Comment { + if (columnData[0].startsWith('// ')) { + return { + comment: columnData[0], + }; + } + + return { + resourceType: columnData[0], + resourceId: columnData[1], + relation: columnData[2], + subjectType: columnData[3], + subjectId: columnData[4], + subjectRelation: columnData[5] ?? '', + caveatName: columnData[6] ?? '', + caveatContext: columnData[7] ?? '', + }; +} + +// relationshipToColumnData converts the given relationship into column data. +export function relationshipToColumnData( + rel: RelationshipWithComments +): ColumnData | undefined { + const relationship = rel.relationship; + if (relationship === undefined) { + return undefined; + } + + let userRel = relationship.subject?.relation ?? ''; + if (userRel.trim() === '...') { + userRel = ''; + } + + const caveatContext = relationship.caveat?.context + ? JSON.stringify(relationship.caveat.context) + : ''; + const columnData = [ + relationship.resourceAndRelation?.namespace ?? '', + relationship.resourceAndRelation?.objectId ?? '', + relationship.resourceAndRelation?.relation ?? '', + relationship.subject?.namespace ?? '', + relationship.subject?.objectId ?? '', + userRel, + relationship.caveat?.caveatName ?? '', + caveatContext, + ]; + + if (columnData.length !== COLUMNS.length) { + throw Error('Missing column'); + } + + return columnData; +} + +/** + * updateRowInData updates the grid data for a specific set of new column data. + * @param inFlightGridData The current *in flight* annotated grid data. + * @param dataRowIndex The index of the row to be updated in the grid data. + * @param newColumnData The new column data for the row. + * @param startingColIndex If specified, the column at which the newColumnData starts. + */ +export function updateRowInData( + inFlightGridData: AnnotatedData, + dataRowIndex: number, + newColumnData: ColumnData, + startingColIndex?: number +): AnnotatedData { + const adjustedData = Array.from(inFlightGridData); + if (dataRowIndex === adjustedData.length) { + // Add a new row. + adjustedData.push(emptyAnnotatedDatum(dataRowIndex)); + } else if (dataRowIndex > adjustedData.length) { + // Skip any outside of the immediate range. + return adjustedData; + } + + // If startingColIndex is given, build an adjusted fullNewColumnData. + let fullNewColumnData: string[] = Array.from(newColumnData); + if (startingColIndex !== undefined) { + const existingColumnData = adjustedData[dataRowIndex].columnData; + fullNewColumnData = [ + ...existingColumnData.slice(0, startingColIndex), + ...newColumnData, + ...existingColumnData.slice(startingColIndex + newColumnData.length), + ]; + for (let i = fullNewColumnData.length; i < COLUMNS.length; ++i) { + fullNewColumnData.push(''); + } + } + + adjustedData[dataRowIndex] = { + datum: fromColumnData(fullNewColumnData), + columnData: fullNewColumnData, + dataRowIndex: dataRowIndex, + }; + return adjustedData; +} diff --git a/spicedb-common/src/components/relationshipeditor/fieldcell.tsx b/spicedb-common/src/components/relationshipeditor/fieldcell.tsx new file mode 100644 index 0000000..3b78fd1 --- /dev/null +++ b/spicedb-common/src/components/relationshipeditor/fieldcell.tsx @@ -0,0 +1,461 @@ +import { CustomCell, GridSelection } from "@glideapps/glide-data-grid"; +import { CustomCellRenderer } from "@glideapps/glide-data-grid-cells/dist/ts/types"; +import { Popper, PopperProps, alpha } from "@material-ui/core"; +import TextField from "@material-ui/core/TextField"; +import Autocomplete from "@material-ui/lab/Autocomplete"; +import React, { MutableRefObject, useRef } from "react"; +import stc from "string-to-color"; +import { ResolvedDefinition, Resolver } from "../../parsers/dsl/resolution"; +import { RelationshipsService } from "../../services/relationshipsservice"; +import { + COLUMNS, + Column, + DataKind, + DataTitle, + RelationshipSection, +} from "./columns"; +import { AnnotatedData } from "./data"; + +export const TYPE_CELL_KIND = "type-field-cell"; +export const OBJECTID_CELL_KIND = "objectid-field-cell"; +export const RELATION_CELL_KIND = "relation-field-cell"; +export const CAVEATNAME_CELL_KIND = "caveatname-field-cell"; +export const CAVEATCONTEXT_CELL_KIND = "caveatcontext-field-cell"; + +interface FieldCellProps { + readonly dataValue: string; + readonly row: number; + readonly col: number; +} + +type TypeCellProps = FieldCellProps & { + readonly kind: "type-field-cell"; + readonly readonly: false; +}; + +type ObjectIdCellProps = FieldCellProps & { + readonly kind: "objectid-field-cell"; + readonly readonly: false; +}; + +type RelationCellProps = FieldCellProps & { + readonly kind: "relation-field-cell"; + readonly readonly: false; +}; + +type CaveatNameCellProps = FieldCellProps & { + readonly kind: "caveatname-field-cell"; + readonly readonly: false; +}; + +type CaveatContextCellProps = FieldCellProps & { + readonly kind: "caveatcontext-field-cell"; + readonly readonly: false; +}; + +export type TypeCell = CustomCell; +export type ObjectIdCell = CustomCell; +export type RelationCell = CustomCell; +export type CaveatNameCell = CustomCell; +export type CaveatContextCell = CustomCell; + +type SelectedType = { + type: string; +}; + +type SelectedObject = SelectedType & { objectid: string }; + +type SelectedRelation = SelectedObject & { relation: string }; + +type SelectedCaveatName = SelectedRelation & { caveatname: string }; + +type SelectedCaveatContext = { caveatcontext: string }; + +export interface FieldCellRendererProps { + relationshipsService: RelationshipsService; + annotatedData: AnnotatedData; + gridSelection: GridSelection | undefined; + resolver: Resolver | undefined; + selected: { + selectedType: SelectedType | undefined; + selectedObject: SelectedObject | undefined; + selectedRelation: SelectedRelation | undefined; + selectedCaveatName: SelectedCaveatName | undefined; + selectedCaveatContext: SelectedCaveatContext | undefined; + }; + similarHighlighting: boolean; + columnsWithWidths: Column[]; +} + +type GetAutocompleteOptions = ( + props: FieldCellRendererProps, + cellProps: Q +) => string[]; + +function fieldCellRenderer, Q extends FieldCellProps>( + kind: string, + getAutocompleteOptions: GetAutocompleteOptions +): ( + propsRefs: MutableRefObject +) => CustomCellRenderer { + return (propsRefs: MutableRefObject) => { + return { + isMatch: (cell: CustomCell): cell is T => + (cell.data as any).kind === kind, + draw: (args, cell) => { + const { ctx, rect, row, col, theme, highlighted } = args; + let { dataValue } = cell.data; + // Truncate text + const textMetrics = ctx.measureText(dataValue); + if (textMetrics.width / rect.width > 1) { + dataValue = dataValue + .substring( + 0, + dataValue.length * (rect.width / textMetrics.width) - 4 + ) + .concat("..."); + } + + const zeroIndexedCol = col - 1; // +1 for the checkbox column. + + const dataKind = COLUMNS[zeroIndexedCol].dataKind; + if (dataValue === "" && DataTitle[dataKind]) { + ctx.save(); + ctx.fillStyle = "gray"; + ctx.font = "12px Roboto Mono, Monospace"; + ctx.fillText( + `(${DataTitle[dataKind]})`, + rect.x + 10, + rect.y + rect.height / 2 + 1, + rect.width + ); + ctx.restore(); + return true; + } + + const props = propsRefs.current; + + const selectedType: SelectedType | undefined = + props.selected.selectedType || + props.selected.selectedObject || + props.selected.selectedRelation; + const selectedObject: SelectedObject | undefined = + props.selected.selectedObject || props.selected.selectedRelation; + const selectedRelation: SelectedRelation | undefined = + props.selected.selectedRelation; + const selectedCaveatName: SelectedCaveatName | undefined = + props.selected.selectedCaveatName; + + let similarColor = undefined; + if (props.similarHighlighting) { + switch (dataKind) { + case DataKind.RESOURCE_TYPE: + case DataKind.SUBJECT_TYPE: + if ( + dataValue && + selectedType !== undefined && + selectedType.type && + dataValue === selectedType.type + ) { + similarColor = props.relationshipsService.getTypeColor( + selectedType.type + ); + } + break; + + case DataKind.RESOURCE_ID: + case DataKind.SUBJECT_ID: + if ( + dataValue && + selectedObject !== undefined && + selectedObject.objectid && + dataValue === selectedObject.objectid && + props.annotatedData[row].columnData[zeroIndexedCol - 1] === + selectedObject.type + ) { + similarColor = props.relationshipsService.getObjectColor( + selectedObject.type, + selectedObject.objectid + ); + } + break; + + case DataKind.RELATION: + case DataKind.SUBJECT_RELATION: + if ( + dataValue && + selectedRelation !== undefined && + selectedRelation.relation && + dataValue === selectedRelation.relation && + props.annotatedData[row].columnData[zeroIndexedCol - 2] === + selectedRelation.type && + props.annotatedData[row].columnData[zeroIndexedCol - 1] === + selectedRelation.objectid + ) { + similarColor = stc( + `${selectedRelation.type}:${selectedRelation.objectid}#${selectedRelation.relation}` + ); + } + break; + case DataKind.CAVEAT_NAME: + if ( + dataValue && + selectedCaveatName !== undefined && + selectedCaveatName.caveatname && + dataValue === selectedCaveatName.caveatname + ) { + similarColor = stc(dataValue); + } + break; + case DataKind.CAVEAT_CONTEXT: + // No highlighting for context values + break; + } + } + + if (similarColor && !highlighted) { + ctx.strokeStyle = similarColor; + ctx.beginPath(); + ctx.lineWidth = 2; + ctx.setLineDash([7, 5]); + + ctx.fillStyle = alpha(similarColor, 0.2); + ctx.fillRect(rect.x, rect.y, rect.width, rect.height); + ctx.strokeRect( + rect.x + 2, + rect.y + 2, + rect.width - 3, + rect.height - 3 + ); + } + + if (highlighted) { + ctx.fillStyle = theme.bgHeaderHasFocus; + ctx.fillRect(rect.x, rect.y, rect.width, rect.height); + } + + ctx.save(); + ctx.fillStyle = theme.textDark; + ctx.font = "12px Roboto Mono, Monospace"; + ctx.fillText( + dataValue, + rect.x + 10, + rect.y + rect.height / 2 + 1, + rect.width - 20 + ); + + ctx.restore(); + return true; + }, + provideEditor: (cell) => (p) => { + const { onChange, value, initialValue, onFinishedEditing } = p; + return ( + + fieldPropsRef={propsRefs} + onChange={onChange} + value={value} + initialValue={initialValue} + onFinishedEditing={onFinishedEditing} + getAutocompleteOptions={getAutocompleteOptions} + kind={kind} + /> + ); + }, + }; + }; +} + +const FieldCellEditor = < + T extends CustomCell, + Q extends FieldCellProps +>(props: { + fieldPropsRef: MutableRefObject; + onChange: (newValue: T) => void; + value: T; + initialValue: string | undefined; + onFinishedEditing: (newValue?: T | undefined) => void; + getAutocompleteOptions: GetAutocompleteOptions; + kind: string; +}) => { + const edited = useRef(false); + + // NOTE: In order to handle the initialValue correctly, we have to include it as + // the default for the field, but *only* if the user hasn't manually edited the + // contents. Failing to do the `edited.current` check results in the initial value + // always appearing for an otherwise empty value, preventing users from deleting + // the contents completely. + // We could probably work around this by setting a defaultValue, but that has odd + // interactions with the Autocomplete, so we use this approach instead. + let editableValue = edited.current + ? props.value.data.dataValue + : props.value.data.dataValue || props.initialValue; + + const DecoratedPopperComponent = (props: PopperProps) => { + // NOTE: the special className of `click-outside-ignore` is necessary to prevent + // clicking the autocomplete from closing the editor. + // See: https://github.com/glideapps/glide-data-grid/blob/main/packages/core/src/click-outside-container/click-outside-container.tsx#L23 + return ; + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + // Mark that a user edit has occurred. + edited.current = true; + }; + + const autocompleteOptions: string[] = props.getAutocompleteOptions( + props.fieldPropsRef.current, + props.value.data + ); + return ( + option} + style={{ width: "150px", zIndex: 9999999999 }} + freeSolo + onChange={(event, newValue) => { + props.onFinishedEditing({ + ...props.value, + copyData: newValue ?? "", + data: { + ...props.value.data, + dataValue: newValue ?? "", + }, + }); + event.stopPropagation(); + event.preventDefault(); + }} + onInputChange={(event, newValue) => { + // If the event and value are empty, this is a synthetic event created by + // the grid to "clear" the value; we only allow it if there is an initial + // value to replace the current value. + if (!newValue && !event && !props.initialValue) { + return; + } + + props.onChange({ + ...props.value, + copyData: newValue ?? "", + data: { + ...props.value.data, + dataValue: newValue ?? "", + }, + }); + }} + inputValue={editableValue ?? ""} + renderInput={(params: any) => ( + + )} + /> + ); +}; + +export const TypeCellRenderer = fieldCellRenderer( + TYPE_CELL_KIND, + (props: FieldCellRendererProps, cellProps: TypeCellProps) => { + if (props.resolver === undefined) { + return []; + } + + if (COLUMNS[cellProps.col].section === RelationshipSection.RESOURCE) { + // Resource type. Only include types with at least one relation defined. + return props.resolver + .listDefinitions() + .filter((def: ResolvedDefinition) => def.listRelationNames().length > 0) + .map((def: ResolvedDefinition) => def.definition.name) + .sort(); + } + + // Subject type. + return props.resolver + .listDefinitions() + .map((def: ResolvedDefinition) => def.definition.name) + .sort(); + } +); + +export const ObjectIdCellRenderer = fieldCellRenderer< + ObjectIdCell, + ObjectIdCellProps +>( + OBJECTID_CELL_KIND, + (props: FieldCellRendererProps, cellProps: ObjectIdCellProps) => { + if (props.resolver === undefined) { + return []; + } + + const resolvedDefinition = props.resolver.lookupDefinition( + props.annotatedData[cellProps.row].columnData[cellProps.col - 1] + ); + if (resolvedDefinition === undefined) { + return []; + } + + return ( + props.relationshipsService + .getObjectIds(resolvedDefinition.definition.name) + ?.sort() ?? [] + ); + } +); + +export const RelationCellRenderer = fieldCellRenderer< + RelationCell, + RelationCellProps +>( + RELATION_CELL_KIND, + (props: FieldCellRendererProps, cellProps: RelationCellProps) => { + if (props.resolver === undefined) { + return []; + } + + const resolvedDefinition = props.resolver.lookupDefinition( + props.annotatedData[cellProps.row].columnData[cellProps.col - 2] + ); + if (resolvedDefinition === undefined) { + return []; + } + + if (COLUMNS[cellProps.col].section === RelationshipSection.RESOURCE) { + return resolvedDefinition.listRelationNames().sort(); + } + + return resolvedDefinition.listRelationsAndPermissionNames().sort(); + } +); + +export const CaveatNameCellRenderer = fieldCellRenderer< + CaveatNameCell, + CaveatNameCellProps +>( + CAVEATNAME_CELL_KIND, + (props: FieldCellRendererProps, cellProps: CaveatNameCellProps) => { + if (props.resolver === undefined) { + return []; + } + + const { selectedCaveatName } = props.selected; + if (selectedCaveatName?.type === undefined) { + return []; + } + + const def = props.resolver.lookupDefinition(selectedCaveatName.type); + return def ? def.listWithCaveatNames().sort() : []; + } +); + +export const CaveatContextCellRenderer = fieldCellRenderer< + CaveatContextCell, + CaveatContextCellProps +>( + CAVEATCONTEXT_CELL_KIND, + (props: FieldCellRendererProps, cellProps: CaveatContextCellProps) => { + // No autocomplete support + return []; + } +); diff --git a/spicedb-common/src/examples.ts b/spicedb-common/src/examples.ts new file mode 100644 index 0000000..6758a4f --- /dev/null +++ b/spicedb-common/src/examples.ts @@ -0,0 +1,44 @@ +import yaml from "yaml"; +import { ParsedValidation } from "./validationfileformat"; +export interface Example { + id: string; + title: string; + documentation: string; + subtitle: string; + data: ParsedValidation; +} + +async function get(path: string): Promise { + const result = await fetch(path); + return await result.text(); +} + +const prefix = `${process.env.PUBLIC_URL}/static/schemas`; + +/** + * LoadExamples loads the examples defined statically and compiled in. + */ +export async function LoadExamples(): Promise { + // NOTE: the format of the file tree here is defined by the Dockerfile for playground-ui/playground + // and matches the tree structure found in https://github.com/authzed/examples/tree/main/schemas. + // `_all` is added by the Dockerfile at build time. + const exampleNames = (await get(`${prefix}/_all`)) + .split('\n') + .filter((n) => !!n && n !== '_all'); + const examples: Example[] = []; + for (const n of exampleNames) { + const documentation = await get(`${prefix}/${n}/README.md`); + const data = await get(`${prefix}/${n}/schema-and-data.yaml`); + const title = documentation.split('\n')[0].trim().substring(1).trim(); // Strip the # for the markdown header + const subtitle = documentation.split('\n')[2].trim(); + + examples.push({ + id: n, + title: title, + subtitle: subtitle, + documentation: documentation, + data: yaml.parse(data) as ParsedValidation, + }); + } + return examples; +} diff --git a/spicedb-common/src/include/protobuf-parser.ts b/spicedb-common/src/include/protobuf-parser.ts new file mode 100644 index 0000000..cb2dc94 --- /dev/null +++ b/spicedb-common/src/include/protobuf-parser.ts @@ -0,0 +1,132 @@ +/* eslint-disable */ + +/* + Based on https://github.com/brotchie/protobuf-textformat/blob/master/src/parser.js + By James Brotchie + + Original License reproduced: + + The MIT License (MIT) + + Copyright (c) 2014 James Brotchie + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +import Parsimmon from 'parsimmon'; + +export interface Pair { + type: "pair" + name: string + value: string +} + +export interface Index { + offset: number + line: number + column: number +} + + +export interface TextRange { + startIndex: Index + endIndex: Index +} + +export interface Message { + type: "message" + name: string + values: MessageOrPair[] + range: TextRange +} + +export type MessageOrPair = Pair | Message + +var regex = Parsimmon.regex + , string = Parsimmon.string + , optWhitespace = Parsimmon.optWhitespace + , lazy = Parsimmon.lazy + , alt = Parsimmon.alt + , seq = Parsimmon.seq; + +var comment = regex(/#.*/).then(optWhitespace.atMost(1)); +var whitespace = optWhitespace.then(comment.atLeast(0)); + +var lexeme = function (p: any) { return p.skip(whitespace); } + +var colon = lexeme(string(':')); + +var lbrace = lexeme(string('{')) + , rbrace = lexeme(string('}')); + +var stripFirstLast = function (x: string) { + return x.substr(1, x.length - 2); +}; + +var identifier = lexeme(regex(/[a-zA-Z_][0-9a-zA-Z_+-]*/)); +var doubleString = lexeme(regex(/\"([^\"\n\\\\]|\\\\.)*(\"|\\\\?$)/).map(stripFirstLast)); +var singleString = lexeme(regex(/\'([^\'\n\\\\]|\\\\.)*(\'|\\\\?$)/).map(stripFirstLast)); + +var number = lexeme(regex(/[.]?[0-9+-][0-9a-zA-Z_.+-]*/)).map(Number); +var trueLiteral = lexeme(string('true')).result(true); +var falseLiteral = lexeme(string('false')).result(false); + +var expr: any = lazy('an expression', function () { return alt(pair, message).many(); }); + +var message: any = + Parsimmon.seqMap( + Parsimmon.index, + seq(identifier, colon.times(0, 1).then(lbrace).then(expr).skip(rbrace)), + Parsimmon.index, function (startIndex, message, endIndex) { + return { 'message': message, 'startIndex': startIndex, 'endIndex': endIndex }; + }) + .map(function (data) { + const message = data.message; + return { + type: 'message', + name: message[0], + values: message[1], + range: { startIndex: data.startIndex, endIndex: data.endIndex } + }; + }); + +var value = alt(trueLiteral, falseLiteral, number, doubleString, singleString, identifier); + +var pair = seq(identifier.skip(colon), value) + .map(function (pair) { + return { type: 'pair', name: pair[0], value: pair[1] }; + }); + + +export interface ParseResult { + status: boolean + error: string | undefined + parserResult: Parsimmon.Result + value: any | undefined +} + +export default function parse(input: string): ParseResult { + const result = whitespace.then(expr).parse(input); + return { + status: result.status, + error: !result.status ? Parsimmon.formatError(input, result) : undefined, + parserResult: result as Parsimmon.Result, + value: result.status ? (result as Parsimmon.Success).value : undefined, + }; +}; \ No newline at end of file diff --git a/spicedb-common/src/lang/dslang.ts b/spicedb-common/src/lang/dslang.ts new file mode 100644 index 0000000..02e1a29 --- /dev/null +++ b/spicedb-common/src/lang/dslang.ts @@ -0,0 +1,693 @@ +import { + findReferenceNode, + parse, +} from '@code/spicedb-common/src/parsers/dsl/dsl'; +import { + ResolvedReference, + Resolver, +} from '@code/spicedb-common/src/parsers/dsl/resolution'; +import { + CancellationToken, + Position, + editor, + languages, +} from 'monaco-editor-core'; + +export const DS_LANGUAGE_NAME = 'dsl'; +export const DS_THEME_NAME = 'dsl-theme'; +export const DS_DARK_THEME_NAME = 'dsl-theme-dark'; +export const DS_EMBED_DARK_THEME_NAME = 'dsl-theme-embed-dark'; + +export default function registerDSLanguage(monaco: any) { + // Based on: https://github.com/microsoft/monaco-languages/blob/main/src/typescript/typescript.ts + const richEditConfiguration = { + // eslint-disable-next-line + wordPattern: + /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, + + comments: { + lineComment: '//', + blockComment: ['/*', '*/'], + }, + + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'], + ], + + onEnterRules: [ + { + // e.g. /** | */ + // eslint-disable-next-line + beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, + // eslint-disable-next-line + afterText: /^\s*\*\/$/, + action: { + indentAction: monaco.languages.IndentAction.IndentOutdent, + appendText: ' * ', + }, + }, + { + // e.g. /** ...| + // eslint-disable-next-line + beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, + action: { + indentAction: monaco.languages.IndentAction.None, + appendText: ' * ', + }, + }, + { + // e.g. * ...| + // eslint-disable-next-line + beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/, + action: { + indentAction: monaco.languages.IndentAction.None, + appendText: '* ', + }, + }, + { + // e.g. */| + // eslint-disable-next-line + beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/, + action: { + indentAction: monaco.languages.IndentAction.None, + removeText: 1, + }, + }, + ], + + autoClosingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"', notIn: ['string'] }, + { open: "'", close: "'", notIn: ['string', 'comment'] }, + { open: '`', close: '`', notIn: ['string', 'comment'] }, + { open: '/**', close: ' */', notIn: ['string'] }, + ], + }; + + monaco.languages.register({ id: DS_LANGUAGE_NAME }); + monaco.languages.setLanguageConfiguration( + DS_LANGUAGE_NAME, + richEditConfiguration + ); + monaco.languages.setMonarchTokensProvider(DS_LANGUAGE_NAME, { + keywords: [], + symbols: /[=>/, { token: 'close', next: '@genericsornextcaveatparam' }], + [/,/, { token: 'comma', next: '@caveatparam' }], + [/\)/, { token: '@rematch', next: '@caveatexprblock' }], + ], + caveatexprblock: [ + [/$/, { token: 'close', next: '@popall', nextEmbedded: '@pop' }], + [ + /{/, + { + token: 'open', + next: '@caveatexpr', + bracket: '@open', + nextEmbedded: 'cel', + }, + ], + [ + /}/, + { + token: '@rematch', + next: '@popall', + bracket: '@close', + nextEmbedded: '@pop', + }, + ], + ], + caveatexpr: [ + [/$/, { token: 'close', next: '@popall', nextEmbedded: '@pop' }], + [ + /{/, + { + token: 'open', + next: '@caveatexpr', + bracket: '@open', + }, + ], + [ + /}/, + { + token: '@rematch', + next: '@pop', + bracket: '@close', + }, + ], + [ + /\(/, + { + token: 'open', + next: '@caveatexpr', + bracket: '@open', + }, + ], + [ + /\)/, + { + token: '@rematch', + next: '@pop', + bracket: '@close', + }, + ], + [ + /[a-z0-9_]+/, + { + token: 'identifier.caveat-usage', + next: '@caveatexpr', + }, + ], + [ + /./, + { + token: 'othercaveattoken', + next: '@caveatexpr', + }, + ], + [ + /[ \t\r\n]+/, + { + token: 'whitespace', + next: '@caveatexpr', + }, + ], + ], + definition: [ + [ + /([a-z0-9_]+\/)+/, + { token: 'identifier.definition-prefix', next: '@subdef' }, + ], + [/[a-z0-9_]+/, { token: 'identifier.definition', next: '@popall' }], + ], + subdef: [ + [/[a-z0-9_]+/, { token: 'identifier.definition', next: '@popall' }], + ], + permission: [ + [/[a-z0-9_]+/, { token: 'identifier.permission', next: '@expr' }], + ], + expr: [ + [/$/, { token: 'close', next: '@popall' }], + [/}/, { token: '@rematch', next: '@popall' }], + [/relation/, { token: '@rematch', next: '@popall' }], + [/permission/, { token: '@rematch', next: '@popall' }], + [/nil/, { token: 'keyword.nil' }], + [/\w+/, { token: 'identifier.relorperm' }], + { include: '@whitespace' }, + ], + relation: [ + [/[a-z0-9_]+/, { token: 'identifier.relation', next: '@allowed' }], + ], + allowed: [[/:/, { token: 'allowed', next: '@typedef' }]], + typedef: [ + [/$/, { token: 'close', next: '@popall' }], + [/}/, { token: '@rematch', next: '@popall' }], + [/relation/, { token: '@rematch', next: '@popall' }], + [/permission/, { token: '@rematch', next: '@popall' }], + [ + /([a-z0-9_]+\/)+/, + { token: 'identifier.type-prefix', next: '@typedef' }, + ], + [/\w+#/, { token: '@rematch', next: '@relationref' }], + [/\w+:/, { token: '@rematch', next: '@wildcardref' }], + [/\w+/, { token: 'type.identifier' }], + { include: '@whitespace' }, + ], + relationref: [ + [/\w+/, { token: 'type.identifier', next: '@relsymbol' }], + [/./, { token: '@rematch', next: '@pop' }], + [/$/, { token: 'close', next: '@popall' }], + ], + relsymbol: [ + [/#/, { token: 'type.relsymbol', next: '@relvalue' }], + [/./, { token: '@rematch', next: '@pop' }], + [/$/, { token: 'close', next: '@popall' }], + ], + relvalue: [[/\w+/, { token: 'type.relation', next: '@pop' }]], + wildcardref: [ + [/\w+/, { token: 'type.identifier', next: '@wildcardsymbol' }], + [/./, { token: '@rematch', next: '@pop' }], + [/$/, { token: 'close', next: '@popall' }], + ], + wildcardsymbol: [ + [/:/, { token: 'type.wildcardsymbol', next: '@wildcardvalue' }], + [/./, { token: '@rematch', next: '@pop' }], + [/$/, { token: 'close', next: '@popall' }], + ], + wildcardvalue: [[/\*/, { token: 'type.wildcard', next: '@pop' }]], + comment: [ + // eslint-disable-next-line + [/[^\/*]+/, 'comment'], + + // eslint-disable-next-line + [/\*\//, 'comment', '@pop'], + + // eslint-disable-next-line + [/[\/*]/, 'comment'], + ], + doccomment: [ + // eslint-disable-next-line + [/[^\/*]+/, 'comment.doc'], + + // eslint-disable-next-line + [/\*\//, 'comment.doc', '@pop'], + + // eslint-disable-next-line + [/[\/*]/, 'comment.doc'], + ], + whitespace: [ + [/[ \t\r\n]+/, ''], + [/\/\*\*(?!\/)/, 'comment.doc', '@doccomment'], + [/\/\*/, 'comment', '@comment'], + [/\/\/.*$/, 'comment'], + ], + }, + }); + + monaco.languages.registerCompletionItemProvider(DS_LANGUAGE_NAME, { + triggerCharacters: [':', '=', '+', '-', '&', '(', '|', '#'], + + provideCompletionItems: function ( + model: editor.ITextModel, + position: Position, + token: CancellationToken + ) { + //const lastChars = model.getValueInRange({ startLineNumber: position.lineNumber, startColumn: 0, endLineNumber: position.lineNumber, endColumn: position.column }); + return { + suggestions: [], + }; + }, + }); + + monaco.languages.registerDefinitionProvider(DS_LANGUAGE_NAME, { + provideDefinition: function ( + model: editor.ITextModel, + position: Position, + token: CancellationToken + ): languages.ProviderResult { + const text = model.getValue(); + const parserResult = parse(text); + if (parserResult.error) { + return; + } + + const found = findReferenceNode( + parserResult.schema!, + position.lineNumber, + position.column + ); + if (!found) { + return; + } + + const resolution = new Resolver(parserResult.schema!); + switch (found.node?.kind) { + case 'typeref': + const def = resolution.lookupDefinition(found.node.path); + if (def) { + if (found.node.relationName) { + const relation = def.lookupRelationOrPermission( + found.node.relationName + ); + if (relation) { + return { + uri: model.uri, + range: { + startLineNumber: relation.range.startIndex.line, + startColumn: relation.range.startIndex.column, + endLineNumber: relation.range.startIndex.line, + endColumn: relation.range.startIndex.column, + }, + }; + } + } else { + return { + uri: model.uri, + range: { + startLineNumber: def.definition.range.startIndex.line, + startColumn: def.definition.range.startIndex.column, + endLineNumber: def.definition.range.startIndex.line, + endColumn: def.definition.range.startIndex.column, + }, + }; + } + } + break; + + case 'relationref': + const relation = resolution.resolveRelationOrPermission( + found.node, + found.def + ); + if (relation) { + return { + uri: model.uri, + range: { + startLineNumber: relation.range.startIndex.line, + startColumn: relation.range.startIndex.column, + endLineNumber: relation.range.startIndex.line, + endColumn: relation.range.startIndex.column, + }, + }; + } + break; + } + + return undefined; + }, + }); + + monaco.languages.registerDocumentSemanticTokensProvider(DS_LANGUAGE_NAME, { + getLegend: function (): languages.SemanticTokensLegend { + return { + tokenTypes: [ + 'type', + 'property', + 'member', + 'type.unknown', + 'member.unknown', + ], + tokenModifiers: ['declaration'], + }; + }, + provideDocumentSemanticTokens: function ( + model: editor.ITextModel, + lastResultId: string, + token: CancellationToken + ): languages.ProviderResult { + const text = model.getValue(); + const parserResult = parse(text); + const data: number[] = []; + if (parserResult.error) { + return { + data: new Uint32Array(data), + resultId: undefined, + }; + } + + // Data format: + // - Line number (0-indexed, and offset from the *previous line*) + // - Column position (0-indexed) + // - Token length + // - Token type index + // - Modifier index + let prevLine = 0; + let prevChar = 0; + + const appendData = ( + lineNumber: number, + colPosition: number, + length: number, + tokenType: number, + modifierIndex: number + ) => { + data.push( + lineNumber - prevLine, + prevLine === lineNumber ? colPosition - prevChar : colPosition, + length, + tokenType, + modifierIndex + ); + + prevLine = lineNumber; + prevChar = colPosition; + }; + + // Resolve all type references and relation/permission references in expressions and color based on their kind and resolution + // status. + const resolution = new Resolver(parserResult.schema!); + resolution.resolvedReferences().forEach((resolved: ResolvedReference) => { + const lineNumber = resolved.reference.range.startIndex.line - 1; // parser ranges are 1-indexed + const colPosition = resolved.reference.range.startIndex.column - 1; + + switch (resolved.kind) { + case 'type': + if (resolved.referencedTypeAndRelation === undefined) { + appendData( + lineNumber, + colPosition, + resolved.reference.path.length, + /* type.unknown */ 3, + 0 + ); + return; + } + + appendData( + lineNumber, + colPosition, + resolved.reference.path.length, + /* type */ 0, + 0 + ); + + if (resolved.reference.relationName) { + if (resolved.referencedTypeAndRelation.relation !== undefined) { + appendData( + lineNumber, + colPosition + 1 + resolved.reference.path.length, + resolved.reference.relationName.length, + /* member */ 2, + 0 + ); + } else if ( + resolved.referencedTypeAndRelation.permission !== undefined + ) { + appendData( + lineNumber, + colPosition + 1 + resolved.reference.path.length, + resolved.reference.relationName.length, + /* property */ 1, + 0 + ); + } else { + appendData( + lineNumber, + colPosition + 1 + resolved.reference.path.length, + resolved.reference.relationName.length, + /* member.unknown */ 3, + 0 + ); + } + } + break; + + case 'expression': + if (resolved.resolvedRelationOrPermission === undefined) { + appendData( + lineNumber, + colPosition, + resolved.reference.relationName.length, + /* property.unknown */ 4, + 0 + ); + } else { + switch (resolved.resolvedRelationOrPermission.kind) { + case 'permission': + appendData( + lineNumber, + colPosition, + resolved.reference.relationName.length, + /* property */ 1, + 0 + ); + break; + + case 'relation': + appendData( + lineNumber, + colPosition, + resolved.reference.relationName.length, + /* member */ 2, + 0 + ); + break; + } + } + break; + } + }); + + return { + data: new Uint32Array(data), + resultId: undefined, + }; + }, + releaseDocumentSemanticTokens: function (resultId: string) {}, + }); + + monaco.editor.defineTheme(DS_THEME_NAME, { + base: 'vs', + inherit: true, + rules: [ + { token: 'comment', foreground: '608b4e' }, + { token: 'comment.doc', foreground: '64bf3b' }, + { token: 'keyword', foreground: '8787ff' }, + + { token: 'type', foreground: '4242ff' }, + { token: 'type.unknown', foreground: 'ff0000' }, + + { token: 'type.relation', foreground: '883425' }, + { token: 'type.identifier', foreground: '4242ff' }, + { token: 'type.relsymbol', foreground: '000000' }, + + { token: 'type.wildcard', foreground: '00cfba', fontStyle: 'bold' }, + { token: 'type.wildcardsymbol', foreground: '000000' }, + + { token: 'member', foreground: '883425' }, + { token: 'member.unknown', foreground: 'ff0000' }, + + { token: 'property', foreground: '158a64' }, + { token: 'property.unknown', foreground: 'ff0000' }, + + { token: 'identifier.relorperm', foreground: '666666' }, + + { token: 'keyword.permission', foreground: '158a64' }, + { token: 'keyword.relation', foreground: '883425' }, + { token: 'keyword.definition', foreground: '4242ff' }, + { token: 'keyword.caveat', foreground: 'ff4271' }, + { token: 'keyword.nil', foreground: '999999' }, + + { token: 'identifier.type-prefix', foreground: 'aaaaaa' }, + { token: 'identifier.definition-prefix', foreground: 'aaaaaa' }, + + { token: 'identifier.caveat', foreground: '000000' }, + { token: 'identifier.caveat-param-name', foreground: '9eb4df' }, + { token: 'identifier.caveat-usage', foreground: '000000' }, + + { token: 'identifier.definition', foreground: '000000' }, + { token: 'identifier.permission', foreground: '000000' }, + { token: 'identifier.relation', foreground: '000000' }, + ], + }); + + const DARK_RULES = [ + { token: 'comment', foreground: '608b4e' }, + { token: 'comment.doc', foreground: '64bf3b' }, + { token: 'keyword', foreground: '8787ff' }, + + { token: 'type', foreground: 'cec2f3' }, + { token: 'type.unknown', foreground: 'ff0000' }, + + { token: 'type.relation', foreground: 'f9cdbd' }, + { token: 'type.identifier', foreground: 'cec2f3' }, + { token: 'type.relsymbol', foreground: 'ffffff' }, + + { token: 'type.wildcard', foreground: '00ffe5', fontStyle: 'bold' }, + { token: 'type.wildcardsymbol', foreground: 'ffffff' }, + + { token: 'member', foreground: 'f9cdbd' }, + { token: 'member.unknown', foreground: 'ff0000' }, + + { token: 'property', foreground: '95ffce' }, + { token: 'property.unknown', foreground: 'ff0000' }, + + { token: 'identifier.relorperm', foreground: 'cccccc' }, + + { token: 'keyword.permission', foreground: '1acc92' }, + { token: 'keyword.relation', foreground: 'ffa887' }, + { token: 'keyword.definition', foreground: '8787ff' }, + { token: 'keyword.caveat', foreground: 'ff87a6' }, + { token: 'keyword.nil', foreground: 'cccccc' }, + + { token: 'identifier.type-prefix', foreground: 'aaaaaa' }, + { token: 'identifier.definition-prefix', foreground: 'aaaaaa' }, + + { token: 'identifier.caveat-param-type-name', foreground: 'cec2f3' }, + + { token: 'identifier.caveat', foreground: 'ffffff' }, + { token: 'identifier.caveat-param-name', foreground: '9eb4df' }, + { token: 'identifier.caveat-usage', foreground: 'ffffff' }, + + { token: 'identifier.definition', foreground: 'ffffff' }, + { token: 'identifier.permission', foreground: 'ffffff' }, + { token: 'identifier.relation', foreground: 'ffffff' }, + ]; + + monaco.editor.defineTheme(DS_DARK_THEME_NAME, { + base: 'vs-dark', + inherit: true, + rules: DARK_RULES, + }); + monaco.editor.defineTheme(DS_EMBED_DARK_THEME_NAME, { + base: 'vs-dark', + inherit: true, + rules: DARK_RULES, + colors: { + 'editor.background': '#0e0d11', + }, + }); +} diff --git a/spicedb-common/src/parsers/cel/cel.test.ts b/spicedb-common/src/parsers/cel/cel.test.ts new file mode 100644 index 0000000..fcd13fc --- /dev/null +++ b/spicedb-common/src/parsers/cel/cel.test.ts @@ -0,0 +1,139 @@ +import { parseCELExpression } from './cel'; + +describe('parsing', () => { + it('parses basic CEL expression', () => { + const expr = `somecondition`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses basic CEL comparison expression', () => { + const expr = `somecondition == 42`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with string literal', () => { + const expr = `somecondition == 'hello'`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with parens', () => { + const expr = `somecondition == (1 + 2)`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with map literal', () => { + const expr = `somecondition == {"hi": 1, "hello": 2}`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with accessors', () => { + const expr = `somecondition == somevar.hi.there`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with function call', () => { + const expr = `somecondition.isSubsetOf(anotherthing)`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with function call access with arguments', () => { + const expr = `somecondition.isSubsetOf(anotherthing).third`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses with function call without arguments', () => { + const expr = `somecondition.foo()`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('does not parse invalid CEL', () => { + const expr = `somecondition = (1 + 2)`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeFalsy(); + }); + + it('does not parse invalid CEL with mismatching brackets', () => { + const expr = `somecondition = {1 + 2`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeFalsy(); + }); + + it('parses a more complicated expression', () => { + const expr = `account.balance >= transaction.withdrawal + || (account.overdraftProtection + && account.overdraftLimit >= transaction.withdrawal - account.balance)`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses an object construction', () => { + const expr = `common.GeoPoint{ latitude: 10.0, longitude: -5.5 }`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses a unit', () => { + const expr = `56u`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses an exponent', () => { + const expr = `56e10`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses a string literal', () => { + const expr = `"hi there"`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses a multiline string literal', () => { + const expr = `""" + hi + there + """`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('fails to parse an invalid multiline string literal', () => { + const expr = `""" + hi + there + ""`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeFalsy(); + }); + + it('parses literals', () => { + const expr = `1 + true + null + 5.6 + b"hello" + "hi"`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('parses comments', () => { + const expr = ` + // hi there + 1 + true + null + 5.6 + b"hello" + "hi"`; + const parsed = parseCELExpression(expr); + expect(parsed).toBeTruthy(); + }); + + it('raises an error for unterminated character', () => { + const expr = 'foo`'; + const parsed = parseCELExpression(expr); + expect(parsed).toBeFalsy(); + }); +}); diff --git a/spicedb-common/src/parsers/cel/cel.ts b/spicedb-common/src/parsers/cel/cel.ts new file mode 100644 index 0000000..8cbd681 --- /dev/null +++ b/spicedb-common/src/parsers/cel/cel.ts @@ -0,0 +1,244 @@ +import Parsimmon, { Parser } from 'parsimmon'; + +const regex = Parsimmon.regex; +const string = Parsimmon.string; +const seq = Parsimmon.seq; +const optWhitespace = Parsimmon.optWhitespace; + +const singleLineComment = regex(/\/\/.*/).then(optWhitespace.atMost(1)); +const multiLineComment = regex(/\/\*((((?!\*\/).)|\r|\n)*)\*\//).then( + optWhitespace.atMost(1) +); + +const comment = singleLineComment.or(multiLineComment); +const whitespace = optWhitespace.then(comment.atLeast(0)); +const lexeme = function (p: any) { + return p.skip(whitespace); +}; + +const reserved = [ + 'in', + 'as', + 'break', + 'const', + 'continue', + 'else', + 'for', + 'function', + 'if', + 'import', + 'let', + 'loop', + 'package', + 'namespace', + 'return', + 'var', + 'void', + 'while', +]; + +const identifier = lexeme(regex(/[a-zA-Z_][0-9a-zA-Z_+]*/)); + +const questionMark = lexeme(string('?')); +const colon = lexeme(string(':')); +const orToken = lexeme(string('||')); +const andToken = lexeme(string('&&')); +const bang = lexeme(string('!')); +const dot = lexeme(string('.')); +const dash = lexeme(string('-')); +const lbracket = lexeme(string('[')); +const rbracket = lexeme(string(']')); +const lbrace = lexeme(string('{')); +const rbrace = lexeme(string('}')); +const lparen = lexeme(string('(')); +const rparen = lexeme(string(')')); +const comma = lexeme(string(',')); + +// Based on: https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax + +const numberLiteral = lexeme(regex(/[+-]?([0-9]*[.])?[0-9]+(u?)(e[0-9]+)?/)); +const boolLiteral = lexeme(string('true')).or(lexeme(string('false'))); +const nullLiteral = lexeme(string('null')); + +// STRING_LIT ::= [rR]? ( " ~( " | NEWLINE )* " +// | ' ~( ' | NEWLINE )* ' +// | """ ~"""* """ +// | ''' ~'''* ''' +// ) +const regexPrefix = lexeme(string('r')).or(lexeme(string('R'))); +const singleQuotedString = lexeme(regex(/'((?:\\.|.)*?)'/)); +const doubleQuotedString = lexeme(regex(/"((?:\\.|.)*?)"/)); +const multilineString = lexeme(regex(/"""((((?!""").)|\r|\n)*)"""/)).or( + lexeme(regex(/'''((((?!''').)|\r|\n)*)'''/)) +); + +const stringLiteral = seq( + regexPrefix.atMost(1), + multilineString.or(singleQuotedString.or(doubleQuotedString)) +); + +// BYTES_LIT ::= [bB] STRING_LIT +const bytesPrefix = lexeme(string('b')).or(lexeme(string('B'))); +const bytesLiteral = seq(bytesPrefix, stringLiteral); + +// LITERAL ::= INT_LIT | UINT_LIT | FLOAT_LIT | STRING_LIT | BYTES_LIT | BOOL_LIT | NULL_LIT +const literal = numberLiteral + .or(stringLiteral) + .or(boolLiteral) + .or(nullLiteral) + .or(bytesLiteral); + +const expression = Parsimmon.lazy(() => { + return celExpression; +}); + +// MapInits = Expr ":" Expr {"," Expr ":" Expr} ; +const mapInits = seq( + expression, + colon, + expression, + seq(comma, expression, colon, expression).atLeast(0) +); + +// FieldInits = IDENT ":" Expr {"," IDENT ":" Expr} ; +const fieldInits = seq( + identifier, + colon, + expression, + seq(comma, identifier, colon, expression).atLeast(0) +); + +// Primary = ["."] IDENT ["(" [ExprList] ")"] +// | "(" Expr ")" +// | "[" [ExprList] [","] "]" +// | "{" [MapInits] [","] "}" +// | ["."] IDENT { "." IDENT } "{" [FieldInits] [","] "}" +// | LITERAL +// NOTE: some skipped because not necessary here with the reordering below of member. +const primary = literal + .or(seq(lparen, expression, rparen)) + .or( + seq( + lbracket, + Parsimmon.lazy(() => { + return exprList; + }), + rbracket + ) + ) + .or(seq(lbrace, mapInits, rbrace)) + .or(identifier); + +// ExprList = Expr {"," Expr} ; +const exprList = expression.then(seq(comma, expression).atLeast(0)); + +// Member = Primary | Member "." IDENT ["(" [ExprList] ")"] | Member "[" Expr "]" +// NOTE: reordered here to allow for parsing by Parsimmon +const member: Parser = seq( + primary.then( + seq( + dot, + identifier, + seq(lparen, exprList.atMost(1), rparen) + .or(seq(lbrace, fieldInits, rbrace)) + .atLeast(0) + ) + .or(seq(lbracket, expression, rbracket)) + .atLeast(0) + ) +); + +// Unary = Member | "!" {"!"} Member | "-" {"-"} Member +const unary: Parser = seq( + member.or(bang.atLeast(1).then(member)).or(dash.atLeast(1).then(member)) +); + +// Multiplication = [Multiplication ("*" | "/" | "%")] Unary ; +// NOTE: reordered here to allow for parsing by Parsimmon +const multiplicationOp = lexeme(string('*')) + .or(lexeme(string('/'))) + .or(lexeme(string('%'))); +const multiplication: Parser = seq( + unary, + seq( + multiplicationOp, + Parsimmon.lazy(() => { + return multiplication; + }) + ).atMost(1) +); + +// Addition = [Addition ("+" | "-")] Multiplication ; +// NOTE: reordered here to allow for parsing by Parsimmon +const additionOp = lexeme(string('+')).or(lexeme(string('-'))); +const addition: Parser = seq( + multiplication, + seq( + additionOp, + Parsimmon.lazy(() => { + return addition; + }) + ).atMost(1) +); + +// Relop = "<" | "<=" | ">=" | ">" | "==" | "!=" | "in" ; +const relOp = lexeme(string('<')) + .or(lexeme(string('<='))) + .or(lexeme(string('>='))) + .or(lexeme(string('>'))) + .or(lexeme(string('=='))) + .or(lexeme(string('!='))) + .or(lexeme(string('in'))); + +// Relation = [Relation Relop] Addition ; +// NOTE: reordered here to allow for parsing by Parsimmon +const relation: Parser = seq( + addition, + seq( + relOp, + Parsimmon.lazy(() => { + return relation; + }) + ).atMost(1) +); + +// ConditionalAnd = [ConditionalAnd "&&"] Relation ; +// NOTE: reordered here to allow for parsing by Parsimmon +const conditionalAnd: Parser = seq( + relation, + seq( + andToken, + Parsimmon.lazy(() => { + return conditionalAnd; + }) + ).atMost(1) +); + +// ConditionalOr = [ConditionalOr "||"] ConditionalAnd ; +// NOTE: reordered here to allow for parsing by Parsimmon +const conditionalOr: Parser = seq( + conditionalAnd, + seq( + orToken, + Parsimmon.lazy(() => { + return conditionalOr; + }) + ).atMost(1) +); + +// Expr = ConditionalOr ["?" ConditionalOr ":" Expr] ; +export const celExpression: Parser = conditionalOr.then( + seq( + questionMark, + conditionalOr, + colon, + Parsimmon.lazy(() => { + return celExpression; + }) + ).atMost(1) +); + +export const parseCELExpression = (value: string) => { + const result = whitespace.then(celExpression).parse(value); + return result.status; +}; diff --git a/spicedb-common/src/parsers/dsl/dsl.test.ts b/spicedb-common/src/parsers/dsl/dsl.test.ts new file mode 100644 index 0000000..5a89b90 --- /dev/null +++ b/spicedb-common/src/parsers/dsl/dsl.test.ts @@ -0,0 +1,628 @@ +import { + ParsedArrowExpression, + ParsedBinaryExpression, + ParsedCaveatDefinition, + ParsedNilExpression, + ParsedObjectDefinition, + ParsedRelationRefExpression, + parseSchema, +} from './dsl'; + +describe('parsing', () => { + it('parses empty schema', () => { + const schema = ``; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(0); + }); + + it('parses empty definition', () => { + const schema = `definition foo {}`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + expect(parsed?.definitions[0].name).toEqual('foo'); + }); + + it('parses empty definition with multiple path segements', () => { + const schema = `definition foo/bar/baz {}`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + expect(parsed?.definitions[0].name).toEqual('foo/bar/baz'); + }); + + it('parses basic caveat', () => { + const schema = `caveat foo (someParam string, anotherParam int) { someParam == 42 }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + expect(parsed?.definitions[0].name).toEqual('foo'); + + const definition = parsed?.definitions[0] as ParsedCaveatDefinition; + expect(definition.parameters.map((p) => p.name)).toEqual([ + 'someParam', + 'anotherParam', + ]); + }); + + it('parses caveat with generic parameter type', () => { + const schema = `caveat foo (someParam string, anotherParam map) { + someParam == 'hi' + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + expect(parsed?.definitions[0].name).toEqual('foo'); + + const definition = parsed?.definitions[0] as ParsedCaveatDefinition; + expect(definition.parameters.map((p) => p.name)).toEqual([ + 'someParam', + 'anotherParam', + ]); + }); + + it('parses empty definition with path', () => { + const schema = `definition foo/bar {}`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + expect(parsed?.definitions[0].name).toEqual('foo/bar'); + }); + + it('parses multiple definitions', () => { + const schema = `definition foo {} + + definition bar {}`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(2); + expect(parsed?.definitions[0].name).toEqual('foo'); + expect(parsed?.definitions[1].name).toEqual('bar'); + }); + + it('parses definition with relation', () => { + const schema = `definition foo { + relation barrel: something; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(1); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + }); + + it('parses definition with caveated relation', () => { + const schema = `definition foo { + relation barrel: something with somecaveat; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(1); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + + expect(relation.allowedTypes.types[0].withCaveat?.path).toEqual( + 'somecaveat' + ); + }); + + it('parses definition with prefixed caveated relation', () => { + const schema = `definition foo { + relation barrel: something with test/somecaveat; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(1); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + + expect(relation.allowedTypes.types[0].withCaveat?.path).toEqual( + 'test/somecaveat' + ); + }); + + it('parses definition with subject wildcard type', () => { + const schema = `definition foo { + relation barrel: something:*; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(1); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + expect(relation.allowedTypes.types[0].relationName).toEqual(undefined); + expect(relation.allowedTypes.types[0].wildcard).toEqual(true); + }); + + it('parses definition with subject rel type', () => { + const schema = `definition foo { + relation barrel: something#foo; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(1); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + expect(relation.allowedTypes.types[0].relationName).toEqual('foo'); + }); + + it('parses definition with relation with multiple types', () => { + const schema = `definition foo { + relation barrel: something | somethingelse | thirdtype; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(1); + + const relation = definition.relations[0]!; + expect(relation.name).toEqual('barrel'); + expect(relation.allowedTypes.types.length).toEqual(3); + expect(relation.allowedTypes.types[0].path).toEqual('something'); + expect(relation.allowedTypes.types[1].path).toEqual('somethingelse'); + expect(relation.allowedTypes.types[2].path).toEqual('thirdtype'); + }); + + it('parses definition with multiple relations', () => { + const schema = `definition foo { + relation first: something + relation second: somethingelse + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(2); + + const first = definition.relations[0]!; + expect(first.name).toEqual('first'); + expect(first.allowedTypes.types.length).toEqual(1); + expect(first.allowedTypes.types[0].path).toEqual('something'); + + const second = definition.relations[1]!; + expect(second.name).toEqual('second'); + expect(second.allowedTypes.types.length).toEqual(1); + expect(second.allowedTypes.types[0].path).toEqual('somethingelse'); + }); + + it('parses definition with a permission', () => { + const schema = `definition foo { + permission first = someexpr; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(0); + expect(definition.permissions.length).toEqual(1); + + const permission = definition.permissions[0]!; + expect(permission.name).toEqual('first'); + }); + + it('parses definition with associativity matching the schema parser in Go', () => { + const schema = `definition foo { + permission first = a - b + c + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(0); + expect(definition.permissions.length).toEqual(1); + + const permission = definition.permissions[0]!; + expect(permission.name).toEqual('first'); + + const binExpr = permission.expr as ParsedBinaryExpression; + expect(binExpr.operator).toEqual('exclusion'); + + const leftExpr = binExpr.left as ParsedRelationRefExpression; + expect(leftExpr.relationName).toEqual('a'); + }); + + it('parses definition with a complex permission', () => { + const schema = `definition foo { + permission first = ((a - b) + nil) & d; + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(0); + expect(definition.permissions.length).toEqual(1); + + const permission = definition.permissions[0]!; + expect(permission.name).toEqual('first'); + + const binExpr = permission.expr as ParsedBinaryExpression; + expect(binExpr.operator).toEqual('intersection'); + + const leftExpr = binExpr.left as ParsedBinaryExpression; + expect(leftExpr.operator).toEqual('union'); + + const leftLeftExpr = leftExpr.left as ParsedBinaryExpression; + + const leftLeftLeftExpr = leftLeftExpr.left as ParsedRelationRefExpression; + expect(leftLeftLeftExpr.relationName).toEqual('a'); + + const rightLeftLeftExpr = leftLeftExpr.right as ParsedRelationRefExpression; + expect(rightLeftLeftExpr.relationName).toEqual('b'); + + const rightLeftExpr = leftExpr.right as ParsedNilExpression; + expect(rightLeftExpr.isNil).toEqual(true); + + const rightExpr = binExpr.right as ParsedRelationRefExpression; + expect(rightExpr.relationName).toEqual('d'); + }); + + it('parses definition with multiple permissions', () => { + const schema = `definition foo { + permission first = firstrel + permission second = secondrel + }`; + const parsed = parseSchema(schema); + + expect(parsed?.definitions?.length).toEqual(1); + + const definition = parsed?.definitions[0]! as ParsedObjectDefinition; + expect(definition.name).toEqual('foo'); + expect(definition.relations.length).toEqual(0); + expect(definition.permissions.length).toEqual(2); + + const first = definition.permissions[0]!; + expect(first.name).toEqual('first'); + + const firstExpr = first.expr as ParsedRelationRefExpression; + expect(firstExpr.relationName).toEqual('firstrel'); + + const second = definition.permissions[1]!; + expect(second.name).toEqual('second'); + + const secondExpr = second.expr as ParsedRelationRefExpression; + expect(secondExpr.relationName).toEqual('secondrel'); + }); + + it('full', () => { + const schema = `definition user {} + + caveat somecaveat(somecondition int) { + somecondition == 42 + } + + /** + * a document + */ + definition document { + relation writer: user + relation reader: user | user with somecaveat + + permission writer = writer + permission read = reader + writer // has both + }`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(3); + }); + + it('full with wildcard', () => { + const schema = `definition user {} + + /** + * a document + */ + definition document { + relation writer: user + relation reader: user:* + + permission writer = writer + permission read = reader + writer // has both + }`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + const documentDef = parsed?.definitions.find( + (def) => def.name === 'document' + ) as ParsedObjectDefinition; + expect(documentDef?.relations.length).toEqual(2); + expect(documentDef?.permissions.length).toEqual(2); + }); + + it('full with more comments', () => { + const schema = `definition user {} + + /** + * a document + */ + + + definition document { + relation writer: user + relation reader: user + + permission writer = writer + permission read = reader + writer // has both + }`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + }); + + it('parses a real example', () => { + const schema = `definition user {} + + definition collection { + relation curator: user + relation editor: user + relation reader: user + + permission delete = curator + permission rename = curator + permission read = curator + editor + reader + permission add_paper = curator + editor + permission delete_paper = curator + permission add_comment = curator + editor + reader + permission share = curator + }`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + }); + + it('parses an arrow expression', () => { + const schema = `definition user {} + + definition organization { + relation admin: user; + } + + definition document { + relation reader: user + relation org: organization + + permission read = reader + org->admin + }`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(3); + + const definition = parsed?.definitions[2]! as ParsedObjectDefinition; + expect(definition.name).toEqual('document'); + expect(definition.relations.length).toEqual(2); + expect(definition.permissions.length).toEqual(1); + + const read = definition.permissions[0]!; + expect(read.name).toEqual('read'); + + const expr = read.expr as ParsedBinaryExpression; + const leftExpr = expr.left as ParsedRelationRefExpression; + expect(leftExpr.relationName).toEqual('reader'); + + const rightExpr = expr.right as ParsedArrowExpression; + expect( + (rightExpr.sourceRelation as ParsedRelationRefExpression).relationName + ).toEqual('org'); + expect(rightExpr.targetRelationOrPermission).toEqual('admin'); + }); + + it('parses an example with multiple comments', () => { + const schema = ` + /** + * This is a user definition + */ + definition user {} + + /** doc */ + definition document {}`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + }); + + it('parses correctly with synthetic semicolon', () => { + const schema = ` + definition document { + permission foo = (first + second) + permission bar = third + } + + definition user {} + `; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).permissions.length + ).toEqual(2); + }); + + it('parses correctly with synthetic semicolon and comment after', () => { + const schema = ` + definition document { + relation foo: user + permission resolve = foo + (bar) + // a comment + } + + definition user {} + `; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).permissions.length + ).toEqual(1); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).relations.length + ).toEqual(1); + }); + + it('parses wildcard relation correctly with synthetic semicolon and comment after', () => { + const schema = ` + definition document { + relation foo: user:* + permission resolve = foo + (bar) + // a comment + } + + definition user {} + `; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).permissions.length + ).toEqual(1); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).relations.length + ).toEqual(1); + }); + + it('parses correctly with synthetic semicolon and comment before', () => { + const schema = ` + definition document { + permission resolve = foo + (bar) + // a comment + permission anotherthing = somethingelse + } + + definition user {} + `; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + expect( + (parsed?.definitions[0] as ParsedObjectDefinition).permissions.length + ).toEqual(2); + }); + + it('succeeds parsing a valid schema with caveat', () => { + const schema = `caveat somecaveat(somearg any) { + somearg.foo().bar + } + + definition user {}`; + + const parsed = parseSchema(schema); + expect(parsed?.definitions?.length).toEqual(2); + }); +}); + +describe('parsing fails when', () => { + it('it is missing a definition name', () => { + const schema = `definition `; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it is missing a definition close', () => { + const schema = `definition foo {`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it is missing a relation type', () => { + const schema = `definition foo { + relation foo + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it is a typeless wildcard', () => { + const schema = `definition foo { + relation * + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it is missing a second relation type', () => { + const schema = `definition foo { + relation foo: bar | + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it is missing a permission expression', () => { + const schema = `definition foo { + relation foo: bar + permission meh + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it has an empty permission expression', () => { + const schema = `definition foo { + relation foo: bar + permission meh = + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('it has an incomplete permission expression', () => { + const schema = `definition foo { + relation foo: bar + permission meh = a + + }`; + const parsed = parseSchema(schema); + expect(parsed).toEqual(undefined); + }); + + it('fails if caveat contains unterminated backtick', () => { + const schema = + 'caveat foo (someParam string, anotherParam int) { someParam == 42` }'; + const parsed = parseSchema(schema); + expect(parsed).toBeUndefined(); + }); +}); diff --git a/spicedb-common/src/parsers/dsl/dsl.ts b/spicedb-common/src/parsers/dsl/dsl.ts new file mode 100644 index 0000000..a34cbee --- /dev/null +++ b/spicedb-common/src/parsers/dsl/dsl.ts @@ -0,0 +1,825 @@ +import Parsimmon from 'parsimmon'; +import { celExpression } from '../cel/cel'; + +/** + * ParseResult is the result of a direct parse. + */ +export interface ParseResult { + /** + * error is the parsing error found, if any. + */ + error: ParseError | undefined; + + /** + * schema is the fully parsed schema, if no error. + */ + schema: ParsedSchema | undefined; +} + +/** + * ParseError represents an error raised by the parser. + */ +export interface ParseError { + /** + * message is the human-readable error message. + */ + message: string; + + /** + * index is the location of the parse error. + */ + index: Index; + + /** + * expected is the set of expected regular expression(s) at the index. + */ + expected: string[]; +} + +/** + * parseSchema parses a DSL schema, returning relevant semantic information + * or undefined if the parse failed. + */ +export const parseSchema = (value: string): ParsedSchema | undefined => { + const parsed = parse(value); + if (parsed.error) { + return undefined; + } + + return parsed.schema as ParsedSchema; +}; + +/** + * ObjectOrCaveatDefinition are the types of definitions found at the root of a schema. + */ +export type ObjectOrCaveatDefinition = + | ParsedObjectDefinition + | ParsedCaveatDefinition; + +/** + * parse performs a parse on the schema string, returning the full parse result. + */ +export function parse(input: string): ParseResult { + const result = whitespace.then(definitionOrCaveat.atLeast(0)).parse(input); + return { + error: !result.status + ? { + message: Parsimmon.formatError(input, result), + index: result.index, + expected: result.expected, + } + : undefined, + schema: result.status + ? { + kind: 'schema', + stringValue: input, + definitions: (result as Parsimmon.Success) + .value, + } + : undefined, + }; +} + +/** + * getCaveatExpression returns the string form of the caveat expression for a particular parsed + * caveat expression within a schema. + */ +export function getCaveatExpression( + expr: ParsedCaveatExpression, + parsed: ParsedSchema +): string { + return parsed.stringValue.substring( + expr.range.startIndex.offset, + expr.range.endIndex.offset + ); +} + +/** + * flatMapExpression runs a flat mapping operation over an expression tree, returning any found results. + */ +export function flatMapExpression( + expr: ParsedExpression, + walker: ExprWalker +): T[] { + switch (expr.kind) { + case 'arrow': + const arrowResult = walker(expr); + const childResults = flatMapExpression(expr.sourceRelation, walker); + return arrowResult ? [...childResults, arrowResult] : childResults; + + case 'nil': + const nilResult = walker(expr); + return nilResult ? [nilResult] : []; + + case 'relationref': + const result = walker(expr); + return result ? [result] : []; + + case 'binary': + const binResult = walker(expr); + const leftResults = flatMapExpression(expr.left, walker); + const rightResults = flatMapExpression(expr.right, walker); + return binResult + ? [...leftResults, ...rightResults, binResult] + : [...leftResults, ...rightResults]; + } +} + +/** + * ReferenceNode is the node returned by findReferenceNode, along with its parent definition, + * if any. + */ +export interface ReferenceNode { + node: ParsedRelationRefExpression | TypeRef | undefined; + def: ObjectOrCaveatDefinition; +} + +/** + * findReferenceNode walks the parse tree to find the node matching the given line number and + * column position. + */ +export function findReferenceNode( + schema: ParsedSchema, + lineNumber: number, + columnPosition: number +): ReferenceNode | undefined { + const found = schema.definitions + .map((def: ObjectOrCaveatDefinition) => { + if (!rangeContains(def, lineNumber, columnPosition)) { + return undefined; + } + + if (def.kind === 'objectDef') { + return findReferenceNodeInDef(def, lineNumber, columnPosition); + } + return undefined; + }) + .filter((f: ReferenceNode | undefined) => !!f); + return found.length > 0 ? found[0] : undefined; +} + +/** + * mapParsedSchema runs the given mapper function on every node in the parse tree (except the + * contents of a caveat, which are considered "opaque"). + */ +export function mapParsedSchema( + schema: ParsedSchema | undefined, + mapper: (node: ParsedNode) => void +) { + if (schema === undefined) { + return; + } + + schema.definitions.forEach((def: ObjectOrCaveatDefinition) => { + mapParseNodes(def, mapper); + }); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Parser node types +//////////////////////////////////////////////////////////////////////////////////////////////////// + +export interface ParsedSchema { + kind: 'schema'; + stringValue: string; + definitions: ObjectOrCaveatDefinition[]; +} + +export interface ParsedCaveatDefinition { + kind: 'caveatDef'; + name: string; + parameters: ParsedCaveatParameter[]; + expression: ParsedCaveatExpression; + range: TextRange; +} + +export interface ParsedCaveatExpression { + kind: 'caveatExpr'; + range: TextRange; +} + +export interface ParsedCaveatParameter { + kind: 'caveatParameter'; + name: string; + type: ParsedCaveatParameterTypeRef; + range: TextRange; +} + +export interface ParsedCaveatParameterTypeRef { + kind: 'caveatParameterTypeExpr'; + name: string; + generics: ParsedCaveatParameterTypeRef[]; + range: TextRange; +} + +export interface ParsedObjectDefinition { + kind: 'objectDef'; + name: string; + relations: ParsedRelation[]; + permissions: ParsedPermission[]; + range: TextRange; +} + +export interface ParsedRelation { + kind: 'relation'; + name: string; + allowedTypes: TypeExpr; + range: TextRange; +} + +export type ParsedExpression = + | ParsedBinaryExpression + | ParsedRelationRefExpression + | ParsedArrowExpression + | ParsedNilExpression; + +export interface ParsedArrowExpression { + kind: 'arrow'; + sourceRelation: ParsedRelationRefExpression; + targetRelationOrPermission: string; + range: TextRange; +} + +export interface ParsedRelationRefExpression { + kind: 'relationref'; + relationName: string; + range: TextRange; +} + +export interface ParsedNilExpression { + kind: 'nil'; + isNil: true; + range: TextRange; +} + +export interface ParsedBinaryExpression { + kind: 'binary'; + operator: 'union' | 'intersection' | 'exclusion'; + left: ParsedExpression; + right: ParsedExpression; + range: TextRange; +} + +export interface ParsedPermission { + kind: 'permission'; + name: string; + expr: ParsedExpression; + range: TextRange; +} + +export type RelationOrPermission = ParsedRelation | ParsedPermission; + +export interface TypeRef { + kind: 'typeref'; + path: string; + relationName: string | undefined; + wildcard: boolean; + withCaveat: WithCaveat | undefined; + range: TextRange; +} + +export interface WithCaveat { + kind: 'withcaveat'; + path: string; + range: TextRange; +} + +export interface TypeExpr { + kind: 'typeexpr'; + types: TypeRef[]; + range: TextRange; +} + +export type ParsedNode = + | ParsedCaveatDefinition + | ParsedCaveatParameter + | ParsedCaveatParameterTypeRef + | ParsedCaveatExpression + | ParsedObjectDefinition + | ParsedRelation + | ParsedPermission + | ParsedExpression + | TypeRef + | TypeExpr + | WithCaveat; + +export interface Index { + offset: number; + line: number; + column: number; +} + +export interface TextRange { + startIndex: Index; + endIndex: Index; +} + +export type ExprWalker = (expr: ParsedExpression) => T | undefined; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Parser and utility methods below +//////////////////////////////////////////////////////////////////////////////////////////////////// + +const regex = Parsimmon.regex; +const string = Parsimmon.string; +const seq = Parsimmon.seq; +const seqMap = Parsimmon.seqMap; +const alt = Parsimmon.alt; +const optWhitespace = Parsimmon.optWhitespace; +const newline = Parsimmon.newline; + +const singleLineComment = regex(/\/\/.*/).then(optWhitespace.atMost(1)); +const multiLineComment = regex(/\/\*((((?!\*\/).)|\r|\n)*)\*\//).then( + optWhitespace.atMost(1) +); + +const comment = singleLineComment.or(multiLineComment); +const whitespace = optWhitespace.then(comment.atLeast(0)); +const lexeme = function (p: any) { + return p.skip(whitespace); +}; + +const identifier = lexeme(regex(/[a-zA-Z_][0-9a-zA-Z_+]*/)); +const path = lexeme( + regex(/([a-zA-Z_][0-9a-zA-Z_+-]*\/)*[a-zA-Z_][0-9a-zA-Z_+-]*/) +); +const colon = lexeme(regex(/:/)); +const equal = lexeme(regex(/=/)); +const semicolon = lexeme(regex(/;/)); +const pipe = lexeme(regex(/\|/)); + +const lbrace = lexeme(string('{')); +const rbrace = lexeme(string('}')); +const lparen = lexeme(string('(')); +const rparen = lexeme(string(')')); +const lcaret = lexeme(string('<')); +const rcaret = lexeme(string('>')); +const arrow = lexeme(string('->')); +const hash = lexeme(string('#')); +const comma = lexeme(string(',')); + +const terminator: any = newline.or(semicolon); + +// Type reference and expression. +const withCaveat: any = Parsimmon.seqMap( + Parsimmon.index, + seq(lexeme(string('with')), path), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'withcaveat', + path: data[1], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const typeRef: any = Parsimmon.seqMap( + Parsimmon.index, + seq( + seq(path, colon, lexeme(string('*'))).or( + seq(path, hash.then(identifier).atMost(1)) + ), + withCaveat.atMost(1) + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + const isWildcard = data[0][2] === '*'; + return { + kind: 'typeref', + path: data[0][0], + relationName: isWildcard ? undefined : data[0][1][0], + wildcard: isWildcard, + withCaveat: (data[1] as any[]).length > 0 ? data[1][0] : undefined, + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const typeExpr: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq(typeRef, pipedTypeExpr.atLeast(0)), + Parsimmon.index, + function (startIndex, data, endIndex) { + const remaining: any[] = data[1]; + return { + kind: 'typeexpr', + types: [data[0], ...remaining], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const pipedTypeExpr: any = pipe.then(typeRef); + +// Permission expression. +// Based on: https://github.com/jneen/parsimmon/blob/93648e20f40c5c0335ac6506b39b0ca58b87b1d9/examples/math.js#L29 +const relationReference: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq(identifier), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'relationref', + relationName: data[0], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const arrowExpr: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq(relationReference, arrow, identifier), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'arrow', + sourceRelation: data[0], + targetRelationOrPermission: data[2], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const nilExpr: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + string('nil'), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'nil', + isNil: true, + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const parensExpr: any = Parsimmon.lazy(() => + string('(') + .then(expr) + .skip(string(')')) + .or(arrowExpr) + .or(nilExpr) + .or(relationReference) +); + +function BINARY_LEFT(operatorsParser: any, nextParser: any) { + return seqMap( + nextParser, + seq(operatorsParser, nextParser).many(), + (first: any, rest: any) => { + return rest.reduce((acc: any, ch: any) => { + let [op, another] = ch; + return { + kind: 'binary', + operator: op, + left: acc, + right: another, + range: { + startIndex: acc.range.startIndex, + endIndex: another.range.endIndex, + }, + }; + }, first); + } + ); +} + +function operators(ops: Record) { + const keys = Object.keys(ops).sort(); + const ps = keys.map((k) => string(ops[k]).trim(optWhitespace).result(k)); + return alt.apply(null, ps); +} + +const table = [ + { type: BINARY_LEFT, ops: operators({ union: '+' }) }, + { type: BINARY_LEFT, ops: operators({ intersection: '&' }) }, + { type: BINARY_LEFT, ops: operators({ exclusion: '-' }) }, +]; + +const tableParser: any = table.reduce( + (acc: any, level: any) => level.type(level.ops, acc), + parensExpr +); + +const expr = tableParser.trim(whitespace); + +// Definitions members. +const permission: any = Parsimmon.seqMap( + Parsimmon.index, + seq( + lexeme(string('permission')), + identifier, + equal.then(expr).skip(terminator.atMost(1)) + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'permission', + name: data[1], + expr: data[2], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const relation: any = Parsimmon.seqMap( + Parsimmon.index, + seq( + lexeme(string('relation')), + identifier, + colon.then(typeExpr).skip(terminator.atMost(1)) + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'relation', + name: data[1], + allowedTypes: data[2], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const relationOrPermission = relation.or(permission); + +// Object Definitions. +const definition: any = Parsimmon.seqMap( + Parsimmon.index, + seq( + lexeme(string('definition')), + path, + lbrace.then(relationOrPermission.atLeast(0)).skip(rbrace) + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + const rp = data[2] as RelationOrPermission[]; + return { + kind: 'objectDef', + name: data[1], + relations: rp.filter( + (relOrPerm: RelationOrPermission) => 'allowedTypes' in relOrPerm + ), + permissions: rp.filter( + (relOrPerm: RelationOrPermission) => !('allowedTypes' in relOrPerm) + ), + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +// Caveats. +const caveatParameterTypeExpr: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq( + identifier, + lcaret.then(caveatParameterTypeExpr).skip(rcaret).atMost(1) + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'caveatParameterTypeExpr', + name: data[0], + generics: data[1], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const caveatParameter: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq(identifier, caveatParameterTypeExpr), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'caveatParameter', + name: data[0], + type: data[1], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const caveatParameters: any = Parsimmon.lazy(() => { + return Parsimmon.seqMap( + Parsimmon.index, + seq(lparen, caveatParameter, commaedParameter.atLeast(0), rparen), + Parsimmon.index, + function (startIndex, data, endIndex) { + const remaining: any[] = data[2]; + return { + kind: 'caveatParameters', + parameters: [data[1], ...remaining], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } + ); +}); + +const commaedParameter: any = comma.then(caveatParameter); + +const caveatExpression: any = Parsimmon.seqMap( + Parsimmon.index, + seq(celExpression), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'caveatExpr', + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const caveat: any = Parsimmon.seqMap( + Parsimmon.index, + seq( + lexeme(string('caveat')), + path, + caveatParameters, + lbrace, + caveatExpression, + rbrace + ), + Parsimmon.index, + function (startIndex, data, endIndex) { + return { + kind: 'caveatDef', + name: data[1], + parameters: (data[2] as any).parameters, + expression: data[4], + range: { startIndex: startIndex, endIndex: endIndex }, + }; + } +); + +const definitionOrCaveat = definition.or(caveat); + +function findReferenceNodeInDef( + def: ParsedObjectDefinition, + lineNumber: number, + columnPosition: number +): ReferenceNode | undefined { + const pFound = def.permissions + .map((permission: ParsedPermission) => { + if (!rangeContains(permission, lineNumber, columnPosition)) { + return undefined; + } + + return findReferenceNodeInPermission( + permission, + lineNumber, + columnPosition + ); + }) + .filter((f: ParsedRelationRefExpression | TypeRef | undefined) => !!f); + + if (pFound.length > 0) { + return { node: pFound[0], def: def }; + } + + const rFound = def.relations + .map((relation: ParsedRelation) => { + if (!rangeContains(relation, lineNumber, columnPosition)) { + return undefined; + } + + return findReferenceNodeInRelation(relation, lineNumber, columnPosition); + }) + .filter((f: ParsedRelationRefExpression | TypeRef | undefined) => !!f); + if (rFound.length > 0) { + return { node: rFound[0], def: def }; + } + + return undefined; +} + +function findReferenceNodeInPermission( + permission: ParsedPermission, + lineNumber: number, + columnPosition: number +): ParsedRelationRefExpression | TypeRef | undefined { + const found = flatMapExpression(permission.expr, (expr: ParsedExpression) => { + if (expr.range && !rangeContains(expr, lineNumber, columnPosition)) { + return undefined; + } + + switch (expr.kind) { + case 'relationref': + return expr; + } + + return undefined; + }); + + return found.length > 0 ? found[0] : undefined; +} + +function findReferenceNodeInRelation( + relation: ParsedRelation, + lineNumber: number, + columnPosition: number +): ParsedRelationRefExpression | TypeRef | undefined { + const found = relation.allowedTypes.types + .map((typeRef: TypeRef) => { + if (!rangeContains(typeRef, lineNumber, columnPosition)) { + return undefined; + } + + return typeRef; + }) + .filter((f: ParsedRelationRefExpression | TypeRef | undefined) => !!f); + + return found.length > 0 ? found[0] : undefined; +} + +function mapParseNodes( + node: ParsedNode | undefined, + mapper: (node: ParsedNode) => void +) { + if (node === undefined) { + return; + } + + mapper(node); + + switch (node.kind) { + case 'objectDef': + node.relations.forEach((rel: ParsedRelation) => { + mapParseNodes(rel, mapper); + }); + node.permissions.forEach((perm: ParsedPermission) => { + mapParseNodes(perm, mapper); + }); + break; + + case 'caveatDef': + node.parameters.forEach((param: ParsedCaveatParameter) => { + mapParseNodes(param, mapper); + }); + mapParseNodes(node.expression, mapper); + break; + + case 'caveatParameter': + mapParseNodes(node.type, mapper); + break; + + case 'caveatParameterTypeExpr': + node.generics.forEach((n) => mapParseNodes(n, mapper)); + break; + + case 'relation': + mapParseNodes(node.allowedTypes, mapper); + break; + + case 'permission': + flatMapExpression(node.expr, mapper); + break; + + case 'typeexpr': + node.types.forEach((n) => mapParseNodes(n, mapper)); + break; + + case 'typeref': + mapParseNodes(node.withCaveat, mapper); + break; + } +} + +function rangeContains( + withRange: { range: TextRange }, + lineNumber: number, + columnPosition: number +): boolean { + if ( + withRange.range.startIndex.line > lineNumber || + withRange.range.endIndex.line < lineNumber + ) { + return false; + } + + if (withRange.range.startIndex.line === lineNumber) { + if (withRange.range.startIndex.column > columnPosition) { + return false; + } + } + + if (withRange.range.endIndex.line === lineNumber) { + if (withRange.range.endIndex.column < columnPosition) { + return false; + } + } + + return true; +} diff --git a/spicedb-common/src/parsers/dsl/generator.test.ts b/spicedb-common/src/parsers/dsl/generator.test.ts new file mode 100644 index 0000000..3d06130 --- /dev/null +++ b/spicedb-common/src/parsers/dsl/generator.test.ts @@ -0,0 +1,97 @@ +import { mapParsedSchema, ParsedNode, ParsedSchema, parseSchema } from "./dsl"; +import { rewriteSchema } from "./generator"; + +const stripRange = (schema: ParsedSchema | undefined) => { + if (schema === undefined) { + return undefined; + } + + const emptyRange = { + startIndex: { offset: 0, line: 0, column: 0 }, + endIndex: { offset: 0, line: 0, column: 0 }, + }; + + mapParsedSchema(schema, (node: ParsedNode) => { + node.range = emptyRange; + }); + + schema.stringValue = ""; + return schema; +}; + +describe("rewriteSchema", () => { + it("properly rewrites a schema", () => { + const schema = ` + /** + * user represents a user that can be granted role(s) + */ + definition user {} + + definition organization { + relation admin: user + } + + caveat some_caveat(firstParam int, secondParam map) { + firstParam == 42 + } + + /** + * document represents a document protected by Authzed. + */ + definition document { + /** + * writer indicates that the user is a writer on the document. + */ + relation writer: user with some_caveat + + /** + * reader indicates that the user is a reader on the document. + */ + relation reader: user | user:* + + relation organization: organization + + /** + * edit indicates that the user has permission to edit the document. + */ + permission edit = writer + organization->admin + + /** + * view indicates that the user has permission to view the document, if they + * are a permission. + */ + permission view = reader + edit + nil + }`; + + const rewritten = rewriteSchema(schema, "somePrefix"); + expect(rewritten).toContain("definition somePrefix/organization"); + expect(rewritten).toContain("relation writer: somePrefix/user"); + expect(rewritten).toContain(" with somePrefix/some_caveat"); + expect(rewritten).toContain( + "caveat somePrefix/some_caveat(firstParam int, secondParam map)" + ); + + expect(stripRange(parseSchema(rewritten ?? ""))).toEqual( + stripRange( + parseSchema(` +definition somePrefix/user {} + +definition somePrefix/organization { + relation admin: somePrefix/user; +} + +caveat somePrefix/some_caveat(firstParam int, secondParam map) { + firstParam == 42 +} + +definition somePrefix/document { + relation writer: somePrefix/user with somePrefix/some_caveat; + relation reader: somePrefix/user | somePrefix/user:*; + relation organization: somePrefix/organization; + permission edit = (writer + organization->admin); + permission view = (reader + edit + nil); +}`) + ) + ); + }); +}); diff --git a/spicedb-common/src/parsers/dsl/generator.ts b/spicedb-common/src/parsers/dsl/generator.ts new file mode 100644 index 0000000..6579b8d --- /dev/null +++ b/spicedb-common/src/parsers/dsl/generator.ts @@ -0,0 +1,181 @@ +import { + getCaveatExpression, + ObjectOrCaveatDefinition, + ParsedCaveatParameter, + ParsedCaveatParameterTypeRef, + ParsedExpression, + ParsedPermission, + ParsedRelation, + ParsedSchema, + parseSchema, + TypeExpr, + TypeRef, +} from "./dsl"; + +/** + * rewriteSchema rewrites the given schema by prefixing all type refs and type defs with the specified + * prefix. Returns undefined if the schema could not be parsed and returns the original string if everything + * has already been prefixed properly. + */ +export function rewriteSchema( + schema: string, + prefixSlug: string +): string | undefined { + const parsed = parseSchema(schema); + if (!parsed) { + return undefined; + } + + let hasChanges = false; + const path = (existing: string) => { + const parts = existing.split("/", 2); + if (parts.length === 2 && parts[0] === prefixSlug) { + return existing; + } + + hasChanges = true; + return parts.length === 1 + ? `${prefixSlug}/${existing}` + : `${prefixSlug}/${parts[1]}`; + }; + + parsed.definitions.forEach((def: ObjectOrCaveatDefinition) => { + def.name = path(def.name); + + switch (def.kind) { + case "objectDef": + def.relations.forEach((rel: ParsedRelation) => { + rel.allowedTypes.types.forEach((typeRef: TypeRef) => { + typeRef.path = path(typeRef.path); + if (typeRef.withCaveat) { + typeRef.withCaveat.path = path(typeRef.withCaveat.path); + } + }); + }); + break; + } + }); + + return hasChanges ? generateSchema(parsed) : schema; +} + +/** + * checkSchema performs basic checks on the schema, returning an error message for + * a problem found, if any. + */ +export function checkSchema(schema: string): string | undefined { + const parsed = parseSchema(schema); + if (!parsed) { + return undefined; + } + + const seenDefinitions = new Set(); + for (const def of parsed.definitions) { + if (seenDefinitions.has(def.name)) { + return `definition is redefined: ${def.name}`; + } + + seenDefinitions.add(def.name); + } + + return undefined; +} + +function generateSchema(parsed: ParsedSchema): string { + return parsed.definitions + .map((def: ObjectOrCaveatDefinition) => { + switch (def.kind) { + case "objectDef": + return `definition ${def.name} { + ${def.relations + .map(generateRelation) + .map((s: string) => ` ${s}`) + .join("\n")} + ${def.permissions + .map(generatePermission) + .map((s: string) => ` ${s}`) + .join("\n")} + }`; + + case "caveatDef": + return `caveat ${def.name}(${def.parameters + .map(generateCaveatParameter) + .join(", ")}) { + ${getCaveatExpression(def.expression, parsed)} + }`; + } + + throw new Error("unknown definition kind in generateSchema"); + }) + .join("\n\n") + .trim(); +} + +function generateCaveatParameter(parsed: ParsedCaveatParameter) { + return `${parsed.name} ${generateCaveatParameterType(parsed.type)}`; +} + +function generateCaveatParameterType(parsed: ParsedCaveatParameterTypeRef) { + let paramType = parsed.name; + if (parsed.generics.length > 0) { + paramType += `<${parsed.generics + .map(generateCaveatParameterType) + .join(", ")}>`; + } + + return paramType; +} + +function generateRelation(parsed: ParsedRelation): string { + return `relation ${parsed.name}: ${generateTypeRefs(parsed.allowedTypes)};`; +} + +function generateTypeRefs(parsed: TypeExpr): string { + return parsed.types + .map((typeref: TypeRef) => { + const withCaveat = typeref.withCaveat + ? ` with ${typeref.withCaveat.path}` + : ""; + + if (typeref.relationName) { + return `${typeref.path}#${typeref.relationName}${withCaveat}`; + } + + if (typeref.wildcard) { + return `${typeref.path}:*${withCaveat}`; + } + + return `${typeref.path}${withCaveat}`; + }) + .join(" | "); +} + +function generatePermission(parsed: ParsedPermission): string { + return `permission ${parsed.name} = ${generateExpr(parsed.expr)};`; +} + +const OPERATOR = { + union: "+", + intersection: "&", + exclusion: "-", +}; + +function generateExpr(parsed: ParsedExpression): string { + switch (parsed.kind) { + case "arrow": + return `${parsed.sourceRelation.relationName}->${parsed.targetRelationOrPermission}`; + + case "binary": + return `(${generateExpr(parsed.left)} ${ + OPERATOR[parsed.operator] + } ${generateExpr(parsed.right)})`; + + case "relationref": + return parsed.relationName; + + case "nil": + return "nil"; + } + + throw Error("unknown expr type in generate expr"); +} diff --git a/spicedb-common/src/parsers/dsl/resolution.ts b/spicedb-common/src/parsers/dsl/resolution.ts new file mode 100644 index 0000000..5875765 --- /dev/null +++ b/spicedb-common/src/parsers/dsl/resolution.ts @@ -0,0 +1,332 @@ +import { + flatMapExpression, + ObjectOrCaveatDefinition, + ParsedCaveatDefinition, + ParsedCaveatParameter, + ParsedExpression, + ParsedObjectDefinition, + ParsedPermission, + ParsedRelation, + ParsedRelationRefExpression, + ParsedSchema, + TypeRef, +} from './dsl'; + +/** + * TypeRefResolution is the result of resolving a type reference. + */ +export type TypeRefResolution = { + /** + * definition is the definition which is referred by this type reference. + */ + definition: ParsedObjectDefinition | undefined; + + /** + * relation is the (optional) relation which is referred by this type reference. For refs + * without relations, this will be undefined. This will *also* be undefined for unresolvable + * refs, so make sure to check the expression to see if it has a relation reference. + */ + relation: ParsedRelation | undefined; + + /** + * permission is the (optional) permission which is referred by this type reference. For refs + * without relations, this will be undefined. This will *also* be undefined for unresolvable + * refs, so make sure to check the expression to see if it has a relation reference. + */ + permission: ParsedPermission | undefined; +}; + +/** + * ExpressionResolution is the resolution of a reference in a permission expression. + */ +export type ExpressionResolution = ParsedRelation | ParsedPermission; + +/** + * ResolvedTypeReference is a type reference found in the schema, with resolution attempted. + */ +export interface ResolvedTypeReference { + kind: 'type'; + reference: TypeRef; + referencedTypeAndRelation: TypeRefResolution | undefined; +} + +/** + * ResolvedExprReference is a relation reference expression found in the schema, with resolution attempted. + */ +export interface ResolvedExprReference { + kind: 'expression'; + reference: ParsedRelationRefExpression; + resolvedRelationOrPermission: ExpressionResolution | undefined; +} + +/** + * ResolvedReference is a found and resolution performed type reference or expression. + */ +export type ResolvedReference = ResolvedTypeReference | ResolvedExprReference; + +/** + * Resolver is a helper class for easily resolving information in a parsed schema. + */ +export class Resolver { + private definitionsByName: Record = {}; + private caveatsByName: Record = {}; + private populated = false; + + constructor(public schema: ParsedSchema) {} + + private populate() { + if (this.populated) { + return; + } + + this.schema.definitions.forEach((def: ObjectOrCaveatDefinition) => { + if (def.kind === 'objectDef') { + this.definitionsByName[def.name] = new ResolvedDefinition(def); + return; + } + + if (def.kind === 'caveatDef') { + this.caveatsByName[def.name] = new ResolvedCaveatDefinition(def); + return; + } + }); + this.populated = true; + } + + /** + * listDefinitions lists all definitions in the resolver. + */ + public listDefinitions(): ResolvedDefinition[] { + this.populate(); + return Object.values(this.definitionsByName); + } + + /** + * lookupDefinition returns the definition with the given name, if any, or undefined + * if none. + */ + public lookupDefinition(name: string): ResolvedDefinition | undefined { + this.populate(); + + if (!(name in this.definitionsByName)) { + return undefined; + } + + return this.definitionsByName[name]; + } + + /** + * listCaveats returns all resolved caveat definitions in the schema. + */ + public listCaveats(): ResolvedCaveatDefinition[] { + this.populate(); + return Object.values(this.caveatsByName); + } + + /** + * resolvedReferences returns all the resolved type and expression references in the schema. + */ + public resolvedReferences(): ResolvedReference[] { + this.populate(); + + const refs = [ + ...this.lookupAndResolveTypeReferences(), + ...this.lookupAndResolveExprReferences(), + ]; + refs.sort((a: ResolvedReference, b: ResolvedReference) => { + return ( + a.reference.range.startIndex.offset - + b.reference.range.startIndex.offset + ); + }); + return refs; + } + + /** + * resolveTypeReference attempts to resolve a type reference. + */ + public resolveTypeReference(typeRef: TypeRef): TypeRefResolution | undefined { + this.populate(); + + if (!(typeRef.path in this.definitionsByName)) { + return undefined; + } + + const definition = this.definitionsByName[typeRef.path]; + if (!typeRef.relationName) { + return { + definition: definition.definition, + relation: undefined, + permission: undefined, + }; + } + + return { + definition: definition.definition, + relation: definition.lookupRelation(typeRef.relationName), + permission: definition.lookupPermission(typeRef.relationName), + }; + } + + /** + * resolveRelationOrPermission attempts to resolve a relation reference expression. + */ + public resolveRelationOrPermission( + current: ParsedRelationRefExpression, + def: ObjectOrCaveatDefinition + ): ExpressionResolution | undefined { + this.populate(); + + const definition = this.definitionsByName[def.name]; + return definition.lookupRelationOrPermission(current.relationName); + } + + private lookupAndResolveTypeReferences(): ResolvedTypeReference[] { + this.populate(); + return this.schema.definitions.flatMap((def: ObjectOrCaveatDefinition) => { + if (def.kind !== 'objectDef') { + return []; + } + + return def.relations.flatMap((rel: ParsedRelation) => { + return rel.allowedTypes.types.map((typeRef: TypeRef) => { + return { + kind: 'type', + reference: typeRef, + referencedTypeAndRelation: this.resolveTypeReference(typeRef), + }; + }); + }); + }); + } + + private lookupAndResolveExprReferences(): ResolvedExprReference[] { + this.populate(); + return this.schema.definitions.flatMap((def: ObjectOrCaveatDefinition) => { + if (def.kind !== 'objectDef') { + return []; + } + + return def.permissions.flatMap((perm: ParsedPermission) => { + return flatMapExpression( + perm.expr, + (current: ParsedExpression) => { + switch (current.kind) { + case 'relationref': + return { + kind: 'expression', + reference: current, + resolvedRelationOrPermission: + this.resolveRelationOrPermission(current, def), + }; + + default: + return undefined; + } + } + ); + }); + }); + } +} + +export class ResolvedDefinition { + private relationsByName: Record = {}; + private permissionByName: Record = {}; + + constructor(public definition: ParsedObjectDefinition) { + definition.permissions.forEach((perm: ParsedPermission) => { + this.permissionByName[perm.name] = perm; + }); + definition.relations.forEach((rel: ParsedRelation) => { + this.relationsByName[rel.name] = rel; + }); + } + + public listRelationNames(): string[] { + return Object.keys(this.relationsByName); + } + + public listRelations(): ParsedRelation[] { + return Object.values(this.relationsByName); + } + + public listRelationsAndPermissions(): (ParsedRelation | ParsedPermission)[] { + return [ + ...Object.values(this.relationsByName), + ...Object.values(this.permissionByName), + ]; + } + + public listRelationsAndPermissionNames(): string[] { + return Array.from( + new Set([ + ...Object.keys(this.relationsByName), + ...Object.keys(this.permissionByName), + ]) + ); + } + + public listWithCaveatNames(): string[] { + const withCaveats = Object.values(this.relationsByName).filter((rel) => { + return rel.allowedTypes.types.find((ref) => ref.withCaveat); + }); + + let names: string[] = []; + withCaveats.forEach((rel) => { + rel.allowedTypes.types.forEach((ref) => { + if (ref.withCaveat) { + names.push(ref.withCaveat.path); + } + }); + }); + return names; + } + + public lookupRelation(name: string): ParsedRelation | undefined { + if (!(name in this.relationsByName)) { + return undefined; + } + + return this.relationsByName[name]; + } + + public lookupPermission(name: string): ParsedPermission | undefined { + if (!(name in this.permissionByName)) { + return undefined; + } + + return this.permissionByName[name]; + } + + public lookupRelationOrPermission( + name: string + ): ParsedRelation | ParsedPermission | undefined { + const rel = this.lookupRelation(name); + if (rel) { + return rel; + } + + return this.lookupPermission(name); + } +} + +export class ResolvedCaveatDefinition { + private paramsByName: Record = {}; + private name: string; + + constructor(public definition: ParsedCaveatDefinition) { + definition.parameters.forEach((param: ParsedCaveatParameter) => { + this.paramsByName[param.name] = param; + }); + this.name = definition.name; + } + + public getName(): string { + return this.name; + } + + public listParameterNames(): string[] { + return Object.keys(this.paramsByName); + } +} diff --git a/spicedb-common/src/parsing.test.ts b/spicedb-common/src/parsing.test.ts new file mode 100644 index 0000000..e1c521e --- /dev/null +++ b/spicedb-common/src/parsing.test.ts @@ -0,0 +1,269 @@ +import { + convertRelationshipToString, + mergeRelationshipsStringAndComments, + parseRelationship, + parseRelationshipWithError, +} from './parsing'; +import { Struct } from './protodevdefs/google/protobuf/struct'; + +describe('converting relationships', () => { + it('converts relationships properly to strings', () => { + const relationship = 'document:something#somerel@user:something#...'; + const parsed = parseRelationship(relationship); + expect(convertRelationshipToString(parsed!)).toEqual( + 'document:something#somerel@user:something' + ); + }); + + it('converts relationships with subject relation properly to strings', () => { + const relationship = 'document:something#somerel@user:something#foo'; + const parsed = parseRelationship(relationship); + expect(convertRelationshipToString(parsed!)).toEqual(relationship); + }); + + it('converts caveated relationships properly to strings', () => { + const relationship = + 'document:something#somerel@user:something[some:{"hi":"there"}]'; + const parsed = parseRelationship(relationship); + expect(convertRelationshipToString(parsed!)).toEqual(relationship); + }); +}); + +describe('parsing relationships', () => { + it('returns an error for an empty relationship', () => { + const relationship = ''; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: 'Relationship missing a subject', + }); + }); + + it('returns an error for a relationship missing an object', () => { + const relationship = 'somenamespace#somerel@someuser:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: + 'Relationship must be of the form `resourcetype:resourceid#relation@subjecttype:subjectid`', + }); + }); + + it('returns an error for a relationship missing a subject', () => { + const relationship = 'somenamespace:something#somerel'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: 'Relationship missing a subject', + }); + }); + + it('returns an error for a relationship with an invalid namespace', () => { + const relationship = 'a:something#somerel@user:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: "Invalid namespace 'a': Must be alphanumeric", + }); + }); + + it('returns an error for a relationship with an invalid object id', () => { + const relationship = 'document:some.thing#somerel@user:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: + "Invalid resource object ID 'some.thing': Must be alphanumeric. Wildcards are not allowed", + }); + }); + + it('returns an error for a relationship with a wildcard resource id', () => { + const relationship = 'document:*#somerel@user:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: + "Invalid resource object ID '*': Must be alphanumeric. Wildcards are not allowed", + }); + }); + + it('returns an error for a relationship with an invalid relation', () => { + const relationship = 'document:something#a@user:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: "Invalid relation 'a': Must be alphanumeric", + }); + }); + + it('returns an error for a relationship with an invalid subject namespace', () => { + const relationship = 'document:something#somerel@a:foo'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: "Invalid namespace 'a': Must be alphanumeric", + }); + }); + + it('returns an error for a relationship with an invalid subject object id', () => { + const relationship = 'document:something#somerel@user:some.thing'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: + "Invalid subject object ID 'some.thing': Must be alphanumeric", + }); + }); + + it('returns an error for a relationship with an invalid subject relation', () => { + const relationship = 'document:something#somerel@user:someuser#a'; + expect(parseRelationshipWithError(relationship)).toEqual({ + errorMessage: "Invalid relation 'a': Must be alphanumeric", + }); + }); + + it('parses a correct relationship', () => { + const relationship = 'document:something#somerel@user:someuser'; + expect(parseRelationship(relationship)).toBeDefined(); + }); + + it('parses a correct wildcard relationship', () => { + const relationship = 'document:something#somerel@user:*'; + expect(parseRelationship(relationship)).toBeDefined(); + }); + + it('parses a correct relationship with multiple levels of namespace nesting', () => { + const relationship = + 'foo/bar/baz/document:something#somerel@one/two/three/user:foo#...'; + expect(parseRelationship(relationship)).toBeDefined(); + }); + + it('parses a correct relationship with ...', () => { + const relationship = 'document:something#somerel@user:foo#...'; + expect(parseRelationship(relationship)).toBeDefined(); + }); + + it('parses a correct relationship with pipe for object ID', () => { + const relationship = 'document:something#somerel@user:something|someuser'; + expect(parseRelationship(relationship)).toBeDefined(); + }); + + it('parses a correct relationship with caveat name', () => { + const relationship = + 'document:something#somerel@user:something[somecaveat]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeDefined(); + expect(parsed?.caveat?.caveatName).toBe('somecaveat'); + }); + + it('parses a correct relationship with caveat name and context', () => { + const relationship = + 'document:something#somerel@user:something[somecaveat:{"hi": "there"}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeDefined(); + expect(parsed?.caveat?.caveatName).toBe('somecaveat'); + expect(parsed?.caveat?.context).toHaveProperty('fields'); + expect(parsed?.caveat?.context).toEqual({ + fields: { + hi: { + kind: { + oneofKind: 'stringValue', + stringValue: 'there', + }, + }, + }, + }); + expect(Struct.toJson(parsed?.caveat?.context!)).toEqual({ hi: 'there' }); + }); + + it('parses a relationship with list in caveat context', () => { + const relationship = + 'document:something#somerel@user:something[some:{"somecondition": []}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeDefined(); + expect(parsed?.caveat?.caveatName).toBe('some'); + expect(parsed?.caveat?.context).toHaveProperty('fields'); + expect(Struct.toJson(parsed?.caveat?.context!)).toEqual({ + somecondition: [], + }); + }); + + it('parses a relationship with list with elements, in caveat context', () => { + const relationship = + 'document:something#somerel@user:something[some:{"somecondition": [1, true, "3"]}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeDefined(); + expect(parsed?.caveat?.caveatName).toBe('some'); + expect(Struct.toJson(parsed?.caveat?.context!)).toEqual({ + somecondition: [1, true, '3'], + }); + }); + + it('parses a relationship with an email in caveat context', () => { + const relationship = + 'document:something#somerel@user:something[some:{"em":"a@example.com"}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeDefined(); + expect(parsed?.caveat?.caveatName).toBe('some'); + expect(Struct.toJson(parsed?.caveat?.context!)).toEqual({ + em: 'a@example.com', + }); + }); + + it('fails to parse a relationship with an invalid caveat name', () => { + const relationship = 'document:something#somerel@user:something[]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); + + it('fails to parse a relationship with empty caveat context', () => { + const relationship = 'document:something#somerel@user:something[some:{}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); + + it('fails to parse a relationship with invalid caveat context', () => { + const relationship = + 'document:something#somerel@user:something[some:{"hi"]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); + + it('fails to parse a relationship with literal caveat context', () => { + const relationship = 'document:something#somerel@user:something[some:true]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); + + it('fails to parse a relationship with null caveat context', () => { + const relationship = 'document:something#somerel@user:something[some:null]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); + + it('parses a correct a relationship with super long and extended IDs', () => { + const relationship = + 'document:--=base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==#view@user:veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong'; + expect(parseRelationship(relationship)).toBeDefined(); + }); +}); + +describe('merging relationships', () => { + it('merges relationships and maintains comments', () => { + const existing = ` +// testing 123 +document:firstdoc#viewer@user:tom + `; + + const updated = [parseRelationship('document:firstdoc#viewer@user:sarah')!]; + + const merged = mergeRelationshipsStringAndComments(existing, updated); + expect(merged).toBe(`// testing 123 +document:firstdoc#viewer@user:sarah`); + }); + + it('adds new relationship', () => { + const existing = ` +// testing 123 +document:firstdoc#viewer@user:tom + `; + + const updated = [ + parseRelationship('document:firstdoc#viewer@user:tom')!, + parseRelationship('document:firstdoc#viewer@user:sarah')!, + ]; + + const merged = mergeRelationshipsStringAndComments(existing, updated); + expect(merged).toBe(`// testing 123 +document:firstdoc#viewer@user:tom +document:firstdoc#viewer@user:sarah`); + }); + + it('attempts to parse a relationship with empty context, which is not allowed', () => { + const relationship = 'role:somerole#some_relation@user:*[somecaveat:{}]'; + const parsed = parseRelationship(relationship); + expect(parsed).toBeUndefined(); + }); +}); diff --git a/spicedb-common/src/parsing.ts b/spicedb-common/src/parsing.ts new file mode 100644 index 0000000..2ce73fc --- /dev/null +++ b/spicedb-common/src/parsing.ts @@ -0,0 +1,434 @@ +import { + ContextualizedCaveat, + RelationTuple as Relationship, +} from './protodevdefs/core/v1/core'; +import { Struct } from './protodevdefs/google/protobuf/struct'; + +export const CAVEAT_NAME_EXPR = + '([a-z][a-z0-9_]{1,61}[a-z0-9]/)?[a-z][a-z0-9_]{1,62}[a-z0-9]'; + +const CAVEAT_REGEX = new RegExp( + `\\[(?(${CAVEAT_NAME_EXPR}))(:(?(\\{(.+)\\})))?\\]` +); + +const OBJECT_AND_RELATION_REGEX = + /(?[^:]+):(?[^#]+)#(?[^@]+)/; +const SUBJECT_REGEX = + /(?[^:]+):(?[^#]+)(#(?[^@[]+))?/; + +export const NAMESPACE_REGEX = + /^([a-z][a-z0-9_]{1,61}[a-z0-9]\/)*[a-z][a-z0-9_]{1,62}[a-z0-9]$/; +export const RESOURCE_ID_REGEX = /^([a-zA-Z0-9/_|\-=+]{1,1024})$/; +export const SUBJECT_ID_REGEX = /^(([a-zA-Z0-9/_|\-=+]{1,1024})|\*)$/; +export const RELATION_REGEX = /^(\.\.\.|[a-z][a-z0-9_]{1,62}[a-z0-9])$/; + +export const maxObjectIDLength = 1024; + +/** + * ParseRelationshipError is an error returned if parsing a relationship failed. + */ +export interface ParseRelationshipError { + errorMessage: string; +} + +/** + * RelationshipFound contains information about a relationship. + */ +export interface RelationshipFound { + /** + * text is the text of the relationship. + */ + text: string; + + /** + * lineNumber is the (0-indexed) line number of the relationship in the input + * string. + */ + lineNumber: number; + + /** + * parsed is the parsed relationship or undefined if parsing failed. + */ + parsed: Relationship | ParseRelationshipError; +} + +/** + * ParseRelationshipError is an error returned if parsing a relationship failed. + */ +export interface ParseRelationshipError { + errorMessage: string; +} + +/** + * parseRelationship parses a single relationship into a Relationship and returns it or undefined + * if failed to parse. + */ +export const parseRelationship = (value: string): Relationship | undefined => { + const parsed = parseRelationshipWithError(value); + if ('errorMessage' in parsed) { + return undefined; + } + + return parsed; +}; + +/** + * parseRelationshipWithError parses a single relationship into a Relationship and returns it or the error + * if failed to parse. + */ +export const parseRelationshipWithError = ( + value: string +): Relationship | ParseRelationshipError => { + const trimmed = value.trim(); + const pieces = trimmed.split('@'); + if (pieces.length <= 1) { + return { errorMessage: 'Relationship missing a subject' }; + } + + if (pieces.length < 2) { + return { + errorMessage: 'Relationship must be of the form `resource@subject`', + }; + } + + const resourceString = pieces[0]; + // Add back any '@' characters that may have been in the caveat context + let subjectString = pieces.slice(1).join('@'); + let caveatString = ''; + if (subjectString.endsWith(']')) { + const subjectPieces = subjectString.split('['); + if (subjectPieces.length < 2) { + return { + errorMessage: + 'Relationship must be of the form `resource@subject[caveat]`', + }; + } + + subjectString = subjectPieces[0]; + caveatString = '[' + subjectPieces.splice(1).join('['); + } + + const resource = OBJECT_AND_RELATION_REGEX.exec(resourceString); + const subject = SUBJECT_REGEX.exec(subjectString); + const caveat = CAVEAT_REGEX.exec(caveatString); + + if (!resource?.groups || !subject?.groups) { + return { + errorMessage: + 'Relationship must be of the form `resourcetype:resourceid#relation@subjecttype:subjectid`', + }; + } + + if (caveatString && !caveat?.groups) { + return { + errorMessage: + 'Relationship must be of the form `resourcetype:resourceid#relation@subjecttype:subjectid[caveatName]`', + }; + } + + const resourceNamespace = resource?.groups['namespace'] ?? ''; + const resourceObjectId = resource?.groups['object_id'] ?? ''; + const resourceRelation = resource?.groups['relation'] ?? ''; + + const subjectNamespace = subject?.groups['namespace'] ?? ''; + const subjectObjectId = subject?.groups['object_id'] ?? ''; + const subjectRelation = subject?.groups['relation'] ?? '...'; + + // Validate the namespaces, object ids and relation(s). + if (!NAMESPACE_REGEX.test(resourceNamespace)) { + return { + errorMessage: `Invalid namespace '${resourceNamespace}': Must be alphanumeric`, + }; + } + if (!NAMESPACE_REGEX.test(subjectNamespace)) { + return { + errorMessage: `Invalid namespace '${subjectNamespace}': Must be alphanumeric`, + }; + } + + if (!RESOURCE_ID_REGEX.test(resourceObjectId)) { + return { + errorMessage: `Invalid resource object ID '${resourceObjectId}': Must be alphanumeric. Wildcards are not allowed`, + }; + } + if (!SUBJECT_ID_REGEX.test(subjectObjectId)) { + return { + errorMessage: `Invalid subject object ID '${subjectObjectId}': Must be alphanumeric`, + }; + } + + if (resourceObjectId.length > maxObjectIDLength) { + return { + errorMessage: `Invalid resource object ID '${resourceObjectId}': Must be alphanumeric and no more than ${maxObjectIDLength} characters long. Wildcards are not allowed`, + }; + } + if (subjectObjectId.length > maxObjectIDLength) { + return { + errorMessage: `Invalid subject object ID '${subjectObjectId}': Must be alphanumeric and no more than ${maxObjectIDLength} characters long`, + }; + } + + if (!RELATION_REGEX.test(resourceRelation)) { + return { + errorMessage: `Invalid relation '${resourceRelation}': Must be alphanumeric`, + }; + } + if (!RELATION_REGEX.test(subjectRelation)) { + return { + errorMessage: `Invalid relation '${subjectRelation}': Must be alphanumeric`, + }; + } + + let contextualizedCaveat: ContextualizedCaveat | undefined = undefined; + if (caveat?.groups) { + contextualizedCaveat = { + caveatName: caveat.groups['caveat_name'] ?? '', + }; + + if (caveat.groups['caveat_context']) { + try { + const parsed = JSON.parse(caveat.groups['caveat_context']); + if (typeof parsed !== 'object') { + return { + errorMessage: `Invalid value for caveat context: must be object`, + }; + } + + contextualizedCaveat.context = Struct.fromJson(parsed); + } catch (e) { + return { + errorMessage: `Invalid caveat context: ${e}`, + }; + } + } + } + + return { + resourceAndRelation: { + namespace: resourceNamespace, + objectId: resourceObjectId, + relation: resourceRelation, + }, + subject: { + namespace: subjectNamespace, + objectId: subjectObjectId, + relation: subjectRelation, + }, + caveat: contextualizedCaveat, + }; +}; + +/** + * parseRelationships parses the relationships found in the newline delimited relationships string. + */ +export const parseRelationships = (value: string): Relationship[] => { + const lines = value.split('\n'); + const relationships: Relationship[] = []; + + for (let i = 0; i < lines.length; ++i) { + const trimmed = lines[i].trim(); + if (!trimmed.length || trimmed.startsWith('//')) { + continue; + } + + const pieces = trimmed.split('@', 2); + if (pieces.length < 2) { + continue; + } + + const relationship = parseRelationship(trimmed); + if (!relationship) { + continue; + } + + relationships.push(relationship); + } + + return relationships; +}; + +/** + * parseRelationshipsWithErrors parses relationships in the string and returns them, or errors + * for each invalid one found. + */ +export const parseRelationshipsWithErrors = ( + relsStr: string +): RelationshipFound[] => { + const lines = relsStr.split('\n'); + return lines + .map((line: string, index: number) => { + const trimmed = line.trim(); + if (!trimmed.length || trimmed.startsWith('//')) { + return undefined; + } + + const parsed = parseRelationshipWithError(trimmed); + return { + text: line, + lineNumber: index, + parsed: parsed, + }; + }) + .filter((tf: RelationshipFound | undefined) => !!tf) as RelationshipFound[]; +}; + +/** + * convertRelationshipToString converts a Relationship into its string form. + */ +export const convertRelationshipToString = (rel: Relationship) => { + let caveatString = ''; + if (rel.caveat) { + caveatString = `[${rel.caveat.caveatName}${ + rel.caveat.context ? `:${Struct.toJsonString(rel.caveat.context)}` : '' + }]`; + } + + const subjectRelation = + rel.subject?.relation && rel.subject.relation !== '...' + ? `#${rel.subject.relation}` + : ''; + return `${rel.resourceAndRelation?.namespace}:${rel.resourceAndRelation?.objectId}#${rel.resourceAndRelation?.relation}@${rel.subject?.namespace}:${rel.subject?.objectId}${subjectRelation}${caveatString}`; +}; + +/** + * convertRelationshipsToStrings converts a list of Relationship into string forms. + */ +export const convertRelationshipsToStrings = ( + rels: Relationship[] +): string[] => { + return rels.map(convertRelationshipToString); +}; + +export type RelationshipOrComment = + | { + comment: string; + } + | Relationship; + +/** + * parseRelationshipsAndComments parses the relationships and comments found in the given string + * and returns them. + */ +export const parseRelationshipsAndComments = ( + value: string +): RelationshipOrComment[] => { + const lines = value.split('\n'); + const found: RelationshipOrComment[] = []; + + for (let i = 0; i < lines.length; ++i) { + const trimmed = lines[i].trim(); + if (!trimmed.length) { + continue; + } + + if (trimmed.startsWith('//')) { + found.push({ + comment: trimmed.substring(2).trim(), + }); + continue; + } + + const parsed = parseRelationshipWithError(trimmed); + if ('errorMessage' in parsed) { + found.push({ + comment: `${parsed.errorMessage}: ${trimmed}`, + }); + continue; + } + + found.push(parsed); + } + + return found; +}; + +export interface RelationshipWithComments { + relationship?: Relationship; + comments: string[]; + text: string; +} + +/** + * parseRelationshipsWithComments parses the relationships found in the given string + * and returns them. + */ +export const parseRelationshipsWithComments = ( + value: string +): RelationshipWithComments[] => { + const lines = value.split('\n'); + const rels: RelationshipWithComments[] = []; + let comments: string[] = []; + + for (let i = 0; i < lines.length; ++i) { + const trimmed = lines[i].trim(); + if (!trimmed.length) { + continue; + } + + if (trimmed.startsWith('//')) { + comments.push(trimmed.substring(2).trim()); + continue; + } + + const parsed = parseRelationship(trimmed); + rels.push({ + relationship: parsed, + comments: comments, + text: trimmed, + }); + + comments = []; + } + + return rels; +}; + +/** + * mergeRelationshipsStringAndComments merges an existing string containing + * relationships and comments with the relationships provided in the updated + * array, returning a string with the comments and any common relationships + * maintained. If a relationship is not found in updated, it is removed and + * if it is new in updated, it is added. + */ +export const mergeRelationshipsStringAndComments = ( + existing: string, + updated: Relationship[] +) => { + const parsed = parseRelationshipsAndComments(existing); + return mergeRelationshipsAndComments(parsed, updated); +}; + +export const mergeRelationshipsAndComments = ( + existing: RelationshipOrComment[], + updated: Relationship[] +) => { + const updatedRelStrings = updated.map(convertRelationshipToString); + + const existingRelStringsSet = new Set(); + const updatedRelStringsSet = new Set(updatedRelStrings); + + const filtered = existing + .filter((e) => { + if ('comment' in e) { + return true; + } + + const relString = convertRelationshipToString(e); + existingRelStringsSet.add(relString); + return updatedRelStringsSet.has(relString); + }) + .map((e) => { + if ('comment' in e) { + return `// ${e.comment}`; + } + + return convertRelationshipToString(e); + }); + + const updatedFiltered = updatedRelStrings.filter((relString) => { + return !existingRelStringsSet.has(relString); + }); + filtered.push(...updatedFiltered); + + return filtered.join('\n'); +}; diff --git a/spicedb-common/src/protodefs/authzed/api/v0/Acl_serviceServiceClientPb.ts b/spicedb-common/src/protodefs/authzed/api/v0/Acl_serviceServiceClientPb.ts new file mode 100644 index 0000000..d7fb630 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/Acl_serviceServiceClientPb.ts @@ -0,0 +1,297 @@ +/** + * @fileoverview gRPC-Web generated client stub for authzed.api.v0 + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + +import * as grpcWeb from 'grpc-web'; + +import * as authzed_api_v0_acl_service_pb from '../../../authzed/api/v0/acl_service_pb'; + + +export class ACLServiceClient { + client_: grpcWeb.AbstractClientBase; + hostname_: string; + credentials_: null | { [index: string]: string; }; + options_: null | { [index: string]: any; }; + + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }) { + if (!options) options = {}; + if (!credentials) credentials = {}; + options['format'] = 'text'; + + this.client_ = new grpcWeb.GrpcWebClientBase(options); + this.hostname_ = hostname; + this.credentials_ = credentials; + this.options_ = options; + } + + methodInfoRead = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/Read', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.ReadRequest, + authzed_api_v0_acl_service_pb.ReadResponse, + (request: authzed_api_v0_acl_service_pb.ReadRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.ReadResponse.deserializeBinary + ); + + read( + request: authzed_api_v0_acl_service_pb.ReadRequest, + metadata: grpcWeb.Metadata | null): Promise; + + read( + request: authzed_api_v0_acl_service_pb.ReadRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.ReadResponse) => void): grpcWeb.ClientReadableStream; + + read( + request: authzed_api_v0_acl_service_pb.ReadRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.ReadResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Read', + request, + metadata || {}, + this.methodInfoRead, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Read', + request, + metadata || {}, + this.methodInfoRead); + } + + methodInfoWrite = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/Write', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.WriteRequest, + authzed_api_v0_acl_service_pb.WriteResponse, + (request: authzed_api_v0_acl_service_pb.WriteRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.WriteResponse.deserializeBinary + ); + + write( + request: authzed_api_v0_acl_service_pb.WriteRequest, + metadata: grpcWeb.Metadata | null): Promise; + + write( + request: authzed_api_v0_acl_service_pb.WriteRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.WriteResponse) => void): grpcWeb.ClientReadableStream; + + write( + request: authzed_api_v0_acl_service_pb.WriteRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.WriteResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Write', + request, + metadata || {}, + this.methodInfoWrite, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Write', + request, + metadata || {}, + this.methodInfoWrite); + } + + methodInfoCheck = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/Check', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.CheckRequest, + authzed_api_v0_acl_service_pb.CheckResponse, + (request: authzed_api_v0_acl_service_pb.CheckRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.CheckResponse.deserializeBinary + ); + + check( + request: authzed_api_v0_acl_service_pb.CheckRequest, + metadata: grpcWeb.Metadata | null): Promise; + + check( + request: authzed_api_v0_acl_service_pb.CheckRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.CheckResponse) => void): grpcWeb.ClientReadableStream; + + check( + request: authzed_api_v0_acl_service_pb.CheckRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.CheckResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Check', + request, + metadata || {}, + this.methodInfoCheck, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Check', + request, + metadata || {}, + this.methodInfoCheck); + } + + methodInfoContentChangeCheck = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/ContentChangeCheck', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.ContentChangeCheckRequest, + authzed_api_v0_acl_service_pb.CheckResponse, + (request: authzed_api_v0_acl_service_pb.ContentChangeCheckRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.CheckResponse.deserializeBinary + ); + + contentChangeCheck( + request: authzed_api_v0_acl_service_pb.ContentChangeCheckRequest, + metadata: grpcWeb.Metadata | null): Promise; + + contentChangeCheck( + request: authzed_api_v0_acl_service_pb.ContentChangeCheckRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.CheckResponse) => void): grpcWeb.ClientReadableStream; + + contentChangeCheck( + request: authzed_api_v0_acl_service_pb.ContentChangeCheckRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.CheckResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/ContentChangeCheck', + request, + metadata || {}, + this.methodInfoContentChangeCheck, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/ContentChangeCheck', + request, + metadata || {}, + this.methodInfoContentChangeCheck); + } + + methodInfoExpand = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/Expand', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.ExpandRequest, + authzed_api_v0_acl_service_pb.ExpandResponse, + (request: authzed_api_v0_acl_service_pb.ExpandRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.ExpandResponse.deserializeBinary + ); + + expand( + request: authzed_api_v0_acl_service_pb.ExpandRequest, + metadata: grpcWeb.Metadata | null): Promise; + + expand( + request: authzed_api_v0_acl_service_pb.ExpandRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.ExpandResponse) => void): grpcWeb.ClientReadableStream; + + expand( + request: authzed_api_v0_acl_service_pb.ExpandRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.ExpandResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Expand', + request, + metadata || {}, + this.methodInfoExpand, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Expand', + request, + metadata || {}, + this.methodInfoExpand); + } + + methodInfoLookup = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.ACLService/Lookup', + grpcWeb.MethodType.UNARY, + authzed_api_v0_acl_service_pb.LookupRequest, + authzed_api_v0_acl_service_pb.LookupResponse, + (request: authzed_api_v0_acl_service_pb.LookupRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_acl_service_pb.LookupResponse.deserializeBinary + ); + + lookup( + request: authzed_api_v0_acl_service_pb.LookupRequest, + metadata: grpcWeb.Metadata | null): Promise; + + lookup( + request: authzed_api_v0_acl_service_pb.LookupRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.LookupResponse) => void): grpcWeb.ClientReadableStream; + + lookup( + request: authzed_api_v0_acl_service_pb.LookupRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_acl_service_pb.LookupResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Lookup', + request, + metadata || {}, + this.methodInfoLookup, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.ACLService/Lookup', + request, + metadata || {}, + this.methodInfoLookup); + } + +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb.ts b/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb.ts new file mode 100644 index 0000000..06d3f61 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/DeveloperServiceClientPb.ts @@ -0,0 +1,297 @@ +/** + * @fileoverview gRPC-Web generated client stub for authzed.api.v0 + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + +import * as grpcWeb from 'grpc-web'; + +import * as authzed_api_v0_developer_pb from '../../../authzed/api/v0/developer_pb'; + + +export class DeveloperServiceClient { + client_: grpcWeb.AbstractClientBase; + hostname_: string; + credentials_: null | { [index: string]: string; }; + options_: null | { [index: string]: any; }; + + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }) { + if (!options) options = {}; + if (!credentials) credentials = {}; + options['format'] = 'text'; + + this.client_ = new grpcWeb.GrpcWebClientBase(options); + this.hostname_ = hostname; + this.credentials_ = credentials; + this.options_ = options; + } + + methodInfoEditCheck = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/EditCheck', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.EditCheckRequest, + authzed_api_v0_developer_pb.EditCheckResponse, + (request: authzed_api_v0_developer_pb.EditCheckRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.EditCheckResponse.deserializeBinary + ); + + editCheck( + request: authzed_api_v0_developer_pb.EditCheckRequest, + metadata: grpcWeb.Metadata | null): Promise; + + editCheck( + request: authzed_api_v0_developer_pb.EditCheckRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.EditCheckResponse) => void): grpcWeb.ClientReadableStream; + + editCheck( + request: authzed_api_v0_developer_pb.EditCheckRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.EditCheckResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/EditCheck', + request, + metadata || {}, + this.methodInfoEditCheck, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/EditCheck', + request, + metadata || {}, + this.methodInfoEditCheck); + } + + methodInfoValidate = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/Validate', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.ValidateRequest, + authzed_api_v0_developer_pb.ValidateResponse, + (request: authzed_api_v0_developer_pb.ValidateRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.ValidateResponse.deserializeBinary + ); + + validate( + request: authzed_api_v0_developer_pb.ValidateRequest, + metadata: grpcWeb.Metadata | null): Promise; + + validate( + request: authzed_api_v0_developer_pb.ValidateRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.ValidateResponse) => void): grpcWeb.ClientReadableStream; + + validate( + request: authzed_api_v0_developer_pb.ValidateRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.ValidateResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/Validate', + request, + metadata || {}, + this.methodInfoValidate, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/Validate', + request, + metadata || {}, + this.methodInfoValidate); + } + + methodInfoShare = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/Share', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.ShareRequest, + authzed_api_v0_developer_pb.ShareResponse, + (request: authzed_api_v0_developer_pb.ShareRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.ShareResponse.deserializeBinary + ); + + share( + request: authzed_api_v0_developer_pb.ShareRequest, + metadata: grpcWeb.Metadata | null): Promise; + + share( + request: authzed_api_v0_developer_pb.ShareRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.ShareResponse) => void): grpcWeb.ClientReadableStream; + + share( + request: authzed_api_v0_developer_pb.ShareRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.ShareResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/Share', + request, + metadata || {}, + this.methodInfoShare, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/Share', + request, + metadata || {}, + this.methodInfoShare); + } + + methodInfoLookupShared = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/LookupShared', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.LookupShareRequest, + authzed_api_v0_developer_pb.LookupShareResponse, + (request: authzed_api_v0_developer_pb.LookupShareRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.LookupShareResponse.deserializeBinary + ); + + lookupShared( + request: authzed_api_v0_developer_pb.LookupShareRequest, + metadata: grpcWeb.Metadata | null): Promise; + + lookupShared( + request: authzed_api_v0_developer_pb.LookupShareRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.LookupShareResponse) => void): grpcWeb.ClientReadableStream; + + lookupShared( + request: authzed_api_v0_developer_pb.LookupShareRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.LookupShareResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/LookupShared', + request, + metadata || {}, + this.methodInfoLookupShared, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/LookupShared', + request, + metadata || {}, + this.methodInfoLookupShared); + } + + methodInfoUpgradeSchema = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/UpgradeSchema', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.UpgradeSchemaRequest, + authzed_api_v0_developer_pb.UpgradeSchemaResponse, + (request: authzed_api_v0_developer_pb.UpgradeSchemaRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.UpgradeSchemaResponse.deserializeBinary + ); + + upgradeSchema( + request: authzed_api_v0_developer_pb.UpgradeSchemaRequest, + metadata: grpcWeb.Metadata | null): Promise; + + upgradeSchema( + request: authzed_api_v0_developer_pb.UpgradeSchemaRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.UpgradeSchemaResponse) => void): grpcWeb.ClientReadableStream; + + upgradeSchema( + request: authzed_api_v0_developer_pb.UpgradeSchemaRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.UpgradeSchemaResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/UpgradeSchema', + request, + metadata || {}, + this.methodInfoUpgradeSchema, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/UpgradeSchema', + request, + metadata || {}, + this.methodInfoUpgradeSchema); + } + + methodInfoFormatSchema = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.DeveloperService/FormatSchema', + grpcWeb.MethodType.UNARY, + authzed_api_v0_developer_pb.FormatSchemaRequest, + authzed_api_v0_developer_pb.FormatSchemaResponse, + (request: authzed_api_v0_developer_pb.FormatSchemaRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_developer_pb.FormatSchemaResponse.deserializeBinary + ); + + formatSchema( + request: authzed_api_v0_developer_pb.FormatSchemaRequest, + metadata: grpcWeb.Metadata | null): Promise; + + formatSchema( + request: authzed_api_v0_developer_pb.FormatSchemaRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.FormatSchemaResponse) => void): grpcWeb.ClientReadableStream; + + formatSchema( + request: authzed_api_v0_developer_pb.FormatSchemaRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_developer_pb.FormatSchemaResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/FormatSchema', + request, + metadata || {}, + this.methodInfoFormatSchema, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.DeveloperService/FormatSchema', + request, + metadata || {}, + this.methodInfoFormatSchema); + } + +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/Namespace_serviceServiceClientPb.ts b/spicedb-common/src/protodefs/authzed/api/v0/Namespace_serviceServiceClientPb.ts new file mode 100644 index 0000000..3089a10 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/Namespace_serviceServiceClientPb.ts @@ -0,0 +1,168 @@ +/** + * @fileoverview gRPC-Web generated client stub for authzed.api.v0 + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + +import * as grpcWeb from 'grpc-web'; + +import * as authzed_api_v0_namespace_service_pb from '../../../authzed/api/v0/namespace_service_pb'; + + +export class NamespaceServiceClient { + client_: grpcWeb.AbstractClientBase; + hostname_: string; + credentials_: null | { [index: string]: string; }; + options_: null | { [index: string]: any; }; + + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }) { + if (!options) options = {}; + if (!credentials) credentials = {}; + options['format'] = 'text'; + + this.client_ = new grpcWeb.GrpcWebClientBase(options); + this.hostname_ = hostname; + this.credentials_ = credentials; + this.options_ = options; + } + + methodInfoReadConfig = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.NamespaceService/ReadConfig', + grpcWeb.MethodType.UNARY, + authzed_api_v0_namespace_service_pb.ReadConfigRequest, + authzed_api_v0_namespace_service_pb.ReadConfigResponse, + (request: authzed_api_v0_namespace_service_pb.ReadConfigRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_namespace_service_pb.ReadConfigResponse.deserializeBinary + ); + + readConfig( + request: authzed_api_v0_namespace_service_pb.ReadConfigRequest, + metadata: grpcWeb.Metadata | null): Promise; + + readConfig( + request: authzed_api_v0_namespace_service_pb.ReadConfigRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.ReadConfigResponse) => void): grpcWeb.ClientReadableStream; + + readConfig( + request: authzed_api_v0_namespace_service_pb.ReadConfigRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.ReadConfigResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/ReadConfig', + request, + metadata || {}, + this.methodInfoReadConfig, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/ReadConfig', + request, + metadata || {}, + this.methodInfoReadConfig); + } + + methodInfoWriteConfig = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.NamespaceService/WriteConfig', + grpcWeb.MethodType.UNARY, + authzed_api_v0_namespace_service_pb.WriteConfigRequest, + authzed_api_v0_namespace_service_pb.WriteConfigResponse, + (request: authzed_api_v0_namespace_service_pb.WriteConfigRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_namespace_service_pb.WriteConfigResponse.deserializeBinary + ); + + writeConfig( + request: authzed_api_v0_namespace_service_pb.WriteConfigRequest, + metadata: grpcWeb.Metadata | null): Promise; + + writeConfig( + request: authzed_api_v0_namespace_service_pb.WriteConfigRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.WriteConfigResponse) => void): grpcWeb.ClientReadableStream; + + writeConfig( + request: authzed_api_v0_namespace_service_pb.WriteConfigRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.WriteConfigResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/WriteConfig', + request, + metadata || {}, + this.methodInfoWriteConfig, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/WriteConfig', + request, + metadata || {}, + this.methodInfoWriteConfig); + } + + methodInfoDeleteConfigs = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.NamespaceService/DeleteConfigs', + grpcWeb.MethodType.UNARY, + authzed_api_v0_namespace_service_pb.DeleteConfigsRequest, + authzed_api_v0_namespace_service_pb.DeleteConfigsResponse, + (request: authzed_api_v0_namespace_service_pb.DeleteConfigsRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_namespace_service_pb.DeleteConfigsResponse.deserializeBinary + ); + + deleteConfigs( + request: authzed_api_v0_namespace_service_pb.DeleteConfigsRequest, + metadata: grpcWeb.Metadata | null): Promise; + + deleteConfigs( + request: authzed_api_v0_namespace_service_pb.DeleteConfigsRequest, + metadata: grpcWeb.Metadata | null, + callback: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.DeleteConfigsResponse) => void): grpcWeb.ClientReadableStream; + + deleteConfigs( + request: authzed_api_v0_namespace_service_pb.DeleteConfigsRequest, + metadata: grpcWeb.Metadata | null, + callback?: (err: grpcWeb.RpcError, + response: authzed_api_v0_namespace_service_pb.DeleteConfigsResponse) => void) { + if (callback !== undefined) { + return this.client_.rpcCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/DeleteConfigs', + request, + metadata || {}, + this.methodInfoDeleteConfigs, + callback); + } + return this.client_.unaryCall( + this.hostname_ + + '/authzed.api.v0.NamespaceService/DeleteConfigs', + request, + metadata || {}, + this.methodInfoDeleteConfigs); + } + +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/Watch_serviceServiceClientPb.ts b/spicedb-common/src/protodefs/authzed/api/v0/Watch_serviceServiceClientPb.ts new file mode 100644 index 0000000..454594e --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/Watch_serviceServiceClientPb.ts @@ -0,0 +1,61 @@ +/** + * @fileoverview gRPC-Web generated client stub for authzed.api.v0 + * @enhanceable + * @public + */ + +// GENERATED CODE -- DO NOT EDIT! + + +/* eslint-disable */ +// @ts-nocheck + + +import * as grpcWeb from 'grpc-web'; + +import * as authzed_api_v0_watch_service_pb from '../../../authzed/api/v0/watch_service_pb'; + + +export class WatchServiceClient { + client_: grpcWeb.AbstractClientBase; + hostname_: string; + credentials_: null | { [index: string]: string; }; + options_: null | { [index: string]: any; }; + + constructor (hostname: string, + credentials?: null | { [index: string]: string; }, + options?: null | { [index: string]: any; }) { + if (!options) options = {}; + if (!credentials) credentials = {}; + options['format'] = 'text'; + + this.client_ = new grpcWeb.GrpcWebClientBase(options); + this.hostname_ = hostname; + this.credentials_ = credentials; + this.options_ = options; + } + + methodInfoWatch = new grpcWeb.MethodDescriptor( + '/authzed.api.v0.WatchService/Watch', + grpcWeb.MethodType.SERVER_STREAMING, + authzed_api_v0_watch_service_pb.WatchRequest, + authzed_api_v0_watch_service_pb.WatchResponse, + (request: authzed_api_v0_watch_service_pb.WatchRequest) => { + return request.serializeBinary(); + }, + authzed_api_v0_watch_service_pb.WatchResponse.deserializeBinary + ); + + watch( + request: authzed_api_v0_watch_service_pb.WatchRequest, + metadata?: grpcWeb.Metadata) { + return this.client_.serverStreaming( + this.hostname_ + + '/authzed.api.v0.WatchService/Watch', + request, + metadata || {}, + this.methodInfoWatch); + } + +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.d.ts new file mode 100644 index 0000000..42144b9 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.d.ts @@ -0,0 +1,384 @@ +import * as jspb from 'google-protobuf' + +import * as validate_validate_pb from '../../../validate/validate_pb'; +import * as authzed_api_v0_core_pb from '../../../authzed/api/v0/core_pb'; + + +export class RelationTupleFilter extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): RelationTupleFilter; + + getObjectId(): string; + setObjectId(value: string): RelationTupleFilter; + + getRelation(): string; + setRelation(value: string): RelationTupleFilter; + + getUserset(): authzed_api_v0_core_pb.ObjectAndRelation | undefined; + setUserset(value?: authzed_api_v0_core_pb.ObjectAndRelation): RelationTupleFilter; + hasUserset(): boolean; + clearUserset(): RelationTupleFilter; + + getFiltersList(): Array; + setFiltersList(value: Array): RelationTupleFilter; + clearFiltersList(): RelationTupleFilter; + addFilters(value: RelationTupleFilter.Filter, index?: number): RelationTupleFilter; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RelationTupleFilter.AsObject; + static toObject(includeInstance: boolean, msg: RelationTupleFilter): RelationTupleFilter.AsObject; + static serializeBinaryToWriter(message: RelationTupleFilter, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RelationTupleFilter; + static deserializeBinaryFromReader(message: RelationTupleFilter, reader: jspb.BinaryReader): RelationTupleFilter; +} + +export namespace RelationTupleFilter { + export type AsObject = { + namespace: string, + objectId: string, + relation: string, + userset?: authzed_api_v0_core_pb.ObjectAndRelation.AsObject, + filtersList: Array, + } + + export enum Filter { + UNKNOWN = 0, + OBJECT_ID = 1, + RELATION = 2, + USERSET = 4, + } +} + +export class ReadRequest extends jspb.Message { + getTuplesetsList(): Array; + setTuplesetsList(value: Array): ReadRequest; + clearTuplesetsList(): ReadRequest; + addTuplesets(value?: RelationTupleFilter, index?: number): RelationTupleFilter; + + getAtRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setAtRevision(value?: authzed_api_v0_core_pb.Zookie): ReadRequest; + hasAtRevision(): boolean; + clearAtRevision(): ReadRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReadRequest.AsObject; + static toObject(includeInstance: boolean, msg: ReadRequest): ReadRequest.AsObject; + static serializeBinaryToWriter(message: ReadRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReadRequest; + static deserializeBinaryFromReader(message: ReadRequest, reader: jspb.BinaryReader): ReadRequest; +} + +export namespace ReadRequest { + export type AsObject = { + tuplesetsList: Array, + atRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class ReadResponse extends jspb.Message { + getTuplesetsList(): Array; + setTuplesetsList(value: Array): ReadResponse; + clearTuplesetsList(): ReadResponse; + addTuplesets(value?: ReadResponse.Tupleset, index?: number): ReadResponse.Tupleset; + + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): ReadResponse; + hasRevision(): boolean; + clearRevision(): ReadResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReadResponse.AsObject; + static toObject(includeInstance: boolean, msg: ReadResponse): ReadResponse.AsObject; + static serializeBinaryToWriter(message: ReadResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReadResponse; + static deserializeBinaryFromReader(message: ReadResponse, reader: jspb.BinaryReader): ReadResponse; +} + +export namespace ReadResponse { + export type AsObject = { + tuplesetsList: Array, + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } + + export class Tupleset extends jspb.Message { + getTuplesList(): Array; + setTuplesList(value: Array): Tupleset; + clearTuplesList(): Tupleset; + addTuples(value?: authzed_api_v0_core_pb.RelationTuple, index?: number): authzed_api_v0_core_pb.RelationTuple; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Tupleset.AsObject; + static toObject(includeInstance: boolean, msg: Tupleset): Tupleset.AsObject; + static serializeBinaryToWriter(message: Tupleset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Tupleset; + static deserializeBinaryFromReader(message: Tupleset, reader: jspb.BinaryReader): Tupleset; + } + + export namespace Tupleset { + export type AsObject = { + tuplesList: Array, + } + } + +} + +export class WriteRequest extends jspb.Message { + getWriteConditionsList(): Array; + setWriteConditionsList(value: Array): WriteRequest; + clearWriteConditionsList(): WriteRequest; + addWriteConditions(value?: authzed_api_v0_core_pb.RelationTuple, index?: number): authzed_api_v0_core_pb.RelationTuple; + + getUpdatesList(): Array; + setUpdatesList(value: Array): WriteRequest; + clearUpdatesList(): WriteRequest; + addUpdates(value?: authzed_api_v0_core_pb.RelationTupleUpdate, index?: number): authzed_api_v0_core_pb.RelationTupleUpdate; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WriteRequest.AsObject; + static toObject(includeInstance: boolean, msg: WriteRequest): WriteRequest.AsObject; + static serializeBinaryToWriter(message: WriteRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WriteRequest; + static deserializeBinaryFromReader(message: WriteRequest, reader: jspb.BinaryReader): WriteRequest; +} + +export namespace WriteRequest { + export type AsObject = { + writeConditionsList: Array, + updatesList: Array, + } +} + +export class WriteResponse extends jspb.Message { + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): WriteResponse; + hasRevision(): boolean; + clearRevision(): WriteResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WriteResponse.AsObject; + static toObject(includeInstance: boolean, msg: WriteResponse): WriteResponse.AsObject; + static serializeBinaryToWriter(message: WriteResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WriteResponse; + static deserializeBinaryFromReader(message: WriteResponse, reader: jspb.BinaryReader): WriteResponse; +} + +export namespace WriteResponse { + export type AsObject = { + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class CheckRequest extends jspb.Message { + getTestUserset(): authzed_api_v0_core_pb.ObjectAndRelation | undefined; + setTestUserset(value?: authzed_api_v0_core_pb.ObjectAndRelation): CheckRequest; + hasTestUserset(): boolean; + clearTestUserset(): CheckRequest; + + getUser(): authzed_api_v0_core_pb.User | undefined; + setUser(value?: authzed_api_v0_core_pb.User): CheckRequest; + hasUser(): boolean; + clearUser(): CheckRequest; + + getAtRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setAtRevision(value?: authzed_api_v0_core_pb.Zookie): CheckRequest; + hasAtRevision(): boolean; + clearAtRevision(): CheckRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): CheckRequest.AsObject; + static toObject(includeInstance: boolean, msg: CheckRequest): CheckRequest.AsObject; + static serializeBinaryToWriter(message: CheckRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): CheckRequest; + static deserializeBinaryFromReader(message: CheckRequest, reader: jspb.BinaryReader): CheckRequest; +} + +export namespace CheckRequest { + export type AsObject = { + testUserset?: authzed_api_v0_core_pb.ObjectAndRelation.AsObject, + user?: authzed_api_v0_core_pb.User.AsObject, + atRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class ContentChangeCheckRequest extends jspb.Message { + getTestUserset(): authzed_api_v0_core_pb.ObjectAndRelation | undefined; + setTestUserset(value?: authzed_api_v0_core_pb.ObjectAndRelation): ContentChangeCheckRequest; + hasTestUserset(): boolean; + clearTestUserset(): ContentChangeCheckRequest; + + getUser(): authzed_api_v0_core_pb.User | undefined; + setUser(value?: authzed_api_v0_core_pb.User): ContentChangeCheckRequest; + hasUser(): boolean; + clearUser(): ContentChangeCheckRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ContentChangeCheckRequest.AsObject; + static toObject(includeInstance: boolean, msg: ContentChangeCheckRequest): ContentChangeCheckRequest.AsObject; + static serializeBinaryToWriter(message: ContentChangeCheckRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ContentChangeCheckRequest; + static deserializeBinaryFromReader(message: ContentChangeCheckRequest, reader: jspb.BinaryReader): ContentChangeCheckRequest; +} + +export namespace ContentChangeCheckRequest { + export type AsObject = { + testUserset?: authzed_api_v0_core_pb.ObjectAndRelation.AsObject, + user?: authzed_api_v0_core_pb.User.AsObject, + } +} + +export class CheckResponse extends jspb.Message { + getIsMember(): boolean; + setIsMember(value: boolean): CheckResponse; + + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): CheckResponse; + hasRevision(): boolean; + clearRevision(): CheckResponse; + + getMembership(): CheckResponse.Membership; + setMembership(value: CheckResponse.Membership): CheckResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): CheckResponse.AsObject; + static toObject(includeInstance: boolean, msg: CheckResponse): CheckResponse.AsObject; + static serializeBinaryToWriter(message: CheckResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): CheckResponse; + static deserializeBinaryFromReader(message: CheckResponse, reader: jspb.BinaryReader): CheckResponse; +} + +export namespace CheckResponse { + export type AsObject = { + isMember: boolean, + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + membership: CheckResponse.Membership, + } + + export enum Membership { + UNKNOWN = 0, + NOT_MEMBER = 1, + MEMBER = 2, + } +} + +export class ExpandRequest extends jspb.Message { + getUserset(): authzed_api_v0_core_pb.ObjectAndRelation | undefined; + setUserset(value?: authzed_api_v0_core_pb.ObjectAndRelation): ExpandRequest; + hasUserset(): boolean; + clearUserset(): ExpandRequest; + + getAtRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setAtRevision(value?: authzed_api_v0_core_pb.Zookie): ExpandRequest; + hasAtRevision(): boolean; + clearAtRevision(): ExpandRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExpandRequest.AsObject; + static toObject(includeInstance: boolean, msg: ExpandRequest): ExpandRequest.AsObject; + static serializeBinaryToWriter(message: ExpandRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExpandRequest; + static deserializeBinaryFromReader(message: ExpandRequest, reader: jspb.BinaryReader): ExpandRequest; +} + +export namespace ExpandRequest { + export type AsObject = { + userset?: authzed_api_v0_core_pb.ObjectAndRelation.AsObject, + atRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class ExpandResponse extends jspb.Message { + getTreeNode(): authzed_api_v0_core_pb.RelationTupleTreeNode | undefined; + setTreeNode(value?: authzed_api_v0_core_pb.RelationTupleTreeNode): ExpandResponse; + hasTreeNode(): boolean; + clearTreeNode(): ExpandResponse; + + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): ExpandResponse; + hasRevision(): boolean; + clearRevision(): ExpandResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ExpandResponse.AsObject; + static toObject(includeInstance: boolean, msg: ExpandResponse): ExpandResponse.AsObject; + static serializeBinaryToWriter(message: ExpandResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ExpandResponse; + static deserializeBinaryFromReader(message: ExpandResponse, reader: jspb.BinaryReader): ExpandResponse; +} + +export namespace ExpandResponse { + export type AsObject = { + treeNode?: authzed_api_v0_core_pb.RelationTupleTreeNode.AsObject, + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class LookupRequest extends jspb.Message { + getObjectRelation(): authzed_api_v0_core_pb.RelationReference | undefined; + setObjectRelation(value?: authzed_api_v0_core_pb.RelationReference): LookupRequest; + hasObjectRelation(): boolean; + clearObjectRelation(): LookupRequest; + + getUser(): authzed_api_v0_core_pb.ObjectAndRelation | undefined; + setUser(value?: authzed_api_v0_core_pb.ObjectAndRelation): LookupRequest; + hasUser(): boolean; + clearUser(): LookupRequest; + + getAtRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setAtRevision(value?: authzed_api_v0_core_pb.Zookie): LookupRequest; + hasAtRevision(): boolean; + clearAtRevision(): LookupRequest; + + getPageReference(): string; + setPageReference(value: string): LookupRequest; + + getLimit(): number; + setLimit(value: number): LookupRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LookupRequest.AsObject; + static toObject(includeInstance: boolean, msg: LookupRequest): LookupRequest.AsObject; + static serializeBinaryToWriter(message: LookupRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LookupRequest; + static deserializeBinaryFromReader(message: LookupRequest, reader: jspb.BinaryReader): LookupRequest; +} + +export namespace LookupRequest { + export type AsObject = { + objectRelation?: authzed_api_v0_core_pb.RelationReference.AsObject, + user?: authzed_api_v0_core_pb.ObjectAndRelation.AsObject, + atRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + pageReference: string, + limit: number, + } +} + +export class LookupResponse extends jspb.Message { + getResolvedObjectIdsList(): Array; + setResolvedObjectIdsList(value: Array): LookupResponse; + clearResolvedObjectIdsList(): LookupResponse; + addResolvedObjectIds(value: string, index?: number): LookupResponse; + + getNextPageReference(): string; + setNextPageReference(value: string): LookupResponse; + + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): LookupResponse; + hasRevision(): boolean; + clearRevision(): LookupResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LookupResponse.AsObject; + static toObject(includeInstance: boolean, msg: LookupResponse): LookupResponse.AsObject; + static serializeBinaryToWriter(message: LookupResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LookupResponse; + static deserializeBinaryFromReader(message: LookupResponse, reader: jspb.BinaryReader): LookupResponse; +} + +export namespace LookupResponse { + export type AsObject = { + resolvedObjectIdsList: Array, + nextPageReference: string, + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.js new file mode 100644 index 0000000..9a10a4f --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/acl_service_pb.js @@ -0,0 +1,3200 @@ +// source: authzed/api/v0/acl_service.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var validate_validate_pb = require('../../../validate/validate_pb.js'); +goog.object.extend(proto, validate_validate_pb); +var authzed_api_v0_core_pb = require('../../../authzed/api/v0/core_pb.js'); +goog.object.extend(proto, authzed_api_v0_core_pb); +goog.exportSymbol('proto.authzed.api.v0.CheckRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.CheckResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.CheckResponse.Membership', null, global); +goog.exportSymbol('proto.authzed.api.v0.ContentChangeCheckRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ExpandRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ExpandResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.LookupRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.LookupResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.ReadRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ReadResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.ReadResponse.Tupleset', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleFilter', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleFilter.Filter', null, global); +goog.exportSymbol('proto.authzed.api.v0.WriteRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.WriteResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RelationTupleFilter = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.RelationTupleFilter.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.RelationTupleFilter, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RelationTupleFilter.displayName = 'proto.authzed.api.v0.RelationTupleFilter'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ReadRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.ReadRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.ReadRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ReadRequest.displayName = 'proto.authzed.api.v0.ReadRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ReadResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.ReadResponse.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.ReadResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ReadResponse.displayName = 'proto.authzed.api.v0.ReadResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ReadResponse.Tupleset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.ReadResponse.Tupleset.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.ReadResponse.Tupleset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ReadResponse.Tupleset.displayName = 'proto.authzed.api.v0.ReadResponse.Tupleset'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WriteRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.WriteRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.WriteRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WriteRequest.displayName = 'proto.authzed.api.v0.WriteRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WriteResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.WriteResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WriteResponse.displayName = 'proto.authzed.api.v0.WriteResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.CheckRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.CheckRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.CheckRequest.displayName = 'proto.authzed.api.v0.CheckRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ContentChangeCheckRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ContentChangeCheckRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ContentChangeCheckRequest.displayName = 'proto.authzed.api.v0.ContentChangeCheckRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.CheckResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.CheckResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.CheckResponse.displayName = 'proto.authzed.api.v0.CheckResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ExpandRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ExpandRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ExpandRequest.displayName = 'proto.authzed.api.v0.ExpandRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ExpandResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ExpandResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ExpandResponse.displayName = 'proto.authzed.api.v0.ExpandResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.LookupRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.LookupRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.LookupRequest.displayName = 'proto.authzed.api.v0.LookupRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.LookupResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.LookupResponse.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.LookupResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.LookupResponse.displayName = 'proto.authzed.api.v0.LookupResponse'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.RelationTupleFilter.repeatedFields_ = [6]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RelationTupleFilter.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RelationTupleFilter} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleFilter.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + objectId: jspb.Message.getFieldWithDefault(msg, 2, ""), + relation: jspb.Message.getFieldWithDefault(msg, 3, ""), + userset: (f = msg.getUserset()) && authzed_api_v0_core_pb.ObjectAndRelation.toObject(includeInstance, f), + filtersList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RelationTupleFilter} + */ +proto.authzed.api.v0.RelationTupleFilter.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RelationTupleFilter; + return proto.authzed.api.v0.RelationTupleFilter.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RelationTupleFilter} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RelationTupleFilter} + */ +proto.authzed.api.v0.RelationTupleFilter.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setObjectId(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + case 5: + var value = new authzed_api_v0_core_pb.ObjectAndRelation; + reader.readMessage(value,authzed_api_v0_core_pb.ObjectAndRelation.deserializeBinaryFromReader); + msg.setUserset(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedEnum() : [reader.readEnum()]); + for (var i = 0; i < values.length; i++) { + msg.addFilters(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RelationTupleFilter.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RelationTupleFilter} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleFilter.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getObjectId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getRelation(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getUserset(); + if (f != null) { + writer.writeMessage( + 5, + f, + authzed_api_v0_core_pb.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getFiltersList(); + if (f.length > 0) { + writer.writePackedEnum( + 6, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.RelationTupleFilter.Filter = { + UNKNOWN: 0, + OBJECT_ID: 1, + RELATION: 2, + USERSET: 4 +}; + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string object_id = 2; + * @return {string} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.getObjectId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.setObjectId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string relation = 3; + * @return {string} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.setRelation = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional ObjectAndRelation userset = 5; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.getUserset = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.ObjectAndRelation, 5)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this +*/ +proto.authzed.api.v0.RelationTupleFilter.prototype.setUserset = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.clearUserset = function() { + return this.setUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.hasUserset = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated Filter filters = 6; + * @return {!Array} + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.getFiltersList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.setFiltersList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleFilter.Filter} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.addFilters = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.RelationTupleFilter} returns this + */ +proto.authzed.api.v0.RelationTupleFilter.prototype.clearFiltersList = function() { + return this.setFiltersList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.ReadRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ReadRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ReadRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ReadRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadRequest.toObject = function(includeInstance, msg) { + var f, obj = { + tuplesetsList: jspb.Message.toObjectList(msg.getTuplesetsList(), + proto.authzed.api.v0.RelationTupleFilter.toObject, includeInstance), + atRevision: (f = msg.getAtRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ReadRequest} + */ +proto.authzed.api.v0.ReadRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ReadRequest; + return proto.authzed.api.v0.ReadRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ReadRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ReadRequest} + */ +proto.authzed.api.v0.ReadRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.RelationTupleFilter; + reader.readMessage(value,proto.authzed.api.v0.RelationTupleFilter.deserializeBinaryFromReader); + msg.addTuplesets(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setAtRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ReadRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ReadRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ReadRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTuplesetsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.RelationTupleFilter.serializeBinaryToWriter + ); + } + f = message.getAtRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RelationTupleFilter tuplesets = 1; + * @return {!Array} + */ +proto.authzed.api.v0.ReadRequest.prototype.getTuplesetsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.RelationTupleFilter, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.ReadRequest} returns this +*/ +proto.authzed.api.v0.ReadRequest.prototype.setTuplesetsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleFilter=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTupleFilter} + */ +proto.authzed.api.v0.ReadRequest.prototype.addTuplesets = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.RelationTupleFilter, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.ReadRequest} returns this + */ +proto.authzed.api.v0.ReadRequest.prototype.clearTuplesetsList = function() { + return this.setTuplesetsList([]); +}; + + +/** + * optional Zookie at_revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ReadRequest.prototype.getAtRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ReadRequest} returns this +*/ +proto.authzed.api.v0.ReadRequest.prototype.setAtRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ReadRequest} returns this + */ +proto.authzed.api.v0.ReadRequest.prototype.clearAtRevision = function() { + return this.setAtRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ReadRequest.prototype.hasAtRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.ReadResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ReadResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ReadResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ReadResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadResponse.toObject = function(includeInstance, msg) { + var f, obj = { + tuplesetsList: jspb.Message.toObjectList(msg.getTuplesetsList(), + proto.authzed.api.v0.ReadResponse.Tupleset.toObject, includeInstance), + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ReadResponse} + */ +proto.authzed.api.v0.ReadResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ReadResponse; + return proto.authzed.api.v0.ReadResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ReadResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ReadResponse} + */ +proto.authzed.api.v0.ReadResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.ReadResponse.Tupleset; + reader.readMessage(value,proto.authzed.api.v0.ReadResponse.Tupleset.deserializeBinaryFromReader); + msg.addTuplesets(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ReadResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ReadResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ReadResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTuplesetsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.ReadResponse.Tupleset.serializeBinaryToWriter + ); + } + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.ReadResponse.Tupleset.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ReadResponse.Tupleset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ReadResponse.Tupleset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadResponse.Tupleset.toObject = function(includeInstance, msg) { + var f, obj = { + tuplesList: jspb.Message.toObjectList(msg.getTuplesList(), + authzed_api_v0_core_pb.RelationTuple.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ReadResponse.Tupleset} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ReadResponse.Tupleset; + return proto.authzed.api.v0.ReadResponse.Tupleset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ReadResponse.Tupleset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ReadResponse.Tupleset} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationTuple; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTuple.deserializeBinaryFromReader); + msg.addTuples(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ReadResponse.Tupleset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ReadResponse.Tupleset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadResponse.Tupleset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTuplesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + authzed_api_v0_core_pb.RelationTuple.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RelationTuple tuples = 1; + * @return {!Array} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.getTuplesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTuple, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.ReadResponse.Tupleset} returns this +*/ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.setTuplesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTuple=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.addTuples = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.RelationTuple, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.ReadResponse.Tupleset} returns this + */ +proto.authzed.api.v0.ReadResponse.Tupleset.prototype.clearTuplesList = function() { + return this.setTuplesList([]); +}; + + +/** + * repeated Tupleset tuplesets = 1; + * @return {!Array} + */ +proto.authzed.api.v0.ReadResponse.prototype.getTuplesetsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.ReadResponse.Tupleset, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.ReadResponse} returns this +*/ +proto.authzed.api.v0.ReadResponse.prototype.setTuplesetsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.ReadResponse.Tupleset=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.ReadResponse.Tupleset} + */ +proto.authzed.api.v0.ReadResponse.prototype.addTuplesets = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.ReadResponse.Tupleset, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.ReadResponse} returns this + */ +proto.authzed.api.v0.ReadResponse.prototype.clearTuplesetsList = function() { + return this.setTuplesetsList([]); +}; + + +/** + * optional Zookie revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ReadResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ReadResponse} returns this +*/ +proto.authzed.api.v0.ReadResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ReadResponse} returns this + */ +proto.authzed.api.v0.ReadResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ReadResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.WriteRequest.repeatedFields_ = [1,2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WriteRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WriteRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WriteRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteRequest.toObject = function(includeInstance, msg) { + var f, obj = { + writeConditionsList: jspb.Message.toObjectList(msg.getWriteConditionsList(), + authzed_api_v0_core_pb.RelationTuple.toObject, includeInstance), + updatesList: jspb.Message.toObjectList(msg.getUpdatesList(), + authzed_api_v0_core_pb.RelationTupleUpdate.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WriteRequest} + */ +proto.authzed.api.v0.WriteRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WriteRequest; + return proto.authzed.api.v0.WriteRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WriteRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WriteRequest} + */ +proto.authzed.api.v0.WriteRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationTuple; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTuple.deserializeBinaryFromReader); + msg.addWriteConditions(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.RelationTupleUpdate; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTupleUpdate.deserializeBinaryFromReader); + msg.addUpdates(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WriteRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WriteRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WriteRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getWriteConditionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + authzed_api_v0_core_pb.RelationTuple.serializeBinaryToWriter + ); + } + f = message.getUpdatesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + authzed_api_v0_core_pb.RelationTupleUpdate.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RelationTuple write_conditions = 1; + * @return {!Array} + */ +proto.authzed.api.v0.WriteRequest.prototype.getWriteConditionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTuple, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.WriteRequest} returns this +*/ +proto.authzed.api.v0.WriteRequest.prototype.setWriteConditionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTuple=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.WriteRequest.prototype.addWriteConditions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.RelationTuple, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.WriteRequest} returns this + */ +proto.authzed.api.v0.WriteRequest.prototype.clearWriteConditionsList = function() { + return this.setWriteConditionsList([]); +}; + + +/** + * repeated RelationTupleUpdate updates = 2; + * @return {!Array} + */ +proto.authzed.api.v0.WriteRequest.prototype.getUpdatesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTupleUpdate, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.WriteRequest} returns this +*/ +proto.authzed.api.v0.WriteRequest.prototype.setUpdatesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleUpdate=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTupleUpdate} + */ +proto.authzed.api.v0.WriteRequest.prototype.addUpdates = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.RelationTupleUpdate, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.WriteRequest} returns this + */ +proto.authzed.api.v0.WriteRequest.prototype.clearUpdatesList = function() { + return this.setUpdatesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WriteResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WriteResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WriteResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteResponse.toObject = function(includeInstance, msg) { + var f, obj = { + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WriteResponse} + */ +proto.authzed.api.v0.WriteResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WriteResponse; + return proto.authzed.api.v0.WriteResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WriteResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WriteResponse} + */ +proto.authzed.api.v0.WriteResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WriteResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WriteResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WriteResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Zookie revision = 1; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.WriteResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.WriteResponse} returns this +*/ +proto.authzed.api.v0.WriteResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.WriteResponse} returns this + */ +proto.authzed.api.v0.WriteResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.WriteResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.CheckRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.CheckRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.CheckRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.CheckRequest.toObject = function(includeInstance, msg) { + var f, obj = { + testUserset: (f = msg.getTestUserset()) && authzed_api_v0_core_pb.ObjectAndRelation.toObject(includeInstance, f), + user: (f = msg.getUser()) && authzed_api_v0_core_pb.User.toObject(includeInstance, f), + atRevision: (f = msg.getAtRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.CheckRequest} + */ +proto.authzed.api.v0.CheckRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.CheckRequest; + return proto.authzed.api.v0.CheckRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.CheckRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.CheckRequest} + */ +proto.authzed.api.v0.CheckRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.ObjectAndRelation; + reader.readMessage(value,authzed_api_v0_core_pb.ObjectAndRelation.deserializeBinaryFromReader); + msg.setTestUserset(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.User; + reader.readMessage(value,authzed_api_v0_core_pb.User.deserializeBinaryFromReader); + msg.setUser(value); + break; + case 3: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setAtRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.CheckRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.CheckRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.CheckRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.CheckRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTestUserset(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getUser(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.User.serializeBinaryToWriter + ); + } + f = message.getAtRevision(); + if (f != null) { + writer.writeMessage( + 3, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ObjectAndRelation test_userset = 1; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.CheckRequest.prototype.getTestUserset = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.ObjectAndRelation, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.CheckRequest} returns this +*/ +proto.authzed.api.v0.CheckRequest.prototype.setTestUserset = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.CheckRequest} returns this + */ +proto.authzed.api.v0.CheckRequest.prototype.clearTestUserset = function() { + return this.setTestUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.CheckRequest.prototype.hasTestUserset = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional User user = 2; + * @return {?proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.CheckRequest.prototype.getUser = function() { + return /** @type{?proto.authzed.api.v0.User} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.User, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.User|undefined} value + * @return {!proto.authzed.api.v0.CheckRequest} returns this +*/ +proto.authzed.api.v0.CheckRequest.prototype.setUser = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.CheckRequest} returns this + */ +proto.authzed.api.v0.CheckRequest.prototype.clearUser = function() { + return this.setUser(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.CheckRequest.prototype.hasUser = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Zookie at_revision = 3; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.CheckRequest.prototype.getAtRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.CheckRequest} returns this +*/ +proto.authzed.api.v0.CheckRequest.prototype.setAtRevision = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.CheckRequest} returns this + */ +proto.authzed.api.v0.CheckRequest.prototype.clearAtRevision = function() { + return this.setAtRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.CheckRequest.prototype.hasAtRevision = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ContentChangeCheckRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ContentChangeCheckRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ContentChangeCheckRequest.toObject = function(includeInstance, msg) { + var f, obj = { + testUserset: (f = msg.getTestUserset()) && authzed_api_v0_core_pb.ObjectAndRelation.toObject(includeInstance, f), + user: (f = msg.getUser()) && authzed_api_v0_core_pb.User.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ContentChangeCheckRequest; + return proto.authzed.api.v0.ContentChangeCheckRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ContentChangeCheckRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.ObjectAndRelation; + reader.readMessage(value,authzed_api_v0_core_pb.ObjectAndRelation.deserializeBinaryFromReader); + msg.setTestUserset(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.User; + reader.readMessage(value,authzed_api_v0_core_pb.User.deserializeBinaryFromReader); + msg.setUser(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ContentChangeCheckRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ContentChangeCheckRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ContentChangeCheckRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTestUserset(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getUser(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.User.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ObjectAndRelation test_userset = 1; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.getTestUserset = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.ObjectAndRelation, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} returns this +*/ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.setTestUserset = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} returns this + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.clearTestUserset = function() { + return this.setTestUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.hasTestUserset = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional User user = 2; + * @return {?proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.getUser = function() { + return /** @type{?proto.authzed.api.v0.User} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.User, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.User|undefined} value + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} returns this +*/ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.setUser = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ContentChangeCheckRequest} returns this + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.clearUser = function() { + return this.setUser(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ContentChangeCheckRequest.prototype.hasUser = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.CheckResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.CheckResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.CheckResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.CheckResponse.toObject = function(includeInstance, msg) { + var f, obj = { + isMember: jspb.Message.getBooleanFieldWithDefault(msg, 1, false), + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f), + membership: jspb.Message.getFieldWithDefault(msg, 3, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.CheckResponse} + */ +proto.authzed.api.v0.CheckResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.CheckResponse; + return proto.authzed.api.v0.CheckResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.CheckResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.CheckResponse} + */ +proto.authzed.api.v0.CheckResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIsMember(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + case 3: + var value = /** @type {!proto.authzed.api.v0.CheckResponse.Membership} */ (reader.readEnum()); + msg.setMembership(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.CheckResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.CheckResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.CheckResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.CheckResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIsMember(); + if (f) { + writer.writeBool( + 1, + f + ); + } + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } + f = message.getMembership(); + if (f !== 0.0) { + writer.writeEnum( + 3, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.CheckResponse.Membership = { + UNKNOWN: 0, + NOT_MEMBER: 1, + MEMBER: 2 +}; + +/** + * optional bool is_member = 1; + * @return {boolean} + */ +proto.authzed.api.v0.CheckResponse.prototype.getIsMember = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.authzed.api.v0.CheckResponse} returns this + */ +proto.authzed.api.v0.CheckResponse.prototype.setIsMember = function(value) { + return jspb.Message.setProto3BooleanField(this, 1, value); +}; + + +/** + * optional Zookie revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.CheckResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.CheckResponse} returns this +*/ +proto.authzed.api.v0.CheckResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.CheckResponse} returns this + */ +proto.authzed.api.v0.CheckResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.CheckResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Membership membership = 3; + * @return {!proto.authzed.api.v0.CheckResponse.Membership} + */ +proto.authzed.api.v0.CheckResponse.prototype.getMembership = function() { + return /** @type {!proto.authzed.api.v0.CheckResponse.Membership} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.CheckResponse.Membership} value + * @return {!proto.authzed.api.v0.CheckResponse} returns this + */ +proto.authzed.api.v0.CheckResponse.prototype.setMembership = function(value) { + return jspb.Message.setProto3EnumField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ExpandRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ExpandRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ExpandRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ExpandRequest.toObject = function(includeInstance, msg) { + var f, obj = { + userset: (f = msg.getUserset()) && authzed_api_v0_core_pb.ObjectAndRelation.toObject(includeInstance, f), + atRevision: (f = msg.getAtRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ExpandRequest} + */ +proto.authzed.api.v0.ExpandRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ExpandRequest; + return proto.authzed.api.v0.ExpandRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ExpandRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ExpandRequest} + */ +proto.authzed.api.v0.ExpandRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.ObjectAndRelation; + reader.readMessage(value,authzed_api_v0_core_pb.ObjectAndRelation.deserializeBinaryFromReader); + msg.setUserset(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setAtRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ExpandRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ExpandRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ExpandRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ExpandRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUserset(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getAtRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ObjectAndRelation userset = 1; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.ExpandRequest.prototype.getUserset = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.ObjectAndRelation, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.ExpandRequest} returns this +*/ +proto.authzed.api.v0.ExpandRequest.prototype.setUserset = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ExpandRequest} returns this + */ +proto.authzed.api.v0.ExpandRequest.prototype.clearUserset = function() { + return this.setUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ExpandRequest.prototype.hasUserset = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional Zookie at_revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ExpandRequest.prototype.getAtRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ExpandRequest} returns this +*/ +proto.authzed.api.v0.ExpandRequest.prototype.setAtRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ExpandRequest} returns this + */ +proto.authzed.api.v0.ExpandRequest.prototype.clearAtRevision = function() { + return this.setAtRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ExpandRequest.prototype.hasAtRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ExpandResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ExpandResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ExpandResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ExpandResponse.toObject = function(includeInstance, msg) { + var f, obj = { + treeNode: (f = msg.getTreeNode()) && authzed_api_v0_core_pb.RelationTupleTreeNode.toObject(includeInstance, f), + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ExpandResponse} + */ +proto.authzed.api.v0.ExpandResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ExpandResponse; + return proto.authzed.api.v0.ExpandResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ExpandResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ExpandResponse} + */ +proto.authzed.api.v0.ExpandResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationTupleTreeNode; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTupleTreeNode.deserializeBinaryFromReader); + msg.setTreeNode(value); + break; + case 3: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ExpandResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ExpandResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ExpandResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ExpandResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTreeNode(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.RelationTupleTreeNode.serializeBinaryToWriter + ); + } + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 3, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional RelationTupleTreeNode tree_node = 1; + * @return {?proto.authzed.api.v0.RelationTupleTreeNode} + */ +proto.authzed.api.v0.ExpandResponse.prototype.getTreeNode = function() { + return /** @type{?proto.authzed.api.v0.RelationTupleTreeNode} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.RelationTupleTreeNode, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.RelationTupleTreeNode|undefined} value + * @return {!proto.authzed.api.v0.ExpandResponse} returns this +*/ +proto.authzed.api.v0.ExpandResponse.prototype.setTreeNode = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ExpandResponse} returns this + */ +proto.authzed.api.v0.ExpandResponse.prototype.clearTreeNode = function() { + return this.setTreeNode(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ExpandResponse.prototype.hasTreeNode = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional Zookie revision = 3; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ExpandResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ExpandResponse} returns this +*/ +proto.authzed.api.v0.ExpandResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ExpandResponse} returns this + */ +proto.authzed.api.v0.ExpandResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ExpandResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.LookupRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.LookupRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.LookupRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupRequest.toObject = function(includeInstance, msg) { + var f, obj = { + objectRelation: (f = msg.getObjectRelation()) && authzed_api_v0_core_pb.RelationReference.toObject(includeInstance, f), + user: (f = msg.getUser()) && authzed_api_v0_core_pb.ObjectAndRelation.toObject(includeInstance, f), + atRevision: (f = msg.getAtRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f), + pageReference: jspb.Message.getFieldWithDefault(msg, 4, ""), + limit: jspb.Message.getFieldWithDefault(msg, 5, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.LookupRequest} + */ +proto.authzed.api.v0.LookupRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.LookupRequest; + return proto.authzed.api.v0.LookupRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.LookupRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.LookupRequest} + */ +proto.authzed.api.v0.LookupRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationReference; + reader.readMessage(value,authzed_api_v0_core_pb.RelationReference.deserializeBinaryFromReader); + msg.setObjectRelation(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.ObjectAndRelation; + reader.readMessage(value,authzed_api_v0_core_pb.ObjectAndRelation.deserializeBinaryFromReader); + msg.setUser(value); + break; + case 3: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setAtRevision(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setPageReference(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint32()); + msg.setLimit(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.LookupRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.LookupRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.LookupRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getObjectRelation(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.RelationReference.serializeBinaryToWriter + ); + } + f = message.getUser(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getAtRevision(); + if (f != null) { + writer.writeMessage( + 3, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } + f = message.getPageReference(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } + f = message.getLimit(); + if (f !== 0) { + writer.writeUint32( + 5, + f + ); + } +}; + + +/** + * optional RelationReference object_relation = 1; + * @return {?proto.authzed.api.v0.RelationReference} + */ +proto.authzed.api.v0.LookupRequest.prototype.getObjectRelation = function() { + return /** @type{?proto.authzed.api.v0.RelationReference} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.RelationReference, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.RelationReference|undefined} value + * @return {!proto.authzed.api.v0.LookupRequest} returns this +*/ +proto.authzed.api.v0.LookupRequest.prototype.setObjectRelation = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.LookupRequest} returns this + */ +proto.authzed.api.v0.LookupRequest.prototype.clearObjectRelation = function() { + return this.setObjectRelation(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.LookupRequest.prototype.hasObjectRelation = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ObjectAndRelation user = 2; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.LookupRequest.prototype.getUser = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.ObjectAndRelation, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.LookupRequest} returns this +*/ +proto.authzed.api.v0.LookupRequest.prototype.setUser = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.LookupRequest} returns this + */ +proto.authzed.api.v0.LookupRequest.prototype.clearUser = function() { + return this.setUser(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.LookupRequest.prototype.hasUser = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Zookie at_revision = 3; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.LookupRequest.prototype.getAtRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.LookupRequest} returns this +*/ +proto.authzed.api.v0.LookupRequest.prototype.setAtRevision = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.LookupRequest} returns this + */ +proto.authzed.api.v0.LookupRequest.prototype.clearAtRevision = function() { + return this.setAtRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.LookupRequest.prototype.hasAtRevision = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string page_reference = 4; + * @return {string} + */ +proto.authzed.api.v0.LookupRequest.prototype.getPageReference = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupRequest} returns this + */ +proto.authzed.api.v0.LookupRequest.prototype.setPageReference = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + +/** + * optional uint32 limit = 5; + * @return {number} + */ +proto.authzed.api.v0.LookupRequest.prototype.getLimit = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.authzed.api.v0.LookupRequest} returns this + */ +proto.authzed.api.v0.LookupRequest.prototype.setLimit = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.LookupResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.LookupResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.LookupResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.LookupResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupResponse.toObject = function(includeInstance, msg) { + var f, obj = { + resolvedObjectIdsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, + nextPageReference: jspb.Message.getFieldWithDefault(msg, 2, ""), + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.LookupResponse} + */ +proto.authzed.api.v0.LookupResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.LookupResponse; + return proto.authzed.api.v0.LookupResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.LookupResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.LookupResponse} + */ +proto.authzed.api.v0.LookupResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addResolvedObjectIds(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageReference(value); + break; + case 3: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.LookupResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.LookupResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.LookupResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getResolvedObjectIdsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } + f = message.getNextPageReference(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 3, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated string resolved_object_ids = 1; + * @return {!Array} + */ +proto.authzed.api.v0.LookupResponse.prototype.getResolvedObjectIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.LookupResponse} returns this + */ +proto.authzed.api.v0.LookupResponse.prototype.setResolvedObjectIdsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.LookupResponse} returns this + */ +proto.authzed.api.v0.LookupResponse.prototype.addResolvedObjectIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.LookupResponse} returns this + */ +proto.authzed.api.v0.LookupResponse.prototype.clearResolvedObjectIdsList = function() { + return this.setResolvedObjectIdsList([]); +}; + + +/** + * optional string next_page_reference = 2; + * @return {string} + */ +proto.authzed.api.v0.LookupResponse.prototype.getNextPageReference = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupResponse} returns this + */ +proto.authzed.api.v0.LookupResponse.prototype.setNextPageReference = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional Zookie revision = 3; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.LookupResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.LookupResponse} returns this +*/ +proto.authzed.api.v0.LookupResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.LookupResponse} returns this + */ +proto.authzed.api.v0.LookupResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.LookupResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/authzed/api/v0/core_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/core_pb.d.ts new file mode 100644 index 0000000..cee5da7 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/core_pb.d.ts @@ -0,0 +1,246 @@ +import * as jspb from 'google-protobuf' + +import * as validate_validate_pb from '../../../validate/validate_pb'; + + +export class RelationTuple extends jspb.Message { + getObjectAndRelation(): ObjectAndRelation | undefined; + setObjectAndRelation(value?: ObjectAndRelation): RelationTuple; + hasObjectAndRelation(): boolean; + clearObjectAndRelation(): RelationTuple; + + getUser(): User | undefined; + setUser(value?: User): RelationTuple; + hasUser(): boolean; + clearUser(): RelationTuple; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RelationTuple.AsObject; + static toObject(includeInstance: boolean, msg: RelationTuple): RelationTuple.AsObject; + static serializeBinaryToWriter(message: RelationTuple, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RelationTuple; + static deserializeBinaryFromReader(message: RelationTuple, reader: jspb.BinaryReader): RelationTuple; +} + +export namespace RelationTuple { + export type AsObject = { + objectAndRelation?: ObjectAndRelation.AsObject, + user?: User.AsObject, + } +} + +export class ObjectAndRelation extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): ObjectAndRelation; + + getObjectId(): string; + setObjectId(value: string): ObjectAndRelation; + + getRelation(): string; + setRelation(value: string): ObjectAndRelation; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ObjectAndRelation.AsObject; + static toObject(includeInstance: boolean, msg: ObjectAndRelation): ObjectAndRelation.AsObject; + static serializeBinaryToWriter(message: ObjectAndRelation, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ObjectAndRelation; + static deserializeBinaryFromReader(message: ObjectAndRelation, reader: jspb.BinaryReader): ObjectAndRelation; +} + +export namespace ObjectAndRelation { + export type AsObject = { + namespace: string, + objectId: string, + relation: string, + } +} + +export class RelationReference extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): RelationReference; + + getRelation(): string; + setRelation(value: string): RelationReference; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RelationReference.AsObject; + static toObject(includeInstance: boolean, msg: RelationReference): RelationReference.AsObject; + static serializeBinaryToWriter(message: RelationReference, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RelationReference; + static deserializeBinaryFromReader(message: RelationReference, reader: jspb.BinaryReader): RelationReference; +} + +export namespace RelationReference { + export type AsObject = { + namespace: string, + relation: string, + } +} + +export class User extends jspb.Message { + getUserset(): ObjectAndRelation | undefined; + setUserset(value?: ObjectAndRelation): User; + hasUserset(): boolean; + clearUserset(): User; + + getUserOneofCase(): User.UserOneofCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): User.AsObject; + static toObject(includeInstance: boolean, msg: User): User.AsObject; + static serializeBinaryToWriter(message: User, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): User; + static deserializeBinaryFromReader(message: User, reader: jspb.BinaryReader): User; +} + +export namespace User { + export type AsObject = { + userset?: ObjectAndRelation.AsObject, + } + + export enum UserOneofCase { + USER_ONEOF_NOT_SET = 0, + USERSET = 2, + } +} + +export class Zookie extends jspb.Message { + getToken(): string; + setToken(value: string): Zookie; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Zookie.AsObject; + static toObject(includeInstance: boolean, msg: Zookie): Zookie.AsObject; + static serializeBinaryToWriter(message: Zookie, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Zookie; + static deserializeBinaryFromReader(message: Zookie, reader: jspb.BinaryReader): Zookie; +} + +export namespace Zookie { + export type AsObject = { + token: string, + } +} + +export class RelationTupleUpdate extends jspb.Message { + getOperation(): RelationTupleUpdate.Operation; + setOperation(value: RelationTupleUpdate.Operation): RelationTupleUpdate; + + getTuple(): RelationTuple | undefined; + setTuple(value?: RelationTuple): RelationTupleUpdate; + hasTuple(): boolean; + clearTuple(): RelationTupleUpdate; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RelationTupleUpdate.AsObject; + static toObject(includeInstance: boolean, msg: RelationTupleUpdate): RelationTupleUpdate.AsObject; + static serializeBinaryToWriter(message: RelationTupleUpdate, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RelationTupleUpdate; + static deserializeBinaryFromReader(message: RelationTupleUpdate, reader: jspb.BinaryReader): RelationTupleUpdate; +} + +export namespace RelationTupleUpdate { + export type AsObject = { + operation: RelationTupleUpdate.Operation, + tuple?: RelationTuple.AsObject, + } + + export enum Operation { + UNKNOWN = 0, + CREATE = 1, + TOUCH = 2, + DELETE = 3, + } +} + +export class RelationTupleTreeNode extends jspb.Message { + getIntermediateNode(): SetOperationUserset | undefined; + setIntermediateNode(value?: SetOperationUserset): RelationTupleTreeNode; + hasIntermediateNode(): boolean; + clearIntermediateNode(): RelationTupleTreeNode; + + getLeafNode(): DirectUserset | undefined; + setLeafNode(value?: DirectUserset): RelationTupleTreeNode; + hasLeafNode(): boolean; + clearLeafNode(): RelationTupleTreeNode; + + getExpanded(): ObjectAndRelation | undefined; + setExpanded(value?: ObjectAndRelation): RelationTupleTreeNode; + hasExpanded(): boolean; + clearExpanded(): RelationTupleTreeNode; + + getNodeTypeCase(): RelationTupleTreeNode.NodeTypeCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RelationTupleTreeNode.AsObject; + static toObject(includeInstance: boolean, msg: RelationTupleTreeNode): RelationTupleTreeNode.AsObject; + static serializeBinaryToWriter(message: RelationTupleTreeNode, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RelationTupleTreeNode; + static deserializeBinaryFromReader(message: RelationTupleTreeNode, reader: jspb.BinaryReader): RelationTupleTreeNode; +} + +export namespace RelationTupleTreeNode { + export type AsObject = { + intermediateNode?: SetOperationUserset.AsObject, + leafNode?: DirectUserset.AsObject, + expanded?: ObjectAndRelation.AsObject, + } + + export enum NodeTypeCase { + NODE_TYPE_NOT_SET = 0, + INTERMEDIATE_NODE = 1, + LEAF_NODE = 2, + } +} + +export class SetOperationUserset extends jspb.Message { + getOperation(): SetOperationUserset.Operation; + setOperation(value: SetOperationUserset.Operation): SetOperationUserset; + + getChildNodesList(): Array; + setChildNodesList(value: Array): SetOperationUserset; + clearChildNodesList(): SetOperationUserset; + addChildNodes(value?: RelationTupleTreeNode, index?: number): RelationTupleTreeNode; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SetOperationUserset.AsObject; + static toObject(includeInstance: boolean, msg: SetOperationUserset): SetOperationUserset.AsObject; + static serializeBinaryToWriter(message: SetOperationUserset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SetOperationUserset; + static deserializeBinaryFromReader(message: SetOperationUserset, reader: jspb.BinaryReader): SetOperationUserset; +} + +export namespace SetOperationUserset { + export type AsObject = { + operation: SetOperationUserset.Operation, + childNodesList: Array, + } + + export enum Operation { + INVALID = 0, + UNION = 1, + INTERSECTION = 2, + EXCLUSION = 3, + } +} + +export class DirectUserset extends jspb.Message { + getUsersList(): Array; + setUsersList(value: Array): DirectUserset; + clearUsersList(): DirectUserset; + addUsers(value?: User, index?: number): User; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DirectUserset.AsObject; + static toObject(includeInstance: boolean, msg: DirectUserset): DirectUserset.AsObject; + static serializeBinaryToWriter(message: DirectUserset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DirectUserset; + static deserializeBinaryFromReader(message: DirectUserset, reader: jspb.BinaryReader): DirectUserset; +} + +export namespace DirectUserset { + export type AsObject = { + usersList: Array, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/core_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/core_pb.js new file mode 100644 index 0000000..0e22a8d --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/core_pb.js @@ -0,0 +1,1916 @@ +// source: authzed/api/v0/core.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var validate_validate_pb = require('../../../validate/validate_pb.js'); +goog.object.extend(proto, validate_validate_pb); +goog.exportSymbol('proto.authzed.api.v0.DirectUserset', null, global); +goog.exportSymbol('proto.authzed.api.v0.ObjectAndRelation', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationReference', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTuple', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleTreeNode', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleTreeNode.NodeTypeCase', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleUpdate', null, global); +goog.exportSymbol('proto.authzed.api.v0.RelationTupleUpdate.Operation', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperationUserset', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperationUserset.Operation', null, global); +goog.exportSymbol('proto.authzed.api.v0.User', null, global); +goog.exportSymbol('proto.authzed.api.v0.User.UserOneofCase', null, global); +goog.exportSymbol('proto.authzed.api.v0.Zookie', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RelationTuple = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.RelationTuple, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RelationTuple.displayName = 'proto.authzed.api.v0.RelationTuple'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ObjectAndRelation = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ObjectAndRelation, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ObjectAndRelation.displayName = 'proto.authzed.api.v0.ObjectAndRelation'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RelationReference = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.RelationReference, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RelationReference.displayName = 'proto.authzed.api.v0.RelationReference'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.User = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.authzed.api.v0.User.oneofGroups_); +}; +goog.inherits(proto.authzed.api.v0.User, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.User.displayName = 'proto.authzed.api.v0.User'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.Zookie = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.Zookie, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.Zookie.displayName = 'proto.authzed.api.v0.Zookie'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RelationTupleUpdate = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.RelationTupleUpdate, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RelationTupleUpdate.displayName = 'proto.authzed.api.v0.RelationTupleUpdate'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RelationTupleTreeNode = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.authzed.api.v0.RelationTupleTreeNode.oneofGroups_); +}; +goog.inherits(proto.authzed.api.v0.RelationTupleTreeNode, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RelationTupleTreeNode.displayName = 'proto.authzed.api.v0.RelationTupleTreeNode'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.SetOperationUserset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.SetOperationUserset.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.SetOperationUserset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.SetOperationUserset.displayName = 'proto.authzed.api.v0.SetOperationUserset'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.DirectUserset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.DirectUserset.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.DirectUserset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.DirectUserset.displayName = 'proto.authzed.api.v0.DirectUserset'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RelationTuple.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RelationTuple.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RelationTuple} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTuple.toObject = function(includeInstance, msg) { + var f, obj = { + objectAndRelation: (f = msg.getObjectAndRelation()) && proto.authzed.api.v0.ObjectAndRelation.toObject(includeInstance, f), + user: (f = msg.getUser()) && proto.authzed.api.v0.User.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.RelationTuple.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RelationTuple; + return proto.authzed.api.v0.RelationTuple.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RelationTuple} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.RelationTuple.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.ObjectAndRelation; + reader.readMessage(value,proto.authzed.api.v0.ObjectAndRelation.deserializeBinaryFromReader); + msg.setObjectAndRelation(value); + break; + case 2: + var value = new proto.authzed.api.v0.User; + reader.readMessage(value,proto.authzed.api.v0.User.deserializeBinaryFromReader); + msg.setUser(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RelationTuple.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RelationTuple.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RelationTuple} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTuple.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getObjectAndRelation(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.ObjectAndRelation.serializeBinaryToWriter + ); + } + f = message.getUser(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.User.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ObjectAndRelation object_and_relation = 1; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.RelationTuple.prototype.getObjectAndRelation = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.ObjectAndRelation, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.RelationTuple} returns this +*/ +proto.authzed.api.v0.RelationTuple.prototype.setObjectAndRelation = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTuple} returns this + */ +proto.authzed.api.v0.RelationTuple.prototype.clearObjectAndRelation = function() { + return this.setObjectAndRelation(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTuple.prototype.hasObjectAndRelation = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional User user = 2; + * @return {?proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.RelationTuple.prototype.getUser = function() { + return /** @type{?proto.authzed.api.v0.User} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.User, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.User|undefined} value + * @return {!proto.authzed.api.v0.RelationTuple} returns this +*/ +proto.authzed.api.v0.RelationTuple.prototype.setUser = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTuple} returns this + */ +proto.authzed.api.v0.RelationTuple.prototype.clearUser = function() { + return this.setUser(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTuple.prototype.hasUser = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ObjectAndRelation.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ObjectAndRelation} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ObjectAndRelation.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + objectId: jspb.Message.getFieldWithDefault(msg, 2, ""), + relation: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.ObjectAndRelation.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ObjectAndRelation; + return proto.authzed.api.v0.ObjectAndRelation.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ObjectAndRelation} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.ObjectAndRelation.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setObjectId(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ObjectAndRelation.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ObjectAndRelation} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ObjectAndRelation.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getObjectId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getRelation(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ObjectAndRelation} returns this + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string object_id = 2; + * @return {string} + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.getObjectId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ObjectAndRelation} returns this + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.setObjectId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string relation = 3; + * @return {string} + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ObjectAndRelation} returns this + */ +proto.authzed.api.v0.ObjectAndRelation.prototype.setRelation = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RelationReference.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RelationReference.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RelationReference} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationReference.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + relation: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RelationReference} + */ +proto.authzed.api.v0.RelationReference.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RelationReference; + return proto.authzed.api.v0.RelationReference.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RelationReference} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RelationReference} + */ +proto.authzed.api.v0.RelationReference.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RelationReference.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RelationReference.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RelationReference} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationReference.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRelation(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.RelationReference.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RelationReference} returns this + */ +proto.authzed.api.v0.RelationReference.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string relation = 3; + * @return {string} + */ +proto.authzed.api.v0.RelationReference.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RelationReference} returns this + */ +proto.authzed.api.v0.RelationReference.prototype.setRelation = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.authzed.api.v0.User.oneofGroups_ = [[2]]; + +/** + * @enum {number} + */ +proto.authzed.api.v0.User.UserOneofCase = { + USER_ONEOF_NOT_SET: 0, + USERSET: 2 +}; + +/** + * @return {proto.authzed.api.v0.User.UserOneofCase} + */ +proto.authzed.api.v0.User.prototype.getUserOneofCase = function() { + return /** @type {proto.authzed.api.v0.User.UserOneofCase} */(jspb.Message.computeOneofCase(this, proto.authzed.api.v0.User.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.User.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.User.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.User} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.User.toObject = function(includeInstance, msg) { + var f, obj = { + userset: (f = msg.getUserset()) && proto.authzed.api.v0.ObjectAndRelation.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.User.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.User; + return proto.authzed.api.v0.User.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.User} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.User.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 2: + var value = new proto.authzed.api.v0.ObjectAndRelation; + reader.readMessage(value,proto.authzed.api.v0.ObjectAndRelation.deserializeBinaryFromReader); + msg.setUserset(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.User.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.User.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.User} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.User.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUserset(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.ObjectAndRelation.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ObjectAndRelation userset = 2; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.User.prototype.getUserset = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.ObjectAndRelation, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.User} returns this +*/ +proto.authzed.api.v0.User.prototype.setUserset = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.authzed.api.v0.User.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.User} returns this + */ +proto.authzed.api.v0.User.prototype.clearUserset = function() { + return this.setUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.User.prototype.hasUserset = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.Zookie.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.Zookie.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.Zookie} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Zookie.toObject = function(includeInstance, msg) { + var f, obj = { + token: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.Zookie.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.Zookie; + return proto.authzed.api.v0.Zookie.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.Zookie} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.Zookie.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.Zookie.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.Zookie.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.Zookie} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Zookie.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getToken(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string token = 1; + * @return {string} + */ +proto.authzed.api.v0.Zookie.prototype.getToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.Zookie} returns this + */ +proto.authzed.api.v0.Zookie.prototype.setToken = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RelationTupleUpdate.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RelationTupleUpdate} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleUpdate.toObject = function(includeInstance, msg) { + var f, obj = { + operation: jspb.Message.getFieldWithDefault(msg, 1, 0), + tuple: (f = msg.getTuple()) && proto.authzed.api.v0.RelationTuple.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RelationTupleUpdate} + */ +proto.authzed.api.v0.RelationTupleUpdate.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RelationTupleUpdate; + return proto.authzed.api.v0.RelationTupleUpdate.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RelationTupleUpdate} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RelationTupleUpdate} + */ +proto.authzed.api.v0.RelationTupleUpdate.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.authzed.api.v0.RelationTupleUpdate.Operation} */ (reader.readEnum()); + msg.setOperation(value); + break; + case 2: + var value = new proto.authzed.api.v0.RelationTuple; + reader.readMessage(value,proto.authzed.api.v0.RelationTuple.deserializeBinaryFromReader); + msg.setTuple(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RelationTupleUpdate.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RelationTupleUpdate} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleUpdate.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOperation(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getTuple(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.RelationTuple.serializeBinaryToWriter + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.RelationTupleUpdate.Operation = { + UNKNOWN: 0, + CREATE: 1, + TOUCH: 2, + DELETE: 3 +}; + +/** + * optional Operation operation = 1; + * @return {!proto.authzed.api.v0.RelationTupleUpdate.Operation} + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.getOperation = function() { + return /** @type {!proto.authzed.api.v0.RelationTupleUpdate.Operation} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleUpdate.Operation} value + * @return {!proto.authzed.api.v0.RelationTupleUpdate} returns this + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.setOperation = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * optional RelationTuple tuple = 2; + * @return {?proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.getTuple = function() { + return /** @type{?proto.authzed.api.v0.RelationTuple} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.RelationTuple, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.RelationTuple|undefined} value + * @return {!proto.authzed.api.v0.RelationTupleUpdate} returns this +*/ +proto.authzed.api.v0.RelationTupleUpdate.prototype.setTuple = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTupleUpdate} returns this + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.clearTuple = function() { + return this.setTuple(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTupleUpdate.prototype.hasTuple = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.authzed.api.v0.RelationTupleTreeNode.oneofGroups_ = [[1,2]]; + +/** + * @enum {number} + */ +proto.authzed.api.v0.RelationTupleTreeNode.NodeTypeCase = { + NODE_TYPE_NOT_SET: 0, + INTERMEDIATE_NODE: 1, + LEAF_NODE: 2 +}; + +/** + * @return {proto.authzed.api.v0.RelationTupleTreeNode.NodeTypeCase} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.getNodeTypeCase = function() { + return /** @type {proto.authzed.api.v0.RelationTupleTreeNode.NodeTypeCase} */(jspb.Message.computeOneofCase(this, proto.authzed.api.v0.RelationTupleTreeNode.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RelationTupleTreeNode.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RelationTupleTreeNode} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleTreeNode.toObject = function(includeInstance, msg) { + var f, obj = { + intermediateNode: (f = msg.getIntermediateNode()) && proto.authzed.api.v0.SetOperationUserset.toObject(includeInstance, f), + leafNode: (f = msg.getLeafNode()) && proto.authzed.api.v0.DirectUserset.toObject(includeInstance, f), + expanded: (f = msg.getExpanded()) && proto.authzed.api.v0.ObjectAndRelation.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} + */ +proto.authzed.api.v0.RelationTupleTreeNode.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RelationTupleTreeNode; + return proto.authzed.api.v0.RelationTupleTreeNode.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RelationTupleTreeNode} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} + */ +proto.authzed.api.v0.RelationTupleTreeNode.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.SetOperationUserset; + reader.readMessage(value,proto.authzed.api.v0.SetOperationUserset.deserializeBinaryFromReader); + msg.setIntermediateNode(value); + break; + case 2: + var value = new proto.authzed.api.v0.DirectUserset; + reader.readMessage(value,proto.authzed.api.v0.DirectUserset.deserializeBinaryFromReader); + msg.setLeafNode(value); + break; + case 3: + var value = new proto.authzed.api.v0.ObjectAndRelation; + reader.readMessage(value,proto.authzed.api.v0.ObjectAndRelation.deserializeBinaryFromReader); + msg.setExpanded(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RelationTupleTreeNode.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RelationTupleTreeNode} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RelationTupleTreeNode.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIntermediateNode(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.SetOperationUserset.serializeBinaryToWriter + ); + } + f = message.getLeafNode(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.DirectUserset.serializeBinaryToWriter + ); + } + f = message.getExpanded(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.ObjectAndRelation.serializeBinaryToWriter + ); + } +}; + + +/** + * optional SetOperationUserset intermediate_node = 1; + * @return {?proto.authzed.api.v0.SetOperationUserset} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.getIntermediateNode = function() { + return /** @type{?proto.authzed.api.v0.SetOperationUserset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.SetOperationUserset, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.SetOperationUserset|undefined} value + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this +*/ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.setIntermediateNode = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.authzed.api.v0.RelationTupleTreeNode.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.clearIntermediateNode = function() { + return this.setIntermediateNode(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.hasIntermediateNode = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional DirectUserset leaf_node = 2; + * @return {?proto.authzed.api.v0.DirectUserset} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.getLeafNode = function() { + return /** @type{?proto.authzed.api.v0.DirectUserset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.DirectUserset, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.DirectUserset|undefined} value + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this +*/ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.setLeafNode = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.authzed.api.v0.RelationTupleTreeNode.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.clearLeafNode = function() { + return this.setLeafNode(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.hasLeafNode = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional ObjectAndRelation expanded = 3; + * @return {?proto.authzed.api.v0.ObjectAndRelation} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.getExpanded = function() { + return /** @type{?proto.authzed.api.v0.ObjectAndRelation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.ObjectAndRelation, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.ObjectAndRelation|undefined} value + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this +*/ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.setExpanded = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} returns this + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.clearExpanded = function() { + return this.setExpanded(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.RelationTupleTreeNode.prototype.hasExpanded = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.SetOperationUserset.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.SetOperationUserset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.SetOperationUserset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.SetOperationUserset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperationUserset.toObject = function(includeInstance, msg) { + var f, obj = { + operation: jspb.Message.getFieldWithDefault(msg, 1, 0), + childNodesList: jspb.Message.toObjectList(msg.getChildNodesList(), + proto.authzed.api.v0.RelationTupleTreeNode.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.SetOperationUserset} + */ +proto.authzed.api.v0.SetOperationUserset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.SetOperationUserset; + return proto.authzed.api.v0.SetOperationUserset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.SetOperationUserset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.SetOperationUserset} + */ +proto.authzed.api.v0.SetOperationUserset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.authzed.api.v0.SetOperationUserset.Operation} */ (reader.readEnum()); + msg.setOperation(value); + break; + case 2: + var value = new proto.authzed.api.v0.RelationTupleTreeNode; + reader.readMessage(value,proto.authzed.api.v0.RelationTupleTreeNode.deserializeBinaryFromReader); + msg.addChildNodes(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.SetOperationUserset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.SetOperationUserset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.SetOperationUserset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperationUserset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOperation(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getChildNodesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.authzed.api.v0.RelationTupleTreeNode.serializeBinaryToWriter + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.SetOperationUserset.Operation = { + INVALID: 0, + UNION: 1, + INTERSECTION: 2, + EXCLUSION: 3 +}; + +/** + * optional Operation operation = 1; + * @return {!proto.authzed.api.v0.SetOperationUserset.Operation} + */ +proto.authzed.api.v0.SetOperationUserset.prototype.getOperation = function() { + return /** @type {!proto.authzed.api.v0.SetOperationUserset.Operation} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.SetOperationUserset.Operation} value + * @return {!proto.authzed.api.v0.SetOperationUserset} returns this + */ +proto.authzed.api.v0.SetOperationUserset.prototype.setOperation = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * repeated RelationTupleTreeNode child_nodes = 2; + * @return {!Array} + */ +proto.authzed.api.v0.SetOperationUserset.prototype.getChildNodesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.RelationTupleTreeNode, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.SetOperationUserset} returns this +*/ +proto.authzed.api.v0.SetOperationUserset.prototype.setChildNodesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleTreeNode=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTupleTreeNode} + */ +proto.authzed.api.v0.SetOperationUserset.prototype.addChildNodes = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.RelationTupleTreeNode, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.SetOperationUserset} returns this + */ +proto.authzed.api.v0.SetOperationUserset.prototype.clearChildNodesList = function() { + return this.setChildNodesList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.DirectUserset.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.DirectUserset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.DirectUserset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.DirectUserset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DirectUserset.toObject = function(includeInstance, msg) { + var f, obj = { + usersList: jspb.Message.toObjectList(msg.getUsersList(), + proto.authzed.api.v0.User.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.DirectUserset} + */ +proto.authzed.api.v0.DirectUserset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.DirectUserset; + return proto.authzed.api.v0.DirectUserset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.DirectUserset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.DirectUserset} + */ +proto.authzed.api.v0.DirectUserset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.User; + reader.readMessage(value,proto.authzed.api.v0.User.deserializeBinaryFromReader); + msg.addUsers(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.DirectUserset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.DirectUserset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.DirectUserset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DirectUserset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUsersList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.User.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated User users = 1; + * @return {!Array} + */ +proto.authzed.api.v0.DirectUserset.prototype.getUsersList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.User, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.DirectUserset} returns this +*/ +proto.authzed.api.v0.DirectUserset.prototype.setUsersList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.User=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.User} + */ +proto.authzed.api.v0.DirectUserset.prototype.addUsers = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.User, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.DirectUserset} returns this + */ +proto.authzed.api.v0.DirectUserset.prototype.clearUsersList = function() { + return this.setUsersList([]); +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.d.ts new file mode 100644 index 0000000..a52c20d --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.d.ts @@ -0,0 +1,439 @@ +import * as jspb from 'google-protobuf' + +import * as authzed_api_v0_core_pb from '../../../authzed/api/v0/core_pb'; +import * as authzed_api_v0_namespace_pb from '../../../authzed/api/v0/namespace_pb'; + + +export class FormatSchemaRequest extends jspb.Message { + getSchema(): string; + setSchema(value: string): FormatSchemaRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FormatSchemaRequest.AsObject; + static toObject(includeInstance: boolean, msg: FormatSchemaRequest): FormatSchemaRequest.AsObject; + static serializeBinaryToWriter(message: FormatSchemaRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FormatSchemaRequest; + static deserializeBinaryFromReader(message: FormatSchemaRequest, reader: jspb.BinaryReader): FormatSchemaRequest; +} + +export namespace FormatSchemaRequest { + export type AsObject = { + schema: string, + } +} + +export class FormatSchemaResponse extends jspb.Message { + getError(): DeveloperError | undefined; + setError(value?: DeveloperError): FormatSchemaResponse; + hasError(): boolean; + clearError(): FormatSchemaResponse; + + getFormattedSchema(): string; + setFormattedSchema(value: string): FormatSchemaResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FormatSchemaResponse.AsObject; + static toObject(includeInstance: boolean, msg: FormatSchemaResponse): FormatSchemaResponse.AsObject; + static serializeBinaryToWriter(message: FormatSchemaResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FormatSchemaResponse; + static deserializeBinaryFromReader(message: FormatSchemaResponse, reader: jspb.BinaryReader): FormatSchemaResponse; +} + +export namespace FormatSchemaResponse { + export type AsObject = { + error?: DeveloperError.AsObject, + formattedSchema: string, + } +} + +export class UpgradeSchemaRequest extends jspb.Message { + getNamespaceConfigsList(): Array; + setNamespaceConfigsList(value: Array): UpgradeSchemaRequest; + clearNamespaceConfigsList(): UpgradeSchemaRequest; + addNamespaceConfigs(value: string, index?: number): UpgradeSchemaRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UpgradeSchemaRequest.AsObject; + static toObject(includeInstance: boolean, msg: UpgradeSchemaRequest): UpgradeSchemaRequest.AsObject; + static serializeBinaryToWriter(message: UpgradeSchemaRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UpgradeSchemaRequest; + static deserializeBinaryFromReader(message: UpgradeSchemaRequest, reader: jspb.BinaryReader): UpgradeSchemaRequest; +} + +export namespace UpgradeSchemaRequest { + export type AsObject = { + namespaceConfigsList: Array, + } +} + +export class UpgradeSchemaResponse extends jspb.Message { + getError(): DeveloperError | undefined; + setError(value?: DeveloperError): UpgradeSchemaResponse; + hasError(): boolean; + clearError(): UpgradeSchemaResponse; + + getUpgradedSchema(): string; + setUpgradedSchema(value: string): UpgradeSchemaResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UpgradeSchemaResponse.AsObject; + static toObject(includeInstance: boolean, msg: UpgradeSchemaResponse): UpgradeSchemaResponse.AsObject; + static serializeBinaryToWriter(message: UpgradeSchemaResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UpgradeSchemaResponse; + static deserializeBinaryFromReader(message: UpgradeSchemaResponse, reader: jspb.BinaryReader): UpgradeSchemaResponse; +} + +export namespace UpgradeSchemaResponse { + export type AsObject = { + error?: DeveloperError.AsObject, + upgradedSchema: string, + } +} + +export class ShareRequest extends jspb.Message { + getSchema(): string; + setSchema(value: string): ShareRequest; + + getRelationshipsYaml(): string; + setRelationshipsYaml(value: string): ShareRequest; + + getValidationYaml(): string; + setValidationYaml(value: string): ShareRequest; + + getAssertionsYaml(): string; + setAssertionsYaml(value: string): ShareRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ShareRequest.AsObject; + static toObject(includeInstance: boolean, msg: ShareRequest): ShareRequest.AsObject; + static serializeBinaryToWriter(message: ShareRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ShareRequest; + static deserializeBinaryFromReader(message: ShareRequest, reader: jspb.BinaryReader): ShareRequest; +} + +export namespace ShareRequest { + export type AsObject = { + schema: string, + relationshipsYaml: string, + validationYaml: string, + assertionsYaml: string, + } +} + +export class ShareResponse extends jspb.Message { + getShareReference(): string; + setShareReference(value: string): ShareResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ShareResponse.AsObject; + static toObject(includeInstance: boolean, msg: ShareResponse): ShareResponse.AsObject; + static serializeBinaryToWriter(message: ShareResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ShareResponse; + static deserializeBinaryFromReader(message: ShareResponse, reader: jspb.BinaryReader): ShareResponse; +} + +export namespace ShareResponse { + export type AsObject = { + shareReference: string, + } +} + +export class LookupShareRequest extends jspb.Message { + getShareReference(): string; + setShareReference(value: string): LookupShareRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LookupShareRequest.AsObject; + static toObject(includeInstance: boolean, msg: LookupShareRequest): LookupShareRequest.AsObject; + static serializeBinaryToWriter(message: LookupShareRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LookupShareRequest; + static deserializeBinaryFromReader(message: LookupShareRequest, reader: jspb.BinaryReader): LookupShareRequest; +} + +export namespace LookupShareRequest { + export type AsObject = { + shareReference: string, + } +} + +export class LookupShareResponse extends jspb.Message { + getStatus(): LookupShareResponse.LookupStatus; + setStatus(value: LookupShareResponse.LookupStatus): LookupShareResponse; + + getSchema(): string; + setSchema(value: string): LookupShareResponse; + + getRelationshipsYaml(): string; + setRelationshipsYaml(value: string): LookupShareResponse; + + getValidationYaml(): string; + setValidationYaml(value: string): LookupShareResponse; + + getAssertionsYaml(): string; + setAssertionsYaml(value: string): LookupShareResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LookupShareResponse.AsObject; + static toObject(includeInstance: boolean, msg: LookupShareResponse): LookupShareResponse.AsObject; + static serializeBinaryToWriter(message: LookupShareResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LookupShareResponse; + static deserializeBinaryFromReader(message: LookupShareResponse, reader: jspb.BinaryReader): LookupShareResponse; +} + +export namespace LookupShareResponse { + export type AsObject = { + status: LookupShareResponse.LookupStatus, + schema: string, + relationshipsYaml: string, + validationYaml: string, + assertionsYaml: string, + } + + export enum LookupStatus { + UNKNOWN_REFERENCE = 0, + FAILED_TO_LOOKUP = 1, + VALID_REFERENCE = 2, + UPGRADED_REFERENCE = 3, + } +} + +export class RequestContext extends jspb.Message { + getSchema(): string; + setSchema(value: string): RequestContext; + + getRelationshipsList(): Array; + setRelationshipsList(value: Array): RequestContext; + clearRelationshipsList(): RequestContext; + addRelationships(value?: authzed_api_v0_core_pb.RelationTuple, index?: number): authzed_api_v0_core_pb.RelationTuple; + + getLegacyNsConfigsList(): Array; + setLegacyNsConfigsList(value: Array): RequestContext; + clearLegacyNsConfigsList(): RequestContext; + addLegacyNsConfigs(value?: authzed_api_v0_namespace_pb.NamespaceDefinition, index?: number): authzed_api_v0_namespace_pb.NamespaceDefinition; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RequestContext.AsObject; + static toObject(includeInstance: boolean, msg: RequestContext): RequestContext.AsObject; + static serializeBinaryToWriter(message: RequestContext, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RequestContext; + static deserializeBinaryFromReader(message: RequestContext, reader: jspb.BinaryReader): RequestContext; +} + +export namespace RequestContext { + export type AsObject = { + schema: string, + relationshipsList: Array, + legacyNsConfigsList: Array, + } +} + +export class EditCheckRequest extends jspb.Message { + getContext(): RequestContext | undefined; + setContext(value?: RequestContext): EditCheckRequest; + hasContext(): boolean; + clearContext(): EditCheckRequest; + + getCheckRelationshipsList(): Array; + setCheckRelationshipsList(value: Array): EditCheckRequest; + clearCheckRelationshipsList(): EditCheckRequest; + addCheckRelationships(value?: authzed_api_v0_core_pb.RelationTuple, index?: number): authzed_api_v0_core_pb.RelationTuple; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): EditCheckRequest.AsObject; + static toObject(includeInstance: boolean, msg: EditCheckRequest): EditCheckRequest.AsObject; + static serializeBinaryToWriter(message: EditCheckRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): EditCheckRequest; + static deserializeBinaryFromReader(message: EditCheckRequest, reader: jspb.BinaryReader): EditCheckRequest; +} + +export namespace EditCheckRequest { + export type AsObject = { + context?: RequestContext.AsObject, + checkRelationshipsList: Array, + } +} + +export class EditCheckResult extends jspb.Message { + getRelationship(): authzed_api_v0_core_pb.RelationTuple | undefined; + setRelationship(value?: authzed_api_v0_core_pb.RelationTuple): EditCheckResult; + hasRelationship(): boolean; + clearRelationship(): EditCheckResult; + + getIsMember(): boolean; + setIsMember(value: boolean): EditCheckResult; + + getError(): DeveloperError | undefined; + setError(value?: DeveloperError): EditCheckResult; + hasError(): boolean; + clearError(): EditCheckResult; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): EditCheckResult.AsObject; + static toObject(includeInstance: boolean, msg: EditCheckResult): EditCheckResult.AsObject; + static serializeBinaryToWriter(message: EditCheckResult, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): EditCheckResult; + static deserializeBinaryFromReader(message: EditCheckResult, reader: jspb.BinaryReader): EditCheckResult; +} + +export namespace EditCheckResult { + export type AsObject = { + relationship?: authzed_api_v0_core_pb.RelationTuple.AsObject, + isMember: boolean, + error?: DeveloperError.AsObject, + } +} + +export class EditCheckResponse extends jspb.Message { + getRequestErrorsList(): Array; + setRequestErrorsList(value: Array): EditCheckResponse; + clearRequestErrorsList(): EditCheckResponse; + addRequestErrors(value?: DeveloperError, index?: number): DeveloperError; + + getCheckResultsList(): Array; + setCheckResultsList(value: Array): EditCheckResponse; + clearCheckResultsList(): EditCheckResponse; + addCheckResults(value?: EditCheckResult, index?: number): EditCheckResult; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): EditCheckResponse.AsObject; + static toObject(includeInstance: boolean, msg: EditCheckResponse): EditCheckResponse.AsObject; + static serializeBinaryToWriter(message: EditCheckResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): EditCheckResponse; + static deserializeBinaryFromReader(message: EditCheckResponse, reader: jspb.BinaryReader): EditCheckResponse; +} + +export namespace EditCheckResponse { + export type AsObject = { + requestErrorsList: Array, + checkResultsList: Array, + } +} + +export class ValidateRequest extends jspb.Message { + getContext(): RequestContext | undefined; + setContext(value?: RequestContext): ValidateRequest; + hasContext(): boolean; + clearContext(): ValidateRequest; + + getValidationYaml(): string; + setValidationYaml(value: string): ValidateRequest; + + getUpdateValidationYaml(): boolean; + setUpdateValidationYaml(value: boolean): ValidateRequest; + + getAssertionsYaml(): string; + setAssertionsYaml(value: string): ValidateRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ValidateRequest.AsObject; + static toObject(includeInstance: boolean, msg: ValidateRequest): ValidateRequest.AsObject; + static serializeBinaryToWriter(message: ValidateRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ValidateRequest; + static deserializeBinaryFromReader(message: ValidateRequest, reader: jspb.BinaryReader): ValidateRequest; +} + +export namespace ValidateRequest { + export type AsObject = { + context?: RequestContext.AsObject, + validationYaml: string, + updateValidationYaml: boolean, + assertionsYaml: string, + } +} + +export class ValidateResponse extends jspb.Message { + getRequestErrorsList(): Array; + setRequestErrorsList(value: Array): ValidateResponse; + clearRequestErrorsList(): ValidateResponse; + addRequestErrors(value?: DeveloperError, index?: number): DeveloperError; + + getValidationErrorsList(): Array; + setValidationErrorsList(value: Array): ValidateResponse; + clearValidationErrorsList(): ValidateResponse; + addValidationErrors(value?: DeveloperError, index?: number): DeveloperError; + + getUpdatedValidationYaml(): string; + setUpdatedValidationYaml(value: string): ValidateResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ValidateResponse.AsObject; + static toObject(includeInstance: boolean, msg: ValidateResponse): ValidateResponse.AsObject; + static serializeBinaryToWriter(message: ValidateResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ValidateResponse; + static deserializeBinaryFromReader(message: ValidateResponse, reader: jspb.BinaryReader): ValidateResponse; +} + +export namespace ValidateResponse { + export type AsObject = { + requestErrorsList: Array, + validationErrorsList: Array, + updatedValidationYaml: string, + } +} + +export class DeveloperError extends jspb.Message { + getMessage(): string; + setMessage(value: string): DeveloperError; + + getLine(): number; + setLine(value: number): DeveloperError; + + getColumn(): number; + setColumn(value: number): DeveloperError; + + getSource(): DeveloperError.Source; + setSource(value: DeveloperError.Source): DeveloperError; + + getKind(): DeveloperError.ErrorKind; + setKind(value: DeveloperError.ErrorKind): DeveloperError; + + getPathList(): Array; + setPathList(value: Array): DeveloperError; + clearPathList(): DeveloperError; + addPath(value: string, index?: number): DeveloperError; + + getContext(): string; + setContext(value: string): DeveloperError; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DeveloperError.AsObject; + static toObject(includeInstance: boolean, msg: DeveloperError): DeveloperError.AsObject; + static serializeBinaryToWriter(message: DeveloperError, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DeveloperError; + static deserializeBinaryFromReader(message: DeveloperError, reader: jspb.BinaryReader): DeveloperError; +} + +export namespace DeveloperError { + export type AsObject = { + message: string, + line: number, + column: number, + source: DeveloperError.Source, + kind: DeveloperError.ErrorKind, + pathList: Array, + context: string, + } + + export enum Source { + UNKNOWN_SOURCE = 0, + SCHEMA = 1, + RELATIONSHIP = 2, + VALIDATION_YAML = 3, + CHECK_WATCH = 4, + ASSERTION = 5, + } + + export enum ErrorKind { + UNKNOWN_KIND = 0, + PARSE_ERROR = 1, + SCHEMA_ISSUE = 2, + DUPLICATE_RELATIONSHIP = 3, + MISSING_EXPECTED_RELATIONSHIP = 4, + EXTRA_RELATIONSHIP_FOUND = 5, + UNKNOWN_OBJECT_TYPE = 6, + UNKNOWN_RELATION = 7, + MAXIMUM_RECURSION = 8, + ASSERTION_FAILED = 9, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.js new file mode 100644 index 0000000..50fbe23 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/developer_pb.js @@ -0,0 +1,3496 @@ +// source: authzed/api/v0/developer.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var authzed_api_v0_core_pb = require('../../../authzed/api/v0/core_pb.js'); +goog.object.extend(proto, authzed_api_v0_core_pb); +var authzed_api_v0_namespace_pb = require('../../../authzed/api/v0/namespace_pb.js'); +goog.object.extend(proto, authzed_api_v0_namespace_pb); +goog.exportSymbol('proto.authzed.api.v0.DeveloperError', null, global); +goog.exportSymbol('proto.authzed.api.v0.DeveloperError.ErrorKind', null, global); +goog.exportSymbol('proto.authzed.api.v0.DeveloperError.Source', null, global); +goog.exportSymbol('proto.authzed.api.v0.EditCheckRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.EditCheckResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.EditCheckResult', null, global); +goog.exportSymbol('proto.authzed.api.v0.FormatSchemaRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.FormatSchemaResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.LookupShareRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.LookupShareResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.LookupShareResponse.LookupStatus', null, global); +goog.exportSymbol('proto.authzed.api.v0.RequestContext', null, global); +goog.exportSymbol('proto.authzed.api.v0.ShareRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ShareResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.UpgradeSchemaRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.UpgradeSchemaResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.ValidateRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ValidateResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.FormatSchemaRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.FormatSchemaRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.FormatSchemaRequest.displayName = 'proto.authzed.api.v0.FormatSchemaRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.FormatSchemaResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.FormatSchemaResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.FormatSchemaResponse.displayName = 'proto.authzed.api.v0.FormatSchemaResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.UpgradeSchemaRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.UpgradeSchemaRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.UpgradeSchemaRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.UpgradeSchemaRequest.displayName = 'proto.authzed.api.v0.UpgradeSchemaRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.UpgradeSchemaResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.UpgradeSchemaResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.UpgradeSchemaResponse.displayName = 'proto.authzed.api.v0.UpgradeSchemaResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ShareRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ShareRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ShareRequest.displayName = 'proto.authzed.api.v0.ShareRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ShareResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ShareResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ShareResponse.displayName = 'proto.authzed.api.v0.ShareResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.LookupShareRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.LookupShareRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.LookupShareRequest.displayName = 'proto.authzed.api.v0.LookupShareRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.LookupShareResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.LookupShareResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.LookupShareResponse.displayName = 'proto.authzed.api.v0.LookupShareResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.RequestContext = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.RequestContext.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.RequestContext, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.RequestContext.displayName = 'proto.authzed.api.v0.RequestContext'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.EditCheckRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.EditCheckRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.EditCheckRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.EditCheckRequest.displayName = 'proto.authzed.api.v0.EditCheckRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.EditCheckResult = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.EditCheckResult, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.EditCheckResult.displayName = 'proto.authzed.api.v0.EditCheckResult'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.EditCheckResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.EditCheckResponse.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.EditCheckResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.EditCheckResponse.displayName = 'proto.authzed.api.v0.EditCheckResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ValidateRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ValidateRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ValidateRequest.displayName = 'proto.authzed.api.v0.ValidateRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ValidateResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.ValidateResponse.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.ValidateResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ValidateResponse.displayName = 'proto.authzed.api.v0.ValidateResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.DeveloperError = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.DeveloperError.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.DeveloperError, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.DeveloperError.displayName = 'proto.authzed.api.v0.DeveloperError'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.FormatSchemaRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.FormatSchemaRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.FormatSchemaRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.FormatSchemaRequest.toObject = function(includeInstance, msg) { + var f, obj = { + schema: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.FormatSchemaRequest} + */ +proto.authzed.api.v0.FormatSchemaRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.FormatSchemaRequest; + return proto.authzed.api.v0.FormatSchemaRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.FormatSchemaRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.FormatSchemaRequest} + */ +proto.authzed.api.v0.FormatSchemaRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSchema(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.FormatSchemaRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.FormatSchemaRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.FormatSchemaRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.FormatSchemaRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSchema(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string schema = 1; + * @return {string} + */ +proto.authzed.api.v0.FormatSchemaRequest.prototype.getSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.FormatSchemaRequest} returns this + */ +proto.authzed.api.v0.FormatSchemaRequest.prototype.setSchema = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.FormatSchemaResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.FormatSchemaResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.FormatSchemaResponse.toObject = function(includeInstance, msg) { + var f, obj = { + error: (f = msg.getError()) && proto.authzed.api.v0.DeveloperError.toObject(includeInstance, f), + formattedSchema: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.FormatSchemaResponse} + */ +proto.authzed.api.v0.FormatSchemaResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.FormatSchemaResponse; + return proto.authzed.api.v0.FormatSchemaResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.FormatSchemaResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.FormatSchemaResponse} + */ +proto.authzed.api.v0.FormatSchemaResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.setError(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setFormattedSchema(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.FormatSchemaResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.FormatSchemaResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.FormatSchemaResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getError(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } + f = message.getFormattedSchema(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional DeveloperError error = 1; + * @return {?proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.getError = function() { + return /** @type{?proto.authzed.api.v0.DeveloperError} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.DeveloperError, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.DeveloperError|undefined} value + * @return {!proto.authzed.api.v0.FormatSchemaResponse} returns this +*/ +proto.authzed.api.v0.FormatSchemaResponse.prototype.setError = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.FormatSchemaResponse} returns this + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.clearError = function() { + return this.setError(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.hasError = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string formatted_schema = 2; + * @return {string} + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.getFormattedSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.FormatSchemaResponse} returns this + */ +proto.authzed.api.v0.FormatSchemaResponse.prototype.setFormattedSchema = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.UpgradeSchemaRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.UpgradeSchemaRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.UpgradeSchemaRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UpgradeSchemaRequest.toObject = function(includeInstance, msg) { + var f, obj = { + namespaceConfigsList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.UpgradeSchemaRequest} + */ +proto.authzed.api.v0.UpgradeSchemaRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.UpgradeSchemaRequest; + return proto.authzed.api.v0.UpgradeSchemaRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.UpgradeSchemaRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.UpgradeSchemaRequest} + */ +proto.authzed.api.v0.UpgradeSchemaRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addNamespaceConfigs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.UpgradeSchemaRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.UpgradeSchemaRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UpgradeSchemaRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespaceConfigsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } +}; + + +/** + * repeated string namespace_configs = 1; + * @return {!Array} + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.getNamespaceConfigsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.UpgradeSchemaRequest} returns this + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.setNamespaceConfigsList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.UpgradeSchemaRequest} returns this + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.addNamespaceConfigs = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.UpgradeSchemaRequest} returns this + */ +proto.authzed.api.v0.UpgradeSchemaRequest.prototype.clearNamespaceConfigsList = function() { + return this.setNamespaceConfigsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.UpgradeSchemaResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.UpgradeSchemaResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UpgradeSchemaResponse.toObject = function(includeInstance, msg) { + var f, obj = { + error: (f = msg.getError()) && proto.authzed.api.v0.DeveloperError.toObject(includeInstance, f), + upgradedSchema: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.UpgradeSchemaResponse} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.UpgradeSchemaResponse; + return proto.authzed.api.v0.UpgradeSchemaResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.UpgradeSchemaResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.UpgradeSchemaResponse} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.setError(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setUpgradedSchema(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.UpgradeSchemaResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.UpgradeSchemaResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UpgradeSchemaResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getError(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } + f = message.getUpgradedSchema(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional DeveloperError error = 1; + * @return {?proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.getError = function() { + return /** @type{?proto.authzed.api.v0.DeveloperError} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.DeveloperError, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.DeveloperError|undefined} value + * @return {!proto.authzed.api.v0.UpgradeSchemaResponse} returns this +*/ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.setError = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.UpgradeSchemaResponse} returns this + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.clearError = function() { + return this.setError(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.hasError = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string upgraded_schema = 2; + * @return {string} + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.getUpgradedSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.UpgradeSchemaResponse} returns this + */ +proto.authzed.api.v0.UpgradeSchemaResponse.prototype.setUpgradedSchema = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ShareRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ShareRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ShareRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ShareRequest.toObject = function(includeInstance, msg) { + var f, obj = { + schema: jspb.Message.getFieldWithDefault(msg, 1, ""), + relationshipsYaml: jspb.Message.getFieldWithDefault(msg, 2, ""), + validationYaml: jspb.Message.getFieldWithDefault(msg, 3, ""), + assertionsYaml: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ShareRequest} + */ +proto.authzed.api.v0.ShareRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ShareRequest; + return proto.authzed.api.v0.ShareRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ShareRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ShareRequest} + */ +proto.authzed.api.v0.ShareRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSchema(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setRelationshipsYaml(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setValidationYaml(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setAssertionsYaml(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ShareRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ShareRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ShareRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ShareRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSchema(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRelationshipsYaml(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getValidationYaml(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getAssertionsYaml(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } +}; + + +/** + * optional string schema = 1; + * @return {string} + */ +proto.authzed.api.v0.ShareRequest.prototype.getSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ShareRequest} returns this + */ +proto.authzed.api.v0.ShareRequest.prototype.setSchema = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string relationships_yaml = 2; + * @return {string} + */ +proto.authzed.api.v0.ShareRequest.prototype.getRelationshipsYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ShareRequest} returns this + */ +proto.authzed.api.v0.ShareRequest.prototype.setRelationshipsYaml = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string validation_yaml = 3; + * @return {string} + */ +proto.authzed.api.v0.ShareRequest.prototype.getValidationYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ShareRequest} returns this + */ +proto.authzed.api.v0.ShareRequest.prototype.setValidationYaml = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional string assertions_yaml = 4; + * @return {string} + */ +proto.authzed.api.v0.ShareRequest.prototype.getAssertionsYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ShareRequest} returns this + */ +proto.authzed.api.v0.ShareRequest.prototype.setAssertionsYaml = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ShareResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ShareResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ShareResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ShareResponse.toObject = function(includeInstance, msg) { + var f, obj = { + shareReference: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ShareResponse} + */ +proto.authzed.api.v0.ShareResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ShareResponse; + return proto.authzed.api.v0.ShareResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ShareResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ShareResponse} + */ +proto.authzed.api.v0.ShareResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setShareReference(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ShareResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ShareResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ShareResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ShareResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getShareReference(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string share_reference = 1; + * @return {string} + */ +proto.authzed.api.v0.ShareResponse.prototype.getShareReference = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ShareResponse} returns this + */ +proto.authzed.api.v0.ShareResponse.prototype.setShareReference = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.LookupShareRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.LookupShareRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.LookupShareRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupShareRequest.toObject = function(includeInstance, msg) { + var f, obj = { + shareReference: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.LookupShareRequest} + */ +proto.authzed.api.v0.LookupShareRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.LookupShareRequest; + return proto.authzed.api.v0.LookupShareRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.LookupShareRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.LookupShareRequest} + */ +proto.authzed.api.v0.LookupShareRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setShareReference(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.LookupShareRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.LookupShareRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.LookupShareRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupShareRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getShareReference(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string share_reference = 1; + * @return {string} + */ +proto.authzed.api.v0.LookupShareRequest.prototype.getShareReference = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupShareRequest} returns this + */ +proto.authzed.api.v0.LookupShareRequest.prototype.setShareReference = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.LookupShareResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.LookupShareResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupShareResponse.toObject = function(includeInstance, msg) { + var f, obj = { + status: jspb.Message.getFieldWithDefault(msg, 1, 0), + schema: jspb.Message.getFieldWithDefault(msg, 2, ""), + relationshipsYaml: jspb.Message.getFieldWithDefault(msg, 3, ""), + validationYaml: jspb.Message.getFieldWithDefault(msg, 4, ""), + assertionsYaml: jspb.Message.getFieldWithDefault(msg, 5, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.LookupShareResponse} + */ +proto.authzed.api.v0.LookupShareResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.LookupShareResponse; + return proto.authzed.api.v0.LookupShareResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.LookupShareResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.LookupShareResponse} + */ +proto.authzed.api.v0.LookupShareResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.authzed.api.v0.LookupShareResponse.LookupStatus} */ (reader.readEnum()); + msg.setStatus(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSchema(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setRelationshipsYaml(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setValidationYaml(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setAssertionsYaml(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.LookupShareResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.LookupShareResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.LookupShareResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getStatus(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getSchema(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getRelationshipsYaml(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getValidationYaml(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } + f = message.getAssertionsYaml(); + if (f.length > 0) { + writer.writeString( + 5, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.LookupShareResponse.LookupStatus = { + UNKNOWN_REFERENCE: 0, + FAILED_TO_LOOKUP: 1, + VALID_REFERENCE: 2, + UPGRADED_REFERENCE: 3 +}; + +/** + * optional LookupStatus status = 1; + * @return {!proto.authzed.api.v0.LookupShareResponse.LookupStatus} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.getStatus = function() { + return /** @type {!proto.authzed.api.v0.LookupShareResponse.LookupStatus} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.LookupShareResponse.LookupStatus} value + * @return {!proto.authzed.api.v0.LookupShareResponse} returns this + */ +proto.authzed.api.v0.LookupShareResponse.prototype.setStatus = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * optional string schema = 2; + * @return {string} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.getSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupShareResponse} returns this + */ +proto.authzed.api.v0.LookupShareResponse.prototype.setSchema = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string relationships_yaml = 3; + * @return {string} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.getRelationshipsYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupShareResponse} returns this + */ +proto.authzed.api.v0.LookupShareResponse.prototype.setRelationshipsYaml = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional string validation_yaml = 4; + * @return {string} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.getValidationYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupShareResponse} returns this + */ +proto.authzed.api.v0.LookupShareResponse.prototype.setValidationYaml = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + +/** + * optional string assertions_yaml = 5; + * @return {string} + */ +proto.authzed.api.v0.LookupShareResponse.prototype.getAssertionsYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.LookupShareResponse} returns this + */ +proto.authzed.api.v0.LookupShareResponse.prototype.setAssertionsYaml = function(value) { + return jspb.Message.setProto3StringField(this, 5, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.RequestContext.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.RequestContext.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.RequestContext.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.RequestContext} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RequestContext.toObject = function(includeInstance, msg) { + var f, obj = { + schema: jspb.Message.getFieldWithDefault(msg, 1, ""), + relationshipsList: jspb.Message.toObjectList(msg.getRelationshipsList(), + authzed_api_v0_core_pb.RelationTuple.toObject, includeInstance), + legacyNsConfigsList: jspb.Message.toObjectList(msg.getLegacyNsConfigsList(), + authzed_api_v0_namespace_pb.NamespaceDefinition.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.RequestContext} + */ +proto.authzed.api.v0.RequestContext.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.RequestContext; + return proto.authzed.api.v0.RequestContext.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.RequestContext} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.RequestContext} + */ +proto.authzed.api.v0.RequestContext.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSchema(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.RelationTuple; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTuple.deserializeBinaryFromReader); + msg.addRelationships(value); + break; + case 3: + var value = new authzed_api_v0_namespace_pb.NamespaceDefinition; + reader.readMessage(value,authzed_api_v0_namespace_pb.NamespaceDefinition.deserializeBinaryFromReader); + msg.addLegacyNsConfigs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.RequestContext.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.RequestContext.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.RequestContext} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.RequestContext.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSchema(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRelationshipsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + authzed_api_v0_core_pb.RelationTuple.serializeBinaryToWriter + ); + } + f = message.getLegacyNsConfigsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 3, + f, + authzed_api_v0_namespace_pb.NamespaceDefinition.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string schema = 1; + * @return {string} + */ +proto.authzed.api.v0.RequestContext.prototype.getSchema = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.RequestContext} returns this + */ +proto.authzed.api.v0.RequestContext.prototype.setSchema = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * repeated RelationTuple relationships = 2; + * @return {!Array} + */ +proto.authzed.api.v0.RequestContext.prototype.getRelationshipsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTuple, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.RequestContext} returns this +*/ +proto.authzed.api.v0.RequestContext.prototype.setRelationshipsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTuple=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.RequestContext.prototype.addRelationships = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.RelationTuple, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.RequestContext} returns this + */ +proto.authzed.api.v0.RequestContext.prototype.clearRelationshipsList = function() { + return this.setRelationshipsList([]); +}; + + +/** + * repeated NamespaceDefinition legacy_ns_configs = 3; + * @return {!Array} + */ +proto.authzed.api.v0.RequestContext.prototype.getLegacyNsConfigsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_namespace_pb.NamespaceDefinition, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.RequestContext} returns this +*/ +proto.authzed.api.v0.RequestContext.prototype.setLegacyNsConfigsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 3, value); +}; + + +/** + * @param {!proto.authzed.api.v0.NamespaceDefinition=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.NamespaceDefinition} + */ +proto.authzed.api.v0.RequestContext.prototype.addLegacyNsConfigs = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.authzed.api.v0.NamespaceDefinition, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.RequestContext} returns this + */ +proto.authzed.api.v0.RequestContext.prototype.clearLegacyNsConfigsList = function() { + return this.setLegacyNsConfigsList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.EditCheckRequest.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.EditCheckRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.EditCheckRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckRequest.toObject = function(includeInstance, msg) { + var f, obj = { + context: (f = msg.getContext()) && proto.authzed.api.v0.RequestContext.toObject(includeInstance, f), + checkRelationshipsList: jspb.Message.toObjectList(msg.getCheckRelationshipsList(), + authzed_api_v0_core_pb.RelationTuple.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.EditCheckRequest} + */ +proto.authzed.api.v0.EditCheckRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.EditCheckRequest; + return proto.authzed.api.v0.EditCheckRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.EditCheckRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.EditCheckRequest} + */ +proto.authzed.api.v0.EditCheckRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.RequestContext; + reader.readMessage(value,proto.authzed.api.v0.RequestContext.deserializeBinaryFromReader); + msg.setContext(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.RelationTuple; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTuple.deserializeBinaryFromReader); + msg.addCheckRelationships(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.EditCheckRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.EditCheckRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContext(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.RequestContext.serializeBinaryToWriter + ); + } + f = message.getCheckRelationshipsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + authzed_api_v0_core_pb.RelationTuple.serializeBinaryToWriter + ); + } +}; + + +/** + * optional RequestContext context = 1; + * @return {?proto.authzed.api.v0.RequestContext} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.getContext = function() { + return /** @type{?proto.authzed.api.v0.RequestContext} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.RequestContext, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.RequestContext|undefined} value + * @return {!proto.authzed.api.v0.EditCheckRequest} returns this +*/ +proto.authzed.api.v0.EditCheckRequest.prototype.setContext = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.EditCheckRequest} returns this + */ +proto.authzed.api.v0.EditCheckRequest.prototype.clearContext = function() { + return this.setContext(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.hasContext = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated RelationTuple check_relationships = 2; + * @return {!Array} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.getCheckRelationshipsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTuple, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.EditCheckRequest} returns this +*/ +proto.authzed.api.v0.EditCheckRequest.prototype.setCheckRelationshipsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTuple=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.EditCheckRequest.prototype.addCheckRelationships = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.RelationTuple, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.EditCheckRequest} returns this + */ +proto.authzed.api.v0.EditCheckRequest.prototype.clearCheckRelationshipsList = function() { + return this.setCheckRelationshipsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.EditCheckResult.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.EditCheckResult.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.EditCheckResult} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckResult.toObject = function(includeInstance, msg) { + var f, obj = { + relationship: (f = msg.getRelationship()) && authzed_api_v0_core_pb.RelationTuple.toObject(includeInstance, f), + isMember: jspb.Message.getBooleanFieldWithDefault(msg, 2, false), + error: (f = msg.getError()) && proto.authzed.api.v0.DeveloperError.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.EditCheckResult} + */ +proto.authzed.api.v0.EditCheckResult.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.EditCheckResult; + return proto.authzed.api.v0.EditCheckResult.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.EditCheckResult} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.EditCheckResult} + */ +proto.authzed.api.v0.EditCheckResult.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationTuple; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTuple.deserializeBinaryFromReader); + msg.setRelationship(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIsMember(value); + break; + case 3: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.setError(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.EditCheckResult.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.EditCheckResult.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.EditCheckResult} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckResult.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRelationship(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.RelationTuple.serializeBinaryToWriter + ); + } + f = message.getIsMember(); + if (f) { + writer.writeBool( + 2, + f + ); + } + f = message.getError(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } +}; + + +/** + * optional RelationTuple relationship = 1; + * @return {?proto.authzed.api.v0.RelationTuple} + */ +proto.authzed.api.v0.EditCheckResult.prototype.getRelationship = function() { + return /** @type{?proto.authzed.api.v0.RelationTuple} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.RelationTuple, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.RelationTuple|undefined} value + * @return {!proto.authzed.api.v0.EditCheckResult} returns this +*/ +proto.authzed.api.v0.EditCheckResult.prototype.setRelationship = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.EditCheckResult} returns this + */ +proto.authzed.api.v0.EditCheckResult.prototype.clearRelationship = function() { + return this.setRelationship(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.EditCheckResult.prototype.hasRelationship = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool is_member = 2; + * @return {boolean} + */ +proto.authzed.api.v0.EditCheckResult.prototype.getIsMember = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.authzed.api.v0.EditCheckResult} returns this + */ +proto.authzed.api.v0.EditCheckResult.prototype.setIsMember = function(value) { + return jspb.Message.setProto3BooleanField(this, 2, value); +}; + + +/** + * optional DeveloperError error = 3; + * @return {?proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.EditCheckResult.prototype.getError = function() { + return /** @type{?proto.authzed.api.v0.DeveloperError} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.DeveloperError, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.DeveloperError|undefined} value + * @return {!proto.authzed.api.v0.EditCheckResult} returns this +*/ +proto.authzed.api.v0.EditCheckResult.prototype.setError = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.EditCheckResult} returns this + */ +proto.authzed.api.v0.EditCheckResult.prototype.clearError = function() { + return this.setError(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.EditCheckResult.prototype.hasError = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.EditCheckResponse.repeatedFields_ = [1,2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.EditCheckResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.EditCheckResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckResponse.toObject = function(includeInstance, msg) { + var f, obj = { + requestErrorsList: jspb.Message.toObjectList(msg.getRequestErrorsList(), + proto.authzed.api.v0.DeveloperError.toObject, includeInstance), + checkResultsList: jspb.Message.toObjectList(msg.getCheckResultsList(), + proto.authzed.api.v0.EditCheckResult.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.EditCheckResponse} + */ +proto.authzed.api.v0.EditCheckResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.EditCheckResponse; + return proto.authzed.api.v0.EditCheckResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.EditCheckResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.EditCheckResponse} + */ +proto.authzed.api.v0.EditCheckResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.addRequestErrors(value); + break; + case 2: + var value = new proto.authzed.api.v0.EditCheckResult; + reader.readMessage(value,proto.authzed.api.v0.EditCheckResult.deserializeBinaryFromReader); + msg.addCheckResults(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.EditCheckResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.EditCheckResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.EditCheckResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRequestErrorsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } + f = message.getCheckResultsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.authzed.api.v0.EditCheckResult.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated DeveloperError request_errors = 1; + * @return {!Array} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.getRequestErrorsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.DeveloperError, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.EditCheckResponse} returns this +*/ +proto.authzed.api.v0.EditCheckResponse.prototype.setRequestErrorsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.DeveloperError=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.addRequestErrors = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.DeveloperError, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.EditCheckResponse} returns this + */ +proto.authzed.api.v0.EditCheckResponse.prototype.clearRequestErrorsList = function() { + return this.setRequestErrorsList([]); +}; + + +/** + * repeated EditCheckResult check_results = 2; + * @return {!Array} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.getCheckResultsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.EditCheckResult, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.EditCheckResponse} returns this +*/ +proto.authzed.api.v0.EditCheckResponse.prototype.setCheckResultsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.EditCheckResult=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.EditCheckResult} + */ +proto.authzed.api.v0.EditCheckResponse.prototype.addCheckResults = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.EditCheckResult, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.EditCheckResponse} returns this + */ +proto.authzed.api.v0.EditCheckResponse.prototype.clearCheckResultsList = function() { + return this.setCheckResultsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ValidateRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ValidateRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ValidateRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ValidateRequest.toObject = function(includeInstance, msg) { + var f, obj = { + context: (f = msg.getContext()) && proto.authzed.api.v0.RequestContext.toObject(includeInstance, f), + validationYaml: jspb.Message.getFieldWithDefault(msg, 3, ""), + updateValidationYaml: jspb.Message.getBooleanFieldWithDefault(msg, 4, false), + assertionsYaml: jspb.Message.getFieldWithDefault(msg, 5, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ValidateRequest} + */ +proto.authzed.api.v0.ValidateRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ValidateRequest; + return proto.authzed.api.v0.ValidateRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ValidateRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ValidateRequest} + */ +proto.authzed.api.v0.ValidateRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.RequestContext; + reader.readMessage(value,proto.authzed.api.v0.RequestContext.deserializeBinaryFromReader); + msg.setContext(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setValidationYaml(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setUpdateValidationYaml(value); + break; + case 5: + var value = /** @type {string} */ (reader.readString()); + msg.setAssertionsYaml(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ValidateRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ValidateRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ValidateRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ValidateRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getContext(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.RequestContext.serializeBinaryToWriter + ); + } + f = message.getValidationYaml(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getUpdateValidationYaml(); + if (f) { + writer.writeBool( + 4, + f + ); + } + f = message.getAssertionsYaml(); + if (f.length > 0) { + writer.writeString( + 5, + f + ); + } +}; + + +/** + * optional RequestContext context = 1; + * @return {?proto.authzed.api.v0.RequestContext} + */ +proto.authzed.api.v0.ValidateRequest.prototype.getContext = function() { + return /** @type{?proto.authzed.api.v0.RequestContext} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.RequestContext, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.RequestContext|undefined} value + * @return {!proto.authzed.api.v0.ValidateRequest} returns this +*/ +proto.authzed.api.v0.ValidateRequest.prototype.setContext = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ValidateRequest} returns this + */ +proto.authzed.api.v0.ValidateRequest.prototype.clearContext = function() { + return this.setContext(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ValidateRequest.prototype.hasContext = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string validation_yaml = 3; + * @return {string} + */ +proto.authzed.api.v0.ValidateRequest.prototype.getValidationYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ValidateRequest} returns this + */ +proto.authzed.api.v0.ValidateRequest.prototype.setValidationYaml = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional bool update_validation_yaml = 4; + * @return {boolean} + */ +proto.authzed.api.v0.ValidateRequest.prototype.getUpdateValidationYaml = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.authzed.api.v0.ValidateRequest} returns this + */ +proto.authzed.api.v0.ValidateRequest.prototype.setUpdateValidationYaml = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + +/** + * optional string assertions_yaml = 5; + * @return {string} + */ +proto.authzed.api.v0.ValidateRequest.prototype.getAssertionsYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ValidateRequest} returns this + */ +proto.authzed.api.v0.ValidateRequest.prototype.setAssertionsYaml = function(value) { + return jspb.Message.setProto3StringField(this, 5, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.ValidateResponse.repeatedFields_ = [1,2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ValidateResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ValidateResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ValidateResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ValidateResponse.toObject = function(includeInstance, msg) { + var f, obj = { + requestErrorsList: jspb.Message.toObjectList(msg.getRequestErrorsList(), + proto.authzed.api.v0.DeveloperError.toObject, includeInstance), + validationErrorsList: jspb.Message.toObjectList(msg.getValidationErrorsList(), + proto.authzed.api.v0.DeveloperError.toObject, includeInstance), + updatedValidationYaml: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ValidateResponse} + */ +proto.authzed.api.v0.ValidateResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ValidateResponse; + return proto.authzed.api.v0.ValidateResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ValidateResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ValidateResponse} + */ +proto.authzed.api.v0.ValidateResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.addRequestErrors(value); + break; + case 2: + var value = new proto.authzed.api.v0.DeveloperError; + reader.readMessage(value,proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader); + msg.addValidationErrors(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUpdatedValidationYaml(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ValidateResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ValidateResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ValidateResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ValidateResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRequestErrorsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } + f = message.getValidationErrorsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter + ); + } + f = message.getUpdatedValidationYaml(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * repeated DeveloperError request_errors = 1; + * @return {!Array} + */ +proto.authzed.api.v0.ValidateResponse.prototype.getRequestErrorsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.DeveloperError, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.ValidateResponse} returns this +*/ +proto.authzed.api.v0.ValidateResponse.prototype.setRequestErrorsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.DeveloperError=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.ValidateResponse.prototype.addRequestErrors = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.DeveloperError, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.ValidateResponse} returns this + */ +proto.authzed.api.v0.ValidateResponse.prototype.clearRequestErrorsList = function() { + return this.setRequestErrorsList([]); +}; + + +/** + * repeated DeveloperError validation_errors = 2; + * @return {!Array} + */ +proto.authzed.api.v0.ValidateResponse.prototype.getValidationErrorsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.DeveloperError, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.ValidateResponse} returns this +*/ +proto.authzed.api.v0.ValidateResponse.prototype.setValidationErrorsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.DeveloperError=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.ValidateResponse.prototype.addValidationErrors = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.DeveloperError, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.ValidateResponse} returns this + */ +proto.authzed.api.v0.ValidateResponse.prototype.clearValidationErrorsList = function() { + return this.setValidationErrorsList([]); +}; + + +/** + * optional string updated_validation_yaml = 3; + * @return {string} + */ +proto.authzed.api.v0.ValidateResponse.prototype.getUpdatedValidationYaml = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ValidateResponse} returns this + */ +proto.authzed.api.v0.ValidateResponse.prototype.setUpdatedValidationYaml = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.DeveloperError.repeatedFields_ = [6]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.DeveloperError.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.DeveloperError.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.DeveloperError} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeveloperError.toObject = function(includeInstance, msg) { + var f, obj = { + message: jspb.Message.getFieldWithDefault(msg, 1, ""), + line: jspb.Message.getFieldWithDefault(msg, 2, 0), + column: jspb.Message.getFieldWithDefault(msg, 3, 0), + source: jspb.Message.getFieldWithDefault(msg, 4, 0), + kind: jspb.Message.getFieldWithDefault(msg, 5, 0), + pathList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + context: jspb.Message.getFieldWithDefault(msg, 7, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.DeveloperError.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.DeveloperError; + return proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.DeveloperError} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.DeveloperError} + */ +proto.authzed.api.v0.DeveloperError.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setLine(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setColumn(value); + break; + case 4: + var value = /** @type {!proto.authzed.api.v0.DeveloperError.Source} */ (reader.readEnum()); + msg.setSource(value); + break; + case 5: + var value = /** @type {!proto.authzed.api.v0.DeveloperError.ErrorKind} */ (reader.readEnum()); + msg.setKind(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.addPath(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setContext(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.DeveloperError.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.DeveloperError} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeveloperError.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getLine(); + if (f !== 0) { + writer.writeUint32( + 2, + f + ); + } + f = message.getColumn(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } + f = message.getSource(); + if (f !== 0.0) { + writer.writeEnum( + 4, + f + ); + } + f = message.getKind(); + if (f !== 0.0) { + writer.writeEnum( + 5, + f + ); + } + f = message.getPathList(); + if (f.length > 0) { + writer.writeRepeatedString( + 6, + f + ); + } + f = message.getContext(); + if (f.length > 0) { + writer.writeString( + 7, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.DeveloperError.Source = { + UNKNOWN_SOURCE: 0, + SCHEMA: 1, + RELATIONSHIP: 2, + VALIDATION_YAML: 3, + CHECK_WATCH: 4, + ASSERTION: 5 +}; + +/** + * @enum {number} + */ +proto.authzed.api.v0.DeveloperError.ErrorKind = { + UNKNOWN_KIND: 0, + PARSE_ERROR: 1, + SCHEMA_ISSUE: 2, + DUPLICATE_RELATIONSHIP: 3, + MISSING_EXPECTED_RELATIONSHIP: 4, + EXTRA_RELATIONSHIP_FOUND: 5, + UNKNOWN_OBJECT_TYPE: 6, + UNKNOWN_RELATION: 7, + MAXIMUM_RECURSION: 8, + ASSERTION_FAILED: 9 +}; + +/** + * optional string message = 1; + * @return {string} + */ +proto.authzed.api.v0.DeveloperError.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setMessage = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional uint32 line = 2; + * @return {number} + */ +proto.authzed.api.v0.DeveloperError.prototype.getLine = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setLine = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional uint32 column = 3; + * @return {number} + */ +proto.authzed.api.v0.DeveloperError.prototype.getColumn = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setColumn = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional Source source = 4; + * @return {!proto.authzed.api.v0.DeveloperError.Source} + */ +proto.authzed.api.v0.DeveloperError.prototype.getSource = function() { + return /** @type {!proto.authzed.api.v0.DeveloperError.Source} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.DeveloperError.Source} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setSource = function(value) { + return jspb.Message.setProto3EnumField(this, 4, value); +}; + + +/** + * optional ErrorKind kind = 5; + * @return {!proto.authzed.api.v0.DeveloperError.ErrorKind} + */ +proto.authzed.api.v0.DeveloperError.prototype.getKind = function() { + return /** @type {!proto.authzed.api.v0.DeveloperError.ErrorKind} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.DeveloperError.ErrorKind} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setKind = function(value) { + return jspb.Message.setProto3EnumField(this, 5, value); +}; + + +/** + * repeated string path = 6; + * @return {!Array} + */ +proto.authzed.api.v0.DeveloperError.prototype.getPathList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setPathList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.addPath = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.clearPathList = function() { + return this.setPathList([]); +}; + + +/** + * optional string context = 7; + * @return {string} + */ +proto.authzed.api.v0.DeveloperError.prototype.getContext = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.DeveloperError} returns this + */ +proto.authzed.api.v0.DeveloperError.prototype.setContext = function(value) { + return jspb.Message.setProto3StringField(this, 7, value); +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.d.ts new file mode 100644 index 0000000..83b2dba --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.d.ts @@ -0,0 +1,361 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_any_pb from 'google-protobuf/google/protobuf/any_pb'; +import * as validate_validate_pb from '../../../validate/validate_pb'; +import * as authzed_api_v0_core_pb from '../../../authzed/api/v0/core_pb'; + + +export class Metadata extends jspb.Message { + getMetadataMessageList(): Array; + setMetadataMessageList(value: Array): Metadata; + clearMetadataMessageList(): Metadata; + addMetadataMessage(value?: google_protobuf_any_pb.Any, index?: number): google_protobuf_any_pb.Any; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Metadata.AsObject; + static toObject(includeInstance: boolean, msg: Metadata): Metadata.AsObject; + static serializeBinaryToWriter(message: Metadata, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Metadata; + static deserializeBinaryFromReader(message: Metadata, reader: jspb.BinaryReader): Metadata; +} + +export namespace Metadata { + export type AsObject = { + metadataMessageList: Array, + } +} + +export class NamespaceDefinition extends jspb.Message { + getName(): string; + setName(value: string): NamespaceDefinition; + + getRelationList(): Array; + setRelationList(value: Array): NamespaceDefinition; + clearRelationList(): NamespaceDefinition; + addRelation(value?: Relation, index?: number): Relation; + + getMetadata(): Metadata | undefined; + setMetadata(value?: Metadata): NamespaceDefinition; + hasMetadata(): boolean; + clearMetadata(): NamespaceDefinition; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): NamespaceDefinition.AsObject; + static toObject(includeInstance: boolean, msg: NamespaceDefinition): NamespaceDefinition.AsObject; + static serializeBinaryToWriter(message: NamespaceDefinition, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): NamespaceDefinition; + static deserializeBinaryFromReader(message: NamespaceDefinition, reader: jspb.BinaryReader): NamespaceDefinition; +} + +export namespace NamespaceDefinition { + export type AsObject = { + name: string, + relationList: Array, + metadata?: Metadata.AsObject, + } +} + +export class Relation extends jspb.Message { + getName(): string; + setName(value: string): Relation; + + getUsersetRewrite(): UsersetRewrite | undefined; + setUsersetRewrite(value?: UsersetRewrite): Relation; + hasUsersetRewrite(): boolean; + clearUsersetRewrite(): Relation; + + getTypeInformation(): TypeInformation | undefined; + setTypeInformation(value?: TypeInformation): Relation; + hasTypeInformation(): boolean; + clearTypeInformation(): Relation; + + getMetadata(): Metadata | undefined; + setMetadata(value?: Metadata): Relation; + hasMetadata(): boolean; + clearMetadata(): Relation; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Relation.AsObject; + static toObject(includeInstance: boolean, msg: Relation): Relation.AsObject; + static serializeBinaryToWriter(message: Relation, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Relation; + static deserializeBinaryFromReader(message: Relation, reader: jspb.BinaryReader): Relation; +} + +export namespace Relation { + export type AsObject = { + name: string, + usersetRewrite?: UsersetRewrite.AsObject, + typeInformation?: TypeInformation.AsObject, + metadata?: Metadata.AsObject, + } +} + +export class TypeInformation extends jspb.Message { + getAllowedDirectRelationsList(): Array; + setAllowedDirectRelationsList(value: Array): TypeInformation; + clearAllowedDirectRelationsList(): TypeInformation; + addAllowedDirectRelations(value?: AllowedRelation, index?: number): AllowedRelation; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TypeInformation.AsObject; + static toObject(includeInstance: boolean, msg: TypeInformation): TypeInformation.AsObject; + static serializeBinaryToWriter(message: TypeInformation, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TypeInformation; + static deserializeBinaryFromReader(message: TypeInformation, reader: jspb.BinaryReader): TypeInformation; +} + +export namespace TypeInformation { + export type AsObject = { + allowedDirectRelationsList: Array, + } +} + +export class AllowedRelation extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): AllowedRelation; + + getRelation(): string; + setRelation(value: string): AllowedRelation; + + getPublicWildcard(): AllowedRelation.PublicWildcard | undefined; + setPublicWildcard(value?: AllowedRelation.PublicWildcard): AllowedRelation; + hasPublicWildcard(): boolean; + clearPublicWildcard(): AllowedRelation; + + getRelationOrWildcardCase(): AllowedRelation.RelationOrWildcardCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AllowedRelation.AsObject; + static toObject(includeInstance: boolean, msg: AllowedRelation): AllowedRelation.AsObject; + static serializeBinaryToWriter(message: AllowedRelation, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AllowedRelation; + static deserializeBinaryFromReader(message: AllowedRelation, reader: jspb.BinaryReader): AllowedRelation; +} + +export namespace AllowedRelation { + export type AsObject = { + namespace: string, + relation: string, + publicWildcard?: AllowedRelation.PublicWildcard.AsObject, + } + + export class PublicWildcard extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PublicWildcard.AsObject; + static toObject(includeInstance: boolean, msg: PublicWildcard): PublicWildcard.AsObject; + static serializeBinaryToWriter(message: PublicWildcard, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PublicWildcard; + static deserializeBinaryFromReader(message: PublicWildcard, reader: jspb.BinaryReader): PublicWildcard; + } + + export namespace PublicWildcard { + export type AsObject = { + } + } + + + export enum RelationOrWildcardCase { + RELATION_OR_WILDCARD_NOT_SET = 0, + RELATION = 3, + PUBLIC_WILDCARD = 4, + } +} + +export class UsersetRewrite extends jspb.Message { + getUnion(): SetOperation | undefined; + setUnion(value?: SetOperation): UsersetRewrite; + hasUnion(): boolean; + clearUnion(): UsersetRewrite; + + getIntersection(): SetOperation | undefined; + setIntersection(value?: SetOperation): UsersetRewrite; + hasIntersection(): boolean; + clearIntersection(): UsersetRewrite; + + getExclusion(): SetOperation | undefined; + setExclusion(value?: SetOperation): UsersetRewrite; + hasExclusion(): boolean; + clearExclusion(): UsersetRewrite; + + getRewriteOperationCase(): UsersetRewrite.RewriteOperationCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UsersetRewrite.AsObject; + static toObject(includeInstance: boolean, msg: UsersetRewrite): UsersetRewrite.AsObject; + static serializeBinaryToWriter(message: UsersetRewrite, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UsersetRewrite; + static deserializeBinaryFromReader(message: UsersetRewrite, reader: jspb.BinaryReader): UsersetRewrite; +} + +export namespace UsersetRewrite { + export type AsObject = { + union?: SetOperation.AsObject, + intersection?: SetOperation.AsObject, + exclusion?: SetOperation.AsObject, + } + + export enum RewriteOperationCase { + REWRITE_OPERATION_NOT_SET = 0, + UNION = 1, + INTERSECTION = 2, + EXCLUSION = 3, + } +} + +export class SetOperation extends jspb.Message { + getChildList(): Array; + setChildList(value: Array): SetOperation; + clearChildList(): SetOperation; + addChild(value?: SetOperation.Child, index?: number): SetOperation.Child; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SetOperation.AsObject; + static toObject(includeInstance: boolean, msg: SetOperation): SetOperation.AsObject; + static serializeBinaryToWriter(message: SetOperation, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SetOperation; + static deserializeBinaryFromReader(message: SetOperation, reader: jspb.BinaryReader): SetOperation; +} + +export namespace SetOperation { + export type AsObject = { + childList: Array, + } + + export class Child extends jspb.Message { + getThis(): SetOperation.Child.This | undefined; + setThis(value?: SetOperation.Child.This): Child; + hasThis(): boolean; + clearThis(): Child; + + getComputedUserset(): ComputedUserset | undefined; + setComputedUserset(value?: ComputedUserset): Child; + hasComputedUserset(): boolean; + clearComputedUserset(): Child; + + getTupleToUserset(): TupleToUserset | undefined; + setTupleToUserset(value?: TupleToUserset): Child; + hasTupleToUserset(): boolean; + clearTupleToUserset(): Child; + + getUsersetRewrite(): UsersetRewrite | undefined; + setUsersetRewrite(value?: UsersetRewrite): Child; + hasUsersetRewrite(): boolean; + clearUsersetRewrite(): Child; + + getChildTypeCase(): Child.ChildTypeCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Child.AsObject; + static toObject(includeInstance: boolean, msg: Child): Child.AsObject; + static serializeBinaryToWriter(message: Child, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Child; + static deserializeBinaryFromReader(message: Child, reader: jspb.BinaryReader): Child; + } + + export namespace Child { + export type AsObject = { + pb_this?: SetOperation.Child.This.AsObject, + computedUserset?: ComputedUserset.AsObject, + tupleToUserset?: TupleToUserset.AsObject, + usersetRewrite?: UsersetRewrite.AsObject, + } + + export class This extends jspb.Message { + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): This.AsObject; + static toObject(includeInstance: boolean, msg: This): This.AsObject; + static serializeBinaryToWriter(message: This, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): This; + static deserializeBinaryFromReader(message: This, reader: jspb.BinaryReader): This; + } + + export namespace This { + export type AsObject = { + } + } + + + export enum ChildTypeCase { + CHILD_TYPE_NOT_SET = 0, + _THIS = 1, + COMPUTED_USERSET = 2, + TUPLE_TO_USERSET = 3, + USERSET_REWRITE = 4, + } + } + +} + +export class TupleToUserset extends jspb.Message { + getTupleset(): TupleToUserset.Tupleset | undefined; + setTupleset(value?: TupleToUserset.Tupleset): TupleToUserset; + hasTupleset(): boolean; + clearTupleset(): TupleToUserset; + + getComputedUserset(): ComputedUserset | undefined; + setComputedUserset(value?: ComputedUserset): TupleToUserset; + hasComputedUserset(): boolean; + clearComputedUserset(): TupleToUserset; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TupleToUserset.AsObject; + static toObject(includeInstance: boolean, msg: TupleToUserset): TupleToUserset.AsObject; + static serializeBinaryToWriter(message: TupleToUserset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TupleToUserset; + static deserializeBinaryFromReader(message: TupleToUserset, reader: jspb.BinaryReader): TupleToUserset; +} + +export namespace TupleToUserset { + export type AsObject = { + tupleset?: TupleToUserset.Tupleset.AsObject, + computedUserset?: ComputedUserset.AsObject, + } + + export class Tupleset extends jspb.Message { + getRelation(): string; + setRelation(value: string): Tupleset; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Tupleset.AsObject; + static toObject(includeInstance: boolean, msg: Tupleset): Tupleset.AsObject; + static serializeBinaryToWriter(message: Tupleset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Tupleset; + static deserializeBinaryFromReader(message: Tupleset, reader: jspb.BinaryReader): Tupleset; + } + + export namespace Tupleset { + export type AsObject = { + relation: string, + } + } + +} + +export class ComputedUserset extends jspb.Message { + getObject(): ComputedUserset.Object; + setObject(value: ComputedUserset.Object): ComputedUserset; + + getRelation(): string; + setRelation(value: string): ComputedUserset; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ComputedUserset.AsObject; + static toObject(includeInstance: boolean, msg: ComputedUserset): ComputedUserset.AsObject; + static serializeBinaryToWriter(message: ComputedUserset, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ComputedUserset; + static deserializeBinaryFromReader(message: ComputedUserset, reader: jspb.BinaryReader): ComputedUserset; +} + +export namespace ComputedUserset { + export type AsObject = { + object: ComputedUserset.Object, + relation: string, + } + + export enum Object { + TUPLE_OBJECT = 0, + TUPLE_USERSET_OBJECT = 1, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.js new file mode 100644 index 0000000..d89b4df --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/namespace_pb.js @@ -0,0 +1,2893 @@ +// source: authzed/api/v0/namespace.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var google_protobuf_any_pb = require('google-protobuf/google/protobuf/any_pb.js'); +goog.object.extend(proto, google_protobuf_any_pb); +var validate_validate_pb = require('../../../validate/validate_pb.js'); +goog.object.extend(proto, validate_validate_pb); +var authzed_api_v0_core_pb = require('../../../authzed/api/v0/core_pb.js'); +goog.object.extend(proto, authzed_api_v0_core_pb); +goog.exportSymbol('proto.authzed.api.v0.AllowedRelation', null, global); +goog.exportSymbol('proto.authzed.api.v0.AllowedRelation.PublicWildcard', null, global); +goog.exportSymbol('proto.authzed.api.v0.AllowedRelation.RelationOrWildcardCase', null, global); +goog.exportSymbol('proto.authzed.api.v0.ComputedUserset', null, global); +goog.exportSymbol('proto.authzed.api.v0.ComputedUserset.Object', null, global); +goog.exportSymbol('proto.authzed.api.v0.Metadata', null, global); +goog.exportSymbol('proto.authzed.api.v0.NamespaceDefinition', null, global); +goog.exportSymbol('proto.authzed.api.v0.Relation', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperation', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperation.Child', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperation.Child.ChildTypeCase', null, global); +goog.exportSymbol('proto.authzed.api.v0.SetOperation.Child.This', null, global); +goog.exportSymbol('proto.authzed.api.v0.TupleToUserset', null, global); +goog.exportSymbol('proto.authzed.api.v0.TupleToUserset.Tupleset', null, global); +goog.exportSymbol('proto.authzed.api.v0.TypeInformation', null, global); +goog.exportSymbol('proto.authzed.api.v0.UsersetRewrite', null, global); +goog.exportSymbol('proto.authzed.api.v0.UsersetRewrite.RewriteOperationCase', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.Metadata = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.Metadata.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.Metadata, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.Metadata.displayName = 'proto.authzed.api.v0.Metadata'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.NamespaceDefinition = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.NamespaceDefinition.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.NamespaceDefinition, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.NamespaceDefinition.displayName = 'proto.authzed.api.v0.NamespaceDefinition'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.Relation = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.Relation, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.Relation.displayName = 'proto.authzed.api.v0.Relation'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.TypeInformation = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.TypeInformation.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.TypeInformation, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.TypeInformation.displayName = 'proto.authzed.api.v0.TypeInformation'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.AllowedRelation = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.authzed.api.v0.AllowedRelation.oneofGroups_); +}; +goog.inherits(proto.authzed.api.v0.AllowedRelation, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.AllowedRelation.displayName = 'proto.authzed.api.v0.AllowedRelation'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.AllowedRelation.PublicWildcard, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.AllowedRelation.PublicWildcard.displayName = 'proto.authzed.api.v0.AllowedRelation.PublicWildcard'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.UsersetRewrite = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.authzed.api.v0.UsersetRewrite.oneofGroups_); +}; +goog.inherits(proto.authzed.api.v0.UsersetRewrite, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.UsersetRewrite.displayName = 'proto.authzed.api.v0.UsersetRewrite'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.SetOperation = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.SetOperation.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.SetOperation, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.SetOperation.displayName = 'proto.authzed.api.v0.SetOperation'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.SetOperation.Child = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.authzed.api.v0.SetOperation.Child.oneofGroups_); +}; +goog.inherits(proto.authzed.api.v0.SetOperation.Child, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.SetOperation.Child.displayName = 'proto.authzed.api.v0.SetOperation.Child'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.SetOperation.Child.This = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.SetOperation.Child.This, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.SetOperation.Child.This.displayName = 'proto.authzed.api.v0.SetOperation.Child.This'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.TupleToUserset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.TupleToUserset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.TupleToUserset.displayName = 'proto.authzed.api.v0.TupleToUserset'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.TupleToUserset.Tupleset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.TupleToUserset.Tupleset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.TupleToUserset.Tupleset.displayName = 'proto.authzed.api.v0.TupleToUserset.Tupleset'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ComputedUserset = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ComputedUserset, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ComputedUserset.displayName = 'proto.authzed.api.v0.ComputedUserset'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.Metadata.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.Metadata.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.Metadata.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.Metadata} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Metadata.toObject = function(includeInstance, msg) { + var f, obj = { + metadataMessageList: jspb.Message.toObjectList(msg.getMetadataMessageList(), + google_protobuf_any_pb.Any.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.Metadata} + */ +proto.authzed.api.v0.Metadata.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.Metadata; + return proto.authzed.api.v0.Metadata.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.Metadata} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.Metadata} + */ +proto.authzed.api.v0.Metadata.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new google_protobuf_any_pb.Any; + reader.readMessage(value,google_protobuf_any_pb.Any.deserializeBinaryFromReader); + msg.addMetadataMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.Metadata.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.Metadata.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.Metadata} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Metadata.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMetadataMessageList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + google_protobuf_any_pb.Any.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated google.protobuf.Any metadata_message = 1; + * @return {!Array} + */ +proto.authzed.api.v0.Metadata.prototype.getMetadataMessageList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, google_protobuf_any_pb.Any, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.Metadata} returns this +*/ +proto.authzed.api.v0.Metadata.prototype.setMetadataMessageList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.google.protobuf.Any=} opt_value + * @param {number=} opt_index + * @return {!proto.google.protobuf.Any} + */ +proto.authzed.api.v0.Metadata.prototype.addMetadataMessage = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.google.protobuf.Any, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.Metadata} returns this + */ +proto.authzed.api.v0.Metadata.prototype.clearMetadataMessageList = function() { + return this.setMetadataMessageList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.NamespaceDefinition.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.NamespaceDefinition.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.NamespaceDefinition} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.NamespaceDefinition.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + relationList: jspb.Message.toObjectList(msg.getRelationList(), + proto.authzed.api.v0.Relation.toObject, includeInstance), + metadata: (f = msg.getMetadata()) && proto.authzed.api.v0.Metadata.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.NamespaceDefinition} + */ +proto.authzed.api.v0.NamespaceDefinition.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.NamespaceDefinition; + return proto.authzed.api.v0.NamespaceDefinition.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.NamespaceDefinition} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.NamespaceDefinition} + */ +proto.authzed.api.v0.NamespaceDefinition.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.authzed.api.v0.Relation; + reader.readMessage(value,proto.authzed.api.v0.Relation.deserializeBinaryFromReader); + msg.addRelation(value); + break; + case 3: + var value = new proto.authzed.api.v0.Metadata; + reader.readMessage(value,proto.authzed.api.v0.Metadata.deserializeBinaryFromReader); + msg.setMetadata(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.NamespaceDefinition.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.NamespaceDefinition} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.NamespaceDefinition.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRelationList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.authzed.api.v0.Relation.serializeBinaryToWriter + ); + } + f = message.getMetadata(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.Metadata.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.NamespaceDefinition} returns this + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * repeated Relation relation = 2; + * @return {!Array} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.getRelationList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.Relation, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.NamespaceDefinition} returns this +*/ +proto.authzed.api.v0.NamespaceDefinition.prototype.setRelationList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.Relation=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.Relation} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.addRelation = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.Relation, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.NamespaceDefinition} returns this + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.clearRelationList = function() { + return this.setRelationList([]); +}; + + +/** + * optional Metadata metadata = 3; + * @return {?proto.authzed.api.v0.Metadata} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.getMetadata = function() { + return /** @type{?proto.authzed.api.v0.Metadata} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.Metadata, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.Metadata|undefined} value + * @return {!proto.authzed.api.v0.NamespaceDefinition} returns this +*/ +proto.authzed.api.v0.NamespaceDefinition.prototype.setMetadata = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.NamespaceDefinition} returns this + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.clearMetadata = function() { + return this.setMetadata(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.NamespaceDefinition.prototype.hasMetadata = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.Relation.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.Relation.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.Relation} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Relation.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + usersetRewrite: (f = msg.getUsersetRewrite()) && proto.authzed.api.v0.UsersetRewrite.toObject(includeInstance, f), + typeInformation: (f = msg.getTypeInformation()) && proto.authzed.api.v0.TypeInformation.toObject(includeInstance, f), + metadata: (f = msg.getMetadata()) && proto.authzed.api.v0.Metadata.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.Relation} + */ +proto.authzed.api.v0.Relation.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.Relation; + return proto.authzed.api.v0.Relation.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.Relation} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.Relation} + */ +proto.authzed.api.v0.Relation.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = new proto.authzed.api.v0.UsersetRewrite; + reader.readMessage(value,proto.authzed.api.v0.UsersetRewrite.deserializeBinaryFromReader); + msg.setUsersetRewrite(value); + break; + case 3: + var value = new proto.authzed.api.v0.TypeInformation; + reader.readMessage(value,proto.authzed.api.v0.TypeInformation.deserializeBinaryFromReader); + msg.setTypeInformation(value); + break; + case 4: + var value = new proto.authzed.api.v0.Metadata; + reader.readMessage(value,proto.authzed.api.v0.Metadata.deserializeBinaryFromReader); + msg.setMetadata(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.Relation.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.Relation.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.Relation} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.Relation.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getUsersetRewrite(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.UsersetRewrite.serializeBinaryToWriter + ); + } + f = message.getTypeInformation(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.TypeInformation.serializeBinaryToWriter + ); + } + f = message.getMetadata(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.authzed.api.v0.Metadata.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.authzed.api.v0.Relation.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.Relation} returns this + */ +proto.authzed.api.v0.Relation.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional UsersetRewrite userset_rewrite = 2; + * @return {?proto.authzed.api.v0.UsersetRewrite} + */ +proto.authzed.api.v0.Relation.prototype.getUsersetRewrite = function() { + return /** @type{?proto.authzed.api.v0.UsersetRewrite} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.UsersetRewrite, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.UsersetRewrite|undefined} value + * @return {!proto.authzed.api.v0.Relation} returns this +*/ +proto.authzed.api.v0.Relation.prototype.setUsersetRewrite = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.Relation} returns this + */ +proto.authzed.api.v0.Relation.prototype.clearUsersetRewrite = function() { + return this.setUsersetRewrite(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.Relation.prototype.hasUsersetRewrite = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional TypeInformation type_information = 3; + * @return {?proto.authzed.api.v0.TypeInformation} + */ +proto.authzed.api.v0.Relation.prototype.getTypeInformation = function() { + return /** @type{?proto.authzed.api.v0.TypeInformation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.TypeInformation, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.TypeInformation|undefined} value + * @return {!proto.authzed.api.v0.Relation} returns this +*/ +proto.authzed.api.v0.Relation.prototype.setTypeInformation = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.Relation} returns this + */ +proto.authzed.api.v0.Relation.prototype.clearTypeInformation = function() { + return this.setTypeInformation(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.Relation.prototype.hasTypeInformation = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional Metadata metadata = 4; + * @return {?proto.authzed.api.v0.Metadata} + */ +proto.authzed.api.v0.Relation.prototype.getMetadata = function() { + return /** @type{?proto.authzed.api.v0.Metadata} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.Metadata, 4)); +}; + + +/** + * @param {?proto.authzed.api.v0.Metadata|undefined} value + * @return {!proto.authzed.api.v0.Relation} returns this +*/ +proto.authzed.api.v0.Relation.prototype.setMetadata = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.Relation} returns this + */ +proto.authzed.api.v0.Relation.prototype.clearMetadata = function() { + return this.setMetadata(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.Relation.prototype.hasMetadata = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.TypeInformation.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.TypeInformation.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.TypeInformation.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.TypeInformation} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TypeInformation.toObject = function(includeInstance, msg) { + var f, obj = { + allowedDirectRelationsList: jspb.Message.toObjectList(msg.getAllowedDirectRelationsList(), + proto.authzed.api.v0.AllowedRelation.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.TypeInformation} + */ +proto.authzed.api.v0.TypeInformation.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.TypeInformation; + return proto.authzed.api.v0.TypeInformation.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.TypeInformation} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.TypeInformation} + */ +proto.authzed.api.v0.TypeInformation.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.AllowedRelation; + reader.readMessage(value,proto.authzed.api.v0.AllowedRelation.deserializeBinaryFromReader); + msg.addAllowedDirectRelations(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.TypeInformation.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.TypeInformation.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.TypeInformation} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TypeInformation.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAllowedDirectRelationsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.AllowedRelation.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated AllowedRelation allowed_direct_relations = 1; + * @return {!Array} + */ +proto.authzed.api.v0.TypeInformation.prototype.getAllowedDirectRelationsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.AllowedRelation, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.TypeInformation} returns this +*/ +proto.authzed.api.v0.TypeInformation.prototype.setAllowedDirectRelationsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.AllowedRelation=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.AllowedRelation} + */ +proto.authzed.api.v0.TypeInformation.prototype.addAllowedDirectRelations = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.AllowedRelation, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.TypeInformation} returns this + */ +proto.authzed.api.v0.TypeInformation.prototype.clearAllowedDirectRelationsList = function() { + return this.setAllowedDirectRelationsList([]); +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.authzed.api.v0.AllowedRelation.oneofGroups_ = [[3,4]]; + +/** + * @enum {number} + */ +proto.authzed.api.v0.AllowedRelation.RelationOrWildcardCase = { + RELATION_OR_WILDCARD_NOT_SET: 0, + RELATION: 3, + PUBLIC_WILDCARD: 4 +}; + +/** + * @return {proto.authzed.api.v0.AllowedRelation.RelationOrWildcardCase} + */ +proto.authzed.api.v0.AllowedRelation.prototype.getRelationOrWildcardCase = function() { + return /** @type {proto.authzed.api.v0.AllowedRelation.RelationOrWildcardCase} */(jspb.Message.computeOneofCase(this, proto.authzed.api.v0.AllowedRelation.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.AllowedRelation.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.AllowedRelation.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.AllowedRelation} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.AllowedRelation.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + relation: jspb.Message.getFieldWithDefault(msg, 3, ""), + publicWildcard: (f = msg.getPublicWildcard()) && proto.authzed.api.v0.AllowedRelation.PublicWildcard.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.AllowedRelation} + */ +proto.authzed.api.v0.AllowedRelation.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.AllowedRelation; + return proto.authzed.api.v0.AllowedRelation.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.AllowedRelation} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.AllowedRelation} + */ +proto.authzed.api.v0.AllowedRelation.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + case 4: + var value = new proto.authzed.api.v0.AllowedRelation.PublicWildcard; + reader.readMessage(value,proto.authzed.api.v0.AllowedRelation.PublicWildcard.deserializeBinaryFromReader); + msg.setPublicWildcard(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.AllowedRelation.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.AllowedRelation.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.AllowedRelation} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.AllowedRelation.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeString( + 3, + f + ); + } + f = message.getPublicWildcard(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.authzed.api.v0.AllowedRelation.PublicWildcard.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.AllowedRelation.PublicWildcard.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.AllowedRelation.PublicWildcard} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.AllowedRelation.PublicWildcard} + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.AllowedRelation.PublicWildcard; + return proto.authzed.api.v0.AllowedRelation.PublicWildcard.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.AllowedRelation.PublicWildcard} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.AllowedRelation.PublicWildcard} + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.AllowedRelation.PublicWildcard.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.AllowedRelation.PublicWildcard} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.AllowedRelation.PublicWildcard.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.AllowedRelation.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.AllowedRelation} returns this + */ +proto.authzed.api.v0.AllowedRelation.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string relation = 3; + * @return {string} + */ +proto.authzed.api.v0.AllowedRelation.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.AllowedRelation} returns this + */ +proto.authzed.api.v0.AllowedRelation.prototype.setRelation = function(value) { + return jspb.Message.setOneofField(this, 3, proto.authzed.api.v0.AllowedRelation.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.authzed.api.v0.AllowedRelation} returns this + */ +proto.authzed.api.v0.AllowedRelation.prototype.clearRelation = function() { + return jspb.Message.setOneofField(this, 3, proto.authzed.api.v0.AllowedRelation.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.AllowedRelation.prototype.hasRelation = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional PublicWildcard public_wildcard = 4; + * @return {?proto.authzed.api.v0.AllowedRelation.PublicWildcard} + */ +proto.authzed.api.v0.AllowedRelation.prototype.getPublicWildcard = function() { + return /** @type{?proto.authzed.api.v0.AllowedRelation.PublicWildcard} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.AllowedRelation.PublicWildcard, 4)); +}; + + +/** + * @param {?proto.authzed.api.v0.AllowedRelation.PublicWildcard|undefined} value + * @return {!proto.authzed.api.v0.AllowedRelation} returns this +*/ +proto.authzed.api.v0.AllowedRelation.prototype.setPublicWildcard = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.authzed.api.v0.AllowedRelation.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.AllowedRelation} returns this + */ +proto.authzed.api.v0.AllowedRelation.prototype.clearPublicWildcard = function() { + return this.setPublicWildcard(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.AllowedRelation.prototype.hasPublicWildcard = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.authzed.api.v0.UsersetRewrite.oneofGroups_ = [[1,2,3]]; + +/** + * @enum {number} + */ +proto.authzed.api.v0.UsersetRewrite.RewriteOperationCase = { + REWRITE_OPERATION_NOT_SET: 0, + UNION: 1, + INTERSECTION: 2, + EXCLUSION: 3 +}; + +/** + * @return {proto.authzed.api.v0.UsersetRewrite.RewriteOperationCase} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.getRewriteOperationCase = function() { + return /** @type {proto.authzed.api.v0.UsersetRewrite.RewriteOperationCase} */(jspb.Message.computeOneofCase(this, proto.authzed.api.v0.UsersetRewrite.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.UsersetRewrite.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.UsersetRewrite} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UsersetRewrite.toObject = function(includeInstance, msg) { + var f, obj = { + union: (f = msg.getUnion()) && proto.authzed.api.v0.SetOperation.toObject(includeInstance, f), + intersection: (f = msg.getIntersection()) && proto.authzed.api.v0.SetOperation.toObject(includeInstance, f), + exclusion: (f = msg.getExclusion()) && proto.authzed.api.v0.SetOperation.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.UsersetRewrite} + */ +proto.authzed.api.v0.UsersetRewrite.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.UsersetRewrite; + return proto.authzed.api.v0.UsersetRewrite.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.UsersetRewrite} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.UsersetRewrite} + */ +proto.authzed.api.v0.UsersetRewrite.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.SetOperation; + reader.readMessage(value,proto.authzed.api.v0.SetOperation.deserializeBinaryFromReader); + msg.setUnion(value); + break; + case 2: + var value = new proto.authzed.api.v0.SetOperation; + reader.readMessage(value,proto.authzed.api.v0.SetOperation.deserializeBinaryFromReader); + msg.setIntersection(value); + break; + case 3: + var value = new proto.authzed.api.v0.SetOperation; + reader.readMessage(value,proto.authzed.api.v0.SetOperation.deserializeBinaryFromReader); + msg.setExclusion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.UsersetRewrite.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.UsersetRewrite} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.UsersetRewrite.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUnion(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.SetOperation.serializeBinaryToWriter + ); + } + f = message.getIntersection(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.SetOperation.serializeBinaryToWriter + ); + } + f = message.getExclusion(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.SetOperation.serializeBinaryToWriter + ); + } +}; + + +/** + * optional SetOperation union = 1; + * @return {?proto.authzed.api.v0.SetOperation} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.getUnion = function() { + return /** @type{?proto.authzed.api.v0.SetOperation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.SetOperation, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.SetOperation|undefined} value + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this +*/ +proto.authzed.api.v0.UsersetRewrite.prototype.setUnion = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.authzed.api.v0.UsersetRewrite.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this + */ +proto.authzed.api.v0.UsersetRewrite.prototype.clearUnion = function() { + return this.setUnion(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.hasUnion = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional SetOperation intersection = 2; + * @return {?proto.authzed.api.v0.SetOperation} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.getIntersection = function() { + return /** @type{?proto.authzed.api.v0.SetOperation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.SetOperation, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.SetOperation|undefined} value + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this +*/ +proto.authzed.api.v0.UsersetRewrite.prototype.setIntersection = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.authzed.api.v0.UsersetRewrite.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this + */ +proto.authzed.api.v0.UsersetRewrite.prototype.clearIntersection = function() { + return this.setIntersection(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.hasIntersection = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional SetOperation exclusion = 3; + * @return {?proto.authzed.api.v0.SetOperation} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.getExclusion = function() { + return /** @type{?proto.authzed.api.v0.SetOperation} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.SetOperation, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.SetOperation|undefined} value + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this +*/ +proto.authzed.api.v0.UsersetRewrite.prototype.setExclusion = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.authzed.api.v0.UsersetRewrite.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.UsersetRewrite} returns this + */ +proto.authzed.api.v0.UsersetRewrite.prototype.clearExclusion = function() { + return this.setExclusion(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.UsersetRewrite.prototype.hasExclusion = function() { + return jspb.Message.getField(this, 3) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.SetOperation.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.SetOperation.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.SetOperation.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.SetOperation} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.toObject = function(includeInstance, msg) { + var f, obj = { + childList: jspb.Message.toObjectList(msg.getChildList(), + proto.authzed.api.v0.SetOperation.Child.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.SetOperation} + */ +proto.authzed.api.v0.SetOperation.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.SetOperation; + return proto.authzed.api.v0.SetOperation.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.SetOperation} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.SetOperation} + */ +proto.authzed.api.v0.SetOperation.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.SetOperation.Child; + reader.readMessage(value,proto.authzed.api.v0.SetOperation.Child.deserializeBinaryFromReader); + msg.addChild(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.SetOperation.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.SetOperation.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.SetOperation} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getChildList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.authzed.api.v0.SetOperation.Child.serializeBinaryToWriter + ); + } +}; + + + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.authzed.api.v0.SetOperation.Child.oneofGroups_ = [[1,2,3,4]]; + +/** + * @enum {number} + */ +proto.authzed.api.v0.SetOperation.Child.ChildTypeCase = { + CHILD_TYPE_NOT_SET: 0, + _THIS: 1, + COMPUTED_USERSET: 2, + TUPLE_TO_USERSET: 3, + USERSET_REWRITE: 4 +}; + +/** + * @return {proto.authzed.api.v0.SetOperation.Child.ChildTypeCase} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.getChildTypeCase = function() { + return /** @type {proto.authzed.api.v0.SetOperation.Child.ChildTypeCase} */(jspb.Message.computeOneofCase(this, proto.authzed.api.v0.SetOperation.Child.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.SetOperation.Child.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.SetOperation.Child} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.Child.toObject = function(includeInstance, msg) { + var f, obj = { + pb_this: (f = msg.getThis()) && proto.authzed.api.v0.SetOperation.Child.This.toObject(includeInstance, f), + computedUserset: (f = msg.getComputedUserset()) && proto.authzed.api.v0.ComputedUserset.toObject(includeInstance, f), + tupleToUserset: (f = msg.getTupleToUserset()) && proto.authzed.api.v0.TupleToUserset.toObject(includeInstance, f), + usersetRewrite: (f = msg.getUsersetRewrite()) && proto.authzed.api.v0.UsersetRewrite.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.SetOperation.Child} + */ +proto.authzed.api.v0.SetOperation.Child.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.SetOperation.Child; + return proto.authzed.api.v0.SetOperation.Child.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.SetOperation.Child} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.SetOperation.Child} + */ +proto.authzed.api.v0.SetOperation.Child.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.SetOperation.Child.This; + reader.readMessage(value,proto.authzed.api.v0.SetOperation.Child.This.deserializeBinaryFromReader); + msg.setThis(value); + break; + case 2: + var value = new proto.authzed.api.v0.ComputedUserset; + reader.readMessage(value,proto.authzed.api.v0.ComputedUserset.deserializeBinaryFromReader); + msg.setComputedUserset(value); + break; + case 3: + var value = new proto.authzed.api.v0.TupleToUserset; + reader.readMessage(value,proto.authzed.api.v0.TupleToUserset.deserializeBinaryFromReader); + msg.setTupleToUserset(value); + break; + case 4: + var value = new proto.authzed.api.v0.UsersetRewrite; + reader.readMessage(value,proto.authzed.api.v0.UsersetRewrite.deserializeBinaryFromReader); + msg.setUsersetRewrite(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.SetOperation.Child.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.SetOperation.Child} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.Child.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getThis(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.SetOperation.Child.This.serializeBinaryToWriter + ); + } + f = message.getComputedUserset(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.ComputedUserset.serializeBinaryToWriter + ); + } + f = message.getTupleToUserset(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.authzed.api.v0.TupleToUserset.serializeBinaryToWriter + ); + } + f = message.getUsersetRewrite(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.authzed.api.v0.UsersetRewrite.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.SetOperation.Child.This.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.SetOperation.Child.This.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.SetOperation.Child.This} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.Child.This.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.SetOperation.Child.This} + */ +proto.authzed.api.v0.SetOperation.Child.This.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.SetOperation.Child.This; + return proto.authzed.api.v0.SetOperation.Child.This.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.SetOperation.Child.This} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.SetOperation.Child.This} + */ +proto.authzed.api.v0.SetOperation.Child.This.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.SetOperation.Child.This.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.SetOperation.Child.This.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.SetOperation.Child.This} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.SetOperation.Child.This.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + +/** + * optional This _this = 1; + * @return {?proto.authzed.api.v0.SetOperation.Child.This} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.getThis = function() { + return /** @type{?proto.authzed.api.v0.SetOperation.Child.This} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.SetOperation.Child.This, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.SetOperation.Child.This|undefined} value + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this +*/ +proto.authzed.api.v0.SetOperation.Child.prototype.setThis = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.authzed.api.v0.SetOperation.Child.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this + */ +proto.authzed.api.v0.SetOperation.Child.prototype.clearThis = function() { + return this.setThis(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.hasThis = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ComputedUserset computed_userset = 2; + * @return {?proto.authzed.api.v0.ComputedUserset} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.getComputedUserset = function() { + return /** @type{?proto.authzed.api.v0.ComputedUserset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.ComputedUserset, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.ComputedUserset|undefined} value + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this +*/ +proto.authzed.api.v0.SetOperation.Child.prototype.setComputedUserset = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.authzed.api.v0.SetOperation.Child.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this + */ +proto.authzed.api.v0.SetOperation.Child.prototype.clearComputedUserset = function() { + return this.setComputedUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.hasComputedUserset = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional TupleToUserset tuple_to_userset = 3; + * @return {?proto.authzed.api.v0.TupleToUserset} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.getTupleToUserset = function() { + return /** @type{?proto.authzed.api.v0.TupleToUserset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.TupleToUserset, 3)); +}; + + +/** + * @param {?proto.authzed.api.v0.TupleToUserset|undefined} value + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this +*/ +proto.authzed.api.v0.SetOperation.Child.prototype.setTupleToUserset = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.authzed.api.v0.SetOperation.Child.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this + */ +proto.authzed.api.v0.SetOperation.Child.prototype.clearTupleToUserset = function() { + return this.setTupleToUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.hasTupleToUserset = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional UsersetRewrite userset_rewrite = 4; + * @return {?proto.authzed.api.v0.UsersetRewrite} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.getUsersetRewrite = function() { + return /** @type{?proto.authzed.api.v0.UsersetRewrite} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.UsersetRewrite, 4)); +}; + + +/** + * @param {?proto.authzed.api.v0.UsersetRewrite|undefined} value + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this +*/ +proto.authzed.api.v0.SetOperation.Child.prototype.setUsersetRewrite = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.authzed.api.v0.SetOperation.Child.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.SetOperation.Child} returns this + */ +proto.authzed.api.v0.SetOperation.Child.prototype.clearUsersetRewrite = function() { + return this.setUsersetRewrite(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.SetOperation.Child.prototype.hasUsersetRewrite = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * repeated Child child = 1; + * @return {!Array} + */ +proto.authzed.api.v0.SetOperation.prototype.getChildList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.authzed.api.v0.SetOperation.Child, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.SetOperation} returns this +*/ +proto.authzed.api.v0.SetOperation.prototype.setChildList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.SetOperation.Child=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.SetOperation.Child} + */ +proto.authzed.api.v0.SetOperation.prototype.addChild = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.SetOperation.Child, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.SetOperation} returns this + */ +proto.authzed.api.v0.SetOperation.prototype.clearChildList = function() { + return this.setChildList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.TupleToUserset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.TupleToUserset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.TupleToUserset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TupleToUserset.toObject = function(includeInstance, msg) { + var f, obj = { + tupleset: (f = msg.getTupleset()) && proto.authzed.api.v0.TupleToUserset.Tupleset.toObject(includeInstance, f), + computedUserset: (f = msg.getComputedUserset()) && proto.authzed.api.v0.ComputedUserset.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.TupleToUserset} + */ +proto.authzed.api.v0.TupleToUserset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.TupleToUserset; + return proto.authzed.api.v0.TupleToUserset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.TupleToUserset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.TupleToUserset} + */ +proto.authzed.api.v0.TupleToUserset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.authzed.api.v0.TupleToUserset.Tupleset; + reader.readMessage(value,proto.authzed.api.v0.TupleToUserset.Tupleset.deserializeBinaryFromReader); + msg.setTupleset(value); + break; + case 2: + var value = new proto.authzed.api.v0.ComputedUserset; + reader.readMessage(value,proto.authzed.api.v0.ComputedUserset.deserializeBinaryFromReader); + msg.setComputedUserset(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.TupleToUserset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.TupleToUserset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.TupleToUserset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TupleToUserset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTupleset(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.authzed.api.v0.TupleToUserset.Tupleset.serializeBinaryToWriter + ); + } + f = message.getComputedUserset(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.authzed.api.v0.ComputedUserset.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.TupleToUserset.Tupleset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.TupleToUserset.Tupleset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.toObject = function(includeInstance, msg) { + var f, obj = { + relation: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.TupleToUserset.Tupleset} + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.TupleToUserset.Tupleset; + return proto.authzed.api.v0.TupleToUserset.Tupleset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.TupleToUserset.Tupleset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.TupleToUserset.Tupleset} + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.TupleToUserset.Tupleset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.TupleToUserset.Tupleset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRelation(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string relation = 1; + * @return {string} + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.TupleToUserset.Tupleset} returns this + */ +proto.authzed.api.v0.TupleToUserset.Tupleset.prototype.setRelation = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional Tupleset tupleset = 1; + * @return {?proto.authzed.api.v0.TupleToUserset.Tupleset} + */ +proto.authzed.api.v0.TupleToUserset.prototype.getTupleset = function() { + return /** @type{?proto.authzed.api.v0.TupleToUserset.Tupleset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.TupleToUserset.Tupleset, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.TupleToUserset.Tupleset|undefined} value + * @return {!proto.authzed.api.v0.TupleToUserset} returns this +*/ +proto.authzed.api.v0.TupleToUserset.prototype.setTupleset = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.TupleToUserset} returns this + */ +proto.authzed.api.v0.TupleToUserset.prototype.clearTupleset = function() { + return this.setTupleset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.TupleToUserset.prototype.hasTupleset = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional ComputedUserset computed_userset = 2; + * @return {?proto.authzed.api.v0.ComputedUserset} + */ +proto.authzed.api.v0.TupleToUserset.prototype.getComputedUserset = function() { + return /** @type{?proto.authzed.api.v0.ComputedUserset} */ ( + jspb.Message.getWrapperField(this, proto.authzed.api.v0.ComputedUserset, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.ComputedUserset|undefined} value + * @return {!proto.authzed.api.v0.TupleToUserset} returns this +*/ +proto.authzed.api.v0.TupleToUserset.prototype.setComputedUserset = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.TupleToUserset} returns this + */ +proto.authzed.api.v0.TupleToUserset.prototype.clearComputedUserset = function() { + return this.setComputedUserset(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.TupleToUserset.prototype.hasComputedUserset = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ComputedUserset.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ComputedUserset.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ComputedUserset} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ComputedUserset.toObject = function(includeInstance, msg) { + var f, obj = { + object: jspb.Message.getFieldWithDefault(msg, 1, 0), + relation: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ComputedUserset} + */ +proto.authzed.api.v0.ComputedUserset.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ComputedUserset; + return proto.authzed.api.v0.ComputedUserset.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ComputedUserset} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ComputedUserset} + */ +proto.authzed.api.v0.ComputedUserset.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.authzed.api.v0.ComputedUserset.Object} */ (reader.readEnum()); + msg.setObject(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setRelation(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ComputedUserset.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ComputedUserset.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ComputedUserset} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ComputedUserset.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getObject(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getRelation(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.authzed.api.v0.ComputedUserset.Object = { + TUPLE_OBJECT: 0, + TUPLE_USERSET_OBJECT: 1 +}; + +/** + * optional Object object = 1; + * @return {!proto.authzed.api.v0.ComputedUserset.Object} + */ +proto.authzed.api.v0.ComputedUserset.prototype.getObject = function() { + return /** @type {!proto.authzed.api.v0.ComputedUserset.Object} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.authzed.api.v0.ComputedUserset.Object} value + * @return {!proto.authzed.api.v0.ComputedUserset} returns this + */ +proto.authzed.api.v0.ComputedUserset.prototype.setObject = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * optional string relation = 2; + * @return {string} + */ +proto.authzed.api.v0.ComputedUserset.prototype.getRelation = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ComputedUserset} returns this + */ +proto.authzed.api.v0.ComputedUserset.prototype.setRelation = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.d.ts new file mode 100644 index 0000000..70bdec2 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.d.ts @@ -0,0 +1,141 @@ +import * as jspb from 'google-protobuf' + +import * as validate_validate_pb from '../../../validate/validate_pb'; +import * as authzed_api_v0_core_pb from '../../../authzed/api/v0/core_pb'; +import * as authzed_api_v0_namespace_pb from '../../../authzed/api/v0/namespace_pb'; + + +export class ReadConfigRequest extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): ReadConfigRequest; + + getAtRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setAtRevision(value?: authzed_api_v0_core_pb.Zookie): ReadConfigRequest; + hasAtRevision(): boolean; + clearAtRevision(): ReadConfigRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReadConfigRequest.AsObject; + static toObject(includeInstance: boolean, msg: ReadConfigRequest): ReadConfigRequest.AsObject; + static serializeBinaryToWriter(message: ReadConfigRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReadConfigRequest; + static deserializeBinaryFromReader(message: ReadConfigRequest, reader: jspb.BinaryReader): ReadConfigRequest; +} + +export namespace ReadConfigRequest { + export type AsObject = { + namespace: string, + atRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class ReadConfigResponse extends jspb.Message { + getNamespace(): string; + setNamespace(value: string): ReadConfigResponse; + + getConfig(): authzed_api_v0_namespace_pb.NamespaceDefinition | undefined; + setConfig(value?: authzed_api_v0_namespace_pb.NamespaceDefinition): ReadConfigResponse; + hasConfig(): boolean; + clearConfig(): ReadConfigResponse; + + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): ReadConfigResponse; + hasRevision(): boolean; + clearRevision(): ReadConfigResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReadConfigResponse.AsObject; + static toObject(includeInstance: boolean, msg: ReadConfigResponse): ReadConfigResponse.AsObject; + static serializeBinaryToWriter(message: ReadConfigResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReadConfigResponse; + static deserializeBinaryFromReader(message: ReadConfigResponse, reader: jspb.BinaryReader): ReadConfigResponse; +} + +export namespace ReadConfigResponse { + export type AsObject = { + namespace: string, + config?: authzed_api_v0_namespace_pb.NamespaceDefinition.AsObject, + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class WriteConfigRequest extends jspb.Message { + getConfigsList(): Array; + setConfigsList(value: Array): WriteConfigRequest; + clearConfigsList(): WriteConfigRequest; + addConfigs(value?: authzed_api_v0_namespace_pb.NamespaceDefinition, index?: number): authzed_api_v0_namespace_pb.NamespaceDefinition; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WriteConfigRequest.AsObject; + static toObject(includeInstance: boolean, msg: WriteConfigRequest): WriteConfigRequest.AsObject; + static serializeBinaryToWriter(message: WriteConfigRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WriteConfigRequest; + static deserializeBinaryFromReader(message: WriteConfigRequest, reader: jspb.BinaryReader): WriteConfigRequest; +} + +export namespace WriteConfigRequest { + export type AsObject = { + configsList: Array, + } +} + +export class WriteConfigResponse extends jspb.Message { + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): WriteConfigResponse; + hasRevision(): boolean; + clearRevision(): WriteConfigResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WriteConfigResponse.AsObject; + static toObject(includeInstance: boolean, msg: WriteConfigResponse): WriteConfigResponse.AsObject; + static serializeBinaryToWriter(message: WriteConfigResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WriteConfigResponse; + static deserializeBinaryFromReader(message: WriteConfigResponse, reader: jspb.BinaryReader): WriteConfigResponse; +} + +export namespace WriteConfigResponse { + export type AsObject = { + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class DeleteConfigsRequest extends jspb.Message { + getNamespacesList(): Array; + setNamespacesList(value: Array): DeleteConfigsRequest; + clearNamespacesList(): DeleteConfigsRequest; + addNamespaces(value: string, index?: number): DeleteConfigsRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DeleteConfigsRequest.AsObject; + static toObject(includeInstance: boolean, msg: DeleteConfigsRequest): DeleteConfigsRequest.AsObject; + static serializeBinaryToWriter(message: DeleteConfigsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DeleteConfigsRequest; + static deserializeBinaryFromReader(message: DeleteConfigsRequest, reader: jspb.BinaryReader): DeleteConfigsRequest; +} + +export namespace DeleteConfigsRequest { + export type AsObject = { + namespacesList: Array, + } +} + +export class DeleteConfigsResponse extends jspb.Message { + getRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setRevision(value?: authzed_api_v0_core_pb.Zookie): DeleteConfigsResponse; + hasRevision(): boolean; + clearRevision(): DeleteConfigsResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DeleteConfigsResponse.AsObject; + static toObject(includeInstance: boolean, msg: DeleteConfigsResponse): DeleteConfigsResponse.AsObject; + static serializeBinaryToWriter(message: DeleteConfigsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DeleteConfigsResponse; + static deserializeBinaryFromReader(message: DeleteConfigsResponse, reader: jspb.BinaryReader): DeleteConfigsResponse; +} + +export namespace DeleteConfigsResponse { + export type AsObject = { + revision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.js new file mode 100644 index 0000000..87731cf --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/namespace_service_pb.js @@ -0,0 +1,1193 @@ +// source: authzed/api/v0/namespace_service.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var validate_validate_pb = require('../../../validate/validate_pb.js'); +goog.object.extend(proto, validate_validate_pb); +var authzed_api_v0_core_pb = require('../../../authzed/api/v0/core_pb.js'); +goog.object.extend(proto, authzed_api_v0_core_pb); +var authzed_api_v0_namespace_pb = require('../../../authzed/api/v0/namespace_pb.js'); +goog.object.extend(proto, authzed_api_v0_namespace_pb); +goog.exportSymbol('proto.authzed.api.v0.DeleteConfigsRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.DeleteConfigsResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.ReadConfigRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.ReadConfigResponse', null, global); +goog.exportSymbol('proto.authzed.api.v0.WriteConfigRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.WriteConfigResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ReadConfigRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ReadConfigRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ReadConfigRequest.displayName = 'proto.authzed.api.v0.ReadConfigRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.ReadConfigResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.ReadConfigResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.ReadConfigResponse.displayName = 'proto.authzed.api.v0.ReadConfigResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WriteConfigRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.WriteConfigRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.WriteConfigRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WriteConfigRequest.displayName = 'proto.authzed.api.v0.WriteConfigRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WriteConfigResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.WriteConfigResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WriteConfigResponse.displayName = 'proto.authzed.api.v0.WriteConfigResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.DeleteConfigsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.DeleteConfigsRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.DeleteConfigsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.DeleteConfigsRequest.displayName = 'proto.authzed.api.v0.DeleteConfigsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.DeleteConfigsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.authzed.api.v0.DeleteConfigsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.DeleteConfigsResponse.displayName = 'proto.authzed.api.v0.DeleteConfigsResponse'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ReadConfigRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ReadConfigRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadConfigRequest.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + atRevision: (f = msg.getAtRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ReadConfigRequest} + */ +proto.authzed.api.v0.ReadConfigRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ReadConfigRequest; + return proto.authzed.api.v0.ReadConfigRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ReadConfigRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ReadConfigRequest} + */ +proto.authzed.api.v0.ReadConfigRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setAtRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ReadConfigRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ReadConfigRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadConfigRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getAtRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ReadConfigRequest} returns this + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional Zookie at_revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.getAtRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ReadConfigRequest} returns this +*/ +proto.authzed.api.v0.ReadConfigRequest.prototype.setAtRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ReadConfigRequest} returns this + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.clearAtRevision = function() { + return this.setAtRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ReadConfigRequest.prototype.hasAtRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.ReadConfigResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.ReadConfigResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadConfigResponse.toObject = function(includeInstance, msg) { + var f, obj = { + namespace: jspb.Message.getFieldWithDefault(msg, 1, ""), + config: (f = msg.getConfig()) && authzed_api_v0_namespace_pb.NamespaceDefinition.toObject(includeInstance, f), + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.ReadConfigResponse} + */ +proto.authzed.api.v0.ReadConfigResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.ReadConfigResponse; + return proto.authzed.api.v0.ReadConfigResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.ReadConfigResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.ReadConfigResponse} + */ +proto.authzed.api.v0.ReadConfigResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setNamespace(value); + break; + case 2: + var value = new authzed_api_v0_namespace_pb.NamespaceDefinition; + reader.readMessage(value,authzed_api_v0_namespace_pb.NamespaceDefinition.deserializeBinaryFromReader); + msg.setConfig(value); + break; + case 4: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.ReadConfigResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.ReadConfigResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.ReadConfigResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespace(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getConfig(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_namespace_pb.NamespaceDefinition.serializeBinaryToWriter + ); + } + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 4, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string namespace = 1; + * @return {string} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.getNamespace = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.authzed.api.v0.ReadConfigResponse} returns this + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.setNamespace = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional NamespaceDefinition config = 2; + * @return {?proto.authzed.api.v0.NamespaceDefinition} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.getConfig = function() { + return /** @type{?proto.authzed.api.v0.NamespaceDefinition} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_namespace_pb.NamespaceDefinition, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.NamespaceDefinition|undefined} value + * @return {!proto.authzed.api.v0.ReadConfigResponse} returns this +*/ +proto.authzed.api.v0.ReadConfigResponse.prototype.setConfig = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ReadConfigResponse} returns this + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.clearConfig = function() { + return this.setConfig(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.hasConfig = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Zookie revision = 4; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 4)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.ReadConfigResponse} returns this +*/ +proto.authzed.api.v0.ReadConfigResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.ReadConfigResponse} returns this + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.ReadConfigResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.WriteConfigRequest.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WriteConfigRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WriteConfigRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WriteConfigRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteConfigRequest.toObject = function(includeInstance, msg) { + var f, obj = { + configsList: jspb.Message.toObjectList(msg.getConfigsList(), + authzed_api_v0_namespace_pb.NamespaceDefinition.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WriteConfigRequest} + */ +proto.authzed.api.v0.WriteConfigRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WriteConfigRequest; + return proto.authzed.api.v0.WriteConfigRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WriteConfigRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WriteConfigRequest} + */ +proto.authzed.api.v0.WriteConfigRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 2: + var value = new authzed_api_v0_namespace_pb.NamespaceDefinition; + reader.readMessage(value,authzed_api_v0_namespace_pb.NamespaceDefinition.deserializeBinaryFromReader); + msg.addConfigs(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WriteConfigRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WriteConfigRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WriteConfigRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteConfigRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getConfigsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + authzed_api_v0_namespace_pb.NamespaceDefinition.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated NamespaceDefinition configs = 2; + * @return {!Array} + */ +proto.authzed.api.v0.WriteConfigRequest.prototype.getConfigsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_namespace_pb.NamespaceDefinition, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.WriteConfigRequest} returns this +*/ +proto.authzed.api.v0.WriteConfigRequest.prototype.setConfigsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.authzed.api.v0.NamespaceDefinition=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.NamespaceDefinition} + */ +proto.authzed.api.v0.WriteConfigRequest.prototype.addConfigs = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.authzed.api.v0.NamespaceDefinition, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.WriteConfigRequest} returns this + */ +proto.authzed.api.v0.WriteConfigRequest.prototype.clearConfigsList = function() { + return this.setConfigsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WriteConfigResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WriteConfigResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WriteConfigResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteConfigResponse.toObject = function(includeInstance, msg) { + var f, obj = { + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WriteConfigResponse} + */ +proto.authzed.api.v0.WriteConfigResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WriteConfigResponse; + return proto.authzed.api.v0.WriteConfigResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WriteConfigResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WriteConfigResponse} + */ +proto.authzed.api.v0.WriteConfigResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WriteConfigResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WriteConfigResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WriteConfigResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WriteConfigResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Zookie revision = 1; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.WriteConfigResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.WriteConfigResponse} returns this +*/ +proto.authzed.api.v0.WriteConfigResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.WriteConfigResponse} returns this + */ +proto.authzed.api.v0.WriteConfigResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.WriteConfigResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.DeleteConfigsRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.DeleteConfigsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.DeleteConfigsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeleteConfigsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + namespacesList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.DeleteConfigsRequest} + */ +proto.authzed.api.v0.DeleteConfigsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.DeleteConfigsRequest; + return proto.authzed.api.v0.DeleteConfigsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.DeleteConfigsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.DeleteConfigsRequest} + */ +proto.authzed.api.v0.DeleteConfigsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addNamespaces(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.DeleteConfigsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.DeleteConfigsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeleteConfigsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespacesList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } +}; + + +/** + * repeated string namespaces = 1; + * @return {!Array} + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.getNamespacesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.DeleteConfigsRequest} returns this + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.setNamespacesList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.DeleteConfigsRequest} returns this + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.addNamespaces = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.DeleteConfigsRequest} returns this + */ +proto.authzed.api.v0.DeleteConfigsRequest.prototype.clearNamespacesList = function() { + return this.setNamespacesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.DeleteConfigsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.DeleteConfigsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeleteConfigsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + revision: (f = msg.getRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.DeleteConfigsResponse} + */ +proto.authzed.api.v0.DeleteConfigsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.DeleteConfigsResponse; + return proto.authzed.api.v0.DeleteConfigsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.DeleteConfigsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.DeleteConfigsResponse} + */ +proto.authzed.api.v0.DeleteConfigsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.DeleteConfigsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.DeleteConfigsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.DeleteConfigsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRevision(); + if (f != null) { + writer.writeMessage( + 1, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Zookie revision = 1; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.getRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 1)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.DeleteConfigsResponse} returns this +*/ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.setRevision = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.DeleteConfigsResponse} returns this + */ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.clearRevision = function() { + return this.setRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.DeleteConfigsResponse.prototype.hasRevision = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.d.ts b/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.d.ts new file mode 100644 index 0000000..c5e1615 --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.d.ts @@ -0,0 +1,58 @@ +import * as jspb from 'google-protobuf' + +import * as validate_validate_pb from '../../../validate/validate_pb'; +import * as authzed_api_v0_core_pb from '../../../authzed/api/v0/core_pb'; + + +export class WatchRequest extends jspb.Message { + getNamespacesList(): Array; + setNamespacesList(value: Array): WatchRequest; + clearNamespacesList(): WatchRequest; + addNamespaces(value: string, index?: number): WatchRequest; + + getStartRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setStartRevision(value?: authzed_api_v0_core_pb.Zookie): WatchRequest; + hasStartRevision(): boolean; + clearStartRevision(): WatchRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WatchRequest.AsObject; + static toObject(includeInstance: boolean, msg: WatchRequest): WatchRequest.AsObject; + static serializeBinaryToWriter(message: WatchRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WatchRequest; + static deserializeBinaryFromReader(message: WatchRequest, reader: jspb.BinaryReader): WatchRequest; +} + +export namespace WatchRequest { + export type AsObject = { + namespacesList: Array, + startRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + +export class WatchResponse extends jspb.Message { + getUpdatesList(): Array; + setUpdatesList(value: Array): WatchResponse; + clearUpdatesList(): WatchResponse; + addUpdates(value?: authzed_api_v0_core_pb.RelationTupleUpdate, index?: number): authzed_api_v0_core_pb.RelationTupleUpdate; + + getEndRevision(): authzed_api_v0_core_pb.Zookie | undefined; + setEndRevision(value?: authzed_api_v0_core_pb.Zookie): WatchResponse; + hasEndRevision(): boolean; + clearEndRevision(): WatchResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): WatchResponse.AsObject; + static toObject(includeInstance: boolean, msg: WatchResponse): WatchResponse.AsObject; + static serializeBinaryToWriter(message: WatchResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): WatchResponse; + static deserializeBinaryFromReader(message: WatchResponse, reader: jspb.BinaryReader): WatchResponse; +} + +export namespace WatchResponse { + export type AsObject = { + updatesList: Array, + endRevision?: authzed_api_v0_core_pb.Zookie.AsObject, + } +} + diff --git a/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.js b/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.js new file mode 100644 index 0000000..df0543d --- /dev/null +++ b/spicedb-common/src/protodefs/authzed/api/v0/watch_service_pb.js @@ -0,0 +1,490 @@ +// source: authzed/api/v0/watch_service.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { + if (this) { return this; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + if (typeof self !== 'undefined') { return self; } + return Function('return this')(); +}.call(null)); + +var validate_validate_pb = require('../../../validate/validate_pb.js'); +goog.object.extend(proto, validate_validate_pb); +var authzed_api_v0_core_pb = require('../../../authzed/api/v0/core_pb.js'); +goog.object.extend(proto, authzed_api_v0_core_pb); +goog.exportSymbol('proto.authzed.api.v0.WatchRequest', null, global); +goog.exportSymbol('proto.authzed.api.v0.WatchResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WatchRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.WatchRequest.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.WatchRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WatchRequest.displayName = 'proto.authzed.api.v0.WatchRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.authzed.api.v0.WatchResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.authzed.api.v0.WatchResponse.repeatedFields_, null); +}; +goog.inherits(proto.authzed.api.v0.WatchResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.authzed.api.v0.WatchResponse.displayName = 'proto.authzed.api.v0.WatchResponse'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.WatchRequest.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WatchRequest.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WatchRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WatchRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WatchRequest.toObject = function(includeInstance, msg) { + var f, obj = { + namespacesList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f, + startRevision: (f = msg.getStartRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WatchRequest} + */ +proto.authzed.api.v0.WatchRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WatchRequest; + return proto.authzed.api.v0.WatchRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WatchRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WatchRequest} + */ +proto.authzed.api.v0.WatchRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.addNamespaces(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setStartRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WatchRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WatchRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WatchRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WatchRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNamespacesList(); + if (f.length > 0) { + writer.writeRepeatedString( + 1, + f + ); + } + f = message.getStartRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated string namespaces = 1; + * @return {!Array} + */ +proto.authzed.api.v0.WatchRequest.prototype.getNamespacesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.WatchRequest} returns this + */ +proto.authzed.api.v0.WatchRequest.prototype.setNamespacesList = function(value) { + return jspb.Message.setField(this, 1, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.WatchRequest} returns this + */ +proto.authzed.api.v0.WatchRequest.prototype.addNamespaces = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 1, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.WatchRequest} returns this + */ +proto.authzed.api.v0.WatchRequest.prototype.clearNamespacesList = function() { + return this.setNamespacesList([]); +}; + + +/** + * optional Zookie start_revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.WatchRequest.prototype.getStartRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.WatchRequest} returns this +*/ +proto.authzed.api.v0.WatchRequest.prototype.setStartRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.WatchRequest} returns this + */ +proto.authzed.api.v0.WatchRequest.prototype.clearStartRevision = function() { + return this.setStartRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.WatchRequest.prototype.hasStartRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.authzed.api.v0.WatchResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.authzed.api.v0.WatchResponse.prototype.toObject = function(opt_includeInstance) { + return proto.authzed.api.v0.WatchResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.authzed.api.v0.WatchResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WatchResponse.toObject = function(includeInstance, msg) { + var f, obj = { + updatesList: jspb.Message.toObjectList(msg.getUpdatesList(), + authzed_api_v0_core_pb.RelationTupleUpdate.toObject, includeInstance), + endRevision: (f = msg.getEndRevision()) && authzed_api_v0_core_pb.Zookie.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.authzed.api.v0.WatchResponse} + */ +proto.authzed.api.v0.WatchResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.authzed.api.v0.WatchResponse; + return proto.authzed.api.v0.WatchResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.authzed.api.v0.WatchResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.authzed.api.v0.WatchResponse} + */ +proto.authzed.api.v0.WatchResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new authzed_api_v0_core_pb.RelationTupleUpdate; + reader.readMessage(value,authzed_api_v0_core_pb.RelationTupleUpdate.deserializeBinaryFromReader); + msg.addUpdates(value); + break; + case 2: + var value = new authzed_api_v0_core_pb.Zookie; + reader.readMessage(value,authzed_api_v0_core_pb.Zookie.deserializeBinaryFromReader); + msg.setEndRevision(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.authzed.api.v0.WatchResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.authzed.api.v0.WatchResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.authzed.api.v0.WatchResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.authzed.api.v0.WatchResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getUpdatesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + authzed_api_v0_core_pb.RelationTupleUpdate.serializeBinaryToWriter + ); + } + f = message.getEndRevision(); + if (f != null) { + writer.writeMessage( + 2, + f, + authzed_api_v0_core_pb.Zookie.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RelationTupleUpdate updates = 1; + * @return {!Array} + */ +proto.authzed.api.v0.WatchResponse.prototype.getUpdatesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, authzed_api_v0_core_pb.RelationTupleUpdate, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.authzed.api.v0.WatchResponse} returns this +*/ +proto.authzed.api.v0.WatchResponse.prototype.setUpdatesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.authzed.api.v0.RelationTupleUpdate=} opt_value + * @param {number=} opt_index + * @return {!proto.authzed.api.v0.RelationTupleUpdate} + */ +proto.authzed.api.v0.WatchResponse.prototype.addUpdates = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.authzed.api.v0.RelationTupleUpdate, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.authzed.api.v0.WatchResponse} returns this + */ +proto.authzed.api.v0.WatchResponse.prototype.clearUpdatesList = function() { + return this.setUpdatesList([]); +}; + + +/** + * optional Zookie end_revision = 2; + * @return {?proto.authzed.api.v0.Zookie} + */ +proto.authzed.api.v0.WatchResponse.prototype.getEndRevision = function() { + return /** @type{?proto.authzed.api.v0.Zookie} */ ( + jspb.Message.getWrapperField(this, authzed_api_v0_core_pb.Zookie, 2)); +}; + + +/** + * @param {?proto.authzed.api.v0.Zookie|undefined} value + * @return {!proto.authzed.api.v0.WatchResponse} returns this +*/ +proto.authzed.api.v0.WatchResponse.prototype.setEndRevision = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.authzed.api.v0.WatchResponse} returns this + */ +proto.authzed.api.v0.WatchResponse.prototype.clearEndRevision = function() { + return this.setEndRevision(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.authzed.api.v0.WatchResponse.prototype.hasEndRevision = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +goog.object.extend(exports, proto.authzed.api.v0); diff --git a/spicedb-common/src/protodefs/validate/validate_pb.d.ts b/spicedb-common/src/protodefs/validate/validate_pb.d.ts new file mode 100644 index 0000000..bc1acb5 --- /dev/null +++ b/spicedb-common/src/protodefs/validate/validate_pb.d.ts @@ -0,0 +1,1318 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_descriptor_pb from 'google-protobuf/google/protobuf/descriptor_pb'; +import * as google_protobuf_duration_pb from 'google-protobuf/google/protobuf/duration_pb'; +import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; + + +export class FieldRules extends jspb.Message { + getMessage(): MessageRules | undefined; + setMessage(value?: MessageRules): FieldRules; + hasMessage(): boolean; + clearMessage(): FieldRules; + + getFloat(): FloatRules | undefined; + setFloat(value?: FloatRules): FieldRules; + hasFloat(): boolean; + clearFloat(): FieldRules; + + getDouble(): DoubleRules | undefined; + setDouble(value?: DoubleRules): FieldRules; + hasDouble(): boolean; + clearDouble(): FieldRules; + + getInt32(): Int32Rules | undefined; + setInt32(value?: Int32Rules): FieldRules; + hasInt32(): boolean; + clearInt32(): FieldRules; + + getInt64(): Int64Rules | undefined; + setInt64(value?: Int64Rules): FieldRules; + hasInt64(): boolean; + clearInt64(): FieldRules; + + getUint32(): UInt32Rules | undefined; + setUint32(value?: UInt32Rules): FieldRules; + hasUint32(): boolean; + clearUint32(): FieldRules; + + getUint64(): UInt64Rules | undefined; + setUint64(value?: UInt64Rules): FieldRules; + hasUint64(): boolean; + clearUint64(): FieldRules; + + getSint32(): SInt32Rules | undefined; + setSint32(value?: SInt32Rules): FieldRules; + hasSint32(): boolean; + clearSint32(): FieldRules; + + getSint64(): SInt64Rules | undefined; + setSint64(value?: SInt64Rules): FieldRules; + hasSint64(): boolean; + clearSint64(): FieldRules; + + getFixed32(): Fixed32Rules | undefined; + setFixed32(value?: Fixed32Rules): FieldRules; + hasFixed32(): boolean; + clearFixed32(): FieldRules; + + getFixed64(): Fixed64Rules | undefined; + setFixed64(value?: Fixed64Rules): FieldRules; + hasFixed64(): boolean; + clearFixed64(): FieldRules; + + getSfixed32(): SFixed32Rules | undefined; + setSfixed32(value?: SFixed32Rules): FieldRules; + hasSfixed32(): boolean; + clearSfixed32(): FieldRules; + + getSfixed64(): SFixed64Rules | undefined; + setSfixed64(value?: SFixed64Rules): FieldRules; + hasSfixed64(): boolean; + clearSfixed64(): FieldRules; + + getBool(): BoolRules | undefined; + setBool(value?: BoolRules): FieldRules; + hasBool(): boolean; + clearBool(): FieldRules; + + getString(): StringRules | undefined; + setString(value?: StringRules): FieldRules; + hasString(): boolean; + clearString(): FieldRules; + + getBytes(): BytesRules | undefined; + setBytes(value?: BytesRules): FieldRules; + hasBytes(): boolean; + clearBytes(): FieldRules; + + getEnum(): EnumRules | undefined; + setEnum(value?: EnumRules): FieldRules; + hasEnum(): boolean; + clearEnum(): FieldRules; + + getRepeated(): RepeatedRules | undefined; + setRepeated(value?: RepeatedRules): FieldRules; + hasRepeated(): boolean; + clearRepeated(): FieldRules; + + getMap(): MapRules | undefined; + setMap(value?: MapRules): FieldRules; + hasMap(): boolean; + clearMap(): FieldRules; + + getAny(): AnyRules | undefined; + setAny(value?: AnyRules): FieldRules; + hasAny(): boolean; + clearAny(): FieldRules; + + getDuration(): DurationRules | undefined; + setDuration(value?: DurationRules): FieldRules; + hasDuration(): boolean; + clearDuration(): FieldRules; + + getTimestamp(): TimestampRules | undefined; + setTimestamp(value?: TimestampRules): FieldRules; + hasTimestamp(): boolean; + clearTimestamp(): FieldRules; + + getTypeCase(): FieldRules.TypeCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FieldRules.AsObject; + static toObject(includeInstance: boolean, msg: FieldRules): FieldRules.AsObject; + static serializeBinaryToWriter(message: FieldRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FieldRules; + static deserializeBinaryFromReader(message: FieldRules, reader: jspb.BinaryReader): FieldRules; +} + +export namespace FieldRules { + export type AsObject = { + message?: MessageRules.AsObject, + pb_float?: FloatRules.AsObject, + pb_double?: DoubleRules.AsObject, + int32?: Int32Rules.AsObject, + int64?: Int64Rules.AsObject, + uint32?: UInt32Rules.AsObject, + uint64?: UInt64Rules.AsObject, + sint32?: SInt32Rules.AsObject, + sint64?: SInt64Rules.AsObject, + fixed32?: Fixed32Rules.AsObject, + fixed64?: Fixed64Rules.AsObject, + sfixed32?: SFixed32Rules.AsObject, + sfixed64?: SFixed64Rules.AsObject, + bool?: BoolRules.AsObject, + string?: StringRules.AsObject, + bytes?: BytesRules.AsObject, + pb_enum?: EnumRules.AsObject, + repeated?: RepeatedRules.AsObject, + map?: MapRules.AsObject, + any?: AnyRules.AsObject, + duration?: DurationRules.AsObject, + timestamp?: TimestampRules.AsObject, + } + + export enum TypeCase { + TYPE_NOT_SET = 0, + FLOAT = 1, + DOUBLE = 2, + INT32 = 3, + INT64 = 4, + UINT32 = 5, + UINT64 = 6, + SINT32 = 7, + SINT64 = 8, + FIXED32 = 9, + FIXED64 = 10, + SFIXED32 = 11, + SFIXED64 = 12, + BOOL = 13, + STRING = 14, + BYTES = 15, + ENUM = 16, + REPEATED = 18, + MAP = 19, + ANY = 20, + DURATION = 21, + TIMESTAMP = 22, + } +} + +export class FloatRules extends jspb.Message { + getConst(): number; + setConst(value: number): FloatRules; + + getLt(): number; + setLt(value: number): FloatRules; + + getLte(): number; + setLte(value: number): FloatRules; + + getGt(): number; + setGt(value: number): FloatRules; + + getGte(): number; + setGte(value: number): FloatRules; + + getInList(): Array; + setInList(value: Array): FloatRules; + clearInList(): FloatRules; + addIn(value: number, index?: number): FloatRules; + + getNotInList(): Array; + setNotInList(value: Array): FloatRules; + clearNotInList(): FloatRules; + addNotIn(value: number, index?: number): FloatRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): FloatRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FloatRules.AsObject; + static toObject(includeInstance: boolean, msg: FloatRules): FloatRules.AsObject; + static serializeBinaryToWriter(message: FloatRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FloatRules; + static deserializeBinaryFromReader(message: FloatRules, reader: jspb.BinaryReader): FloatRules; +} + +export namespace FloatRules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class DoubleRules extends jspb.Message { + getConst(): number; + setConst(value: number): DoubleRules; + + getLt(): number; + setLt(value: number): DoubleRules; + + getLte(): number; + setLte(value: number): DoubleRules; + + getGt(): number; + setGt(value: number): DoubleRules; + + getGte(): number; + setGte(value: number): DoubleRules; + + getInList(): Array; + setInList(value: Array): DoubleRules; + clearInList(): DoubleRules; + addIn(value: number, index?: number): DoubleRules; + + getNotInList(): Array; + setNotInList(value: Array): DoubleRules; + clearNotInList(): DoubleRules; + addNotIn(value: number, index?: number): DoubleRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): DoubleRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DoubleRules.AsObject; + static toObject(includeInstance: boolean, msg: DoubleRules): DoubleRules.AsObject; + static serializeBinaryToWriter(message: DoubleRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DoubleRules; + static deserializeBinaryFromReader(message: DoubleRules, reader: jspb.BinaryReader): DoubleRules; +} + +export namespace DoubleRules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class Int32Rules extends jspb.Message { + getConst(): number; + setConst(value: number): Int32Rules; + + getLt(): number; + setLt(value: number): Int32Rules; + + getLte(): number; + setLte(value: number): Int32Rules; + + getGt(): number; + setGt(value: number): Int32Rules; + + getGte(): number; + setGte(value: number): Int32Rules; + + getInList(): Array; + setInList(value: Array): Int32Rules; + clearInList(): Int32Rules; + addIn(value: number, index?: number): Int32Rules; + + getNotInList(): Array; + setNotInList(value: Array): Int32Rules; + clearNotInList(): Int32Rules; + addNotIn(value: number, index?: number): Int32Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): Int32Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Int32Rules.AsObject; + static toObject(includeInstance: boolean, msg: Int32Rules): Int32Rules.AsObject; + static serializeBinaryToWriter(message: Int32Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Int32Rules; + static deserializeBinaryFromReader(message: Int32Rules, reader: jspb.BinaryReader): Int32Rules; +} + +export namespace Int32Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class Int64Rules extends jspb.Message { + getConst(): number; + setConst(value: number): Int64Rules; + + getLt(): number; + setLt(value: number): Int64Rules; + + getLte(): number; + setLte(value: number): Int64Rules; + + getGt(): number; + setGt(value: number): Int64Rules; + + getGte(): number; + setGte(value: number): Int64Rules; + + getInList(): Array; + setInList(value: Array): Int64Rules; + clearInList(): Int64Rules; + addIn(value: number, index?: number): Int64Rules; + + getNotInList(): Array; + setNotInList(value: Array): Int64Rules; + clearNotInList(): Int64Rules; + addNotIn(value: number, index?: number): Int64Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): Int64Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Int64Rules.AsObject; + static toObject(includeInstance: boolean, msg: Int64Rules): Int64Rules.AsObject; + static serializeBinaryToWriter(message: Int64Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Int64Rules; + static deserializeBinaryFromReader(message: Int64Rules, reader: jspb.BinaryReader): Int64Rules; +} + +export namespace Int64Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class UInt32Rules extends jspb.Message { + getConst(): number; + setConst(value: number): UInt32Rules; + + getLt(): number; + setLt(value: number): UInt32Rules; + + getLte(): number; + setLte(value: number): UInt32Rules; + + getGt(): number; + setGt(value: number): UInt32Rules; + + getGte(): number; + setGte(value: number): UInt32Rules; + + getInList(): Array; + setInList(value: Array): UInt32Rules; + clearInList(): UInt32Rules; + addIn(value: number, index?: number): UInt32Rules; + + getNotInList(): Array; + setNotInList(value: Array): UInt32Rules; + clearNotInList(): UInt32Rules; + addNotIn(value: number, index?: number): UInt32Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): UInt32Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UInt32Rules.AsObject; + static toObject(includeInstance: boolean, msg: UInt32Rules): UInt32Rules.AsObject; + static serializeBinaryToWriter(message: UInt32Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UInt32Rules; + static deserializeBinaryFromReader(message: UInt32Rules, reader: jspb.BinaryReader): UInt32Rules; +} + +export namespace UInt32Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class UInt64Rules extends jspb.Message { + getConst(): number; + setConst(value: number): UInt64Rules; + + getLt(): number; + setLt(value: number): UInt64Rules; + + getLte(): number; + setLte(value: number): UInt64Rules; + + getGt(): number; + setGt(value: number): UInt64Rules; + + getGte(): number; + setGte(value: number): UInt64Rules; + + getInList(): Array; + setInList(value: Array): UInt64Rules; + clearInList(): UInt64Rules; + addIn(value: number, index?: number): UInt64Rules; + + getNotInList(): Array; + setNotInList(value: Array): UInt64Rules; + clearNotInList(): UInt64Rules; + addNotIn(value: number, index?: number): UInt64Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): UInt64Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UInt64Rules.AsObject; + static toObject(includeInstance: boolean, msg: UInt64Rules): UInt64Rules.AsObject; + static serializeBinaryToWriter(message: UInt64Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UInt64Rules; + static deserializeBinaryFromReader(message: UInt64Rules, reader: jspb.BinaryReader): UInt64Rules; +} + +export namespace UInt64Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class SInt32Rules extends jspb.Message { + getConst(): number; + setConst(value: number): SInt32Rules; + + getLt(): number; + setLt(value: number): SInt32Rules; + + getLte(): number; + setLte(value: number): SInt32Rules; + + getGt(): number; + setGt(value: number): SInt32Rules; + + getGte(): number; + setGte(value: number): SInt32Rules; + + getInList(): Array; + setInList(value: Array): SInt32Rules; + clearInList(): SInt32Rules; + addIn(value: number, index?: number): SInt32Rules; + + getNotInList(): Array; + setNotInList(value: Array): SInt32Rules; + clearNotInList(): SInt32Rules; + addNotIn(value: number, index?: number): SInt32Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): SInt32Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SInt32Rules.AsObject; + static toObject(includeInstance: boolean, msg: SInt32Rules): SInt32Rules.AsObject; + static serializeBinaryToWriter(message: SInt32Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SInt32Rules; + static deserializeBinaryFromReader(message: SInt32Rules, reader: jspb.BinaryReader): SInt32Rules; +} + +export namespace SInt32Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class SInt64Rules extends jspb.Message { + getConst(): number; + setConst(value: number): SInt64Rules; + + getLt(): number; + setLt(value: number): SInt64Rules; + + getLte(): number; + setLte(value: number): SInt64Rules; + + getGt(): number; + setGt(value: number): SInt64Rules; + + getGte(): number; + setGte(value: number): SInt64Rules; + + getInList(): Array; + setInList(value: Array): SInt64Rules; + clearInList(): SInt64Rules; + addIn(value: number, index?: number): SInt64Rules; + + getNotInList(): Array; + setNotInList(value: Array): SInt64Rules; + clearNotInList(): SInt64Rules; + addNotIn(value: number, index?: number): SInt64Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): SInt64Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SInt64Rules.AsObject; + static toObject(includeInstance: boolean, msg: SInt64Rules): SInt64Rules.AsObject; + static serializeBinaryToWriter(message: SInt64Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SInt64Rules; + static deserializeBinaryFromReader(message: SInt64Rules, reader: jspb.BinaryReader): SInt64Rules; +} + +export namespace SInt64Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class Fixed32Rules extends jspb.Message { + getConst(): number; + setConst(value: number): Fixed32Rules; + + getLt(): number; + setLt(value: number): Fixed32Rules; + + getLte(): number; + setLte(value: number): Fixed32Rules; + + getGt(): number; + setGt(value: number): Fixed32Rules; + + getGte(): number; + setGte(value: number): Fixed32Rules; + + getInList(): Array; + setInList(value: Array): Fixed32Rules; + clearInList(): Fixed32Rules; + addIn(value: number, index?: number): Fixed32Rules; + + getNotInList(): Array; + setNotInList(value: Array): Fixed32Rules; + clearNotInList(): Fixed32Rules; + addNotIn(value: number, index?: number): Fixed32Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): Fixed32Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Fixed32Rules.AsObject; + static toObject(includeInstance: boolean, msg: Fixed32Rules): Fixed32Rules.AsObject; + static serializeBinaryToWriter(message: Fixed32Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Fixed32Rules; + static deserializeBinaryFromReader(message: Fixed32Rules, reader: jspb.BinaryReader): Fixed32Rules; +} + +export namespace Fixed32Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class Fixed64Rules extends jspb.Message { + getConst(): number; + setConst(value: number): Fixed64Rules; + + getLt(): number; + setLt(value: number): Fixed64Rules; + + getLte(): number; + setLte(value: number): Fixed64Rules; + + getGt(): number; + setGt(value: number): Fixed64Rules; + + getGte(): number; + setGte(value: number): Fixed64Rules; + + getInList(): Array; + setInList(value: Array): Fixed64Rules; + clearInList(): Fixed64Rules; + addIn(value: number, index?: number): Fixed64Rules; + + getNotInList(): Array; + setNotInList(value: Array): Fixed64Rules; + clearNotInList(): Fixed64Rules; + addNotIn(value: number, index?: number): Fixed64Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): Fixed64Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Fixed64Rules.AsObject; + static toObject(includeInstance: boolean, msg: Fixed64Rules): Fixed64Rules.AsObject; + static serializeBinaryToWriter(message: Fixed64Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Fixed64Rules; + static deserializeBinaryFromReader(message: Fixed64Rules, reader: jspb.BinaryReader): Fixed64Rules; +} + +export namespace Fixed64Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class SFixed32Rules extends jspb.Message { + getConst(): number; + setConst(value: number): SFixed32Rules; + + getLt(): number; + setLt(value: number): SFixed32Rules; + + getLte(): number; + setLte(value: number): SFixed32Rules; + + getGt(): number; + setGt(value: number): SFixed32Rules; + + getGte(): number; + setGte(value: number): SFixed32Rules; + + getInList(): Array; + setInList(value: Array): SFixed32Rules; + clearInList(): SFixed32Rules; + addIn(value: number, index?: number): SFixed32Rules; + + getNotInList(): Array; + setNotInList(value: Array): SFixed32Rules; + clearNotInList(): SFixed32Rules; + addNotIn(value: number, index?: number): SFixed32Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): SFixed32Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SFixed32Rules.AsObject; + static toObject(includeInstance: boolean, msg: SFixed32Rules): SFixed32Rules.AsObject; + static serializeBinaryToWriter(message: SFixed32Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SFixed32Rules; + static deserializeBinaryFromReader(message: SFixed32Rules, reader: jspb.BinaryReader): SFixed32Rules; +} + +export namespace SFixed32Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class SFixed64Rules extends jspb.Message { + getConst(): number; + setConst(value: number): SFixed64Rules; + + getLt(): number; + setLt(value: number): SFixed64Rules; + + getLte(): number; + setLte(value: number): SFixed64Rules; + + getGt(): number; + setGt(value: number): SFixed64Rules; + + getGte(): number; + setGte(value: number): SFixed64Rules; + + getInList(): Array; + setInList(value: Array): SFixed64Rules; + clearInList(): SFixed64Rules; + addIn(value: number, index?: number): SFixed64Rules; + + getNotInList(): Array; + setNotInList(value: Array): SFixed64Rules; + clearNotInList(): SFixed64Rules; + addNotIn(value: number, index?: number): SFixed64Rules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): SFixed64Rules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SFixed64Rules.AsObject; + static toObject(includeInstance: boolean, msg: SFixed64Rules): SFixed64Rules.AsObject; + static serializeBinaryToWriter(message: SFixed64Rules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SFixed64Rules; + static deserializeBinaryFromReader(message: SFixed64Rules, reader: jspb.BinaryReader): SFixed64Rules; +} + +export namespace SFixed64Rules { + export type AsObject = { + pb_const: number, + lt: number, + lte: number, + gt: number, + gte: number, + inList: Array, + notInList: Array, + ignoreEmpty: boolean, + } +} + +export class BoolRules extends jspb.Message { + getConst(): boolean; + setConst(value: boolean): BoolRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): BoolRules.AsObject; + static toObject(includeInstance: boolean, msg: BoolRules): BoolRules.AsObject; + static serializeBinaryToWriter(message: BoolRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): BoolRules; + static deserializeBinaryFromReader(message: BoolRules, reader: jspb.BinaryReader): BoolRules; +} + +export namespace BoolRules { + export type AsObject = { + pb_const: boolean, + } +} + +export class StringRules extends jspb.Message { + getConst(): string; + setConst(value: string): StringRules; + + getLen(): number; + setLen(value: number): StringRules; + + getMinLen(): number; + setMinLen(value: number): StringRules; + + getMaxLen(): number; + setMaxLen(value: number): StringRules; + + getLenBytes(): number; + setLenBytes(value: number): StringRules; + + getMinBytes(): number; + setMinBytes(value: number): StringRules; + + getMaxBytes(): number; + setMaxBytes(value: number): StringRules; + + getPattern(): string; + setPattern(value: string): StringRules; + + getPrefix(): string; + setPrefix(value: string): StringRules; + + getSuffix(): string; + setSuffix(value: string): StringRules; + + getContains(): string; + setContains(value: string): StringRules; + + getNotContains(): string; + setNotContains(value: string): StringRules; + + getInList(): Array; + setInList(value: Array): StringRules; + clearInList(): StringRules; + addIn(value: string, index?: number): StringRules; + + getNotInList(): Array; + setNotInList(value: Array): StringRules; + clearNotInList(): StringRules; + addNotIn(value: string, index?: number): StringRules; + + getEmail(): boolean; + setEmail(value: boolean): StringRules; + + getHostname(): boolean; + setHostname(value: boolean): StringRules; + + getIp(): boolean; + setIp(value: boolean): StringRules; + + getIpv4(): boolean; + setIpv4(value: boolean): StringRules; + + getIpv6(): boolean; + setIpv6(value: boolean): StringRules; + + getUri(): boolean; + setUri(value: boolean): StringRules; + + getUriRef(): boolean; + setUriRef(value: boolean): StringRules; + + getAddress(): boolean; + setAddress(value: boolean): StringRules; + + getUuid(): boolean; + setUuid(value: boolean): StringRules; + + getWellKnownRegex(): KnownRegex; + setWellKnownRegex(value: KnownRegex): StringRules; + + getStrict(): boolean; + setStrict(value: boolean): StringRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): StringRules; + + getWellKnownCase(): StringRules.WellKnownCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StringRules.AsObject; + static toObject(includeInstance: boolean, msg: StringRules): StringRules.AsObject; + static serializeBinaryToWriter(message: StringRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StringRules; + static deserializeBinaryFromReader(message: StringRules, reader: jspb.BinaryReader): StringRules; +} + +export namespace StringRules { + export type AsObject = { + pb_const: string, + len: number, + minLen: number, + maxLen: number, + lenBytes: number, + minBytes: number, + maxBytes: number, + pattern: string, + prefix: string, + suffix: string, + contains: string, + notContains: string, + inList: Array, + notInList: Array, + email: boolean, + hostname: boolean, + ip: boolean, + ipv4: boolean, + ipv6: boolean, + uri: boolean, + uriRef: boolean, + address: boolean, + uuid: boolean, + wellKnownRegex: KnownRegex, + strict: boolean, + ignoreEmpty: boolean, + } + + export enum WellKnownCase { + WELL_KNOWN_NOT_SET = 0, + EMAIL = 12, + HOSTNAME = 13, + IP = 14, + IPV4 = 15, + IPV6 = 16, + URI = 17, + URI_REF = 18, + ADDRESS = 21, + UUID = 22, + WELL_KNOWN_REGEX = 24, + } +} + +export class BytesRules extends jspb.Message { + getConst(): Uint8Array | string; + getConst_asU8(): Uint8Array; + getConst_asB64(): string; + setConst(value: Uint8Array | string): BytesRules; + + getLen(): number; + setLen(value: number): BytesRules; + + getMinLen(): number; + setMinLen(value: number): BytesRules; + + getMaxLen(): number; + setMaxLen(value: number): BytesRules; + + getPattern(): string; + setPattern(value: string): BytesRules; + + getPrefix(): Uint8Array | string; + getPrefix_asU8(): Uint8Array; + getPrefix_asB64(): string; + setPrefix(value: Uint8Array | string): BytesRules; + + getSuffix(): Uint8Array | string; + getSuffix_asU8(): Uint8Array; + getSuffix_asB64(): string; + setSuffix(value: Uint8Array | string): BytesRules; + + getContains(): Uint8Array | string; + getContains_asU8(): Uint8Array; + getContains_asB64(): string; + setContains(value: Uint8Array | string): BytesRules; + + getInList(): Array; + setInList(value: Array): BytesRules; + clearInList(): BytesRules; + addIn(value: Uint8Array | string, index?: number): BytesRules; + + getNotInList(): Array; + setNotInList(value: Array): BytesRules; + clearNotInList(): BytesRules; + addNotIn(value: Uint8Array | string, index?: number): BytesRules; + + getIp(): boolean; + setIp(value: boolean): BytesRules; + + getIpv4(): boolean; + setIpv4(value: boolean): BytesRules; + + getIpv6(): boolean; + setIpv6(value: boolean): BytesRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): BytesRules; + + getWellKnownCase(): BytesRules.WellKnownCase; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): BytesRules.AsObject; + static toObject(includeInstance: boolean, msg: BytesRules): BytesRules.AsObject; + static serializeBinaryToWriter(message: BytesRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): BytesRules; + static deserializeBinaryFromReader(message: BytesRules, reader: jspb.BinaryReader): BytesRules; +} + +export namespace BytesRules { + export type AsObject = { + pb_const: Uint8Array | string, + len: number, + minLen: number, + maxLen: number, + pattern: string, + prefix: Uint8Array | string, + suffix: Uint8Array | string, + contains: Uint8Array | string, + inList: Array, + notInList: Array, + ip: boolean, + ipv4: boolean, + ipv6: boolean, + ignoreEmpty: boolean, + } + + export enum WellKnownCase { + WELL_KNOWN_NOT_SET = 0, + IP = 10, + IPV4 = 11, + IPV6 = 12, + } +} + +export class EnumRules extends jspb.Message { + getConst(): number; + setConst(value: number): EnumRules; + + getDefinedOnly(): boolean; + setDefinedOnly(value: boolean): EnumRules; + + getInList(): Array; + setInList(value: Array): EnumRules; + clearInList(): EnumRules; + addIn(value: number, index?: number): EnumRules; + + getNotInList(): Array; + setNotInList(value: Array): EnumRules; + clearNotInList(): EnumRules; + addNotIn(value: number, index?: number): EnumRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): EnumRules.AsObject; + static toObject(includeInstance: boolean, msg: EnumRules): EnumRules.AsObject; + static serializeBinaryToWriter(message: EnumRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): EnumRules; + static deserializeBinaryFromReader(message: EnumRules, reader: jspb.BinaryReader): EnumRules; +} + +export namespace EnumRules { + export type AsObject = { + pb_const: number, + definedOnly: boolean, + inList: Array, + notInList: Array, + } +} + +export class MessageRules extends jspb.Message { + getSkip(): boolean; + setSkip(value: boolean): MessageRules; + + getRequired(): boolean; + setRequired(value: boolean): MessageRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MessageRules.AsObject; + static toObject(includeInstance: boolean, msg: MessageRules): MessageRules.AsObject; + static serializeBinaryToWriter(message: MessageRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MessageRules; + static deserializeBinaryFromReader(message: MessageRules, reader: jspb.BinaryReader): MessageRules; +} + +export namespace MessageRules { + export type AsObject = { + skip: boolean, + required: boolean, + } +} + +export class RepeatedRules extends jspb.Message { + getMinItems(): number; + setMinItems(value: number): RepeatedRules; + + getMaxItems(): number; + setMaxItems(value: number): RepeatedRules; + + getUnique(): boolean; + setUnique(value: boolean): RepeatedRules; + + getItems(): FieldRules | undefined; + setItems(value?: FieldRules): RepeatedRules; + hasItems(): boolean; + clearItems(): RepeatedRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): RepeatedRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RepeatedRules.AsObject; + static toObject(includeInstance: boolean, msg: RepeatedRules): RepeatedRules.AsObject; + static serializeBinaryToWriter(message: RepeatedRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RepeatedRules; + static deserializeBinaryFromReader(message: RepeatedRules, reader: jspb.BinaryReader): RepeatedRules; +} + +export namespace RepeatedRules { + export type AsObject = { + minItems: number, + maxItems: number, + unique: boolean, + items?: FieldRules.AsObject, + ignoreEmpty: boolean, + } +} + +export class MapRules extends jspb.Message { + getMinPairs(): number; + setMinPairs(value: number): MapRules; + + getMaxPairs(): number; + setMaxPairs(value: number): MapRules; + + getNoSparse(): boolean; + setNoSparse(value: boolean): MapRules; + + getKeys(): FieldRules | undefined; + setKeys(value?: FieldRules): MapRules; + hasKeys(): boolean; + clearKeys(): MapRules; + + getValues(): FieldRules | undefined; + setValues(value?: FieldRules): MapRules; + hasValues(): boolean; + clearValues(): MapRules; + + getIgnoreEmpty(): boolean; + setIgnoreEmpty(value: boolean): MapRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MapRules.AsObject; + static toObject(includeInstance: boolean, msg: MapRules): MapRules.AsObject; + static serializeBinaryToWriter(message: MapRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MapRules; + static deserializeBinaryFromReader(message: MapRules, reader: jspb.BinaryReader): MapRules; +} + +export namespace MapRules { + export type AsObject = { + minPairs: number, + maxPairs: number, + noSparse: boolean, + keys?: FieldRules.AsObject, + values?: FieldRules.AsObject, + ignoreEmpty: boolean, + } +} + +export class AnyRules extends jspb.Message { + getRequired(): boolean; + setRequired(value: boolean): AnyRules; + + getInList(): Array; + setInList(value: Array): AnyRules; + clearInList(): AnyRules; + addIn(value: string, index?: number): AnyRules; + + getNotInList(): Array; + setNotInList(value: Array): AnyRules; + clearNotInList(): AnyRules; + addNotIn(value: string, index?: number): AnyRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AnyRules.AsObject; + static toObject(includeInstance: boolean, msg: AnyRules): AnyRules.AsObject; + static serializeBinaryToWriter(message: AnyRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AnyRules; + static deserializeBinaryFromReader(message: AnyRules, reader: jspb.BinaryReader): AnyRules; +} + +export namespace AnyRules { + export type AsObject = { + required: boolean, + inList: Array, + notInList: Array, + } +} + +export class DurationRules extends jspb.Message { + getRequired(): boolean; + setRequired(value: boolean): DurationRules; + + getConst(): google_protobuf_duration_pb.Duration | undefined; + setConst(value?: google_protobuf_duration_pb.Duration): DurationRules; + hasConst(): boolean; + clearConst(): DurationRules; + + getLt(): google_protobuf_duration_pb.Duration | undefined; + setLt(value?: google_protobuf_duration_pb.Duration): DurationRules; + hasLt(): boolean; + clearLt(): DurationRules; + + getLte(): google_protobuf_duration_pb.Duration | undefined; + setLte(value?: google_protobuf_duration_pb.Duration): DurationRules; + hasLte(): boolean; + clearLte(): DurationRules; + + getGt(): google_protobuf_duration_pb.Duration | undefined; + setGt(value?: google_protobuf_duration_pb.Duration): DurationRules; + hasGt(): boolean; + clearGt(): DurationRules; + + getGte(): google_protobuf_duration_pb.Duration | undefined; + setGte(value?: google_protobuf_duration_pb.Duration): DurationRules; + hasGte(): boolean; + clearGte(): DurationRules; + + getInList(): Array; + setInList(value: Array): DurationRules; + clearInList(): DurationRules; + addIn(value?: google_protobuf_duration_pb.Duration, index?: number): google_protobuf_duration_pb.Duration; + + getNotInList(): Array; + setNotInList(value: Array): DurationRules; + clearNotInList(): DurationRules; + addNotIn(value?: google_protobuf_duration_pb.Duration, index?: number): google_protobuf_duration_pb.Duration; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DurationRules.AsObject; + static toObject(includeInstance: boolean, msg: DurationRules): DurationRules.AsObject; + static serializeBinaryToWriter(message: DurationRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DurationRules; + static deserializeBinaryFromReader(message: DurationRules, reader: jspb.BinaryReader): DurationRules; +} + +export namespace DurationRules { + export type AsObject = { + required: boolean, + pb_const?: google_protobuf_duration_pb.Duration.AsObject, + lt?: google_protobuf_duration_pb.Duration.AsObject, + lte?: google_protobuf_duration_pb.Duration.AsObject, + gt?: google_protobuf_duration_pb.Duration.AsObject, + gte?: google_protobuf_duration_pb.Duration.AsObject, + inList: Array, + notInList: Array, + } +} + +export class TimestampRules extends jspb.Message { + getRequired(): boolean; + setRequired(value: boolean): TimestampRules; + + getConst(): google_protobuf_timestamp_pb.Timestamp | undefined; + setConst(value?: google_protobuf_timestamp_pb.Timestamp): TimestampRules; + hasConst(): boolean; + clearConst(): TimestampRules; + + getLt(): google_protobuf_timestamp_pb.Timestamp | undefined; + setLt(value?: google_protobuf_timestamp_pb.Timestamp): TimestampRules; + hasLt(): boolean; + clearLt(): TimestampRules; + + getLte(): google_protobuf_timestamp_pb.Timestamp | undefined; + setLte(value?: google_protobuf_timestamp_pb.Timestamp): TimestampRules; + hasLte(): boolean; + clearLte(): TimestampRules; + + getGt(): google_protobuf_timestamp_pb.Timestamp | undefined; + setGt(value?: google_protobuf_timestamp_pb.Timestamp): TimestampRules; + hasGt(): boolean; + clearGt(): TimestampRules; + + getGte(): google_protobuf_timestamp_pb.Timestamp | undefined; + setGte(value?: google_protobuf_timestamp_pb.Timestamp): TimestampRules; + hasGte(): boolean; + clearGte(): TimestampRules; + + getLtNow(): boolean; + setLtNow(value: boolean): TimestampRules; + + getGtNow(): boolean; + setGtNow(value: boolean): TimestampRules; + + getWithin(): google_protobuf_duration_pb.Duration | undefined; + setWithin(value?: google_protobuf_duration_pb.Duration): TimestampRules; + hasWithin(): boolean; + clearWithin(): TimestampRules; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): TimestampRules.AsObject; + static toObject(includeInstance: boolean, msg: TimestampRules): TimestampRules.AsObject; + static serializeBinaryToWriter(message: TimestampRules, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): TimestampRules; + static deserializeBinaryFromReader(message: TimestampRules, reader: jspb.BinaryReader): TimestampRules; +} + +export namespace TimestampRules { + export type AsObject = { + required: boolean, + pb_const?: google_protobuf_timestamp_pb.Timestamp.AsObject, + lt?: google_protobuf_timestamp_pb.Timestamp.AsObject, + lte?: google_protobuf_timestamp_pb.Timestamp.AsObject, + gt?: google_protobuf_timestamp_pb.Timestamp.AsObject, + gte?: google_protobuf_timestamp_pb.Timestamp.AsObject, + ltNow: boolean, + gtNow: boolean, + within?: google_protobuf_duration_pb.Duration.AsObject, + } +} + +export enum KnownRegex { + UNKNOWN = 0, + HTTP_HEADER_NAME = 1, + HTTP_HEADER_VALUE = 2, +} diff --git a/spicedb-common/src/protodefs/validate/validate_pb.js b/spicedb-common/src/protodefs/validate/validate_pb.js new file mode 100644 index 0000000..06c967a --- /dev/null +++ b/spicedb-common/src/protodefs/validate/validate_pb.js @@ -0,0 +1,12926 @@ +// source: validate/validate.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_descriptor_pb = require('google-protobuf/google/protobuf/descriptor_pb.js'); +goog.object.extend(proto, google_protobuf_descriptor_pb); +var google_protobuf_duration_pb = require('google-protobuf/google/protobuf/duration_pb.js'); +goog.object.extend(proto, google_protobuf_duration_pb); +var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js'); +goog.object.extend(proto, google_protobuf_timestamp_pb); +goog.exportSymbol('proto.validate.AnyRules', null, global); +goog.exportSymbol('proto.validate.BoolRules', null, global); +goog.exportSymbol('proto.validate.BytesRules', null, global); +goog.exportSymbol('proto.validate.BytesRules.WellKnownCase', null, global); +goog.exportSymbol('proto.validate.DoubleRules', null, global); +goog.exportSymbol('proto.validate.DurationRules', null, global); +goog.exportSymbol('proto.validate.EnumRules', null, global); +goog.exportSymbol('proto.validate.FieldRules', null, global); +goog.exportSymbol('proto.validate.FieldRules.TypeCase', null, global); +goog.exportSymbol('proto.validate.Fixed32Rules', null, global); +goog.exportSymbol('proto.validate.Fixed64Rules', null, global); +goog.exportSymbol('proto.validate.FloatRules', null, global); +goog.exportSymbol('proto.validate.Int32Rules', null, global); +goog.exportSymbol('proto.validate.Int64Rules', null, global); +goog.exportSymbol('proto.validate.KnownRegex', null, global); +goog.exportSymbol('proto.validate.MapRules', null, global); +goog.exportSymbol('proto.validate.MessageRules', null, global); +goog.exportSymbol('proto.validate.RepeatedRules', null, global); +goog.exportSymbol('proto.validate.SFixed32Rules', null, global); +goog.exportSymbol('proto.validate.SFixed64Rules', null, global); +goog.exportSymbol('proto.validate.SInt32Rules', null, global); +goog.exportSymbol('proto.validate.SInt64Rules', null, global); +goog.exportSymbol('proto.validate.StringRules', null, global); +goog.exportSymbol('proto.validate.StringRules.WellKnownCase', null, global); +goog.exportSymbol('proto.validate.TimestampRules', null, global); +goog.exportSymbol('proto.validate.UInt32Rules', null, global); +goog.exportSymbol('proto.validate.UInt64Rules', null, global); +goog.exportSymbol('proto.validate.disabled', null, global); +goog.exportSymbol('proto.validate.ignored', null, global); +goog.exportSymbol('proto.validate.required', null, global); +goog.exportSymbol('proto.validate.rules', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.FieldRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, proto.validate.FieldRules.oneofGroups_); +}; +goog.inherits(proto.validate.FieldRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.FieldRules.displayName = 'proto.validate.FieldRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.FloatRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.FloatRules.repeatedFields_, null); +}; +goog.inherits(proto.validate.FloatRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.FloatRules.displayName = 'proto.validate.FloatRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.DoubleRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.DoubleRules.repeatedFields_, null); +}; +goog.inherits(proto.validate.DoubleRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.DoubleRules.displayName = 'proto.validate.DoubleRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.Int32Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.Int32Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.Int32Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.Int32Rules.displayName = 'proto.validate.Int32Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.Int64Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.Int64Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.Int64Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.Int64Rules.displayName = 'proto.validate.Int64Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.UInt32Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.UInt32Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.UInt32Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.UInt32Rules.displayName = 'proto.validate.UInt32Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.UInt64Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.UInt64Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.UInt64Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.UInt64Rules.displayName = 'proto.validate.UInt64Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.SInt32Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.SInt32Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.SInt32Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.SInt32Rules.displayName = 'proto.validate.SInt32Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.SInt64Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.SInt64Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.SInt64Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.SInt64Rules.displayName = 'proto.validate.SInt64Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.Fixed32Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.Fixed32Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.Fixed32Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.Fixed32Rules.displayName = 'proto.validate.Fixed32Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.Fixed64Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.Fixed64Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.Fixed64Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.Fixed64Rules.displayName = 'proto.validate.Fixed64Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.SFixed32Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.SFixed32Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.SFixed32Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.SFixed32Rules.displayName = 'proto.validate.SFixed32Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.SFixed64Rules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.SFixed64Rules.repeatedFields_, null); +}; +goog.inherits(proto.validate.SFixed64Rules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.SFixed64Rules.displayName = 'proto.validate.SFixed64Rules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.BoolRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.validate.BoolRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.BoolRules.displayName = 'proto.validate.BoolRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.StringRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.StringRules.repeatedFields_, proto.validate.StringRules.oneofGroups_); +}; +goog.inherits(proto.validate.StringRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.StringRules.displayName = 'proto.validate.StringRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.BytesRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.BytesRules.repeatedFields_, proto.validate.BytesRules.oneofGroups_); +}; +goog.inherits(proto.validate.BytesRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.BytesRules.displayName = 'proto.validate.BytesRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.EnumRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.EnumRules.repeatedFields_, null); +}; +goog.inherits(proto.validate.EnumRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.EnumRules.displayName = 'proto.validate.EnumRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.MessageRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.validate.MessageRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.MessageRules.displayName = 'proto.validate.MessageRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.RepeatedRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.validate.RepeatedRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.RepeatedRules.displayName = 'proto.validate.RepeatedRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.MapRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.validate.MapRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.MapRules.displayName = 'proto.validate.MapRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.AnyRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.AnyRules.repeatedFields_, null); +}; +goog.inherits(proto.validate.AnyRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.AnyRules.displayName = 'proto.validate.AnyRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.DurationRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.validate.DurationRules.repeatedFields_, null); +}; +goog.inherits(proto.validate.DurationRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.DurationRules.displayName = 'proto.validate.DurationRules'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.validate.TimestampRules = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.validate.TimestampRules, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.validate.TimestampRules.displayName = 'proto.validate.TimestampRules'; +} + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.validate.FieldRules.oneofGroups_ = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22]]; + +/** + * @enum {number} + */ +proto.validate.FieldRules.TypeCase = { + TYPE_NOT_SET: 0, + FLOAT: 1, + DOUBLE: 2, + INT32: 3, + INT64: 4, + UINT32: 5, + UINT64: 6, + SINT32: 7, + SINT64: 8, + FIXED32: 9, + FIXED64: 10, + SFIXED32: 11, + SFIXED64: 12, + BOOL: 13, + STRING: 14, + BYTES: 15, + ENUM: 16, + REPEATED: 18, + MAP: 19, + ANY: 20, + DURATION: 21, + TIMESTAMP: 22 +}; + +/** + * @return {proto.validate.FieldRules.TypeCase} + */ +proto.validate.FieldRules.prototype.getTypeCase = function() { + return /** @type {proto.validate.FieldRules.TypeCase} */(jspb.Message.computeOneofCase(this, proto.validate.FieldRules.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.FieldRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.FieldRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.FieldRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.FieldRules.toObject = function(includeInstance, msg) { + var f, obj = { + message: (f = msg.getMessage()) && proto.validate.MessageRules.toObject(includeInstance, f), + pb_float: (f = msg.getFloat()) && proto.validate.FloatRules.toObject(includeInstance, f), + pb_double: (f = msg.getDouble()) && proto.validate.DoubleRules.toObject(includeInstance, f), + int32: (f = msg.getInt32()) && proto.validate.Int32Rules.toObject(includeInstance, f), + int64: (f = msg.getInt64()) && proto.validate.Int64Rules.toObject(includeInstance, f), + uint32: (f = msg.getUint32()) && proto.validate.UInt32Rules.toObject(includeInstance, f), + uint64: (f = msg.getUint64()) && proto.validate.UInt64Rules.toObject(includeInstance, f), + sint32: (f = msg.getSint32()) && proto.validate.SInt32Rules.toObject(includeInstance, f), + sint64: (f = msg.getSint64()) && proto.validate.SInt64Rules.toObject(includeInstance, f), + fixed32: (f = msg.getFixed32()) && proto.validate.Fixed32Rules.toObject(includeInstance, f), + fixed64: (f = msg.getFixed64()) && proto.validate.Fixed64Rules.toObject(includeInstance, f), + sfixed32: (f = msg.getSfixed32()) && proto.validate.SFixed32Rules.toObject(includeInstance, f), + sfixed64: (f = msg.getSfixed64()) && proto.validate.SFixed64Rules.toObject(includeInstance, f), + bool: (f = msg.getBool()) && proto.validate.BoolRules.toObject(includeInstance, f), + string: (f = msg.getString()) && proto.validate.StringRules.toObject(includeInstance, f), + bytes: (f = msg.getBytes()) && proto.validate.BytesRules.toObject(includeInstance, f), + pb_enum: (f = msg.getEnum()) && proto.validate.EnumRules.toObject(includeInstance, f), + repeated: (f = msg.getRepeated()) && proto.validate.RepeatedRules.toObject(includeInstance, f), + map: (f = msg.getMap()) && proto.validate.MapRules.toObject(includeInstance, f), + any: (f = msg.getAny()) && proto.validate.AnyRules.toObject(includeInstance, f), + duration: (f = msg.getDuration()) && proto.validate.DurationRules.toObject(includeInstance, f), + timestamp: (f = msg.getTimestamp()) && proto.validate.TimestampRules.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.FieldRules} + */ +proto.validate.FieldRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.FieldRules; + return proto.validate.FieldRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.FieldRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.FieldRules} + */ +proto.validate.FieldRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 17: + var value = new proto.validate.MessageRules; + reader.readMessage(value,proto.validate.MessageRules.deserializeBinaryFromReader); + msg.setMessage(value); + break; + case 1: + var value = new proto.validate.FloatRules; + reader.readMessage(value,proto.validate.FloatRules.deserializeBinaryFromReader); + msg.setFloat(value); + break; + case 2: + var value = new proto.validate.DoubleRules; + reader.readMessage(value,proto.validate.DoubleRules.deserializeBinaryFromReader); + msg.setDouble(value); + break; + case 3: + var value = new proto.validate.Int32Rules; + reader.readMessage(value,proto.validate.Int32Rules.deserializeBinaryFromReader); + msg.setInt32(value); + break; + case 4: + var value = new proto.validate.Int64Rules; + reader.readMessage(value,proto.validate.Int64Rules.deserializeBinaryFromReader); + msg.setInt64(value); + break; + case 5: + var value = new proto.validate.UInt32Rules; + reader.readMessage(value,proto.validate.UInt32Rules.deserializeBinaryFromReader); + msg.setUint32(value); + break; + case 6: + var value = new proto.validate.UInt64Rules; + reader.readMessage(value,proto.validate.UInt64Rules.deserializeBinaryFromReader); + msg.setUint64(value); + break; + case 7: + var value = new proto.validate.SInt32Rules; + reader.readMessage(value,proto.validate.SInt32Rules.deserializeBinaryFromReader); + msg.setSint32(value); + break; + case 8: + var value = new proto.validate.SInt64Rules; + reader.readMessage(value,proto.validate.SInt64Rules.deserializeBinaryFromReader); + msg.setSint64(value); + break; + case 9: + var value = new proto.validate.Fixed32Rules; + reader.readMessage(value,proto.validate.Fixed32Rules.deserializeBinaryFromReader); + msg.setFixed32(value); + break; + case 10: + var value = new proto.validate.Fixed64Rules; + reader.readMessage(value,proto.validate.Fixed64Rules.deserializeBinaryFromReader); + msg.setFixed64(value); + break; + case 11: + var value = new proto.validate.SFixed32Rules; + reader.readMessage(value,proto.validate.SFixed32Rules.deserializeBinaryFromReader); + msg.setSfixed32(value); + break; + case 12: + var value = new proto.validate.SFixed64Rules; + reader.readMessage(value,proto.validate.SFixed64Rules.deserializeBinaryFromReader); + msg.setSfixed64(value); + break; + case 13: + var value = new proto.validate.BoolRules; + reader.readMessage(value,proto.validate.BoolRules.deserializeBinaryFromReader); + msg.setBool(value); + break; + case 14: + var value = new proto.validate.StringRules; + reader.readMessage(value,proto.validate.StringRules.deserializeBinaryFromReader); + msg.setString(value); + break; + case 15: + var value = new proto.validate.BytesRules; + reader.readMessage(value,proto.validate.BytesRules.deserializeBinaryFromReader); + msg.setBytes(value); + break; + case 16: + var value = new proto.validate.EnumRules; + reader.readMessage(value,proto.validate.EnumRules.deserializeBinaryFromReader); + msg.setEnum(value); + break; + case 18: + var value = new proto.validate.RepeatedRules; + reader.readMessage(value,proto.validate.RepeatedRules.deserializeBinaryFromReader); + msg.setRepeated(value); + break; + case 19: + var value = new proto.validate.MapRules; + reader.readMessage(value,proto.validate.MapRules.deserializeBinaryFromReader); + msg.setMap(value); + break; + case 20: + var value = new proto.validate.AnyRules; + reader.readMessage(value,proto.validate.AnyRules.deserializeBinaryFromReader); + msg.setAny(value); + break; + case 21: + var value = new proto.validate.DurationRules; + reader.readMessage(value,proto.validate.DurationRules.deserializeBinaryFromReader); + msg.setDuration(value); + break; + case 22: + var value = new proto.validate.TimestampRules; + reader.readMessage(value,proto.validate.TimestampRules.deserializeBinaryFromReader); + msg.setTimestamp(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.FieldRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.FieldRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.FieldRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.FieldRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMessage(); + if (f != null) { + writer.writeMessage( + 17, + f, + proto.validate.MessageRules.serializeBinaryToWriter + ); + } + f = message.getFloat(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.validate.FloatRules.serializeBinaryToWriter + ); + } + f = message.getDouble(); + if (f != null) { + writer.writeMessage( + 2, + f, + proto.validate.DoubleRules.serializeBinaryToWriter + ); + } + f = message.getInt32(); + if (f != null) { + writer.writeMessage( + 3, + f, + proto.validate.Int32Rules.serializeBinaryToWriter + ); + } + f = message.getInt64(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.validate.Int64Rules.serializeBinaryToWriter + ); + } + f = message.getUint32(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.validate.UInt32Rules.serializeBinaryToWriter + ); + } + f = message.getUint64(); + if (f != null) { + writer.writeMessage( + 6, + f, + proto.validate.UInt64Rules.serializeBinaryToWriter + ); + } + f = message.getSint32(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.validate.SInt32Rules.serializeBinaryToWriter + ); + } + f = message.getSint64(); + if (f != null) { + writer.writeMessage( + 8, + f, + proto.validate.SInt64Rules.serializeBinaryToWriter + ); + } + f = message.getFixed32(); + if (f != null) { + writer.writeMessage( + 9, + f, + proto.validate.Fixed32Rules.serializeBinaryToWriter + ); + } + f = message.getFixed64(); + if (f != null) { + writer.writeMessage( + 10, + f, + proto.validate.Fixed64Rules.serializeBinaryToWriter + ); + } + f = message.getSfixed32(); + if (f != null) { + writer.writeMessage( + 11, + f, + proto.validate.SFixed32Rules.serializeBinaryToWriter + ); + } + f = message.getSfixed64(); + if (f != null) { + writer.writeMessage( + 12, + f, + proto.validate.SFixed64Rules.serializeBinaryToWriter + ); + } + f = message.getBool(); + if (f != null) { + writer.writeMessage( + 13, + f, + proto.validate.BoolRules.serializeBinaryToWriter + ); + } + f = message.getString(); + if (f != null) { + writer.writeMessage( + 14, + f, + proto.validate.StringRules.serializeBinaryToWriter + ); + } + f = message.getBytes(); + if (f != null) { + writer.writeMessage( + 15, + f, + proto.validate.BytesRules.serializeBinaryToWriter + ); + } + f = message.getEnum(); + if (f != null) { + writer.writeMessage( + 16, + f, + proto.validate.EnumRules.serializeBinaryToWriter + ); + } + f = message.getRepeated(); + if (f != null) { + writer.writeMessage( + 18, + f, + proto.validate.RepeatedRules.serializeBinaryToWriter + ); + } + f = message.getMap(); + if (f != null) { + writer.writeMessage( + 19, + f, + proto.validate.MapRules.serializeBinaryToWriter + ); + } + f = message.getAny(); + if (f != null) { + writer.writeMessage( + 20, + f, + proto.validate.AnyRules.serializeBinaryToWriter + ); + } + f = message.getDuration(); + if (f != null) { + writer.writeMessage( + 21, + f, + proto.validate.DurationRules.serializeBinaryToWriter + ); + } + f = message.getTimestamp(); + if (f != null) { + writer.writeMessage( + 22, + f, + proto.validate.TimestampRules.serializeBinaryToWriter + ); + } +}; + + +/** + * optional MessageRules message = 17; + * @return {?proto.validate.MessageRules} + */ +proto.validate.FieldRules.prototype.getMessage = function() { + return /** @type{?proto.validate.MessageRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.MessageRules, 17)); +}; + + +/** + * @param {?proto.validate.MessageRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setMessage = function(value) { + return jspb.Message.setWrapperField(this, 17, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearMessage = function() { + return this.setMessage(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasMessage = function() { + return jspb.Message.getField(this, 17) != null; +}; + + +/** + * optional FloatRules float = 1; + * @return {?proto.validate.FloatRules} + */ +proto.validate.FieldRules.prototype.getFloat = function() { + return /** @type{?proto.validate.FloatRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.FloatRules, 1)); +}; + + +/** + * @param {?proto.validate.FloatRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setFloat = function(value) { + return jspb.Message.setOneofWrapperField(this, 1, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearFloat = function() { + return this.setFloat(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasFloat = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional DoubleRules double = 2; + * @return {?proto.validate.DoubleRules} + */ +proto.validate.FieldRules.prototype.getDouble = function() { + return /** @type{?proto.validate.DoubleRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.DoubleRules, 2)); +}; + + +/** + * @param {?proto.validate.DoubleRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setDouble = function(value) { + return jspb.Message.setOneofWrapperField(this, 2, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearDouble = function() { + return this.setDouble(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasDouble = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional Int32Rules int32 = 3; + * @return {?proto.validate.Int32Rules} + */ +proto.validate.FieldRules.prototype.getInt32 = function() { + return /** @type{?proto.validate.Int32Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.Int32Rules, 3)); +}; + + +/** + * @param {?proto.validate.Int32Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setInt32 = function(value) { + return jspb.Message.setOneofWrapperField(this, 3, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearInt32 = function() { + return this.setInt32(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasInt32 = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional Int64Rules int64 = 4; + * @return {?proto.validate.Int64Rules} + */ +proto.validate.FieldRules.prototype.getInt64 = function() { + return /** @type{?proto.validate.Int64Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.Int64Rules, 4)); +}; + + +/** + * @param {?proto.validate.Int64Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setInt64 = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearInt64 = function() { + return this.setInt64(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasInt64 = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional UInt32Rules uint32 = 5; + * @return {?proto.validate.UInt32Rules} + */ +proto.validate.FieldRules.prototype.getUint32 = function() { + return /** @type{?proto.validate.UInt32Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.UInt32Rules, 5)); +}; + + +/** + * @param {?proto.validate.UInt32Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setUint32 = function(value) { + return jspb.Message.setOneofWrapperField(this, 5, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearUint32 = function() { + return this.setUint32(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasUint32 = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional UInt64Rules uint64 = 6; + * @return {?proto.validate.UInt64Rules} + */ +proto.validate.FieldRules.prototype.getUint64 = function() { + return /** @type{?proto.validate.UInt64Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.UInt64Rules, 6)); +}; + + +/** + * @param {?proto.validate.UInt64Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setUint64 = function(value) { + return jspb.Message.setOneofWrapperField(this, 6, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearUint64 = function() { + return this.setUint64(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasUint64 = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional SInt32Rules sint32 = 7; + * @return {?proto.validate.SInt32Rules} + */ +proto.validate.FieldRules.prototype.getSint32 = function() { + return /** @type{?proto.validate.SInt32Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.SInt32Rules, 7)); +}; + + +/** + * @param {?proto.validate.SInt32Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setSint32 = function(value) { + return jspb.Message.setOneofWrapperField(this, 7, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearSint32 = function() { + return this.setSint32(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasSint32 = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional SInt64Rules sint64 = 8; + * @return {?proto.validate.SInt64Rules} + */ +proto.validate.FieldRules.prototype.getSint64 = function() { + return /** @type{?proto.validate.SInt64Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.SInt64Rules, 8)); +}; + + +/** + * @param {?proto.validate.SInt64Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setSint64 = function(value) { + return jspb.Message.setOneofWrapperField(this, 8, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearSint64 = function() { + return this.setSint64(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasSint64 = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional Fixed32Rules fixed32 = 9; + * @return {?proto.validate.Fixed32Rules} + */ +proto.validate.FieldRules.prototype.getFixed32 = function() { + return /** @type{?proto.validate.Fixed32Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.Fixed32Rules, 9)); +}; + + +/** + * @param {?proto.validate.Fixed32Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setFixed32 = function(value) { + return jspb.Message.setOneofWrapperField(this, 9, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearFixed32 = function() { + return this.setFixed32(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasFixed32 = function() { + return jspb.Message.getField(this, 9) != null; +}; + + +/** + * optional Fixed64Rules fixed64 = 10; + * @return {?proto.validate.Fixed64Rules} + */ +proto.validate.FieldRules.prototype.getFixed64 = function() { + return /** @type{?proto.validate.Fixed64Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.Fixed64Rules, 10)); +}; + + +/** + * @param {?proto.validate.Fixed64Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setFixed64 = function(value) { + return jspb.Message.setOneofWrapperField(this, 10, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearFixed64 = function() { + return this.setFixed64(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasFixed64 = function() { + return jspb.Message.getField(this, 10) != null; +}; + + +/** + * optional SFixed32Rules sfixed32 = 11; + * @return {?proto.validate.SFixed32Rules} + */ +proto.validate.FieldRules.prototype.getSfixed32 = function() { + return /** @type{?proto.validate.SFixed32Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.SFixed32Rules, 11)); +}; + + +/** + * @param {?proto.validate.SFixed32Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setSfixed32 = function(value) { + return jspb.Message.setOneofWrapperField(this, 11, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearSfixed32 = function() { + return this.setSfixed32(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasSfixed32 = function() { + return jspb.Message.getField(this, 11) != null; +}; + + +/** + * optional SFixed64Rules sfixed64 = 12; + * @return {?proto.validate.SFixed64Rules} + */ +proto.validate.FieldRules.prototype.getSfixed64 = function() { + return /** @type{?proto.validate.SFixed64Rules} */ ( + jspb.Message.getWrapperField(this, proto.validate.SFixed64Rules, 12)); +}; + + +/** + * @param {?proto.validate.SFixed64Rules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setSfixed64 = function(value) { + return jspb.Message.setOneofWrapperField(this, 12, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearSfixed64 = function() { + return this.setSfixed64(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasSfixed64 = function() { + return jspb.Message.getField(this, 12) != null; +}; + + +/** + * optional BoolRules bool = 13; + * @return {?proto.validate.BoolRules} + */ +proto.validate.FieldRules.prototype.getBool = function() { + return /** @type{?proto.validate.BoolRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.BoolRules, 13)); +}; + + +/** + * @param {?proto.validate.BoolRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setBool = function(value) { + return jspb.Message.setOneofWrapperField(this, 13, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearBool = function() { + return this.setBool(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasBool = function() { + return jspb.Message.getField(this, 13) != null; +}; + + +/** + * optional StringRules string = 14; + * @return {?proto.validate.StringRules} + */ +proto.validate.FieldRules.prototype.getString = function() { + return /** @type{?proto.validate.StringRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.StringRules, 14)); +}; + + +/** + * @param {?proto.validate.StringRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setString = function(value) { + return jspb.Message.setOneofWrapperField(this, 14, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearString = function() { + return this.setString(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasString = function() { + return jspb.Message.getField(this, 14) != null; +}; + + +/** + * optional BytesRules bytes = 15; + * @return {?proto.validate.BytesRules} + */ +proto.validate.FieldRules.prototype.getBytes = function() { + return /** @type{?proto.validate.BytesRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.BytesRules, 15)); +}; + + +/** + * @param {?proto.validate.BytesRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setBytes = function(value) { + return jspb.Message.setOneofWrapperField(this, 15, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearBytes = function() { + return this.setBytes(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasBytes = function() { + return jspb.Message.getField(this, 15) != null; +}; + + +/** + * optional EnumRules enum = 16; + * @return {?proto.validate.EnumRules} + */ +proto.validate.FieldRules.prototype.getEnum = function() { + return /** @type{?proto.validate.EnumRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.EnumRules, 16)); +}; + + +/** + * @param {?proto.validate.EnumRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setEnum = function(value) { + return jspb.Message.setOneofWrapperField(this, 16, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearEnum = function() { + return this.setEnum(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasEnum = function() { + return jspb.Message.getField(this, 16) != null; +}; + + +/** + * optional RepeatedRules repeated = 18; + * @return {?proto.validate.RepeatedRules} + */ +proto.validate.FieldRules.prototype.getRepeated = function() { + return /** @type{?proto.validate.RepeatedRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.RepeatedRules, 18)); +}; + + +/** + * @param {?proto.validate.RepeatedRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setRepeated = function(value) { + return jspb.Message.setOneofWrapperField(this, 18, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearRepeated = function() { + return this.setRepeated(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasRepeated = function() { + return jspb.Message.getField(this, 18) != null; +}; + + +/** + * optional MapRules map = 19; + * @return {?proto.validate.MapRules} + */ +proto.validate.FieldRules.prototype.getMap = function() { + return /** @type{?proto.validate.MapRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.MapRules, 19)); +}; + + +/** + * @param {?proto.validate.MapRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setMap = function(value) { + return jspb.Message.setOneofWrapperField(this, 19, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearMap = function() { + return this.setMap(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasMap = function() { + return jspb.Message.getField(this, 19) != null; +}; + + +/** + * optional AnyRules any = 20; + * @return {?proto.validate.AnyRules} + */ +proto.validate.FieldRules.prototype.getAny = function() { + return /** @type{?proto.validate.AnyRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.AnyRules, 20)); +}; + + +/** + * @param {?proto.validate.AnyRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setAny = function(value) { + return jspb.Message.setOneofWrapperField(this, 20, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearAny = function() { + return this.setAny(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasAny = function() { + return jspb.Message.getField(this, 20) != null; +}; + + +/** + * optional DurationRules duration = 21; + * @return {?proto.validate.DurationRules} + */ +proto.validate.FieldRules.prototype.getDuration = function() { + return /** @type{?proto.validate.DurationRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.DurationRules, 21)); +}; + + +/** + * @param {?proto.validate.DurationRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setDuration = function(value) { + return jspb.Message.setOneofWrapperField(this, 21, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearDuration = function() { + return this.setDuration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasDuration = function() { + return jspb.Message.getField(this, 21) != null; +}; + + +/** + * optional TimestampRules timestamp = 22; + * @return {?proto.validate.TimestampRules} + */ +proto.validate.FieldRules.prototype.getTimestamp = function() { + return /** @type{?proto.validate.TimestampRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.TimestampRules, 22)); +}; + + +/** + * @param {?proto.validate.TimestampRules|undefined} value + * @return {!proto.validate.FieldRules} returns this +*/ +proto.validate.FieldRules.prototype.setTimestamp = function(value) { + return jspb.Message.setOneofWrapperField(this, 22, proto.validate.FieldRules.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.FieldRules} returns this + */ +proto.validate.FieldRules.prototype.clearTimestamp = function() { + return this.setTimestamp(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FieldRules.prototype.hasTimestamp = function() { + return jspb.Message.getField(this, 22) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.FloatRules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.FloatRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.FloatRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.FloatRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.FloatRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getOptionalFloatingPointField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getOptionalFloatingPointField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getOptionalFloatingPointField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getOptionalFloatingPointField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getOptionalFloatingPointField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.FloatRules} + */ +proto.validate.FloatRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.FloatRules; + return proto.validate.FloatRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.FloatRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.FloatRules} + */ +proto.validate.FloatRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readFloat()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFloat()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readFloat()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readFloat()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readFloat()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFloat() : [reader.readFloat()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFloat() : [reader.readFloat()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.FloatRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.FloatRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.FloatRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.FloatRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeFloat( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeFloat( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeFloat( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeFloat( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeFloat( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedFloat( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedFloat( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional float const = 1; + * @return {number} + */ +proto.validate.FloatRules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional float lt = 2; + * @return {number} + */ +proto.validate.FloatRules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional float lte = 3; + * @return {number} + */ +proto.validate.FloatRules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 3, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional float gt = 4; + * @return {number} + */ +proto.validate.FloatRules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional float gte = 5; + * @return {number} + */ +proto.validate.FloatRules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 5, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated float in = 6; + * @return {!Array} + */ +proto.validate.FloatRules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated float not_in = 7; + * @return {!Array} + */ +proto.validate.FloatRules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.FloatRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.FloatRules} returns this + */ +proto.validate.FloatRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.FloatRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.DoubleRules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.DoubleRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.DoubleRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.DoubleRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.DoubleRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getOptionalFloatingPointField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getOptionalFloatingPointField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getOptionalFloatingPointField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getOptionalFloatingPointField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getOptionalFloatingPointField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedFloatingPointField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.DoubleRules} + */ +proto.validate.DoubleRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.DoubleRules; + return proto.validate.DoubleRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.DoubleRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.DoubleRules} + */ +proto.validate.DoubleRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readDouble()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readDouble()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readDouble()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readDouble()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readDouble()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedDouble() : [reader.readDouble()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedDouble() : [reader.readDouble()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.DoubleRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.DoubleRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.DoubleRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.DoubleRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeDouble( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeDouble( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeDouble( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeDouble( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeDouble( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedDouble( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedDouble( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional double const = 1; + * @return {number} + */ +proto.validate.DoubleRules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional double lt = 2; + * @return {number} + */ +proto.validate.DoubleRules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional double lte = 3; + * @return {number} + */ +proto.validate.DoubleRules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 3, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional double gt = 4; + * @return {number} + */ +proto.validate.DoubleRules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional double gte = 5; + * @return {number} + */ +proto.validate.DoubleRules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 5, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated double in = 6; + * @return {!Array} + */ +proto.validate.DoubleRules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated double not_in = 7; + * @return {!Array} + */ +proto.validate.DoubleRules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedFloatingPointField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DoubleRules} returns this + */ +proto.validate.DoubleRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DoubleRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.Int32Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.Int32Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.Int32Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.Int32Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Int32Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.Int32Rules} + */ +proto.validate.Int32Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.Int32Rules; + return proto.validate.Int32Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.Int32Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.Int32Rules} + */ +proto.validate.Int32Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt32()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readInt32()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readInt32()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt32() : [reader.readInt32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt32() : [reader.readInt32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.Int32Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.Int32Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.Int32Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Int32Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt32( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt32( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeInt32( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeInt32( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeInt32( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedInt32( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedInt32( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional int32 const = 1; + * @return {number} + */ +proto.validate.Int32Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int32 lt = 2; + * @return {number} + */ +proto.validate.Int32Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional int32 lte = 3; + * @return {number} + */ +proto.validate.Int32Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional int32 gt = 4; + * @return {number} + */ +proto.validate.Int32Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional int32 gte = 5; + * @return {number} + */ +proto.validate.Int32Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated int32 in = 6; + * @return {!Array} + */ +proto.validate.Int32Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated int32 not_in = 7; + * @return {!Array} + */ +proto.validate.Int32Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int32Rules} returns this + */ +proto.validate.Int32Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int32Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.Int64Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.Int64Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.Int64Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.Int64Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Int64Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.Int64Rules} + */ +proto.validate.Int64Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.Int64Rules; + return proto.validate.Int64Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.Int64Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.Int64Rules} + */ +proto.validate.Int64Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt64()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readInt64()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readInt64()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.Int64Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.Int64Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.Int64Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Int64Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeInt64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeInt64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeInt64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeInt64( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedInt64( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional int64 const = 1; + * @return {number} + */ +proto.validate.Int64Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional int64 lt = 2; + * @return {number} + */ +proto.validate.Int64Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional int64 lte = 3; + * @return {number} + */ +proto.validate.Int64Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional int64 gt = 4; + * @return {number} + */ +proto.validate.Int64Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional int64 gte = 5; + * @return {number} + */ +proto.validate.Int64Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated int64 in = 6; + * @return {!Array} + */ +proto.validate.Int64Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated int64 not_in = 7; + * @return {!Array} + */ +proto.validate.Int64Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Int64Rules} returns this + */ +proto.validate.Int64Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Int64Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.UInt32Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.UInt32Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.UInt32Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.UInt32Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.UInt32Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.UInt32Rules} + */ +proto.validate.UInt32Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.UInt32Rules; + return proto.validate.UInt32Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.UInt32Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.UInt32Rules} + */ +proto.validate.UInt32Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint32()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint32()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint32() : [reader.readUint32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint32() : [reader.readUint32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.UInt32Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.UInt32Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.UInt32Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.UInt32Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeUint32( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint32( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeUint32( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeUint32( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeUint32( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedUint32( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedUint32( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional uint32 const = 1; + * @return {number} + */ +proto.validate.UInt32Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint32 lt = 2; + * @return {number} + */ +proto.validate.UInt32Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional uint32 lte = 3; + * @return {number} + */ +proto.validate.UInt32Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional uint32 gt = 4; + * @return {number} + */ +proto.validate.UInt32Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional uint32 gte = 5; + * @return {number} + */ +proto.validate.UInt32Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated uint32 in = 6; + * @return {!Array} + */ +proto.validate.UInt32Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated uint32 not_in = 7; + * @return {!Array} + */ +proto.validate.UInt32Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt32Rules} returns this + */ +proto.validate.UInt32Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt32Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.UInt64Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.UInt64Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.UInt64Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.UInt64Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.UInt64Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.UInt64Rules} + */ +proto.validate.UInt64Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.UInt64Rules; + return proto.validate.UInt64Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.UInt64Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.UInt64Rules} + */ +proto.validate.UInt64Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint64()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint64()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint64()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint64()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64() : [reader.readUint64()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64() : [reader.readUint64()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.UInt64Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.UInt64Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.UInt64Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.UInt64Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeUint64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeUint64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeUint64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeUint64( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedUint64( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedUint64( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional uint64 const = 1; + * @return {number} + */ +proto.validate.UInt64Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 lt = 2; + * @return {number} + */ +proto.validate.UInt64Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional uint64 lte = 3; + * @return {number} + */ +proto.validate.UInt64Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional uint64 gt = 4; + * @return {number} + */ +proto.validate.UInt64Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional uint64 gte = 5; + * @return {number} + */ +proto.validate.UInt64Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated uint64 in = 6; + * @return {!Array} + */ +proto.validate.UInt64Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated uint64 not_in = 7; + * @return {!Array} + */ +proto.validate.UInt64Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.UInt64Rules} returns this + */ +proto.validate.UInt64Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.UInt64Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.SInt32Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.SInt32Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.SInt32Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.SInt32Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SInt32Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.SInt32Rules} + */ +proto.validate.SInt32Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.SInt32Rules; + return proto.validate.SInt32Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.SInt32Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.SInt32Rules} + */ +proto.validate.SInt32Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readSint32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readSint32()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readSint32()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readSint32()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readSint32()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSint32() : [reader.readSint32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSint32() : [reader.readSint32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.SInt32Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.SInt32Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.SInt32Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SInt32Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeSint32( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeSint32( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeSint32( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeSint32( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeSint32( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedSint32( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedSint32( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional sint32 const = 1; + * @return {number} + */ +proto.validate.SInt32Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional sint32 lt = 2; + * @return {number} + */ +proto.validate.SInt32Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional sint32 lte = 3; + * @return {number} + */ +proto.validate.SInt32Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional sint32 gt = 4; + * @return {number} + */ +proto.validate.SInt32Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional sint32 gte = 5; + * @return {number} + */ +proto.validate.SInt32Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated sint32 in = 6; + * @return {!Array} + */ +proto.validate.SInt32Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated sint32 not_in = 7; + * @return {!Array} + */ +proto.validate.SInt32Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt32Rules} returns this + */ +proto.validate.SInt32Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt32Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.SInt64Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.SInt64Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.SInt64Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.SInt64Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SInt64Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.SInt64Rules} + */ +proto.validate.SInt64Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.SInt64Rules; + return proto.validate.SInt64Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.SInt64Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.SInt64Rules} + */ +proto.validate.SInt64Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readSint64()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readSint64()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readSint64()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readSint64()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readSint64()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSint64() : [reader.readSint64()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSint64() : [reader.readSint64()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.SInt64Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.SInt64Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.SInt64Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SInt64Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeSint64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeSint64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeSint64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeSint64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeSint64( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedSint64( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedSint64( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional sint64 const = 1; + * @return {number} + */ +proto.validate.SInt64Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional sint64 lt = 2; + * @return {number} + */ +proto.validate.SInt64Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional sint64 lte = 3; + * @return {number} + */ +proto.validate.SInt64Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional sint64 gt = 4; + * @return {number} + */ +proto.validate.SInt64Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional sint64 gte = 5; + * @return {number} + */ +proto.validate.SInt64Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated sint64 in = 6; + * @return {!Array} + */ +proto.validate.SInt64Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated sint64 not_in = 7; + * @return {!Array} + */ +proto.validate.SInt64Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SInt64Rules} returns this + */ +proto.validate.SInt64Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SInt64Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.Fixed32Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.Fixed32Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.Fixed32Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.Fixed32Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Fixed32Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.Fixed32Rules} + */ +proto.validate.Fixed32Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.Fixed32Rules; + return proto.validate.Fixed32Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.Fixed32Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.Fixed32Rules} + */ +proto.validate.Fixed32Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readFixed32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFixed32()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readFixed32()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readFixed32()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readFixed32()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFixed32() : [reader.readFixed32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFixed32() : [reader.readFixed32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.Fixed32Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.Fixed32Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.Fixed32Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Fixed32Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeFixed32( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeFixed32( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeFixed32( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeFixed32( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeFixed32( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedFixed32( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedFixed32( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional fixed32 const = 1; + * @return {number} + */ +proto.validate.Fixed32Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional fixed32 lt = 2; + * @return {number} + */ +proto.validate.Fixed32Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional fixed32 lte = 3; + * @return {number} + */ +proto.validate.Fixed32Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional fixed32 gt = 4; + * @return {number} + */ +proto.validate.Fixed32Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional fixed32 gte = 5; + * @return {number} + */ +proto.validate.Fixed32Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated fixed32 in = 6; + * @return {!Array} + */ +proto.validate.Fixed32Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated fixed32 not_in = 7; + * @return {!Array} + */ +proto.validate.Fixed32Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed32Rules} returns this + */ +proto.validate.Fixed32Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed32Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.Fixed64Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.Fixed64Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.Fixed64Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.Fixed64Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Fixed64Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.Fixed64Rules} + */ +proto.validate.Fixed64Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.Fixed64Rules; + return proto.validate.Fixed64Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.Fixed64Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.Fixed64Rules} + */ +proto.validate.Fixed64Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readFixed64()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFixed64()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readFixed64()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readFixed64()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readFixed64()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFixed64() : [reader.readFixed64()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedFixed64() : [reader.readFixed64()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.Fixed64Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.Fixed64Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.Fixed64Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.Fixed64Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeFixed64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeFixed64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeFixed64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeFixed64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeFixed64( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedFixed64( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedFixed64( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional fixed64 const = 1; + * @return {number} + */ +proto.validate.Fixed64Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional fixed64 lt = 2; + * @return {number} + */ +proto.validate.Fixed64Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional fixed64 lte = 3; + * @return {number} + */ +proto.validate.Fixed64Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional fixed64 gt = 4; + * @return {number} + */ +proto.validate.Fixed64Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional fixed64 gte = 5; + * @return {number} + */ +proto.validate.Fixed64Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated fixed64 in = 6; + * @return {!Array} + */ +proto.validate.Fixed64Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated fixed64 not_in = 7; + * @return {!Array} + */ +proto.validate.Fixed64Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.Fixed64Rules} returns this + */ +proto.validate.Fixed64Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.Fixed64Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.SFixed32Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.SFixed32Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.SFixed32Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.SFixed32Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SFixed32Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.SFixed32Rules} + */ +proto.validate.SFixed32Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.SFixed32Rules; + return proto.validate.SFixed32Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.SFixed32Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.SFixed32Rules} + */ +proto.validate.SFixed32Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readSfixed32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readSfixed32()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readSfixed32()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readSfixed32()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readSfixed32()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSfixed32() : [reader.readSfixed32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSfixed32() : [reader.readSfixed32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.SFixed32Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.SFixed32Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.SFixed32Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SFixed32Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeSfixed32( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeSfixed32( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeSfixed32( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeSfixed32( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeSfixed32( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedSfixed32( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedSfixed32( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional sfixed32 const = 1; + * @return {number} + */ +proto.validate.SFixed32Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional sfixed32 lt = 2; + * @return {number} + */ +proto.validate.SFixed32Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional sfixed32 lte = 3; + * @return {number} + */ +proto.validate.SFixed32Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional sfixed32 gt = 4; + * @return {number} + */ +proto.validate.SFixed32Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional sfixed32 gte = 5; + * @return {number} + */ +proto.validate.SFixed32Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated sfixed32 in = 6; + * @return {!Array} + */ +proto.validate.SFixed32Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated sfixed32 not_in = 7; + * @return {!Array} + */ +proto.validate.SFixed32Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed32Rules} returns this + */ +proto.validate.SFixed32Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed32Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.SFixed64Rules.repeatedFields_ = [6,7]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.SFixed64Rules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.SFixed64Rules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.SFixed64Rules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SFixed64Rules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + lt: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + lte: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + gt: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + gte: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.SFixed64Rules} + */ +proto.validate.SFixed64Rules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.SFixed64Rules; + return proto.validate.SFixed64Rules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.SFixed64Rules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.SFixed64Rules} + */ +proto.validate.SFixed64Rules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readSfixed64()); + msg.setConst(value); + break; + case 2: + var value = /** @type {number} */ (reader.readSfixed64()); + msg.setLt(value); + break; + case 3: + var value = /** @type {number} */ (reader.readSfixed64()); + msg.setLte(value); + break; + case 4: + var value = /** @type {number} */ (reader.readSfixed64()); + msg.setGt(value); + break; + case 5: + var value = /** @type {number} */ (reader.readSfixed64()); + msg.setGte(value); + break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSfixed64() : [reader.readSfixed64()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedSfixed64() : [reader.readSfixed64()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.SFixed64Rules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.SFixed64Rules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.SFixed64Rules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.SFixed64Rules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeSfixed64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeSfixed64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeSfixed64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeSfixed64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeSfixed64( + 5, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedSfixed64( + 6, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedSfixed64( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } +}; + + +/** + * optional sfixed64 const = 1; + * @return {number} + */ +proto.validate.SFixed64Rules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional sfixed64 lt = 2; + * @return {number} + */ +proto.validate.SFixed64Rules.prototype.getLt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setLt = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearLt = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasLt = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional sfixed64 lte = 3; + * @return {number} + */ +proto.validate.SFixed64Rules.prototype.getLte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setLte = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearLte = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasLte = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional sfixed64 gt = 4; + * @return {number} + */ +proto.validate.SFixed64Rules.prototype.getGt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setGt = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearGt = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasGt = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional sfixed64 gte = 5; + * @return {number} + */ +proto.validate.SFixed64Rules.prototype.getGte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setGte = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearGte = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasGte = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * repeated sfixed64 in = 6; + * @return {!Array} + */ +proto.validate.SFixed64Rules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated sfixed64 not_in = 7; + * @return {!Array} + */ +proto.validate.SFixed64Rules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ignore_empty = 8; + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.SFixed64Rules} returns this + */ +proto.validate.SFixed64Rules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.SFixed64Rules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 8) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.BoolRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.BoolRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.BoolRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.BoolRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.BoolRules} + */ +proto.validate.BoolRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.BoolRules; + return proto.validate.BoolRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.BoolRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.BoolRules} + */ +proto.validate.BoolRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setConst(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.BoolRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.BoolRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.BoolRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.BoolRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } +}; + + +/** + * optional bool const = 1; + * @return {boolean} + */ +proto.validate.BoolRules.prototype.getConst = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.BoolRules} returns this + */ +proto.validate.BoolRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BoolRules} returns this + */ +proto.validate.BoolRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BoolRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.StringRules.repeatedFields_ = [10,11]; + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.validate.StringRules.oneofGroups_ = [[12,13,14,15,16,17,18,21,22,24]]; + +/** + * @enum {number} + */ +proto.validate.StringRules.WellKnownCase = { + WELL_KNOWN_NOT_SET: 0, + EMAIL: 12, + HOSTNAME: 13, + IP: 14, + IPV4: 15, + IPV6: 16, + URI: 17, + URI_REF: 18, + ADDRESS: 21, + UUID: 22, + WELL_KNOWN_REGEX: 24 +}; + +/** + * @return {proto.validate.StringRules.WellKnownCase} + */ +proto.validate.StringRules.prototype.getWellKnownCase = function() { + return /** @type {proto.validate.StringRules.WellKnownCase} */(jspb.Message.computeOneofCase(this, proto.validate.StringRules.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.StringRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.StringRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.StringRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.StringRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + len: (f = jspb.Message.getField(msg, 19)) == null ? undefined : f, + minLen: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + maxLen: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + lenBytes: (f = jspb.Message.getField(msg, 20)) == null ? undefined : f, + minBytes: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + maxBytes: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f, + pattern: (f = jspb.Message.getField(msg, 6)) == null ? undefined : f, + prefix: (f = jspb.Message.getField(msg, 7)) == null ? undefined : f, + suffix: (f = jspb.Message.getField(msg, 8)) == null ? undefined : f, + contains: (f = jspb.Message.getField(msg, 9)) == null ? undefined : f, + notContains: (f = jspb.Message.getField(msg, 23)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 10)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 11)) == null ? undefined : f, + email: (f = jspb.Message.getBooleanField(msg, 12)) == null ? undefined : f, + hostname: (f = jspb.Message.getBooleanField(msg, 13)) == null ? undefined : f, + ip: (f = jspb.Message.getBooleanField(msg, 14)) == null ? undefined : f, + ipv4: (f = jspb.Message.getBooleanField(msg, 15)) == null ? undefined : f, + ipv6: (f = jspb.Message.getBooleanField(msg, 16)) == null ? undefined : f, + uri: (f = jspb.Message.getBooleanField(msg, 17)) == null ? undefined : f, + uriRef: (f = jspb.Message.getBooleanField(msg, 18)) == null ? undefined : f, + address: (f = jspb.Message.getBooleanField(msg, 21)) == null ? undefined : f, + uuid: (f = jspb.Message.getBooleanField(msg, 22)) == null ? undefined : f, + wellKnownRegex: (f = jspb.Message.getField(msg, 24)) == null ? undefined : f, + strict: jspb.Message.getBooleanFieldWithDefault(msg, 25, true), + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 26)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.StringRules} + */ +proto.validate.StringRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.StringRules; + return proto.validate.StringRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.StringRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.StringRules} + */ +proto.validate.StringRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setConst(value); + break; + case 19: + var value = /** @type {number} */ (reader.readUint64()); + msg.setLen(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinLen(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMaxLen(value); + break; + case 20: + var value = /** @type {number} */ (reader.readUint64()); + msg.setLenBytes(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinBytes(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMaxBytes(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setPattern(value); + break; + case 7: + var value = /** @type {string} */ (reader.readString()); + msg.setPrefix(value); + break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setSuffix(value); + break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setContains(value); + break; + case 23: + var value = /** @type {string} */ (reader.readString()); + msg.setNotContains(value); + break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.addIn(value); + break; + case 11: + var value = /** @type {string} */ (reader.readString()); + msg.addNotIn(value); + break; + case 12: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setEmail(value); + break; + case 13: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setHostname(value); + break; + case 14: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIp(value); + break; + case 15: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIpv4(value); + break; + case 16: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIpv6(value); + break; + case 17: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setUri(value); + break; + case 18: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setUriRef(value); + break; + case 21: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAddress(value); + break; + case 22: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setUuid(value); + break; + case 24: + var value = /** @type {!proto.validate.KnownRegex} */ (reader.readEnum()); + msg.setWellKnownRegex(value); + break; + case 25: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setStrict(value); + break; + case 26: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.StringRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.StringRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.StringRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.StringRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {string} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeString( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 19)); + if (f != null) { + writer.writeUint64( + 19, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeUint64( + 3, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 20)); + if (f != null) { + writer.writeUint64( + 20, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeUint64( + 4, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeUint64( + 5, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeString( + 6, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeString( + 7, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeString( + 8, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 9)); + if (f != null) { + writer.writeString( + 9, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 23)); + if (f != null) { + writer.writeString( + 23, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedString( + 10, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedString( + 11, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 12)); + if (f != null) { + writer.writeBool( + 12, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 13)); + if (f != null) { + writer.writeBool( + 13, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 14)); + if (f != null) { + writer.writeBool( + 14, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 15)); + if (f != null) { + writer.writeBool( + 15, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 16)); + if (f != null) { + writer.writeBool( + 16, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 17)); + if (f != null) { + writer.writeBool( + 17, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 18)); + if (f != null) { + writer.writeBool( + 18, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 21)); + if (f != null) { + writer.writeBool( + 21, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 22)); + if (f != null) { + writer.writeBool( + 22, + f + ); + } + f = /** @type {!proto.validate.KnownRegex} */ (jspb.Message.getField(message, 24)); + if (f != null) { + writer.writeEnum( + 24, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 25)); + if (f != null) { + writer.writeBool( + 25, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 26)); + if (f != null) { + writer.writeBool( + 26, + f + ); + } +}; + + +/** + * optional string const = 1; + * @return {string} + */ +proto.validate.StringRules.prototype.getConst = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 len = 19; + * @return {number} + */ +proto.validate.StringRules.prototype.getLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 19, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setLen = function(value) { + return jspb.Message.setField(this, 19, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearLen = function() { + return jspb.Message.setField(this, 19, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasLen = function() { + return jspb.Message.getField(this, 19) != null; +}; + + +/** + * optional uint64 min_len = 2; + * @return {number} + */ +proto.validate.StringRules.prototype.getMinLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setMinLen = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearMinLen = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasMinLen = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional uint64 max_len = 3; + * @return {number} + */ +proto.validate.StringRules.prototype.getMaxLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setMaxLen = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearMaxLen = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasMaxLen = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional uint64 len_bytes = 20; + * @return {number} + */ +proto.validate.StringRules.prototype.getLenBytes = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 20, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setLenBytes = function(value) { + return jspb.Message.setField(this, 20, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearLenBytes = function() { + return jspb.Message.setField(this, 20, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasLenBytes = function() { + return jspb.Message.getField(this, 20) != null; +}; + + +/** + * optional uint64 min_bytes = 4; + * @return {number} + */ +proto.validate.StringRules.prototype.getMinBytes = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setMinBytes = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearMinBytes = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasMinBytes = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional uint64 max_bytes = 5; + * @return {number} + */ +proto.validate.StringRules.prototype.getMaxBytes = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setMaxBytes = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearMaxBytes = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasMaxBytes = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional string pattern = 6; + * @return {string} + */ +proto.validate.StringRules.prototype.getPattern = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setPattern = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearPattern = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasPattern = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional string prefix = 7; + * @return {string} + */ +proto.validate.StringRules.prototype.getPrefix = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setPrefix = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearPrefix = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasPrefix = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional string suffix = 8; + * @return {string} + */ +proto.validate.StringRules.prototype.getSuffix = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setSuffix = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearSuffix = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasSuffix = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional string contains = 9; + * @return {string} + */ +proto.validate.StringRules.prototype.getContains = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setContains = function(value) { + return jspb.Message.setField(this, 9, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearContains = function() { + return jspb.Message.setField(this, 9, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasContains = function() { + return jspb.Message.getField(this, 9) != null; +}; + + +/** + * optional string not_contains = 23; + * @return {string} + */ +proto.validate.StringRules.prototype.getNotContains = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 23, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setNotContains = function(value) { + return jspb.Message.setField(this, 23, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearNotContains = function() { + return jspb.Message.setField(this, 23, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasNotContains = function() { + return jspb.Message.getField(this, 23) != null; +}; + + +/** + * repeated string in = 10; + * @return {!Array} + */ +proto.validate.StringRules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 10)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 10, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 10, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated string not_in = 11; + * @return {!Array} + */ +proto.validate.StringRules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 11)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 11, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 11, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool email = 12; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getEmail = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 12, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setEmail = function(value) { + return jspb.Message.setOneofField(this, 12, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearEmail = function() { + return jspb.Message.setOneofField(this, 12, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasEmail = function() { + return jspb.Message.getField(this, 12) != null; +}; + + +/** + * optional bool hostname = 13; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getHostname = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 13, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setHostname = function(value) { + return jspb.Message.setOneofField(this, 13, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearHostname = function() { + return jspb.Message.setOneofField(this, 13, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasHostname = function() { + return jspb.Message.getField(this, 13) != null; +}; + + +/** + * optional bool ip = 14; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getIp = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 14, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setIp = function(value) { + return jspb.Message.setOneofField(this, 14, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearIp = function() { + return jspb.Message.setOneofField(this, 14, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasIp = function() { + return jspb.Message.getField(this, 14) != null; +}; + + +/** + * optional bool ipv4 = 15; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getIpv4 = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 15, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setIpv4 = function(value) { + return jspb.Message.setOneofField(this, 15, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearIpv4 = function() { + return jspb.Message.setOneofField(this, 15, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasIpv4 = function() { + return jspb.Message.getField(this, 15) != null; +}; + + +/** + * optional bool ipv6 = 16; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getIpv6 = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 16, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setIpv6 = function(value) { + return jspb.Message.setOneofField(this, 16, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearIpv6 = function() { + return jspb.Message.setOneofField(this, 16, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasIpv6 = function() { + return jspb.Message.getField(this, 16) != null; +}; + + +/** + * optional bool uri = 17; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getUri = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 17, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setUri = function(value) { + return jspb.Message.setOneofField(this, 17, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearUri = function() { + return jspb.Message.setOneofField(this, 17, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasUri = function() { + return jspb.Message.getField(this, 17) != null; +}; + + +/** + * optional bool uri_ref = 18; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getUriRef = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 18, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setUriRef = function(value) { + return jspb.Message.setOneofField(this, 18, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearUriRef = function() { + return jspb.Message.setOneofField(this, 18, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasUriRef = function() { + return jspb.Message.getField(this, 18) != null; +}; + + +/** + * optional bool address = 21; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getAddress = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 21, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setAddress = function(value) { + return jspb.Message.setOneofField(this, 21, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearAddress = function() { + return jspb.Message.setOneofField(this, 21, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasAddress = function() { + return jspb.Message.getField(this, 21) != null; +}; + + +/** + * optional bool uuid = 22; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getUuid = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 22, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setUuid = function(value) { + return jspb.Message.setOneofField(this, 22, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearUuid = function() { + return jspb.Message.setOneofField(this, 22, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasUuid = function() { + return jspb.Message.getField(this, 22) != null; +}; + + +/** + * optional KnownRegex well_known_regex = 24; + * @return {!proto.validate.KnownRegex} + */ +proto.validate.StringRules.prototype.getWellKnownRegex = function() { + return /** @type {!proto.validate.KnownRegex} */ (jspb.Message.getFieldWithDefault(this, 24, 0)); +}; + + +/** + * @param {!proto.validate.KnownRegex} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setWellKnownRegex = function(value) { + return jspb.Message.setOneofField(this, 24, proto.validate.StringRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearWellKnownRegex = function() { + return jspb.Message.setOneofField(this, 24, proto.validate.StringRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasWellKnownRegex = function() { + return jspb.Message.getField(this, 24) != null; +}; + + +/** + * optional bool strict = 25; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getStrict = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 25, true)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setStrict = function(value) { + return jspb.Message.setField(this, 25, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearStrict = function() { + return jspb.Message.setField(this, 25, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasStrict = function() { + return jspb.Message.getField(this, 25) != null; +}; + + +/** + * optional bool ignore_empty = 26; + * @return {boolean} + */ +proto.validate.StringRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 26, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 26, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.StringRules} returns this + */ +proto.validate.StringRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 26, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.StringRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 26) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.BytesRules.repeatedFields_ = [8,9]; + +/** + * Oneof group definitions for this message. Each group defines the field + * numbers belonging to that group. When of these fields' value is set, all + * other fields in the group are cleared. During deserialization, if multiple + * fields are encountered for a group, only the last value seen will be kept. + * @private {!Array>} + * @const + */ +proto.validate.BytesRules.oneofGroups_ = [[10,11,12]]; + +/** + * @enum {number} + */ +proto.validate.BytesRules.WellKnownCase = { + WELL_KNOWN_NOT_SET: 0, + IP: 10, + IPV4: 11, + IPV6: 12 +}; + +/** + * @return {proto.validate.BytesRules.WellKnownCase} + */ +proto.validate.BytesRules.prototype.getWellKnownCase = function() { + return /** @type {proto.validate.BytesRules.WellKnownCase} */(jspb.Message.computeOneofCase(this, proto.validate.BytesRules.oneofGroups_[0])); +}; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.BytesRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.BytesRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.BytesRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.BytesRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: msg.getConst_asB64(), + len: (f = jspb.Message.getField(msg, 13)) == null ? undefined : f, + minLen: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + maxLen: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f, + pattern: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f, + prefix: msg.getPrefix_asB64(), + suffix: msg.getSuffix_asB64(), + contains: msg.getContains_asB64(), + inList: msg.getInList_asB64(), + notInList: msg.getNotInList_asB64(), + ip: (f = jspb.Message.getBooleanField(msg, 10)) == null ? undefined : f, + ipv4: (f = jspb.Message.getBooleanField(msg, 11)) == null ? undefined : f, + ipv6: (f = jspb.Message.getBooleanField(msg, 12)) == null ? undefined : f, + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 14)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.BytesRules} + */ +proto.validate.BytesRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.BytesRules; + return proto.validate.BytesRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.BytesRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.BytesRules} + */ +proto.validate.BytesRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setConst(value); + break; + case 13: + var value = /** @type {number} */ (reader.readUint64()); + msg.setLen(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinLen(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMaxLen(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setPattern(value); + break; + case 5: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setPrefix(value); + break; + case 6: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSuffix(value); + break; + case 7: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setContains(value); + break; + case 8: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.addIn(value); + break; + case 9: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.addNotIn(value); + break; + case 10: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIp(value); + break; + case 11: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIpv4(value); + break; + case 12: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIpv6(value); + break; + case 14: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.BytesRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.BytesRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.BytesRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.BytesRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBytes( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 13)); + if (f != null) { + writer.writeUint64( + 13, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeUint64( + 3, + f + ); + } + f = /** @type {string} */ (jspb.Message.getField(message, 4)); + if (f != null) { + writer.writeString( + 4, + f + ); + } + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBytes( + 5, + f + ); + } + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeBytes( + 6, + f + ); + } + f = /** @type {!(string|Uint8Array)} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeBytes( + 7, + f + ); + } + f = message.getInList_asU8(); + if (f.length > 0) { + writer.writeRepeatedBytes( + 8, + f + ); + } + f = message.getNotInList_asU8(); + if (f.length > 0) { + writer.writeRepeatedBytes( + 9, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 10)); + if (f != null) { + writer.writeBool( + 10, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 11)); + if (f != null) { + writer.writeBool( + 11, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 12)); + if (f != null) { + writer.writeBool( + 12, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 14)); + if (f != null) { + writer.writeBool( + 14, + f + ); + } +}; + + +/** + * optional bytes const = 1; + * @return {!(string|Uint8Array)} + */ +proto.validate.BytesRules.prototype.getConst = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes const = 1; + * This is a type-conversion wrapper around `getConst()` + * @return {string} + */ +proto.validate.BytesRules.prototype.getConst_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getConst())); +}; + + +/** + * optional bytes const = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getConst()` + * @return {!Uint8Array} + */ +proto.validate.BytesRules.prototype.getConst_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getConst())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 len = 13; + * @return {number} + */ +proto.validate.BytesRules.prototype.getLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 13, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setLen = function(value) { + return jspb.Message.setField(this, 13, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearLen = function() { + return jspb.Message.setField(this, 13, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasLen = function() { + return jspb.Message.getField(this, 13) != null; +}; + + +/** + * optional uint64 min_len = 2; + * @return {number} + */ +proto.validate.BytesRules.prototype.getMinLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setMinLen = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearMinLen = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasMinLen = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional uint64 max_len = 3; + * @return {number} + */ +proto.validate.BytesRules.prototype.getMaxLen = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setMaxLen = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearMaxLen = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasMaxLen = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional string pattern = 4; + * @return {string} + */ +proto.validate.BytesRules.prototype.getPattern = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setPattern = function(value) { + return jspb.Message.setField(this, 4, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearPattern = function() { + return jspb.Message.setField(this, 4, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasPattern = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional bytes prefix = 5; + * @return {!(string|Uint8Array)} + */ +proto.validate.BytesRules.prototype.getPrefix = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 5, "")); +}; + + +/** + * optional bytes prefix = 5; + * This is a type-conversion wrapper around `getPrefix()` + * @return {string} + */ +proto.validate.BytesRules.prototype.getPrefix_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getPrefix())); +}; + + +/** + * optional bytes prefix = 5; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getPrefix()` + * @return {!Uint8Array} + */ +proto.validate.BytesRules.prototype.getPrefix_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getPrefix())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setPrefix = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearPrefix = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasPrefix = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bytes suffix = 6; + * @return {!(string|Uint8Array)} + */ +proto.validate.BytesRules.prototype.getSuffix = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * optional bytes suffix = 6; + * This is a type-conversion wrapper around `getSuffix()` + * @return {string} + */ +proto.validate.BytesRules.prototype.getSuffix_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSuffix())); +}; + + +/** + * optional bytes suffix = 6; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSuffix()` + * @return {!Uint8Array} + */ +proto.validate.BytesRules.prototype.getSuffix_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSuffix())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setSuffix = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearSuffix = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasSuffix = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional bytes contains = 7; + * @return {!(string|Uint8Array)} + */ +proto.validate.BytesRules.prototype.getContains = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * optional bytes contains = 7; + * This is a type-conversion wrapper around `getContains()` + * @return {string} + */ +proto.validate.BytesRules.prototype.getContains_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getContains())); +}; + + +/** + * optional bytes contains = 7; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getContains()` + * @return {!Uint8Array} + */ +proto.validate.BytesRules.prototype.getContains_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getContains())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setContains = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearContains = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasContains = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * repeated bytes in = 8; + * @return {!(Array|Array)} + */ +proto.validate.BytesRules.prototype.getInList = function() { + return /** @type {!(Array|Array)} */ (jspb.Message.getRepeatedField(this, 8)); +}; + + +/** + * repeated bytes in = 8; + * This is a type-conversion wrapper around `getInList()` + * @return {!Array} + */ +proto.validate.BytesRules.prototype.getInList_asB64 = function() { + return /** @type {!Array} */ (jspb.Message.bytesListAsB64( + this.getInList())); +}; + + +/** + * repeated bytes in = 8; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getInList()` + * @return {!Array} + */ +proto.validate.BytesRules.prototype.getInList_asU8 = function() { + return /** @type {!Array} */ (jspb.Message.bytesListAsU8( + this.getInList())); +}; + + +/** + * @param {!(Array|Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 8, value || []); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @param {number=} opt_index + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 8, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated bytes not_in = 9; + * @return {!(Array|Array)} + */ +proto.validate.BytesRules.prototype.getNotInList = function() { + return /** @type {!(Array|Array)} */ (jspb.Message.getRepeatedField(this, 9)); +}; + + +/** + * repeated bytes not_in = 9; + * This is a type-conversion wrapper around `getNotInList()` + * @return {!Array} + */ +proto.validate.BytesRules.prototype.getNotInList_asB64 = function() { + return /** @type {!Array} */ (jspb.Message.bytesListAsB64( + this.getNotInList())); +}; + + +/** + * repeated bytes not_in = 9; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getNotInList()` + * @return {!Array} + */ +proto.validate.BytesRules.prototype.getNotInList_asU8 = function() { + return /** @type {!Array} */ (jspb.Message.bytesListAsU8( + this.getNotInList())); +}; + + +/** + * @param {!(Array|Array)} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 9, value || []); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @param {number=} opt_index + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 9, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + +/** + * optional bool ip = 10; + * @return {boolean} + */ +proto.validate.BytesRules.prototype.getIp = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setIp = function(value) { + return jspb.Message.setOneofField(this, 10, proto.validate.BytesRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearIp = function() { + return jspb.Message.setOneofField(this, 10, proto.validate.BytesRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasIp = function() { + return jspb.Message.getField(this, 10) != null; +}; + + +/** + * optional bool ipv4 = 11; + * @return {boolean} + */ +proto.validate.BytesRules.prototype.getIpv4 = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 11, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setIpv4 = function(value) { + return jspb.Message.setOneofField(this, 11, proto.validate.BytesRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearIpv4 = function() { + return jspb.Message.setOneofField(this, 11, proto.validate.BytesRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasIpv4 = function() { + return jspb.Message.getField(this, 11) != null; +}; + + +/** + * optional bool ipv6 = 12; + * @return {boolean} + */ +proto.validate.BytesRules.prototype.getIpv6 = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 12, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setIpv6 = function(value) { + return jspb.Message.setOneofField(this, 12, proto.validate.BytesRules.oneofGroups_[0], value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearIpv6 = function() { + return jspb.Message.setOneofField(this, 12, proto.validate.BytesRules.oneofGroups_[0], undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasIpv6 = function() { + return jspb.Message.getField(this, 12) != null; +}; + + +/** + * optional bool ignore_empty = 14; + * @return {boolean} + */ +proto.validate.BytesRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 14, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 14, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.BytesRules} returns this + */ +proto.validate.BytesRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 14, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.BytesRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 14) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.EnumRules.repeatedFields_ = [3,4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.EnumRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.EnumRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.EnumRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.EnumRules.toObject = function(includeInstance, msg) { + var f, obj = { + pb_const: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + definedOnly: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.EnumRules} + */ +proto.validate.EnumRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.EnumRules; + return proto.validate.EnumRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.EnumRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.EnumRules} + */ +proto.validate.EnumRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setConst(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setDefinedOnly(value); + break; + case 3: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt32() : [reader.readInt32()]); + for (var i = 0; i < values.length; i++) { + msg.addIn(values[i]); + } + break; + case 4: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedInt32() : [reader.readInt32()]); + for (var i = 0; i < values.length; i++) { + msg.addNotIn(values[i]); + } + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.EnumRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.EnumRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.EnumRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.EnumRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeInt32( + 1, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedInt32( + 3, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedInt32( + 4, + f + ); + } +}; + + +/** + * optional int32 const = 1; + * @return {number} + */ +proto.validate.EnumRules.prototype.getConst = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.setConst = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.clearConst = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.EnumRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool defined_only = 2; + * @return {boolean} + */ +proto.validate.EnumRules.prototype.getDefinedOnly = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.setDefinedOnly = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.clearDefinedOnly = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.EnumRules.prototype.hasDefinedOnly = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * repeated int32 in = 3; + * @return {!Array} + */ +proto.validate.EnumRules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated int32 not_in = 4; + * @return {!Array} + */ +proto.validate.EnumRules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 4, value || []); +}; + + +/** + * @param {number} value + * @param {number=} opt_index + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 4, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.EnumRules} returns this + */ +proto.validate.EnumRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.MessageRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.MessageRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.MessageRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.MessageRules.toObject = function(includeInstance, msg) { + var f, obj = { + skip: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f, + required: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.MessageRules} + */ +proto.validate.MessageRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.MessageRules; + return proto.validate.MessageRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.MessageRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.MessageRules} + */ +proto.validate.MessageRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSkip(value); + break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setRequired(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.MessageRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.MessageRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.MessageRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.MessageRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeBool( + 2, + f + ); + } +}; + + +/** + * optional bool skip = 1; + * @return {boolean} + */ +proto.validate.MessageRules.prototype.getSkip = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.MessageRules} returns this + */ +proto.validate.MessageRules.prototype.setSkip = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MessageRules} returns this + */ +proto.validate.MessageRules.prototype.clearSkip = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MessageRules.prototype.hasSkip = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional bool required = 2; + * @return {boolean} + */ +proto.validate.MessageRules.prototype.getRequired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.MessageRules} returns this + */ +proto.validate.MessageRules.prototype.setRequired = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MessageRules} returns this + */ +proto.validate.MessageRules.prototype.clearRequired = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MessageRules.prototype.hasRequired = function() { + return jspb.Message.getField(this, 2) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.RepeatedRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.RepeatedRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.RepeatedRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.RepeatedRules.toObject = function(includeInstance, msg) { + var f, obj = { + minItems: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + maxItems: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + unique: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + items: (f = msg.getItems()) && proto.validate.FieldRules.toObject(includeInstance, f), + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 5)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.RepeatedRules} + */ +proto.validate.RepeatedRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.RepeatedRules; + return proto.validate.RepeatedRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.RepeatedRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.RepeatedRules} + */ +proto.validate.RepeatedRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinItems(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMaxItems(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setUnique(value); + break; + case 4: + var value = new proto.validate.FieldRules; + reader.readMessage(value,proto.validate.FieldRules.deserializeBinaryFromReader); + msg.setItems(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.RepeatedRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.RepeatedRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.RepeatedRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.RepeatedRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeUint64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = message.getItems(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.validate.FieldRules.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 5)); + if (f != null) { + writer.writeBool( + 5, + f + ); + } +}; + + +/** + * optional uint64 min_items = 1; + * @return {number} + */ +proto.validate.RepeatedRules.prototype.getMinItems = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.setMinItems = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.clearMinItems = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.hasMinItems = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 max_items = 2; + * @return {number} + */ +proto.validate.RepeatedRules.prototype.getMaxItems = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.setMaxItems = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.clearMaxItems = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.hasMaxItems = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bool unique = 3; + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.getUnique = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.setUnique = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.clearUnique = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.hasUnique = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional FieldRules items = 4; + * @return {?proto.validate.FieldRules} + */ +proto.validate.RepeatedRules.prototype.getItems = function() { + return /** @type{?proto.validate.FieldRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.FieldRules, 4)); +}; + + +/** + * @param {?proto.validate.FieldRules|undefined} value + * @return {!proto.validate.RepeatedRules} returns this +*/ +proto.validate.RepeatedRules.prototype.setItems = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.clearItems = function() { + return this.setItems(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.hasItems = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional bool ignore_empty = 5; + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 5, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.RepeatedRules} returns this + */ +proto.validate.RepeatedRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 5, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.RepeatedRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 5) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.MapRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.MapRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.MapRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.MapRules.toObject = function(includeInstance, msg) { + var f, obj = { + minPairs: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f, + maxPairs: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f, + noSparse: (f = jspb.Message.getBooleanField(msg, 3)) == null ? undefined : f, + keys: (f = msg.getKeys()) && proto.validate.FieldRules.toObject(includeInstance, f), + values: (f = msg.getValues()) && proto.validate.FieldRules.toObject(includeInstance, f), + ignoreEmpty: (f = jspb.Message.getBooleanField(msg, 6)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.MapRules} + */ +proto.validate.MapRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.MapRules; + return proto.validate.MapRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.MapRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.MapRules} + */ +proto.validate.MapRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMinPairs(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint64()); + msg.setMaxPairs(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setNoSparse(value); + break; + case 4: + var value = new proto.validate.FieldRules; + reader.readMessage(value,proto.validate.FieldRules.deserializeBinaryFromReader); + msg.setKeys(value); + break; + case 5: + var value = new proto.validate.FieldRules; + reader.readMessage(value,proto.validate.FieldRules.deserializeBinaryFromReader); + msg.setValues(value); + break; + case 6: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIgnoreEmpty(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.MapRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.MapRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.MapRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.MapRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {number} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeUint64( + 1, + f + ); + } + f = /** @type {number} */ (jspb.Message.getField(message, 2)); + if (f != null) { + writer.writeUint64( + 2, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 3)); + if (f != null) { + writer.writeBool( + 3, + f + ); + } + f = message.getKeys(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.validate.FieldRules.serializeBinaryToWriter + ); + } + f = message.getValues(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.validate.FieldRules.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 6)); + if (f != null) { + writer.writeBool( + 6, + f + ); + } +}; + + +/** + * optional uint64 min_pairs = 1; + * @return {number} + */ +proto.validate.MapRules.prototype.getMinPairs = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.setMinPairs = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearMinPairs = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasMinPairs = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 max_pairs = 2; + * @return {number} + */ +proto.validate.MapRules.prototype.getMaxPairs = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.setMaxPairs = function(value) { + return jspb.Message.setField(this, 2, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearMaxPairs = function() { + return jspb.Message.setField(this, 2, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasMaxPairs = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional bool no_sparse = 3; + * @return {boolean} + */ +proto.validate.MapRules.prototype.getNoSparse = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.setNoSparse = function(value) { + return jspb.Message.setField(this, 3, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearNoSparse = function() { + return jspb.Message.setField(this, 3, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasNoSparse = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional FieldRules keys = 4; + * @return {?proto.validate.FieldRules} + */ +proto.validate.MapRules.prototype.getKeys = function() { + return /** @type{?proto.validate.FieldRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.FieldRules, 4)); +}; + + +/** + * @param {?proto.validate.FieldRules|undefined} value + * @return {!proto.validate.MapRules} returns this +*/ +proto.validate.MapRules.prototype.setKeys = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearKeys = function() { + return this.setKeys(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasKeys = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional FieldRules values = 5; + * @return {?proto.validate.FieldRules} + */ +proto.validate.MapRules.prototype.getValues = function() { + return /** @type{?proto.validate.FieldRules} */ ( + jspb.Message.getWrapperField(this, proto.validate.FieldRules, 5)); +}; + + +/** + * @param {?proto.validate.FieldRules|undefined} value + * @return {!proto.validate.MapRules} returns this +*/ +proto.validate.MapRules.prototype.setValues = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearValues = function() { + return this.setValues(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasValues = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional bool ignore_empty = 6; + * @return {boolean} + */ +proto.validate.MapRules.prototype.getIgnoreEmpty = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 6, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.setIgnoreEmpty = function(value) { + return jspb.Message.setField(this, 6, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.MapRules} returns this + */ +proto.validate.MapRules.prototype.clearIgnoreEmpty = function() { + return jspb.Message.setField(this, 6, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.MapRules.prototype.hasIgnoreEmpty = function() { + return jspb.Message.getField(this, 6) != null; +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.AnyRules.repeatedFields_ = [2,3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.AnyRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.AnyRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.AnyRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.AnyRules.toObject = function(includeInstance, msg) { + var f, obj = { + required: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f, + inList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, + notInList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.AnyRules} + */ +proto.validate.AnyRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.AnyRules; + return proto.validate.AnyRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.AnyRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.AnyRules} + */ +proto.validate.AnyRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setRequired(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.addIn(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addNotIn(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.AnyRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.AnyRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.AnyRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.AnyRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedString( + 2, + f + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } +}; + + +/** + * optional bool required = 1; + * @return {boolean} + */ +proto.validate.AnyRules.prototype.getRequired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.setRequired = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.clearRequired = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.AnyRules.prototype.hasRequired = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated string in = 2; + * @return {!Array} + */ +proto.validate.AnyRules.prototype.getInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.setInList = function(value) { + return jspb.Message.setField(this, 2, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.addIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 2, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated string not_in = 3; + * @return {!Array} + */ +proto.validate.AnyRules.prototype.getNotInList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.setNotInList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.addNotIn = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.AnyRules} returns this + */ +proto.validate.AnyRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.validate.DurationRules.repeatedFields_ = [7,8]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.DurationRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.DurationRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.DurationRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.DurationRules.toObject = function(includeInstance, msg) { + var f, obj = { + required: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f, + pb_const: (f = msg.getConst()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f), + lt: (f = msg.getLt()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f), + lte: (f = msg.getLte()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f), + gt: (f = msg.getGt()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f), + gte: (f = msg.getGte()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f), + inList: jspb.Message.toObjectList(msg.getInList(), + google_protobuf_duration_pb.Duration.toObject, includeInstance), + notInList: jspb.Message.toObjectList(msg.getNotInList(), + google_protobuf_duration_pb.Duration.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.DurationRules} + */ +proto.validate.DurationRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.DurationRules; + return proto.validate.DurationRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.DurationRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.DurationRules} + */ +proto.validate.DurationRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setRequired(value); + break; + case 2: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setConst(value); + break; + case 3: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setLt(value); + break; + case 4: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setLte(value); + break; + case 5: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setGt(value); + break; + case 6: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setGte(value); + break; + case 7: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.addIn(value); + break; + case 8: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.addNotIn(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.DurationRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.DurationRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.DurationRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.DurationRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } + f = message.getConst(); + if (f != null) { + writer.writeMessage( + 2, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getLt(); + if (f != null) { + writer.writeMessage( + 3, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getLte(); + if (f != null) { + writer.writeMessage( + 4, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getGt(); + if (f != null) { + writer.writeMessage( + 5, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getGte(); + if (f != null) { + writer.writeMessage( + 6, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getInList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 7, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } + f = message.getNotInList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 8, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } +}; + + +/** + * optional bool required = 1; + * @return {boolean} + */ +proto.validate.DurationRules.prototype.getRequired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.setRequired = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearRequired = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasRequired = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional google.protobuf.Duration const = 2; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.getConst = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 2)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setConst = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearConst = function() { + return this.setConst(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional google.protobuf.Duration lt = 3; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.getLt = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 3)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setLt = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearLt = function() { + return this.setLt(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasLt = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional google.protobuf.Duration lte = 4; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.getLte = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 4)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setLte = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearLte = function() { + return this.setLte(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasLte = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional google.protobuf.Duration gt = 5; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.getGt = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 5)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setGt = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearGt = function() { + return this.setGt(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasGt = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional google.protobuf.Duration gte = 6; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.getGte = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 6)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setGte = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearGte = function() { + return this.setGte(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.DurationRules.prototype.hasGte = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * repeated google.protobuf.Duration in = 7; + * @return {!Array} + */ +proto.validate.DurationRules.prototype.getInList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, google_protobuf_duration_pb.Duration, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setInList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 7, value); +}; + + +/** + * @param {!proto.google.protobuf.Duration=} opt_value + * @param {number=} opt_index + * @return {!proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.addIn = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 7, opt_value, proto.google.protobuf.Duration, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearInList = function() { + return this.setInList([]); +}; + + +/** + * repeated google.protobuf.Duration not_in = 8; + * @return {!Array} + */ +proto.validate.DurationRules.prototype.getNotInList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, google_protobuf_duration_pb.Duration, 8)); +}; + + +/** + * @param {!Array} value + * @return {!proto.validate.DurationRules} returns this +*/ +proto.validate.DurationRules.prototype.setNotInList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 8, value); +}; + + +/** + * @param {!proto.google.protobuf.Duration=} opt_value + * @param {number=} opt_index + * @return {!proto.google.protobuf.Duration} + */ +proto.validate.DurationRules.prototype.addNotIn = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 8, opt_value, proto.google.protobuf.Duration, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.validate.DurationRules} returns this + */ +proto.validate.DurationRules.prototype.clearNotInList = function() { + return this.setNotInList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.validate.TimestampRules.prototype.toObject = function(opt_includeInstance) { + return proto.validate.TimestampRules.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.validate.TimestampRules} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.TimestampRules.toObject = function(includeInstance, msg) { + var f, obj = { + required: (f = jspb.Message.getBooleanField(msg, 1)) == null ? undefined : f, + pb_const: (f = msg.getConst()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + lt: (f = msg.getLt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + lte: (f = msg.getLte()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + gt: (f = msg.getGt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + gte: (f = msg.getGte()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + ltNow: (f = jspb.Message.getBooleanField(msg, 7)) == null ? undefined : f, + gtNow: (f = jspb.Message.getBooleanField(msg, 8)) == null ? undefined : f, + within: (f = msg.getWithin()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.validate.TimestampRules} + */ +proto.validate.TimestampRules.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.validate.TimestampRules; + return proto.validate.TimestampRules.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.validate.TimestampRules} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.validate.TimestampRules} + */ +proto.validate.TimestampRules.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setRequired(value); + break; + case 2: + var value = new google_protobuf_timestamp_pb.Timestamp; + reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); + msg.setConst(value); + break; + case 3: + var value = new google_protobuf_timestamp_pb.Timestamp; + reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); + msg.setLt(value); + break; + case 4: + var value = new google_protobuf_timestamp_pb.Timestamp; + reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); + msg.setLte(value); + break; + case 5: + var value = new google_protobuf_timestamp_pb.Timestamp; + reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); + msg.setGt(value); + break; + case 6: + var value = new google_protobuf_timestamp_pb.Timestamp; + reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); + msg.setGte(value); + break; + case 7: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setLtNow(value); + break; + case 8: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setGtNow(value); + break; + case 9: + var value = new google_protobuf_duration_pb.Duration; + reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader); + msg.setWithin(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.validate.TimestampRules.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.validate.TimestampRules.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.validate.TimestampRules} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.validate.TimestampRules.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = /** @type {boolean} */ (jspb.Message.getField(message, 1)); + if (f != null) { + writer.writeBool( + 1, + f + ); + } + f = message.getConst(); + if (f != null) { + writer.writeMessage( + 2, + f, + google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter + ); + } + f = message.getLt(); + if (f != null) { + writer.writeMessage( + 3, + f, + google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter + ); + } + f = message.getLte(); + if (f != null) { + writer.writeMessage( + 4, + f, + google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter + ); + } + f = message.getGt(); + if (f != null) { + writer.writeMessage( + 5, + f, + google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter + ); + } + f = message.getGte(); + if (f != null) { + writer.writeMessage( + 6, + f, + google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 7)); + if (f != null) { + writer.writeBool( + 7, + f + ); + } + f = /** @type {boolean} */ (jspb.Message.getField(message, 8)); + if (f != null) { + writer.writeBool( + 8, + f + ); + } + f = message.getWithin(); + if (f != null) { + writer.writeMessage( + 9, + f, + google_protobuf_duration_pb.Duration.serializeBinaryToWriter + ); + } +}; + + +/** + * optional bool required = 1; + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.getRequired = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.setRequired = function(value) { + return jspb.Message.setField(this, 1, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearRequired = function() { + return jspb.Message.setField(this, 1, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasRequired = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional google.protobuf.Timestamp const = 2; + * @return {?proto.google.protobuf.Timestamp} + */ +proto.validate.TimestampRules.prototype.getConst = function() { + return /** @type{?proto.google.protobuf.Timestamp} */ ( + jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 2)); +}; + + +/** + * @param {?proto.google.protobuf.Timestamp|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setConst = function(value) { + return jspb.Message.setWrapperField(this, 2, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearConst = function() { + return this.setConst(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasConst = function() { + return jspb.Message.getField(this, 2) != null; +}; + + +/** + * optional google.protobuf.Timestamp lt = 3; + * @return {?proto.google.protobuf.Timestamp} + */ +proto.validate.TimestampRules.prototype.getLt = function() { + return /** @type{?proto.google.protobuf.Timestamp} */ ( + jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 3)); +}; + + +/** + * @param {?proto.google.protobuf.Timestamp|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setLt = function(value) { + return jspb.Message.setWrapperField(this, 3, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearLt = function() { + return this.setLt(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasLt = function() { + return jspb.Message.getField(this, 3) != null; +}; + + +/** + * optional google.protobuf.Timestamp lte = 4; + * @return {?proto.google.protobuf.Timestamp} + */ +proto.validate.TimestampRules.prototype.getLte = function() { + return /** @type{?proto.google.protobuf.Timestamp} */ ( + jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 4)); +}; + + +/** + * @param {?proto.google.protobuf.Timestamp|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setLte = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearLte = function() { + return this.setLte(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasLte = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional google.protobuf.Timestamp gt = 5; + * @return {?proto.google.protobuf.Timestamp} + */ +proto.validate.TimestampRules.prototype.getGt = function() { + return /** @type{?proto.google.protobuf.Timestamp} */ ( + jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 5)); +}; + + +/** + * @param {?proto.google.protobuf.Timestamp|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setGt = function(value) { + return jspb.Message.setWrapperField(this, 5, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearGt = function() { + return this.setGt(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasGt = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional google.protobuf.Timestamp gte = 6; + * @return {?proto.google.protobuf.Timestamp} + */ +proto.validate.TimestampRules.prototype.getGte = function() { + return /** @type{?proto.google.protobuf.Timestamp} */ ( + jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 6)); +}; + + +/** + * @param {?proto.google.protobuf.Timestamp|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setGte = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearGte = function() { + return this.setGte(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasGte = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional bool lt_now = 7; + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.getLtNow = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 7, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.setLtNow = function(value) { + return jspb.Message.setField(this, 7, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearLtNow = function() { + return jspb.Message.setField(this, 7, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasLtNow = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional bool gt_now = 8; + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.getGtNow = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.setGtNow = function(value) { + return jspb.Message.setField(this, 8, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearGtNow = function() { + return jspb.Message.setField(this, 8, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasGtNow = function() { + return jspb.Message.getField(this, 8) != null; +}; + + +/** + * optional google.protobuf.Duration within = 9; + * @return {?proto.google.protobuf.Duration} + */ +proto.validate.TimestampRules.prototype.getWithin = function() { + return /** @type{?proto.google.protobuf.Duration} */ ( + jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 9)); +}; + + +/** + * @param {?proto.google.protobuf.Duration|undefined} value + * @return {!proto.validate.TimestampRules} returns this +*/ +proto.validate.TimestampRules.prototype.setWithin = function(value) { + return jspb.Message.setWrapperField(this, 9, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.validate.TimestampRules} returns this + */ +proto.validate.TimestampRules.prototype.clearWithin = function() { + return this.setWithin(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.validate.TimestampRules.prototype.hasWithin = function() { + return jspb.Message.getField(this, 9) != null; +}; + + +/** + * @enum {number} + */ +proto.validate.KnownRegex = { + UNKNOWN: 0, + HTTP_HEADER_NAME: 1, + HTTP_HEADER_VALUE: 2 +}; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `disabled`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.validate.disabled = new jspb.ExtensionFieldInfo( + 1071, + {disabled: 0}, + null, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + null), + 0); + +google_protobuf_descriptor_pb.MessageOptions.extensionsBinary[1071] = new jspb.ExtensionFieldBinaryInfo( + proto.validate.disabled, + jspb.BinaryReader.prototype.readBool, + jspb.BinaryWriter.prototype.writeBool, + undefined, + undefined, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.MessageOptions.extensions[1071] = proto.validate.disabled; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `ignored`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.validate.ignored = new jspb.ExtensionFieldInfo( + 1072, + {ignored: 0}, + null, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + null), + 0); + +google_protobuf_descriptor_pb.MessageOptions.extensionsBinary[1072] = new jspb.ExtensionFieldBinaryInfo( + proto.validate.ignored, + jspb.BinaryReader.prototype.readBool, + jspb.BinaryWriter.prototype.writeBool, + undefined, + undefined, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.MessageOptions.extensions[1072] = proto.validate.ignored; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `required`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.validate.required = new jspb.ExtensionFieldInfo( + 1071, + {required: 0}, + null, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + null), + 0); + +google_protobuf_descriptor_pb.OneofOptions.extensionsBinary[1071] = new jspb.ExtensionFieldBinaryInfo( + proto.validate.required, + jspb.BinaryReader.prototype.readBool, + jspb.BinaryWriter.prototype.writeBool, + undefined, + undefined, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.OneofOptions.extensions[1071] = proto.validate.required; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `rules`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.validate.rules = new jspb.ExtensionFieldInfo( + 1071, + {rules: 0}, + proto.validate.FieldRules, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.validate.FieldRules.toObject), + 0); + +google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[1071] = new jspb.ExtensionFieldBinaryInfo( + proto.validate.rules, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.validate.FieldRules.serializeBinaryToWriter, + proto.validate.FieldRules.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.FieldOptions.extensions[1071] = proto.validate.rules; + +goog.object.extend(exports, proto.validate); diff --git a/spicedb-common/src/protodevdefs/authzed/api/v1/core.ts b/spicedb-common/src/protodevdefs/authzed/api/v1/core.ts new file mode 100644 index 0000000..ae10fd2 --- /dev/null +++ b/spicedb-common/src/protodevdefs/authzed/api/v1/core.ts @@ -0,0 +1,819 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "authzed/api/v1/core.proto" (package "authzed.api.v1", syntax proto3) +// tslint:disable +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Struct } from "../../../google/protobuf/struct"; +/** + * Relationship specifies how a resource relates to a subject. Relationships + * form the data for the graph over which all permissions questions are + * answered. + * + * @generated from protobuf message authzed.api.v1.Relationship + */ +export interface Relationship { + /** + * resource is the resource to which the subject is related, in some manner + * + * @generated from protobuf field: authzed.api.v1.ObjectReference resource = 1; + */ + resource?: ObjectReference; + /** + * relation is how the resource and subject are related. + * + * @generated from protobuf field: string relation = 2; + */ + relation: string; + /** + * subject is the subject to which the resource is related, in some manner. + * + * @generated from protobuf field: authzed.api.v1.SubjectReference subject = 3; + */ + subject?: SubjectReference; + /** + * optional_caveat is a reference to a the caveat that must be enforced over the relationship + * + * @generated from protobuf field: authzed.api.v1.ContextualizedCaveat optional_caveat = 4; + */ + optionalCaveat?: ContextualizedCaveat; +} +/** + * * + * ContextualizedCaveat represents a reference to a caveat to be used by caveated relationships. + * The context consists of key-value pairs that will be injected at evaluation time. + * The keys must match the arguments defined on the caveat in the schema. + * + * @generated from protobuf message authzed.api.v1.ContextualizedCaveat + */ +export interface ContextualizedCaveat { + /** + * * caveat_name is the name of the caveat expression to use, as defined in the schema * + * + * @generated from protobuf field: string caveat_name = 1; + */ + caveatName: string; + /** + * * context consists of any named values that are defined at write time for the caveat expression * + * + * @generated from protobuf field: google.protobuf.Struct context = 2; + */ + context?: Struct; +} +/** + * SubjectReference is used for referring to the subject portion of a + * Relationship. The relation component is optional and is used for defining a + * sub-relation on the subject, e.g. group:123#members + * + * @generated from protobuf message authzed.api.v1.SubjectReference + */ +export interface SubjectReference { + /** + * @generated from protobuf field: authzed.api.v1.ObjectReference object = 1; + */ + object?: ObjectReference; + /** + * @generated from protobuf field: string optional_relation = 2; + */ + optionalRelation: string; +} +/** + * ObjectReference is used to refer to a specific object in the system. + * + * @generated from protobuf message authzed.api.v1.ObjectReference + */ +export interface ObjectReference { + /** + * @generated from protobuf field: string object_type = 1; + */ + objectType: string; + /** + * @generated from protobuf field: string object_id = 2; + */ + objectId: string; +} +/** + * ZedToken is used to provide causality metadata between Write and Check + * requests. + * + * See the authzed.api.v1.Consistency message for more information. + * + * @generated from protobuf message authzed.api.v1.ZedToken + */ +export interface ZedToken { + /** + * @generated from protobuf field: string token = 1; + */ + token: string; +} +/** + * RelationshipUpdate is used for mutating a single relationship within the + * service. + * + * CREATE will create the relationship only if it doesn't exist, and error + * otherwise. + * + * TOUCH will upsert the relationship, and will not error if it + * already exists. + * + * DELETE will delete the relationship. If the relationship does not exist, + * this operation will no-op. + * + * @generated from protobuf message authzed.api.v1.RelationshipUpdate + */ +export interface RelationshipUpdate { + /** + * @generated from protobuf field: authzed.api.v1.RelationshipUpdate.Operation operation = 1; + */ + operation: RelationshipUpdate_Operation; + /** + * @generated from protobuf field: authzed.api.v1.Relationship relationship = 2; + */ + relationship?: Relationship; +} +/** + * @generated from protobuf enum authzed.api.v1.RelationshipUpdate.Operation + */ +export enum RelationshipUpdate_Operation { + /** + * @generated from protobuf enum value: OPERATION_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * @generated from protobuf enum value: OPERATION_CREATE = 1; + */ + CREATE = 1, + /** + * @generated from protobuf enum value: OPERATION_TOUCH = 2; + */ + TOUCH = 2, + /** + * @generated from protobuf enum value: OPERATION_DELETE = 3; + */ + DELETE = 3 +} +/** + * PermissionRelationshipTree is used for representing a tree of a resource and + * its permission relationships with other objects. + * + * @generated from protobuf message authzed.api.v1.PermissionRelationshipTree + */ +export interface PermissionRelationshipTree { + /** + * @generated from protobuf oneof: tree_type + */ + treeType: { + oneofKind: "intermediate"; + /** + * @generated from protobuf field: authzed.api.v1.AlgebraicSubjectSet intermediate = 1; + */ + intermediate: AlgebraicSubjectSet; + } | { + oneofKind: "leaf"; + /** + * @generated from protobuf field: authzed.api.v1.DirectSubjectSet leaf = 2; + */ + leaf: DirectSubjectSet; + } | { + oneofKind: undefined; + }; + /** + * @generated from protobuf field: authzed.api.v1.ObjectReference expanded_object = 3; + */ + expandedObject?: ObjectReference; + /** + * @generated from protobuf field: string expanded_relation = 4; + */ + expandedRelation: string; +} +/** + * AlgebraicSubjectSet is a subject set which is computed based on applying the + * specified operation to the operands according to the algebra of sets. + * + * UNION is a logical set containing the subject members from all operands. + * + * INTERSECTION is a logical set containing only the subject members which are + * present in all operands. + * + * EXCLUSION is a logical set containing only the subject members which are + * present in the first operand, and none of the other operands. + * + * @generated from protobuf message authzed.api.v1.AlgebraicSubjectSet + */ +export interface AlgebraicSubjectSet { + /** + * @generated from protobuf field: authzed.api.v1.AlgebraicSubjectSet.Operation operation = 1; + */ + operation: AlgebraicSubjectSet_Operation; + /** + * @generated from protobuf field: repeated authzed.api.v1.PermissionRelationshipTree children = 2; + */ + children: PermissionRelationshipTree[]; +} +/** + * @generated from protobuf enum authzed.api.v1.AlgebraicSubjectSet.Operation + */ +export enum AlgebraicSubjectSet_Operation { + /** + * @generated from protobuf enum value: OPERATION_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * @generated from protobuf enum value: OPERATION_UNION = 1; + */ + UNION = 1, + /** + * @generated from protobuf enum value: OPERATION_INTERSECTION = 2; + */ + INTERSECTION = 2, + /** + * @generated from protobuf enum value: OPERATION_EXCLUSION = 3; + */ + EXCLUSION = 3 +} +/** + * DirectSubjectSet is a subject set which is simply a collection of subjects. + * + * @generated from protobuf message authzed.api.v1.DirectSubjectSet + */ +export interface DirectSubjectSet { + /** + * @generated from protobuf field: repeated authzed.api.v1.SubjectReference subjects = 1; + */ + subjects: SubjectReference[]; +} +/** + * PartialCaveatInfo carries information necessary for the client to take action + * in the event a response contains a partially evaluated caveat + * + * @generated from protobuf message authzed.api.v1.PartialCaveatInfo + */ +export interface PartialCaveatInfo { + /** + * missing_required_context is a list of one or more fields that were missing and prevented caveats + * from being fully evaluated + * + * @generated from protobuf field: repeated string missing_required_context = 1; + */ + missingRequiredContext: string[]; +} +// @generated message type with reflection information, may provide speed optimized methods +class Relationship$Type extends MessageType { + constructor() { + super("authzed.api.v1.Relationship", [ + { no: 1, name: "resource", kind: "message", T: () => ObjectReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 3, name: "subject", kind: "message", T: () => SubjectReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 4, name: "optional_caveat", kind: "message", T: () => ContextualizedCaveat, options: { "validate.rules": { message: { required: false } } } } + ]); + } + create(value?: PartialMessage): Relationship { + const message = { relation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Relationship): Relationship { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.ObjectReference resource */ 1: + message.resource = ObjectReference.internalBinaryRead(reader, reader.uint32(), options, message.resource); + break; + case /* string relation */ 2: + message.relation = reader.string(); + break; + case /* authzed.api.v1.SubjectReference subject */ 3: + message.subject = SubjectReference.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* authzed.api.v1.ContextualizedCaveat optional_caveat */ 4: + message.optionalCaveat = ContextualizedCaveat.internalBinaryRead(reader, reader.uint32(), options, message.optionalCaveat); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Relationship, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.ObjectReference resource = 1; */ + if (message.resource) + ObjectReference.internalBinaryWrite(message.resource, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string relation = 2; */ + if (message.relation !== "") + writer.tag(2, WireType.LengthDelimited).string(message.relation); + /* authzed.api.v1.SubjectReference subject = 3; */ + if (message.subject) + SubjectReference.internalBinaryWrite(message.subject, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.ContextualizedCaveat optional_caveat = 4; */ + if (message.optionalCaveat) + ContextualizedCaveat.internalBinaryWrite(message.optionalCaveat, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.Relationship + */ +export const Relationship = new Relationship$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ContextualizedCaveat$Type extends MessageType { + constructor() { + super("authzed.api.v1.ContextualizedCaveat", [ + { no: 1, name: "caveat_name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-zA-Z0-9_][a-zA-Z0-9/_|-]{0,127})$" } } } }, + { no: 2, name: "context", kind: "message", T: () => Struct, options: { "validate.rules": { message: { required: false } } } } + ]); + } + create(value?: PartialMessage): ContextualizedCaveat { + const message = { caveatName: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ContextualizedCaveat): ContextualizedCaveat { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string caveat_name */ 1: + message.caveatName = reader.string(); + break; + case /* google.protobuf.Struct context */ 2: + message.context = Struct.internalBinaryRead(reader, reader.uint32(), options, message.context); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ContextualizedCaveat, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string caveat_name = 1; */ + if (message.caveatName !== "") + writer.tag(1, WireType.LengthDelimited).string(message.caveatName); + /* google.protobuf.Struct context = 2; */ + if (message.context) + Struct.internalBinaryWrite(message.context, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.ContextualizedCaveat + */ +export const ContextualizedCaveat = new ContextualizedCaveat$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SubjectReference$Type extends MessageType { + constructor() { + super("authzed.api.v1.SubjectReference", [ + { no: 1, name: "object", kind: "message", T: () => ObjectReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "optional_relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^([a-z][a-z0-9_]{1,62}[a-z0-9])?$" } } } } + ]); + } + create(value?: PartialMessage): SubjectReference { + const message = { optionalRelation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SubjectReference): SubjectReference { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.ObjectReference object */ 1: + message.object = ObjectReference.internalBinaryRead(reader, reader.uint32(), options, message.object); + break; + case /* string optional_relation */ 2: + message.optionalRelation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SubjectReference, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.ObjectReference object = 1; */ + if (message.object) + ObjectReference.internalBinaryWrite(message.object, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string optional_relation = 2; */ + if (message.optionalRelation !== "") + writer.tag(2, WireType.LengthDelimited).string(message.optionalRelation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.SubjectReference + */ +export const SubjectReference = new SubjectReference$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ObjectReference$Type extends MessageType { + constructor() { + super("authzed.api.v1.ObjectReference", [ + { no: 1, name: "object_type", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)?[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 2, name: "object_id", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^(([a-zA-Z0-9_][a-zA-Z0-9/_|-]{0,127})|\\*)$" } } } } + ]); + } + create(value?: PartialMessage): ObjectReference { + const message = { objectType: "", objectId: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ObjectReference): ObjectReference { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string object_type */ 1: + message.objectType = reader.string(); + break; + case /* string object_id */ 2: + message.objectId = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ObjectReference, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string object_type = 1; */ + if (message.objectType !== "") + writer.tag(1, WireType.LengthDelimited).string(message.objectType); + /* string object_id = 2; */ + if (message.objectId !== "") + writer.tag(2, WireType.LengthDelimited).string(message.objectId); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.ObjectReference + */ +export const ObjectReference = new ObjectReference$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ZedToken$Type extends MessageType { + constructor() { + super("authzed.api.v1.ZedToken", [ + { no: 1, name: "token", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { minBytes: "1" } } } } + ]); + } + create(value?: PartialMessage): ZedToken { + const message = { token: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ZedToken): ZedToken { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string token */ 1: + message.token = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ZedToken, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string token = 1; */ + if (message.token !== "") + writer.tag(1, WireType.LengthDelimited).string(message.token); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.ZedToken + */ +export const ZedToken = new ZedToken$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RelationshipUpdate$Type extends MessageType { + constructor() { + super("authzed.api.v1.RelationshipUpdate", [ + { no: 1, name: "operation", kind: "enum", T: () => ["authzed.api.v1.RelationshipUpdate.Operation", RelationshipUpdate_Operation, "OPERATION_"], options: { "validate.rules": { enum: { definedOnly: true, notIn: [0] } } } }, + { no: 2, name: "relationship", kind: "message", T: () => Relationship, options: { "validate.rules": { message: { required: true } } } } + ]); + } + create(value?: PartialMessage): RelationshipUpdate { + const message = { operation: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RelationshipUpdate): RelationshipUpdate { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.RelationshipUpdate.Operation operation */ 1: + message.operation = reader.int32(); + break; + case /* authzed.api.v1.Relationship relationship */ 2: + message.relationship = Relationship.internalBinaryRead(reader, reader.uint32(), options, message.relationship); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RelationshipUpdate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.RelationshipUpdate.Operation operation = 1; */ + if (message.operation !== 0) + writer.tag(1, WireType.Varint).int32(message.operation); + /* authzed.api.v1.Relationship relationship = 2; */ + if (message.relationship) + Relationship.internalBinaryWrite(message.relationship, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.RelationshipUpdate + */ +export const RelationshipUpdate = new RelationshipUpdate$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PermissionRelationshipTree$Type extends MessageType { + constructor() { + super("authzed.api.v1.PermissionRelationshipTree", [ + { no: 1, name: "intermediate", kind: "message", oneof: "treeType", T: () => AlgebraicSubjectSet }, + { no: 2, name: "leaf", kind: "message", oneof: "treeType", T: () => DirectSubjectSet }, + { no: 3, name: "expanded_object", kind: "message", T: () => ObjectReference }, + { no: 4, name: "expanded_relation", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): PermissionRelationshipTree { + const message = { treeType: { oneofKind: undefined }, expandedRelation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PermissionRelationshipTree): PermissionRelationshipTree { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.AlgebraicSubjectSet intermediate */ 1: + message.treeType = { + oneofKind: "intermediate", + intermediate: AlgebraicSubjectSet.internalBinaryRead(reader, reader.uint32(), options, (message.treeType as any).intermediate) + }; + break; + case /* authzed.api.v1.DirectSubjectSet leaf */ 2: + message.treeType = { + oneofKind: "leaf", + leaf: DirectSubjectSet.internalBinaryRead(reader, reader.uint32(), options, (message.treeType as any).leaf) + }; + break; + case /* authzed.api.v1.ObjectReference expanded_object */ 3: + message.expandedObject = ObjectReference.internalBinaryRead(reader, reader.uint32(), options, message.expandedObject); + break; + case /* string expanded_relation */ 4: + message.expandedRelation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PermissionRelationshipTree, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.AlgebraicSubjectSet intermediate = 1; */ + if (message.treeType.oneofKind === "intermediate") + AlgebraicSubjectSet.internalBinaryWrite(message.treeType.intermediate, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.DirectSubjectSet leaf = 2; */ + if (message.treeType.oneofKind === "leaf") + DirectSubjectSet.internalBinaryWrite(message.treeType.leaf, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.ObjectReference expanded_object = 3; */ + if (message.expandedObject) + ObjectReference.internalBinaryWrite(message.expandedObject, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* string expanded_relation = 4; */ + if (message.expandedRelation !== "") + writer.tag(4, WireType.LengthDelimited).string(message.expandedRelation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.PermissionRelationshipTree + */ +export const PermissionRelationshipTree = new PermissionRelationshipTree$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AlgebraicSubjectSet$Type extends MessageType { + constructor() { + super("authzed.api.v1.AlgebraicSubjectSet", [ + { no: 1, name: "operation", kind: "enum", T: () => ["authzed.api.v1.AlgebraicSubjectSet.Operation", AlgebraicSubjectSet_Operation, "OPERATION_"], options: { "validate.rules": { enum: { definedOnly: true, notIn: [0] } } } }, + { no: 2, name: "children", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => PermissionRelationshipTree, options: { "validate.rules": { repeated: { items: { message: { required: true } } } } } } + ]); + } + create(value?: PartialMessage): AlgebraicSubjectSet { + const message = { operation: 0, children: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AlgebraicSubjectSet): AlgebraicSubjectSet { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.AlgebraicSubjectSet.Operation operation */ 1: + message.operation = reader.int32(); + break; + case /* repeated authzed.api.v1.PermissionRelationshipTree children */ 2: + message.children.push(PermissionRelationshipTree.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AlgebraicSubjectSet, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.AlgebraicSubjectSet.Operation operation = 1; */ + if (message.operation !== 0) + writer.tag(1, WireType.Varint).int32(message.operation); + /* repeated authzed.api.v1.PermissionRelationshipTree children = 2; */ + for (let i = 0; i < message.children.length; i++) + PermissionRelationshipTree.internalBinaryWrite(message.children[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.AlgebraicSubjectSet + */ +export const AlgebraicSubjectSet = new AlgebraicSubjectSet$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DirectSubjectSet$Type extends MessageType { + constructor() { + super("authzed.api.v1.DirectSubjectSet", [ + { no: 1, name: "subjects", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SubjectReference } + ]); + } + create(value?: PartialMessage): DirectSubjectSet { + const message = { subjects: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DirectSubjectSet): DirectSubjectSet { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated authzed.api.v1.SubjectReference subjects */ 1: + message.subjects.push(SubjectReference.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DirectSubjectSet, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated authzed.api.v1.SubjectReference subjects = 1; */ + for (let i = 0; i < message.subjects.length; i++) + SubjectReference.internalBinaryWrite(message.subjects[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.DirectSubjectSet + */ +export const DirectSubjectSet = new DirectSubjectSet$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PartialCaveatInfo$Type extends MessageType { + constructor() { + super("authzed.api.v1.PartialCaveatInfo", [ + { no: 1, name: "missing_required_context", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { repeated: { minItems: "1" } } } } + ]); + } + create(value?: PartialMessage): PartialCaveatInfo { + const message = { missingRequiredContext: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PartialCaveatInfo): PartialCaveatInfo { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated string missing_required_context */ 1: + message.missingRequiredContext.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PartialCaveatInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated string missing_required_context = 1; */ + for (let i = 0; i < message.missingRequiredContext.length; i++) + writer.tag(1, WireType.LengthDelimited).string(message.missingRequiredContext[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.PartialCaveatInfo + */ +export const PartialCaveatInfo = new PartialCaveatInfo$Type(); diff --git a/spicedb-common/src/protodevdefs/authzed/api/v1/debug.ts b/spicedb-common/src/protodevdefs/authzed/api/v1/debug.ts new file mode 100644 index 0000000..e51145f --- /dev/null +++ b/spicedb-common/src/protodevdefs/authzed/api/v1/debug.ts @@ -0,0 +1,496 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "authzed/api/v1/debug.proto" (package "authzed.api.v1", syntax proto3) +// tslint:disable +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { PartialCaveatInfo } from "./core"; +import { Struct } from "../../../google/protobuf/struct"; +import { SubjectReference } from "./core"; +import { ObjectReference } from "./core"; +/** + * DebugInformation defines debug information returned by an API call in a footer when + * requested with a specific debugging header. + * + * The specific debug information returned will depend on the type of the API call made. + * + * See the github.com/authzed/authzed-go project for the specific header and footer names. + * + * @generated from protobuf message authzed.api.v1.DebugInformation + */ +export interface DebugInformation { + /** + * check holds debug information about a check request. + * + * @generated from protobuf field: authzed.api.v1.CheckDebugTrace check = 1; + */ + check?: CheckDebugTrace; + /** + * schema_used holds the schema used for the request. + * + * @generated from protobuf field: string schema_used = 2; + */ + schemaUsed: string; +} +/** + * CheckDebugTrace is a recursive trace of the requests made for resolving a CheckPermission + * API call. + * + * @generated from protobuf message authzed.api.v1.CheckDebugTrace + */ +export interface CheckDebugTrace { + /** + * resource holds the resource on which the Check was performed. + * + * @generated from protobuf field: authzed.api.v1.ObjectReference resource = 1; + */ + resource?: ObjectReference; + /** + * permission holds the name of the permission or relation on which the Check was performed. + * + * @generated from protobuf field: string permission = 2; + */ + permission: string; + /** + * permission_type holds information indicating whether it was a permission or relation. + * + * @generated from protobuf field: authzed.api.v1.CheckDebugTrace.PermissionType permission_type = 3; + */ + permissionType: CheckDebugTrace_PermissionType; + /** + * subject holds the subject on which the Check was performed. This will be static across all calls within + * the same Check tree. + * + * @generated from protobuf field: authzed.api.v1.SubjectReference subject = 4; + */ + subject?: SubjectReference; + /** + * result holds the result of the Check call. + * + * @generated from protobuf field: authzed.api.v1.CheckDebugTrace.Permissionship result = 5; + */ + result: CheckDebugTrace_Permissionship; + /** + * caveat_evaluation_info holds information about the caveat evaluated for this step of the trace. + * + * @generated from protobuf field: authzed.api.v1.CaveatEvalInfo caveat_evaluation_info = 8; + */ + caveatEvaluationInfo?: CaveatEvalInfo; + /** + * @generated from protobuf oneof: resolution + */ + resolution: { + oneofKind: "wasCachedResult"; + /** + * was_cached_result, if true, indicates that the result was found in the cache and returned directly. + * + * @generated from protobuf field: bool was_cached_result = 6; + */ + wasCachedResult: boolean; + } | { + oneofKind: "subProblems"; + /** + * sub_problems holds the sub problems that were executed to resolve the answer to this Check. An empty list + * and a permissionship of PERMISSIONSHIP_HAS_PERMISSION indicates the subject was found within this relation. + * + * @generated from protobuf field: authzed.api.v1.CheckDebugTrace.SubProblems sub_problems = 7; + */ + subProblems: CheckDebugTrace_SubProblems; + } | { + oneofKind: undefined; + }; +} +/** + * @generated from protobuf message authzed.api.v1.CheckDebugTrace.SubProblems + */ +export interface CheckDebugTrace_SubProblems { + /** + * @generated from protobuf field: repeated authzed.api.v1.CheckDebugTrace traces = 1; + */ + traces: CheckDebugTrace[]; +} +/** + * @generated from protobuf enum authzed.api.v1.CheckDebugTrace.PermissionType + */ +export enum CheckDebugTrace_PermissionType { + /** + * @generated from protobuf enum value: PERMISSION_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * @generated from protobuf enum value: PERMISSION_TYPE_RELATION = 1; + */ + RELATION = 1, + /** + * @generated from protobuf enum value: PERMISSION_TYPE_PERMISSION = 2; + */ + PERMISSION = 2 +} +/** + * @generated from protobuf enum authzed.api.v1.CheckDebugTrace.Permissionship + */ +export enum CheckDebugTrace_Permissionship { + /** + * @generated from protobuf enum value: PERMISSIONSHIP_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * @generated from protobuf enum value: PERMISSIONSHIP_NO_PERMISSION = 1; + */ + NO_PERMISSION = 1, + /** + * @generated from protobuf enum value: PERMISSIONSHIP_HAS_PERMISSION = 2; + */ + HAS_PERMISSION = 2, + /** + * @generated from protobuf enum value: PERMISSIONSHIP_CONDITIONAL_PERMISSION = 3; + */ + CONDITIONAL_PERMISSION = 3 +} +/** + * CaveatEvalInfo holds information about a caveat expression that was evaluated. + * + * @generated from protobuf message authzed.api.v1.CaveatEvalInfo + */ +export interface CaveatEvalInfo { + /** + * expression is the expression that was evaluated. + * + * @generated from protobuf field: string expression = 1; + */ + expression: string; + /** + * result is the result of the evaluation. + * + * @generated from protobuf field: authzed.api.v1.CaveatEvalInfo.Result result = 2; + */ + result: CaveatEvalInfo_Result; + /** + * context consists of any named values that were used for evaluating the caveat expression. + * + * @generated from protobuf field: google.protobuf.Struct context = 3; + */ + context?: Struct; + /** + * partial_caveat_info holds information of a partially-evaluated caveated response, if applicable. + * + * @generated from protobuf field: authzed.api.v1.PartialCaveatInfo partial_caveat_info = 4; + */ + partialCaveatInfo?: PartialCaveatInfo; + /** + * caveat_name is the name of the caveat that was executed, if applicable. + * + * @generated from protobuf field: string caveat_name = 5; + */ + caveatName: string; +} +/** + * @generated from protobuf enum authzed.api.v1.CaveatEvalInfo.Result + */ +export enum CaveatEvalInfo_Result { + /** + * @generated from protobuf enum value: RESULT_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * @generated from protobuf enum value: RESULT_UNEVALUATED = 1; + */ + UNEVALUATED = 1, + /** + * @generated from protobuf enum value: RESULT_FALSE = 2; + */ + FALSE = 2, + /** + * @generated from protobuf enum value: RESULT_TRUE = 3; + */ + TRUE = 3, + /** + * @generated from protobuf enum value: RESULT_MISSING_SOME_CONTEXT = 4; + */ + MISSING_SOME_CONTEXT = 4 +} +// @generated message type with reflection information, may provide speed optimized methods +class DebugInformation$Type extends MessageType { + constructor() { + super("authzed.api.v1.DebugInformation", [ + { no: 1, name: "check", kind: "message", T: () => CheckDebugTrace }, + { no: 2, name: "schema_used", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): DebugInformation { + const message = { schemaUsed: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DebugInformation): DebugInformation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.CheckDebugTrace check */ 1: + message.check = CheckDebugTrace.internalBinaryRead(reader, reader.uint32(), options, message.check); + break; + case /* string schema_used */ 2: + message.schemaUsed = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DebugInformation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.CheckDebugTrace check = 1; */ + if (message.check) + CheckDebugTrace.internalBinaryWrite(message.check, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string schema_used = 2; */ + if (message.schemaUsed !== "") + writer.tag(2, WireType.LengthDelimited).string(message.schemaUsed); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.DebugInformation + */ +export const DebugInformation = new DebugInformation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CheckDebugTrace$Type extends MessageType { + constructor() { + super("authzed.api.v1.CheckDebugTrace", [ + { no: 1, name: "resource", kind: "message", T: () => ObjectReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "permission", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "permission_type", kind: "enum", T: () => ["authzed.api.v1.CheckDebugTrace.PermissionType", CheckDebugTrace_PermissionType, "PERMISSION_TYPE_"], options: { "validate.rules": { enum: { definedOnly: true, notIn: [0] } } } }, + { no: 4, name: "subject", kind: "message", T: () => SubjectReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 5, name: "result", kind: "enum", T: () => ["authzed.api.v1.CheckDebugTrace.Permissionship", CheckDebugTrace_Permissionship, "PERMISSIONSHIP_"], options: { "validate.rules": { enum: { definedOnly: true, notIn: [0] } } } }, + { no: 8, name: "caveat_evaluation_info", kind: "message", T: () => CaveatEvalInfo }, + { no: 6, name: "was_cached_result", kind: "scalar", oneof: "resolution", T: 8 /*ScalarType.BOOL*/ }, + { no: 7, name: "sub_problems", kind: "message", oneof: "resolution", T: () => CheckDebugTrace_SubProblems } + ]); + } + create(value?: PartialMessage): CheckDebugTrace { + const message = { permission: "", permissionType: 0, result: 0, resolution: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CheckDebugTrace): CheckDebugTrace { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* authzed.api.v1.ObjectReference resource */ 1: + message.resource = ObjectReference.internalBinaryRead(reader, reader.uint32(), options, message.resource); + break; + case /* string permission */ 2: + message.permission = reader.string(); + break; + case /* authzed.api.v1.CheckDebugTrace.PermissionType permission_type */ 3: + message.permissionType = reader.int32(); + break; + case /* authzed.api.v1.SubjectReference subject */ 4: + message.subject = SubjectReference.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* authzed.api.v1.CheckDebugTrace.Permissionship result */ 5: + message.result = reader.int32(); + break; + case /* authzed.api.v1.CaveatEvalInfo caveat_evaluation_info */ 8: + message.caveatEvaluationInfo = CaveatEvalInfo.internalBinaryRead(reader, reader.uint32(), options, message.caveatEvaluationInfo); + break; + case /* bool was_cached_result */ 6: + message.resolution = { + oneofKind: "wasCachedResult", + wasCachedResult: reader.bool() + }; + break; + case /* authzed.api.v1.CheckDebugTrace.SubProblems sub_problems */ 7: + message.resolution = { + oneofKind: "subProblems", + subProblems: CheckDebugTrace_SubProblems.internalBinaryRead(reader, reader.uint32(), options, (message.resolution as any).subProblems) + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CheckDebugTrace, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* authzed.api.v1.ObjectReference resource = 1; */ + if (message.resource) + ObjectReference.internalBinaryWrite(message.resource, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string permission = 2; */ + if (message.permission !== "") + writer.tag(2, WireType.LengthDelimited).string(message.permission); + /* authzed.api.v1.CheckDebugTrace.PermissionType permission_type = 3; */ + if (message.permissionType !== 0) + writer.tag(3, WireType.Varint).int32(message.permissionType); + /* authzed.api.v1.SubjectReference subject = 4; */ + if (message.subject) + SubjectReference.internalBinaryWrite(message.subject, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.CheckDebugTrace.Permissionship result = 5; */ + if (message.result !== 0) + writer.tag(5, WireType.Varint).int32(message.result); + /* authzed.api.v1.CaveatEvalInfo caveat_evaluation_info = 8; */ + if (message.caveatEvaluationInfo) + CaveatEvalInfo.internalBinaryWrite(message.caveatEvaluationInfo, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* bool was_cached_result = 6; */ + if (message.resolution.oneofKind === "wasCachedResult") + writer.tag(6, WireType.Varint).bool(message.resolution.wasCachedResult); + /* authzed.api.v1.CheckDebugTrace.SubProblems sub_problems = 7; */ + if (message.resolution.oneofKind === "subProblems") + CheckDebugTrace_SubProblems.internalBinaryWrite(message.resolution.subProblems, writer.tag(7, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.CheckDebugTrace + */ +export const CheckDebugTrace = new CheckDebugTrace$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CheckDebugTrace_SubProblems$Type extends MessageType { + constructor() { + super("authzed.api.v1.CheckDebugTrace.SubProblems", [ + { no: 1, name: "traces", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => CheckDebugTrace } + ]); + } + create(value?: PartialMessage): CheckDebugTrace_SubProblems { + const message = { traces: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CheckDebugTrace_SubProblems): CheckDebugTrace_SubProblems { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated authzed.api.v1.CheckDebugTrace traces */ 1: + message.traces.push(CheckDebugTrace.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CheckDebugTrace_SubProblems, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated authzed.api.v1.CheckDebugTrace traces = 1; */ + for (let i = 0; i < message.traces.length; i++) + CheckDebugTrace.internalBinaryWrite(message.traces[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.CheckDebugTrace.SubProblems + */ +export const CheckDebugTrace_SubProblems = new CheckDebugTrace_SubProblems$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CaveatEvalInfo$Type extends MessageType { + constructor() { + super("authzed.api.v1.CaveatEvalInfo", [ + { no: 1, name: "expression", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "result", kind: "enum", T: () => ["authzed.api.v1.CaveatEvalInfo.Result", CaveatEvalInfo_Result, "RESULT_"] }, + { no: 3, name: "context", kind: "message", T: () => Struct }, + { no: 4, name: "partial_caveat_info", kind: "message", T: () => PartialCaveatInfo }, + { no: 5, name: "caveat_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): CaveatEvalInfo { + const message = { expression: "", result: 0, caveatName: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CaveatEvalInfo): CaveatEvalInfo { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string expression */ 1: + message.expression = reader.string(); + break; + case /* authzed.api.v1.CaveatEvalInfo.Result result */ 2: + message.result = reader.int32(); + break; + case /* google.protobuf.Struct context */ 3: + message.context = Struct.internalBinaryRead(reader, reader.uint32(), options, message.context); + break; + case /* authzed.api.v1.PartialCaveatInfo partial_caveat_info */ 4: + message.partialCaveatInfo = PartialCaveatInfo.internalBinaryRead(reader, reader.uint32(), options, message.partialCaveatInfo); + break; + case /* string caveat_name */ 5: + message.caveatName = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CaveatEvalInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string expression = 1; */ + if (message.expression !== "") + writer.tag(1, WireType.LengthDelimited).string(message.expression); + /* authzed.api.v1.CaveatEvalInfo.Result result = 2; */ + if (message.result !== 0) + writer.tag(2, WireType.Varint).int32(message.result); + /* google.protobuf.Struct context = 3; */ + if (message.context) + Struct.internalBinaryWrite(message.context, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.PartialCaveatInfo partial_caveat_info = 4; */ + if (message.partialCaveatInfo) + PartialCaveatInfo.internalBinaryWrite(message.partialCaveatInfo, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* string caveat_name = 5; */ + if (message.caveatName !== "") + writer.tag(5, WireType.LengthDelimited).string(message.caveatName); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message authzed.api.v1.CaveatEvalInfo + */ +export const CaveatEvalInfo = new CaveatEvalInfo$Type(); diff --git a/spicedb-common/src/protodevdefs/core/v1/core.ts b/spicedb-common/src/protodevdefs/core/v1/core.ts new file mode 100644 index 0000000..e3c7b1d --- /dev/null +++ b/spicedb-common/src/protodevdefs/core/v1/core.ts @@ -0,0 +1,2826 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "core/v1/core.proto" (package "core.v1", syntax proto3) +// tslint:disable +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Any } from "../../google/protobuf/any"; +import { Struct } from "../../google/protobuf/struct"; +/** + * @generated from protobuf message core.v1.RelationTuple + */ +export interface RelationTuple { + /** + * * resource_and_relation is the resource for the tuple + * + * @generated from protobuf field: core.v1.ObjectAndRelation resource_and_relation = 1; + */ + resourceAndRelation?: ObjectAndRelation; + /** + * * subject is the subject for the tuple + * + * @generated from protobuf field: core.v1.ObjectAndRelation subject = 2; + */ + subject?: ObjectAndRelation; + /** + * * caveat is a reference to a the caveat that must be enforced over the tuple * + * + * @generated from protobuf field: core.v1.ContextualizedCaveat caveat = 3; + */ + caveat?: ContextualizedCaveat; +} +/** + * * + * ContextualizedCaveat represents a reference to a caveat used to by caveated tuples. + * The context are key-value pairs that will be injected at evaluation time. + * + * @generated from protobuf message core.v1.ContextualizedCaveat + */ +export interface ContextualizedCaveat { + /** + * * caveat_name is the name used in the schema for a stored caveat * + * + * @generated from protobuf field: string caveat_name = 1; + */ + caveatName: string; + /** + * * context are arguments used as input during caveat evaluation with a predefined value * + * + * @generated from protobuf field: google.protobuf.Struct context = 2; + */ + context?: Struct; +} +/** + * @generated from protobuf message core.v1.CaveatDefinition + */ +export interface CaveatDefinition { + /** + * * name represents the globally-unique identifier of the caveat * + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * * serialized_expression is the byte representation of a caveat's logic + * + * @generated from protobuf field: bytes serialized_expression = 2; + */ + serializedExpression: Uint8Array; + /** + * * parameters_and_types is a map from parameter name to its type + * + * @generated from protobuf field: map parameter_types = 3; + */ + parameterTypes: { + [key: string]: CaveatTypeReference; + }; + /** + * * metadata contains compiler metadata from schemas compiled into caveats + * + * @generated from protobuf field: core.v1.Metadata metadata = 4; + */ + metadata?: Metadata; + /** + * * source_position contains the position of the caveat in the source schema, if any + * + * @generated from protobuf field: core.v1.SourcePosition source_position = 5; + */ + sourcePosition?: SourcePosition; +} +/** + * @generated from protobuf message core.v1.CaveatTypeReference + */ +export interface CaveatTypeReference { + /** + * @generated from protobuf field: string type_name = 1; + */ + typeName: string; + /** + * @generated from protobuf field: repeated core.v1.CaveatTypeReference child_types = 2; + */ + childTypes: CaveatTypeReference[]; +} +/** + * @generated from protobuf message core.v1.ObjectAndRelation + */ +export interface ObjectAndRelation { + /** + * * namespace is the full namespace path for the referenced object + * + * @generated from protobuf field: string namespace = 1; + */ + namespace: string; + /** + * * object_id is the unique ID for the object within the namespace + * + * @generated from protobuf field: string object_id = 2; + */ + objectId: string; + /** + * * relation is the name of the referenced relation or permission under the namespace + * + * @generated from protobuf field: string relation = 3; + */ + relation: string; +} +/** + * @generated from protobuf message core.v1.RelationReference + */ +export interface RelationReference { + /** + * * namespace is the full namespace path + * + * @generated from protobuf field: string namespace = 1; + */ + namespace: string; + /** + * * relation is the name of the referenced relation or permission under the namespace + * + * @generated from protobuf field: string relation = 3; + */ + relation: string; +} +/** + * @generated from protobuf message core.v1.Zookie + */ +export interface Zookie { + /** + * @generated from protobuf field: string token = 1; + */ + token: string; +} +/** + * @generated from protobuf message core.v1.RelationTupleUpdate + */ +export interface RelationTupleUpdate { + /** + * @generated from protobuf field: core.v1.RelationTupleUpdate.Operation operation = 1; + */ + operation: RelationTupleUpdate_Operation; + /** + * @generated from protobuf field: core.v1.RelationTuple tuple = 2; + */ + tuple?: RelationTuple; +} +/** + * @generated from protobuf enum core.v1.RelationTupleUpdate.Operation + */ +export enum RelationTupleUpdate_Operation { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: CREATE = 1; + */ + CREATE = 1, + /** + * @generated from protobuf enum value: TOUCH = 2; + */ + TOUCH = 2, + /** + * @generated from protobuf enum value: DELETE = 3; + */ + DELETE = 3 +} +/** + * @generated from protobuf message core.v1.RelationTupleTreeNode + */ +export interface RelationTupleTreeNode { + /** + * @generated from protobuf oneof: node_type + */ + nodeType: { + oneofKind: "intermediateNode"; + /** + * @generated from protobuf field: core.v1.SetOperationUserset intermediate_node = 1; + */ + intermediateNode: SetOperationUserset; + } | { + oneofKind: "leafNode"; + /** + * @generated from protobuf field: core.v1.DirectSubjects leaf_node = 2; + */ + leafNode: DirectSubjects; + } | { + oneofKind: undefined; + }; + /** + * @generated from protobuf field: core.v1.ObjectAndRelation expanded = 3; + */ + expanded?: ObjectAndRelation; + /** + * @generated from protobuf field: core.v1.CaveatExpression caveat_expression = 4; + */ + caveatExpression?: CaveatExpression; +} +/** + * @generated from protobuf message core.v1.SetOperationUserset + */ +export interface SetOperationUserset { + /** + * @generated from protobuf field: core.v1.SetOperationUserset.Operation operation = 1; + */ + operation: SetOperationUserset_Operation; + /** + * @generated from protobuf field: repeated core.v1.RelationTupleTreeNode child_nodes = 2; + */ + childNodes: RelationTupleTreeNode[]; +} +/** + * @generated from protobuf enum core.v1.SetOperationUserset.Operation + */ +export enum SetOperationUserset_Operation { + /** + * @generated from protobuf enum value: INVALID = 0; + */ + INVALID = 0, + /** + * @generated from protobuf enum value: UNION = 1; + */ + UNION = 1, + /** + * @generated from protobuf enum value: INTERSECTION = 2; + */ + INTERSECTION = 2, + /** + * @generated from protobuf enum value: EXCLUSION = 3; + */ + EXCLUSION = 3 +} +/** + * @generated from protobuf message core.v1.DirectSubject + */ +export interface DirectSubject { + /** + * @generated from protobuf field: core.v1.ObjectAndRelation subject = 1; + */ + subject?: ObjectAndRelation; + /** + * @generated from protobuf field: core.v1.CaveatExpression caveat_expression = 2; + */ + caveatExpression?: CaveatExpression; +} +/** + * @generated from protobuf message core.v1.DirectSubjects + */ +export interface DirectSubjects { + /** + * @generated from protobuf field: repeated core.v1.DirectSubject subjects = 1; + */ + subjects: DirectSubject[]; +} +/** + * * + * Metadata is compiler metadata added to namespace definitions, such as doc comments and + * relation kinds. + * + * @generated from protobuf message core.v1.Metadata + */ +export interface Metadata { + /** + * @generated from protobuf field: repeated google.protobuf.Any metadata_message = 1; + */ + metadataMessage: Any[]; +} +/** + * * + * NamespaceDefinition represents a single definition of an object type + * + * @generated from protobuf message core.v1.NamespaceDefinition + */ +export interface NamespaceDefinition { + /** + * * name is the unique for the namespace, including prefixes (which are optional) + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * * relation contains the relations and permissions defined in the namespace + * + * @generated from protobuf field: repeated core.v1.Relation relation = 2; + */ + relation: Relation[]; + /** + * * metadata contains compiler metadata from schemas compiled into namespaces + * + * @generated from protobuf field: core.v1.Metadata metadata = 3; + */ + metadata?: Metadata; + /** + * * source_position contains the position of the namespace in the source schema, if any + * + * @generated from protobuf field: core.v1.SourcePosition source_position = 4; + */ + sourcePosition?: SourcePosition; +} +/** + * * + * Relation represents the definition of a relation or permission under a namespace. + * + * @generated from protobuf message core.v1.Relation + */ +export interface Relation { + /** + * * name is the full name for the relation or permission + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * * userset_rewrite, if specified, is the rewrite for computing the value of the permission. + * + * @generated from protobuf field: core.v1.UsersetRewrite userset_rewrite = 2; + */ + usersetRewrite?: UsersetRewrite; + /** + * * + * type_information, if specified, is the list of allowed object types that can appear in this + * relation + * + * @generated from protobuf field: core.v1.TypeInformation type_information = 3; + */ + typeInformation?: TypeInformation; + /** + * * metadata contains compiler metadata from schemas compiled into namespaces + * + * @generated from protobuf field: core.v1.Metadata metadata = 4; + */ + metadata?: Metadata; + /** + * * source_position contains the position of the relation in the source schema, if any + * + * @generated from protobuf field: core.v1.SourcePosition source_position = 5; + */ + sourcePosition?: SourcePosition; + /** + * @generated from protobuf field: string aliasing_relation = 6; + */ + aliasingRelation: string; + /** + * @generated from protobuf field: string canonical_cache_key = 7; + */ + canonicalCacheKey: string; +} +/** + * * + * ReachabilityGraph is a serialized form of a reachability graph, representing how a relation can + * be reached from one or more subject types. + * + * It defines a "reverse" data flow graph, starting at a subject type, and providing all the + * entrypoints where that subject type can be found leading to the decorated relation. + * + * For example, given the schema: + * ``` + * definition user {} + * + * definition organization { + * relation admin: user + * } + * + * definition resource { + * relation org: organization + * relation viewer: user + * relation owner: user + * permission view = viewer + owner + org->admin + * } + * ``` + * + * The reachability graph for `viewer` and the other relations will have entrypoints for each + * subject type found for those relations. + * + * The full reachability graph for the `view` relation will have three entrypoints, representing: + * 1) resource#viewer (computed_userset) + * 2) resource#owner (computed_userset) + * 3) organization#admin (tupleset_to_userset) + * + * @generated from protobuf message core.v1.ReachabilityGraph + */ +export interface ReachabilityGraph { + /** + * * + * entrypoints_by_subject_type provides all entrypoints by subject *type*, representing wildcards. + * The keys of the map are the full path(s) for the namespace(s) referenced by reachable wildcards + * + * @generated from protobuf field: map entrypoints_by_subject_type = 1; + */ + entrypointsBySubjectType: { + [key: string]: ReachabilityEntrypoints; + }; + /** + * * + * entrypoints_by_subject_relation provides all entrypoints by subject type+relation. + * The keys of the map are of the form `namespace_path#relation_name` + * + * @generated from protobuf field: map entrypoints_by_subject_relation = 2; + */ + entrypointsBySubjectRelation: { + [key: string]: ReachabilityEntrypoints; + }; +} +/** + * * + * ReachabilityEntrypoints represents all the entrypoints for a specific subject type or subject + * relation into the reachability graph for a particular target relation. + * + * @generated from protobuf message core.v1.ReachabilityEntrypoints + */ +export interface ReachabilityEntrypoints { + /** + * * + * entrypoints are the entrypoints found. + * + * @generated from protobuf field: repeated core.v1.ReachabilityEntrypoint entrypoints = 1; + */ + entrypoints: ReachabilityEntrypoint[]; + /** + * * + * subject_type, if specified, is the type of subjects to which the entrypoint(s) apply. A + * subject type is only set for wildcards. + * + * @generated from protobuf field: string subject_type = 2; + */ + subjectType: string; + /** + * * + * subject_relation, if specified, is the type and relation of subjects to which the + * entrypoint(s) apply. + * + * @generated from protobuf field: core.v1.RelationReference subject_relation = 3; + */ + subjectRelation?: RelationReference; +} +/** + * * + * ReachabilityEntrypoint represents a single entrypoint for a specific subject type or subject + * relation into the reachability graph for a particular target relation. + * + * @generated from protobuf message core.v1.ReachabilityEntrypoint + */ +export interface ReachabilityEntrypoint { + /** + * * + * kind is the kind of the entrypoint. + * + * @generated from protobuf field: core.v1.ReachabilityEntrypoint.ReachabilityEntrypointKind kind = 1; + */ + kind: ReachabilityEntrypoint_ReachabilityEntrypointKind; + /** + * * + * target_relation is the relation on which the entrypoint exists. + * + * @generated from protobuf field: core.v1.RelationReference target_relation = 2; + */ + targetRelation?: RelationReference; + /** + * * + * result_status contains the status of objects found for this entrypoint as direct results for + * the parent relation/permission. + * + * @generated from protobuf field: core.v1.ReachabilityEntrypoint.EntrypointResultStatus result_status = 4; + */ + resultStatus: ReachabilityEntrypoint_EntrypointResultStatus; + /** + * * + * tupleset_relation is the name of the tupleset relation on the TupleToUserset this entrypoint + * represents, if applicable. + * + * @generated from protobuf field: string tupleset_relation = 5; + */ + tuplesetRelation: string; +} +/** + * @generated from protobuf enum core.v1.ReachabilityEntrypoint.ReachabilityEntrypointKind + */ +export enum ReachabilityEntrypoint_ReachabilityEntrypointKind { + /** + * * + * RELATION_ENTRYPOINT indicates an entrypoint where the subject object can be directly + * found for a relationship. + * + * @generated from protobuf enum value: RELATION_ENTRYPOINT = 0; + */ + RELATION_ENTRYPOINT = 0, + /** + * * + * COMPUTED_USERSET_ENTRYPOINT indicates an entrypoint where the subject's relation is + * "rewritten" via a `computed_userset` to the target permission's operation node. + * + * @generated from protobuf enum value: COMPUTED_USERSET_ENTRYPOINT = 1; + */ + COMPUTED_USERSET_ENTRYPOINT = 1, + /** + * * + * TUPLESET_TO_USERSET_ENTRYPOINT indicates an entrypoint where the subject's relation is + * walked via a `tupleset_to_userset` in the target permission's operation node. + * + * @generated from protobuf enum value: TUPLESET_TO_USERSET_ENTRYPOINT = 2; + */ + TUPLESET_TO_USERSET_ENTRYPOINT = 2 +} +/** + * @generated from protobuf enum core.v1.ReachabilityEntrypoint.EntrypointResultStatus + */ +export enum ReachabilityEntrypoint_EntrypointResultStatus { + /** + * * + * REACHABLE_CONDITIONAL_RESULT indicates that the entrypoint is under one or more intersections + * or exclusion operations, indicating that any reachable object *may* be a result, conditional + * on the parent non-union operation(s). + * + * @generated from protobuf enum value: REACHABLE_CONDITIONAL_RESULT = 0; + */ + REACHABLE_CONDITIONAL_RESULT = 0, + /** + * * + * DIRECT_OPERATION_RESULT indicates that the entrypoint exists solely under zero or more + * union operations, making any reachable object also a *result* of the relation or permission. + * + * @generated from protobuf enum value: DIRECT_OPERATION_RESULT = 1; + */ + DIRECT_OPERATION_RESULT = 1 +} +/** + * * + * TypeInformation defines the allowed types for a relation. + * + * @generated from protobuf message core.v1.TypeInformation + */ +export interface TypeInformation { + /** + * * + * allowed_direct_relations are those relation types allowed to be placed into a relation, + * e.g. the types of subjects allowed when a relationship is written to the relation + * + * @generated from protobuf field: repeated core.v1.AllowedRelation allowed_direct_relations = 1; + */ + allowedDirectRelations: AllowedRelation[]; +} +/** + * * + * AllowedRelation is an allowed type of a relation when used as a subject. + * + * @generated from protobuf message core.v1.AllowedRelation + */ +export interface AllowedRelation { + /** + * * namespace is the full namespace path of the allowed object type + * + * @generated from protobuf field: string namespace = 1; + */ + namespace: string; + /** + * @generated from protobuf oneof: relation_or_wildcard + */ + relationOrWildcard: { + oneofKind: "relation"; + /** + * @generated from protobuf field: string relation = 3; + */ + relation: string; + } | { + oneofKind: "publicWildcard"; + /** + * @generated from protobuf field: core.v1.AllowedRelation.PublicWildcard public_wildcard = 4; + */ + publicWildcard: AllowedRelation_PublicWildcard; + } | { + oneofKind: undefined; + }; + /** + * * source_position contains the position of the type in the source schema, if any + * + * @generated from protobuf field: core.v1.SourcePosition source_position = 5; + */ + sourcePosition?: SourcePosition; + /** + * * + * required_caveat defines the required caveat on this relation. + * + * @generated from protobuf field: core.v1.AllowedCaveat required_caveat = 6; + */ + requiredCaveat?: AllowedCaveat; +} +/** + * @generated from protobuf message core.v1.AllowedRelation.PublicWildcard + */ +export interface AllowedRelation_PublicWildcard { +} +/** + * * + * AllowedCaveat is an allowed caveat of a relation. + * + * @generated from protobuf message core.v1.AllowedCaveat + */ +export interface AllowedCaveat { + /** + * * + * caveat_name is the name of the allowed caveat. + * + * @generated from protobuf field: string caveat_name = 1; + */ + caveatName: string; +} +/** + * @generated from protobuf message core.v1.UsersetRewrite + */ +export interface UsersetRewrite { + /** + * @generated from protobuf oneof: rewrite_operation + */ + rewriteOperation: { + oneofKind: "union"; + /** + * @generated from protobuf field: core.v1.SetOperation union = 1; + */ + union: SetOperation; + } | { + oneofKind: "intersection"; + /** + * @generated from protobuf field: core.v1.SetOperation intersection = 2; + */ + intersection: SetOperation; + } | { + oneofKind: "exclusion"; + /** + * @generated from protobuf field: core.v1.SetOperation exclusion = 3; + */ + exclusion: SetOperation; + } | { + oneofKind: undefined; + }; + /** + * @generated from protobuf field: core.v1.SourcePosition source_position = 4; + */ + sourcePosition?: SourcePosition; +} +/** + * @generated from protobuf message core.v1.SetOperation + */ +export interface SetOperation { + /** + * @generated from protobuf field: repeated core.v1.SetOperation.Child child = 1; + */ + child: SetOperation_Child[]; +} +/** + * @generated from protobuf message core.v1.SetOperation.Child + */ +export interface SetOperation_Child { + /** + * @generated from protobuf oneof: child_type + */ + childType: { + oneofKind: "This"; + /** + * @generated from protobuf field: core.v1.SetOperation.Child.This _this = 1; + */ + This: SetOperation_Child_This; + } | { + oneofKind: "computedUserset"; + /** + * @generated from protobuf field: core.v1.ComputedUserset computed_userset = 2; + */ + computedUserset: ComputedUserset; + } | { + oneofKind: "tupleToUserset"; + /** + * @generated from protobuf field: core.v1.TupleToUserset tuple_to_userset = 3; + */ + tupleToUserset: TupleToUserset; + } | { + oneofKind: "usersetRewrite"; + /** + * @generated from protobuf field: core.v1.UsersetRewrite userset_rewrite = 4; + */ + usersetRewrite: UsersetRewrite; + } | { + oneofKind: "Nil"; + /** + * @generated from protobuf field: core.v1.SetOperation.Child.Nil _nil = 6; + */ + Nil: SetOperation_Child_Nil; + } | { + oneofKind: undefined; + }; + /** + * @generated from protobuf field: core.v1.SourcePosition source_position = 5; + */ + sourcePosition?: SourcePosition; + /** + * * + * operation_path (if specified) is the *unique* ID for the set operation in the permission + * definition. It is a heirarchy representing the position of the operation under its parent + * operation. For example, the operation path of an operation which is the third child of the + * fourth top-level operation, will be `3,2`. + * + * @generated from protobuf field: repeated uint32 operation_path = 7; + */ + operationPath: number[]; +} +/** + * @generated from protobuf message core.v1.SetOperation.Child.This + */ +export interface SetOperation_Child_This { +} +/** + * @generated from protobuf message core.v1.SetOperation.Child.Nil + */ +export interface SetOperation_Child_Nil { +} +/** + * @generated from protobuf message core.v1.TupleToUserset + */ +export interface TupleToUserset { + /** + * @generated from protobuf field: core.v1.TupleToUserset.Tupleset tupleset = 1; + */ + tupleset?: TupleToUserset_Tupleset; + /** + * @generated from protobuf field: core.v1.ComputedUserset computed_userset = 2; + */ + computedUserset?: ComputedUserset; + /** + * @generated from protobuf field: core.v1.SourcePosition source_position = 3; + */ + sourcePosition?: SourcePosition; +} +/** + * @generated from protobuf message core.v1.TupleToUserset.Tupleset + */ +export interface TupleToUserset_Tupleset { + /** + * @generated from protobuf field: string relation = 1; + */ + relation: string; +} +/** + * @generated from protobuf message core.v1.ComputedUserset + */ +export interface ComputedUserset { + /** + * @generated from protobuf field: core.v1.ComputedUserset.Object object = 1; + */ + object: ComputedUserset_Object; + /** + * @generated from protobuf field: string relation = 2; + */ + relation: string; + /** + * @generated from protobuf field: core.v1.SourcePosition source_position = 3; + */ + sourcePosition?: SourcePosition; +} +/** + * @generated from protobuf enum core.v1.ComputedUserset.Object + */ +export enum ComputedUserset_Object { + /** + * @generated from protobuf enum value: TUPLE_OBJECT = 0; + */ + TUPLE_OBJECT = 0, + /** + * @generated from protobuf enum value: TUPLE_USERSET_OBJECT = 1; + */ + TUPLE_USERSET_OBJECT = 1 +} +/** + * @generated from protobuf message core.v1.SourcePosition + */ +export interface SourcePosition { + /** + * @generated from protobuf field: uint64 zero_indexed_line_number = 1; + */ + zeroIndexedLineNumber: string; + /** + * @generated from protobuf field: uint64 zero_indexed_column_position = 2; + */ + zeroIndexedColumnPosition: string; +} +/** + * @generated from protobuf message core.v1.CaveatExpression + */ +export interface CaveatExpression { + /** + * @generated from protobuf oneof: operation_or_caveat + */ + operationOrCaveat: { + oneofKind: "operation"; + /** + * @generated from protobuf field: core.v1.CaveatOperation operation = 1; + */ + operation: CaveatOperation; + } | { + oneofKind: "caveat"; + /** + * @generated from protobuf field: core.v1.ContextualizedCaveat caveat = 2; + */ + caveat: ContextualizedCaveat; + } | { + oneofKind: undefined; + }; +} +/** + * @generated from protobuf message core.v1.CaveatOperation + */ +export interface CaveatOperation { + /** + * @generated from protobuf field: core.v1.CaveatOperation.Operation op = 1; + */ + op: CaveatOperation_Operation; + /** + * @generated from protobuf field: repeated core.v1.CaveatExpression children = 2; + */ + children: CaveatExpression[]; +} +/** + * @generated from protobuf enum core.v1.CaveatOperation.Operation + */ +export enum CaveatOperation_Operation { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: OR = 1; + */ + OR = 1, + /** + * @generated from protobuf enum value: AND = 2; + */ + AND = 2, + /** + * @generated from protobuf enum value: NOT = 3; + */ + NOT = 3 +} +// @generated message type with reflection information, may provide speed optimized methods +class RelationTuple$Type extends MessageType { + constructor() { + super("core.v1.RelationTuple", [ + { no: 1, name: "resource_and_relation", kind: "message", T: () => ObjectAndRelation, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "subject", kind: "message", T: () => ObjectAndRelation, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "caveat", kind: "message", T: () => ContextualizedCaveat, options: { "validate.rules": { message: { required: false } } } } + ]); + } + create(value?: PartialMessage): RelationTuple { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RelationTuple): RelationTuple { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.ObjectAndRelation resource_and_relation */ 1: + message.resourceAndRelation = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.resourceAndRelation); + break; + case /* core.v1.ObjectAndRelation subject */ 2: + message.subject = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* core.v1.ContextualizedCaveat caveat */ 3: + message.caveat = ContextualizedCaveat.internalBinaryRead(reader, reader.uint32(), options, message.caveat); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RelationTuple, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.ObjectAndRelation resource_and_relation = 1; */ + if (message.resourceAndRelation) + ObjectAndRelation.internalBinaryWrite(message.resourceAndRelation, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ObjectAndRelation subject = 2; */ + if (message.subject) + ObjectAndRelation.internalBinaryWrite(message.subject, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ContextualizedCaveat caveat = 3; */ + if (message.caveat) + ContextualizedCaveat.internalBinaryWrite(message.caveat, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.RelationTuple + */ +export const RelationTuple = new RelationTuple$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ContextualizedCaveat$Type extends MessageType { + constructor() { + super("core.v1.ContextualizedCaveat", [ + { no: 1, name: "caveat_name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^(([a-zA-Z0-9_][a-zA-Z0-9/_|-]{0,127})|\\*)$" } } } }, + { no: 2, name: "context", kind: "message", T: () => Struct, options: { "validate.rules": { message: { required: false } } } } + ]); + } + create(value?: PartialMessage): ContextualizedCaveat { + const message = { caveatName: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ContextualizedCaveat): ContextualizedCaveat { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string caveat_name */ 1: + message.caveatName = reader.string(); + break; + case /* google.protobuf.Struct context */ 2: + message.context = Struct.internalBinaryRead(reader, reader.uint32(), options, message.context); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ContextualizedCaveat, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string caveat_name = 1; */ + if (message.caveatName !== "") + writer.tag(1, WireType.LengthDelimited).string(message.caveatName); + /* google.protobuf.Struct context = 2; */ + if (message.context) + Struct.internalBinaryWrite(message.context, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ContextualizedCaveat + */ +export const ContextualizedCaveat = new ContextualizedCaveat$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CaveatDefinition$Type extends MessageType { + constructor() { + super("core.v1.CaveatDefinition", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^(([a-zA-Z0-9_][a-zA-Z0-9/_|-]{0,127})|\\*)$" } } } }, + { no: 2, name: "serialized_expression", kind: "scalar", T: 12 /*ScalarType.BYTES*/, options: { "validate.rules": { bytes: { minLen: "0", maxLen: "4096" } } } }, + { no: 3, name: "parameter_types", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => CaveatTypeReference }, options: { "validate.rules": { map: { minPairs: "1", maxPairs: "20" } } } }, + { no: 4, name: "metadata", kind: "message", T: () => Metadata }, + { no: 5, name: "source_position", kind: "message", T: () => SourcePosition } + ]); + } + create(value?: PartialMessage): CaveatDefinition { + const message = { name: "", serializedExpression: new Uint8Array(0), parameterTypes: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CaveatDefinition): CaveatDefinition { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* bytes serialized_expression */ 2: + message.serializedExpression = reader.bytes(); + break; + case /* map parameter_types */ 3: + this.binaryReadMap3(message.parameterTypes, reader, options); + break; + case /* core.v1.Metadata metadata */ 4: + message.metadata = Metadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.SourcePosition source_position */ 5: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap3(map: CaveatDefinition["parameterTypes"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof CaveatDefinition["parameterTypes"] | undefined, val: CaveatDefinition["parameterTypes"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = CaveatTypeReference.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field core.v1.CaveatDefinition.parameter_types"); + } + } + map[key ?? ""] = val ?? CaveatTypeReference.create(); + } + internalBinaryWrite(message: CaveatDefinition, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* bytes serialized_expression = 2; */ + if (message.serializedExpression.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.serializedExpression); + /* map parameter_types = 3; */ + for (let k of Object.keys(message.parameterTypes)) { + writer.tag(3, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + CaveatTypeReference.internalBinaryWrite(message.parameterTypes[k], writer, options); + writer.join().join(); + } + /* core.v1.Metadata metadata = 4; */ + if (message.metadata) + Metadata.internalBinaryWrite(message.metadata, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 5; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.CaveatDefinition + */ +export const CaveatDefinition = new CaveatDefinition$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CaveatTypeReference$Type extends MessageType { + constructor() { + super("core.v1.CaveatTypeReference", [ + { no: 1, name: "type_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "child_types", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => CaveatTypeReference, options: { "validate.rules": { repeated: { minItems: "0", maxItems: "1" } } } } + ]); + } + create(value?: PartialMessage): CaveatTypeReference { + const message = { typeName: "", childTypes: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CaveatTypeReference): CaveatTypeReference { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string type_name */ 1: + message.typeName = reader.string(); + break; + case /* repeated core.v1.CaveatTypeReference child_types */ 2: + message.childTypes.push(CaveatTypeReference.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CaveatTypeReference, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string type_name = 1; */ + if (message.typeName !== "") + writer.tag(1, WireType.LengthDelimited).string(message.typeName); + /* repeated core.v1.CaveatTypeReference child_types = 2; */ + for (let i = 0; i < message.childTypes.length; i++) + CaveatTypeReference.internalBinaryWrite(message.childTypes[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.CaveatTypeReference + */ +export const CaveatTypeReference = new CaveatTypeReference$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ObjectAndRelation$Type extends MessageType { + constructor() { + super("core.v1.ObjectAndRelation", [ + { no: 1, name: "namespace", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)*[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 2, name: "object_id", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "1024", pattern: "^(([a-zA-Z0-9/_|\\-=+]{1,})|\\*)$" } } } }, + { no: 3, name: "relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^(\\.\\.\\.|[a-z][a-z0-9_]{1,62}[a-z0-9])$" } } } } + ]); + } + create(value?: PartialMessage): ObjectAndRelation { + const message = { namespace: "", objectId: "", relation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ObjectAndRelation): ObjectAndRelation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string namespace */ 1: + message.namespace = reader.string(); + break; + case /* string object_id */ 2: + message.objectId = reader.string(); + break; + case /* string relation */ 3: + message.relation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ObjectAndRelation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string namespace = 1; */ + if (message.namespace !== "") + writer.tag(1, WireType.LengthDelimited).string(message.namespace); + /* string object_id = 2; */ + if (message.objectId !== "") + writer.tag(2, WireType.LengthDelimited).string(message.objectId); + /* string relation = 3; */ + if (message.relation !== "") + writer.tag(3, WireType.LengthDelimited).string(message.relation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ObjectAndRelation + */ +export const ObjectAndRelation = new ObjectAndRelation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RelationReference$Type extends MessageType { + constructor() { + super("core.v1.RelationReference", [ + { no: 1, name: "namespace", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)*[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 3, name: "relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^(\\.\\.\\.|[a-z][a-z0-9_]{1,62}[a-z0-9])$" } } } } + ]); + } + create(value?: PartialMessage): RelationReference { + const message = { namespace: "", relation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RelationReference): RelationReference { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string namespace */ 1: + message.namespace = reader.string(); + break; + case /* string relation */ 3: + message.relation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RelationReference, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string namespace = 1; */ + if (message.namespace !== "") + writer.tag(1, WireType.LengthDelimited).string(message.namespace); + /* string relation = 3; */ + if (message.relation !== "") + writer.tag(3, WireType.LengthDelimited).string(message.relation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.RelationReference + */ +export const RelationReference = new RelationReference$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Zookie$Type extends MessageType { + constructor() { + super("core.v1.Zookie", [ + { no: 1, name: "token", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { minBytes: "1" } } } } + ]); + } + create(value?: PartialMessage): Zookie { + const message = { token: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Zookie): Zookie { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string token */ 1: + message.token = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Zookie, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string token = 1; */ + if (message.token !== "") + writer.tag(1, WireType.LengthDelimited).string(message.token); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.Zookie + */ +export const Zookie = new Zookie$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RelationTupleUpdate$Type extends MessageType { + constructor() { + super("core.v1.RelationTupleUpdate", [ + { no: 1, name: "operation", kind: "enum", T: () => ["core.v1.RelationTupleUpdate.Operation", RelationTupleUpdate_Operation], options: { "validate.rules": { enum: { definedOnly: true } } } }, + { no: 2, name: "tuple", kind: "message", T: () => RelationTuple, options: { "validate.rules": { message: { required: true } } } } + ]); + } + create(value?: PartialMessage): RelationTupleUpdate { + const message = { operation: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RelationTupleUpdate): RelationTupleUpdate { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.RelationTupleUpdate.Operation operation */ 1: + message.operation = reader.int32(); + break; + case /* core.v1.RelationTuple tuple */ 2: + message.tuple = RelationTuple.internalBinaryRead(reader, reader.uint32(), options, message.tuple); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RelationTupleUpdate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.RelationTupleUpdate.Operation operation = 1; */ + if (message.operation !== 0) + writer.tag(1, WireType.Varint).int32(message.operation); + /* core.v1.RelationTuple tuple = 2; */ + if (message.tuple) + RelationTuple.internalBinaryWrite(message.tuple, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.RelationTupleUpdate + */ +export const RelationTupleUpdate = new RelationTupleUpdate$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RelationTupleTreeNode$Type extends MessageType { + constructor() { + super("core.v1.RelationTupleTreeNode", [ + { no: 1, name: "intermediate_node", kind: "message", oneof: "nodeType", T: () => SetOperationUserset }, + { no: 2, name: "leaf_node", kind: "message", oneof: "nodeType", T: () => DirectSubjects }, + { no: 3, name: "expanded", kind: "message", T: () => ObjectAndRelation }, + { no: 4, name: "caveat_expression", kind: "message", T: () => CaveatExpression } + ]); + } + create(value?: PartialMessage): RelationTupleTreeNode { + const message = { nodeType: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RelationTupleTreeNode): RelationTupleTreeNode { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.SetOperationUserset intermediate_node */ 1: + message.nodeType = { + oneofKind: "intermediateNode", + intermediateNode: SetOperationUserset.internalBinaryRead(reader, reader.uint32(), options, (message.nodeType as any).intermediateNode) + }; + break; + case /* core.v1.DirectSubjects leaf_node */ 2: + message.nodeType = { + oneofKind: "leafNode", + leafNode: DirectSubjects.internalBinaryRead(reader, reader.uint32(), options, (message.nodeType as any).leafNode) + }; + break; + case /* core.v1.ObjectAndRelation expanded */ 3: + message.expanded = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.expanded); + break; + case /* core.v1.CaveatExpression caveat_expression */ 4: + message.caveatExpression = CaveatExpression.internalBinaryRead(reader, reader.uint32(), options, message.caveatExpression); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RelationTupleTreeNode, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.SetOperationUserset intermediate_node = 1; */ + if (message.nodeType.oneofKind === "intermediateNode") + SetOperationUserset.internalBinaryWrite(message.nodeType.intermediateNode, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.DirectSubjects leaf_node = 2; */ + if (message.nodeType.oneofKind === "leafNode") + DirectSubjects.internalBinaryWrite(message.nodeType.leafNode, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ObjectAndRelation expanded = 3; */ + if (message.expanded) + ObjectAndRelation.internalBinaryWrite(message.expanded, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.CaveatExpression caveat_expression = 4; */ + if (message.caveatExpression) + CaveatExpression.internalBinaryWrite(message.caveatExpression, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.RelationTupleTreeNode + */ +export const RelationTupleTreeNode = new RelationTupleTreeNode$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SetOperationUserset$Type extends MessageType { + constructor() { + super("core.v1.SetOperationUserset", [ + { no: 1, name: "operation", kind: "enum", T: () => ["core.v1.SetOperationUserset.Operation", SetOperationUserset_Operation] }, + { no: 2, name: "child_nodes", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => RelationTupleTreeNode } + ]); + } + create(value?: PartialMessage): SetOperationUserset { + const message = { operation: 0, childNodes: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetOperationUserset): SetOperationUserset { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.SetOperationUserset.Operation operation */ 1: + message.operation = reader.int32(); + break; + case /* repeated core.v1.RelationTupleTreeNode child_nodes */ 2: + message.childNodes.push(RelationTupleTreeNode.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SetOperationUserset, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.SetOperationUserset.Operation operation = 1; */ + if (message.operation !== 0) + writer.tag(1, WireType.Varint).int32(message.operation); + /* repeated core.v1.RelationTupleTreeNode child_nodes = 2; */ + for (let i = 0; i < message.childNodes.length; i++) + RelationTupleTreeNode.internalBinaryWrite(message.childNodes[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SetOperationUserset + */ +export const SetOperationUserset = new SetOperationUserset$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DirectSubject$Type extends MessageType { + constructor() { + super("core.v1.DirectSubject", [ + { no: 1, name: "subject", kind: "message", T: () => ObjectAndRelation }, + { no: 2, name: "caveat_expression", kind: "message", T: () => CaveatExpression } + ]); + } + create(value?: PartialMessage): DirectSubject { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DirectSubject): DirectSubject { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.ObjectAndRelation subject */ 1: + message.subject = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* core.v1.CaveatExpression caveat_expression */ 2: + message.caveatExpression = CaveatExpression.internalBinaryRead(reader, reader.uint32(), options, message.caveatExpression); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DirectSubject, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.ObjectAndRelation subject = 1; */ + if (message.subject) + ObjectAndRelation.internalBinaryWrite(message.subject, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.CaveatExpression caveat_expression = 2; */ + if (message.caveatExpression) + CaveatExpression.internalBinaryWrite(message.caveatExpression, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.DirectSubject + */ +export const DirectSubject = new DirectSubject$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DirectSubjects$Type extends MessageType { + constructor() { + super("core.v1.DirectSubjects", [ + { no: 1, name: "subjects", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DirectSubject } + ]); + } + create(value?: PartialMessage): DirectSubjects { + const message = { subjects: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DirectSubjects): DirectSubjects { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated core.v1.DirectSubject subjects */ 1: + message.subjects.push(DirectSubject.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DirectSubjects, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated core.v1.DirectSubject subjects = 1; */ + for (let i = 0; i < message.subjects.length; i++) + DirectSubject.internalBinaryWrite(message.subjects[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.DirectSubjects + */ +export const DirectSubjects = new DirectSubjects$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Metadata$Type extends MessageType { + constructor() { + super("core.v1.Metadata", [ + { no: 1, name: "metadata_message", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Any, options: { "validate.rules": { repeated: { minItems: "1", items: { message: { required: true }, any: { required: true, in: ["type.googleapis.com/impl.v1.DocComment", "type.googleapis.com/impl.v1.RelationMetadata"] } } } } } } + ]); + } + create(value?: PartialMessage): Metadata { + const message = { metadataMessage: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Metadata): Metadata { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.Any metadata_message */ 1: + message.metadataMessage.push(Any.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Metadata, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.Any metadata_message = 1; */ + for (let i = 0; i < message.metadataMessage.length; i++) + Any.internalBinaryWrite(message.metadataMessage[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.Metadata + */ +export const Metadata = new Metadata$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class NamespaceDefinition$Type extends MessageType { + constructor() { + super("core.v1.NamespaceDefinition", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-z][a-z0-9_]{1,62}[a-z0-9]/)*[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 2, name: "relation", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Relation }, + { no: 3, name: "metadata", kind: "message", T: () => Metadata }, + { no: 4, name: "source_position", kind: "message", T: () => SourcePosition } + ]); + } + create(value?: PartialMessage): NamespaceDefinition { + const message = { name: "", relation: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: NamespaceDefinition): NamespaceDefinition { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* repeated core.v1.Relation relation */ 2: + message.relation.push(Relation.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* core.v1.Metadata metadata */ 3: + message.metadata = Metadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.SourcePosition source_position */ 4: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: NamespaceDefinition, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* repeated core.v1.Relation relation = 2; */ + for (let i = 0; i < message.relation.length; i++) + Relation.internalBinaryWrite(message.relation[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.Metadata metadata = 3; */ + if (message.metadata) + Metadata.internalBinaryWrite(message.metadata, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 4; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.NamespaceDefinition + */ +export const NamespaceDefinition = new NamespaceDefinition$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Relation$Type extends MessageType { + constructor() { + super("core.v1.Relation", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 2, name: "userset_rewrite", kind: "message", T: () => UsersetRewrite }, + { no: 3, name: "type_information", kind: "message", T: () => TypeInformation }, + { no: 4, name: "metadata", kind: "message", T: () => Metadata }, + { no: 5, name: "source_position", kind: "message", T: () => SourcePosition }, + { no: 6, name: "aliasing_relation", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "canonical_cache_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): Relation { + const message = { name: "", aliasingRelation: "", canonicalCacheKey: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Relation): Relation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* core.v1.UsersetRewrite userset_rewrite */ 2: + message.usersetRewrite = UsersetRewrite.internalBinaryRead(reader, reader.uint32(), options, message.usersetRewrite); + break; + case /* core.v1.TypeInformation type_information */ 3: + message.typeInformation = TypeInformation.internalBinaryRead(reader, reader.uint32(), options, message.typeInformation); + break; + case /* core.v1.Metadata metadata */ 4: + message.metadata = Metadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.SourcePosition source_position */ 5: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + case /* string aliasing_relation */ 6: + message.aliasingRelation = reader.string(); + break; + case /* string canonical_cache_key */ 7: + message.canonicalCacheKey = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Relation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* core.v1.UsersetRewrite userset_rewrite = 2; */ + if (message.usersetRewrite) + UsersetRewrite.internalBinaryWrite(message.usersetRewrite, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.TypeInformation type_information = 3; */ + if (message.typeInformation) + TypeInformation.internalBinaryWrite(message.typeInformation, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.Metadata metadata = 4; */ + if (message.metadata) + Metadata.internalBinaryWrite(message.metadata, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 5; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* string aliasing_relation = 6; */ + if (message.aliasingRelation !== "") + writer.tag(6, WireType.LengthDelimited).string(message.aliasingRelation); + /* string canonical_cache_key = 7; */ + if (message.canonicalCacheKey !== "") + writer.tag(7, WireType.LengthDelimited).string(message.canonicalCacheKey); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.Relation + */ +export const Relation = new Relation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReachabilityGraph$Type extends MessageType { + constructor() { + super("core.v1.ReachabilityGraph", [ + { no: 1, name: "entrypoints_by_subject_type", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => ReachabilityEntrypoints } }, + { no: 2, name: "entrypoints_by_subject_relation", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => ReachabilityEntrypoints } } + ]); + } + create(value?: PartialMessage): ReachabilityGraph { + const message = { entrypointsBySubjectType: {}, entrypointsBySubjectRelation: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReachabilityGraph): ReachabilityGraph { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* map entrypoints_by_subject_type */ 1: + this.binaryReadMap1(message.entrypointsBySubjectType, reader, options); + break; + case /* map entrypoints_by_subject_relation */ 2: + this.binaryReadMap2(message.entrypointsBySubjectRelation, reader, options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap1(map: ReachabilityGraph["entrypointsBySubjectType"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof ReachabilityGraph["entrypointsBySubjectType"] | undefined, val: ReachabilityGraph["entrypointsBySubjectType"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = ReachabilityEntrypoints.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field core.v1.ReachabilityGraph.entrypoints_by_subject_type"); + } + } + map[key ?? ""] = val ?? ReachabilityEntrypoints.create(); + } + private binaryReadMap2(map: ReachabilityGraph["entrypointsBySubjectRelation"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof ReachabilityGraph["entrypointsBySubjectRelation"] | undefined, val: ReachabilityGraph["entrypointsBySubjectRelation"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = ReachabilityEntrypoints.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field core.v1.ReachabilityGraph.entrypoints_by_subject_relation"); + } + } + map[key ?? ""] = val ?? ReachabilityEntrypoints.create(); + } + internalBinaryWrite(message: ReachabilityGraph, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* map entrypoints_by_subject_type = 1; */ + for (let k of Object.keys(message.entrypointsBySubjectType)) { + writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + ReachabilityEntrypoints.internalBinaryWrite(message.entrypointsBySubjectType[k], writer, options); + writer.join().join(); + } + /* map entrypoints_by_subject_relation = 2; */ + for (let k of Object.keys(message.entrypointsBySubjectRelation)) { + writer.tag(2, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + ReachabilityEntrypoints.internalBinaryWrite(message.entrypointsBySubjectRelation[k], writer, options); + writer.join().join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ReachabilityGraph + */ +export const ReachabilityGraph = new ReachabilityGraph$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReachabilityEntrypoints$Type extends MessageType { + constructor() { + super("core.v1.ReachabilityEntrypoints", [ + { no: 1, name: "entrypoints", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => ReachabilityEntrypoint }, + { no: 2, name: "subject_type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "subject_relation", kind: "message", T: () => RelationReference } + ]); + } + create(value?: PartialMessage): ReachabilityEntrypoints { + const message = { entrypoints: [], subjectType: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReachabilityEntrypoints): ReachabilityEntrypoints { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated core.v1.ReachabilityEntrypoint entrypoints */ 1: + message.entrypoints.push(ReachabilityEntrypoint.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* string subject_type */ 2: + message.subjectType = reader.string(); + break; + case /* core.v1.RelationReference subject_relation */ 3: + message.subjectRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.subjectRelation); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ReachabilityEntrypoints, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated core.v1.ReachabilityEntrypoint entrypoints = 1; */ + for (let i = 0; i < message.entrypoints.length; i++) + ReachabilityEntrypoint.internalBinaryWrite(message.entrypoints[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string subject_type = 2; */ + if (message.subjectType !== "") + writer.tag(2, WireType.LengthDelimited).string(message.subjectType); + /* core.v1.RelationReference subject_relation = 3; */ + if (message.subjectRelation) + RelationReference.internalBinaryWrite(message.subjectRelation, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ReachabilityEntrypoints + */ +export const ReachabilityEntrypoints = new ReachabilityEntrypoints$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReachabilityEntrypoint$Type extends MessageType { + constructor() { + super("core.v1.ReachabilityEntrypoint", [ + { no: 1, name: "kind", kind: "enum", T: () => ["core.v1.ReachabilityEntrypoint.ReachabilityEntrypointKind", ReachabilityEntrypoint_ReachabilityEntrypointKind] }, + { no: 2, name: "target_relation", kind: "message", T: () => RelationReference }, + { no: 4, name: "result_status", kind: "enum", T: () => ["core.v1.ReachabilityEntrypoint.EntrypointResultStatus", ReachabilityEntrypoint_EntrypointResultStatus] }, + { no: 5, name: "tupleset_relation", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ReachabilityEntrypoint { + const message = { kind: 0, resultStatus: 0, tuplesetRelation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReachabilityEntrypoint): ReachabilityEntrypoint { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.ReachabilityEntrypoint.ReachabilityEntrypointKind kind */ 1: + message.kind = reader.int32(); + break; + case /* core.v1.RelationReference target_relation */ 2: + message.targetRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.targetRelation); + break; + case /* core.v1.ReachabilityEntrypoint.EntrypointResultStatus result_status */ 4: + message.resultStatus = reader.int32(); + break; + case /* string tupleset_relation */ 5: + message.tuplesetRelation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ReachabilityEntrypoint, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.ReachabilityEntrypoint.ReachabilityEntrypointKind kind = 1; */ + if (message.kind !== 0) + writer.tag(1, WireType.Varint).int32(message.kind); + /* core.v1.RelationReference target_relation = 2; */ + if (message.targetRelation) + RelationReference.internalBinaryWrite(message.targetRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ReachabilityEntrypoint.EntrypointResultStatus result_status = 4; */ + if (message.resultStatus !== 0) + writer.tag(4, WireType.Varint).int32(message.resultStatus); + /* string tupleset_relation = 5; */ + if (message.tuplesetRelation !== "") + writer.tag(5, WireType.LengthDelimited).string(message.tuplesetRelation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ReachabilityEntrypoint + */ +export const ReachabilityEntrypoint = new ReachabilityEntrypoint$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TypeInformation$Type extends MessageType { + constructor() { + super("core.v1.TypeInformation", [ + { no: 1, name: "allowed_direct_relations", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => AllowedRelation } + ]); + } + create(value?: PartialMessage): TypeInformation { + const message = { allowedDirectRelations: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TypeInformation): TypeInformation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated core.v1.AllowedRelation allowed_direct_relations */ 1: + message.allowedDirectRelations.push(AllowedRelation.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TypeInformation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated core.v1.AllowedRelation allowed_direct_relations = 1; */ + for (let i = 0; i < message.allowedDirectRelations.length; i++) + AllowedRelation.internalBinaryWrite(message.allowedDirectRelations[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.TypeInformation + */ +export const TypeInformation = new TypeInformation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AllowedRelation$Type extends MessageType { + constructor() { + super("core.v1.AllowedRelation", [ + { no: 1, name: "namespace", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "128", pattern: "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)*[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 3, name: "relation", kind: "scalar", oneof: "relationOrWildcard", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^(\\.\\.\\.|[a-z][a-z0-9_]{1,62}[a-z0-9])$" } } } }, + { no: 4, name: "public_wildcard", kind: "message", oneof: "relationOrWildcard", T: () => AllowedRelation_PublicWildcard }, + { no: 5, name: "source_position", kind: "message", T: () => SourcePosition }, + { no: 6, name: "required_caveat", kind: "message", T: () => AllowedCaveat } + ]); + } + create(value?: PartialMessage): AllowedRelation { + const message = { namespace: "", relationOrWildcard: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AllowedRelation): AllowedRelation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string namespace */ 1: + message.namespace = reader.string(); + break; + case /* string relation */ 3: + message.relationOrWildcard = { + oneofKind: "relation", + relation: reader.string() + }; + break; + case /* core.v1.AllowedRelation.PublicWildcard public_wildcard */ 4: + message.relationOrWildcard = { + oneofKind: "publicWildcard", + publicWildcard: AllowedRelation_PublicWildcard.internalBinaryRead(reader, reader.uint32(), options, (message.relationOrWildcard as any).publicWildcard) + }; + break; + case /* core.v1.SourcePosition source_position */ 5: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + case /* core.v1.AllowedCaveat required_caveat */ 6: + message.requiredCaveat = AllowedCaveat.internalBinaryRead(reader, reader.uint32(), options, message.requiredCaveat); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AllowedRelation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string namespace = 1; */ + if (message.namespace !== "") + writer.tag(1, WireType.LengthDelimited).string(message.namespace); + /* string relation = 3; */ + if (message.relationOrWildcard.oneofKind === "relation") + writer.tag(3, WireType.LengthDelimited).string(message.relationOrWildcard.relation); + /* core.v1.AllowedRelation.PublicWildcard public_wildcard = 4; */ + if (message.relationOrWildcard.oneofKind === "publicWildcard") + AllowedRelation_PublicWildcard.internalBinaryWrite(message.relationOrWildcard.publicWildcard, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 5; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.AllowedCaveat required_caveat = 6; */ + if (message.requiredCaveat) + AllowedCaveat.internalBinaryWrite(message.requiredCaveat, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.AllowedRelation + */ +export const AllowedRelation = new AllowedRelation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AllowedRelation_PublicWildcard$Type extends MessageType { + constructor() { + super("core.v1.AllowedRelation.PublicWildcard", []); + } + create(value?: PartialMessage): AllowedRelation_PublicWildcard { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AllowedRelation_PublicWildcard): AllowedRelation_PublicWildcard { + return target ?? this.create(); + } + internalBinaryWrite(message: AllowedRelation_PublicWildcard, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.AllowedRelation.PublicWildcard + */ +export const AllowedRelation_PublicWildcard = new AllowedRelation_PublicWildcard$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AllowedCaveat$Type extends MessageType { + constructor() { + super("core.v1.AllowedCaveat", [ + { no: 1, name: "caveat_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): AllowedCaveat { + const message = { caveatName: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AllowedCaveat): AllowedCaveat { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string caveat_name */ 1: + message.caveatName = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AllowedCaveat, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string caveat_name = 1; */ + if (message.caveatName !== "") + writer.tag(1, WireType.LengthDelimited).string(message.caveatName); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.AllowedCaveat + */ +export const AllowedCaveat = new AllowedCaveat$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UsersetRewrite$Type extends MessageType { + constructor() { + super("core.v1.UsersetRewrite", [ + { no: 1, name: "union", kind: "message", oneof: "rewriteOperation", T: () => SetOperation, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "intersection", kind: "message", oneof: "rewriteOperation", T: () => SetOperation, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "exclusion", kind: "message", oneof: "rewriteOperation", T: () => SetOperation, options: { "validate.rules": { message: { required: true } } } }, + { no: 4, name: "source_position", kind: "message", T: () => SourcePosition } + ]); + } + create(value?: PartialMessage): UsersetRewrite { + const message = { rewriteOperation: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UsersetRewrite): UsersetRewrite { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.SetOperation union */ 1: + message.rewriteOperation = { + oneofKind: "union", + union: SetOperation.internalBinaryRead(reader, reader.uint32(), options, (message.rewriteOperation as any).union) + }; + break; + case /* core.v1.SetOperation intersection */ 2: + message.rewriteOperation = { + oneofKind: "intersection", + intersection: SetOperation.internalBinaryRead(reader, reader.uint32(), options, (message.rewriteOperation as any).intersection) + }; + break; + case /* core.v1.SetOperation exclusion */ 3: + message.rewriteOperation = { + oneofKind: "exclusion", + exclusion: SetOperation.internalBinaryRead(reader, reader.uint32(), options, (message.rewriteOperation as any).exclusion) + }; + break; + case /* core.v1.SourcePosition source_position */ 4: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UsersetRewrite, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.SetOperation union = 1; */ + if (message.rewriteOperation.oneofKind === "union") + SetOperation.internalBinaryWrite(message.rewriteOperation.union, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SetOperation intersection = 2; */ + if (message.rewriteOperation.oneofKind === "intersection") + SetOperation.internalBinaryWrite(message.rewriteOperation.intersection, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SetOperation exclusion = 3; */ + if (message.rewriteOperation.oneofKind === "exclusion") + SetOperation.internalBinaryWrite(message.rewriteOperation.exclusion, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 4; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.UsersetRewrite + */ +export const UsersetRewrite = new UsersetRewrite$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SetOperation$Type extends MessageType { + constructor() { + super("core.v1.SetOperation", [ + { no: 1, name: "child", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SetOperation_Child, options: { "validate.rules": { repeated: { minItems: "1", items: { message: { required: true } } } } } } + ]); + } + create(value?: PartialMessage): SetOperation { + const message = { child: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetOperation): SetOperation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated core.v1.SetOperation.Child child */ 1: + message.child.push(SetOperation_Child.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SetOperation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated core.v1.SetOperation.Child child = 1; */ + for (let i = 0; i < message.child.length; i++) + SetOperation_Child.internalBinaryWrite(message.child[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SetOperation + */ +export const SetOperation = new SetOperation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SetOperation_Child$Type extends MessageType { + constructor() { + super("core.v1.SetOperation.Child", [ + { no: 1, name: "_this", kind: "message", oneof: "childType", T: () => SetOperation_Child_This }, + { no: 2, name: "computed_userset", kind: "message", oneof: "childType", T: () => ComputedUserset, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "tuple_to_userset", kind: "message", oneof: "childType", T: () => TupleToUserset, options: { "validate.rules": { message: { required: true } } } }, + { no: 4, name: "userset_rewrite", kind: "message", oneof: "childType", T: () => UsersetRewrite, options: { "validate.rules": { message: { required: true } } } }, + { no: 6, name: "_nil", kind: "message", oneof: "childType", T: () => SetOperation_Child_Nil }, + { no: 5, name: "source_position", kind: "message", T: () => SourcePosition }, + { no: 7, name: "operation_path", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): SetOperation_Child { + const message = { childType: { oneofKind: undefined }, operationPath: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetOperation_Child): SetOperation_Child { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.SetOperation.Child.This _this */ 1: + message.childType = { + oneofKind: "This", + This: SetOperation_Child_This.internalBinaryRead(reader, reader.uint32(), options, (message.childType as any).This) + }; + break; + case /* core.v1.ComputedUserset computed_userset */ 2: + message.childType = { + oneofKind: "computedUserset", + computedUserset: ComputedUserset.internalBinaryRead(reader, reader.uint32(), options, (message.childType as any).computedUserset) + }; + break; + case /* core.v1.TupleToUserset tuple_to_userset */ 3: + message.childType = { + oneofKind: "tupleToUserset", + tupleToUserset: TupleToUserset.internalBinaryRead(reader, reader.uint32(), options, (message.childType as any).tupleToUserset) + }; + break; + case /* core.v1.UsersetRewrite userset_rewrite */ 4: + message.childType = { + oneofKind: "usersetRewrite", + usersetRewrite: UsersetRewrite.internalBinaryRead(reader, reader.uint32(), options, (message.childType as any).usersetRewrite) + }; + break; + case /* core.v1.SetOperation.Child.Nil _nil */ 6: + message.childType = { + oneofKind: "Nil", + Nil: SetOperation_Child_Nil.internalBinaryRead(reader, reader.uint32(), options, (message.childType as any).Nil) + }; + break; + case /* core.v1.SourcePosition source_position */ 5: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + case /* repeated uint32 operation_path */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.operationPath.push(reader.uint32()); + else + message.operationPath.push(reader.uint32()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SetOperation_Child, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.SetOperation.Child.This _this = 1; */ + if (message.childType.oneofKind === "This") + SetOperation_Child_This.internalBinaryWrite(message.childType.This, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ComputedUserset computed_userset = 2; */ + if (message.childType.oneofKind === "computedUserset") + ComputedUserset.internalBinaryWrite(message.childType.computedUserset, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.TupleToUserset tuple_to_userset = 3; */ + if (message.childType.oneofKind === "tupleToUserset") + TupleToUserset.internalBinaryWrite(message.childType.tupleToUserset, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.UsersetRewrite userset_rewrite = 4; */ + if (message.childType.oneofKind === "usersetRewrite") + UsersetRewrite.internalBinaryWrite(message.childType.usersetRewrite, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SetOperation.Child.Nil _nil = 6; */ + if (message.childType.oneofKind === "Nil") + SetOperation_Child_Nil.internalBinaryWrite(message.childType.Nil, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 5; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* repeated uint32 operation_path = 7; */ + if (message.operationPath.length) { + writer.tag(7, WireType.LengthDelimited).fork(); + for (let i = 0; i < message.operationPath.length; i++) + writer.uint32(message.operationPath[i]); + writer.join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SetOperation.Child + */ +export const SetOperation_Child = new SetOperation_Child$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SetOperation_Child_This$Type extends MessageType { + constructor() { + super("core.v1.SetOperation.Child.This", []); + } + create(value?: PartialMessage): SetOperation_Child_This { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetOperation_Child_This): SetOperation_Child_This { + return target ?? this.create(); + } + internalBinaryWrite(message: SetOperation_Child_This, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SetOperation.Child.This + */ +export const SetOperation_Child_This = new SetOperation_Child_This$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SetOperation_Child_Nil$Type extends MessageType { + constructor() { + super("core.v1.SetOperation.Child.Nil", []); + } + create(value?: PartialMessage): SetOperation_Child_Nil { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetOperation_Child_Nil): SetOperation_Child_Nil { + return target ?? this.create(); + } + internalBinaryWrite(message: SetOperation_Child_Nil, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SetOperation.Child.Nil + */ +export const SetOperation_Child_Nil = new SetOperation_Child_Nil$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TupleToUserset$Type extends MessageType { + constructor() { + super("core.v1.TupleToUserset", [ + { no: 1, name: "tupleset", kind: "message", T: () => TupleToUserset_Tupleset, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "computed_userset", kind: "message", T: () => ComputedUserset, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "source_position", kind: "message", T: () => SourcePosition } + ]); + } + create(value?: PartialMessage): TupleToUserset { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TupleToUserset): TupleToUserset { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.TupleToUserset.Tupleset tupleset */ 1: + message.tupleset = TupleToUserset_Tupleset.internalBinaryRead(reader, reader.uint32(), options, message.tupleset); + break; + case /* core.v1.ComputedUserset computed_userset */ 2: + message.computedUserset = ComputedUserset.internalBinaryRead(reader, reader.uint32(), options, message.computedUserset); + break; + case /* core.v1.SourcePosition source_position */ 3: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TupleToUserset, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.TupleToUserset.Tupleset tupleset = 1; */ + if (message.tupleset) + TupleToUserset_Tupleset.internalBinaryWrite(message.tupleset, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ComputedUserset computed_userset = 2; */ + if (message.computedUserset) + ComputedUserset.internalBinaryWrite(message.computedUserset, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.SourcePosition source_position = 3; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.TupleToUserset + */ +export const TupleToUserset = new TupleToUserset$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TupleToUserset_Tupleset$Type extends MessageType { + constructor() { + super("core.v1.TupleToUserset.Tupleset", [ + { no: 1, name: "relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } } + ]); + } + create(value?: PartialMessage): TupleToUserset_Tupleset { + const message = { relation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TupleToUserset_Tupleset): TupleToUserset_Tupleset { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string relation */ 1: + message.relation = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TupleToUserset_Tupleset, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string relation = 1; */ + if (message.relation !== "") + writer.tag(1, WireType.LengthDelimited).string(message.relation); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.TupleToUserset.Tupleset + */ +export const TupleToUserset_Tupleset = new TupleToUserset_Tupleset$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ComputedUserset$Type extends MessageType { + constructor() { + super("core.v1.ComputedUserset", [ + { no: 1, name: "object", kind: "enum", T: () => ["core.v1.ComputedUserset.Object", ComputedUserset_Object], options: { "validate.rules": { enum: { definedOnly: true } } } }, + { no: 2, name: "relation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "64", pattern: "^[a-z][a-z0-9_]{1,62}[a-z0-9]$" } } } }, + { no: 3, name: "source_position", kind: "message", T: () => SourcePosition } + ]); + } + create(value?: PartialMessage): ComputedUserset { + const message = { object: 0, relation: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ComputedUserset): ComputedUserset { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.ComputedUserset.Object object */ 1: + message.object = reader.int32(); + break; + case /* string relation */ 2: + message.relation = reader.string(); + break; + case /* core.v1.SourcePosition source_position */ 3: + message.sourcePosition = SourcePosition.internalBinaryRead(reader, reader.uint32(), options, message.sourcePosition); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ComputedUserset, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.ComputedUserset.Object object = 1; */ + if (message.object !== 0) + writer.tag(1, WireType.Varint).int32(message.object); + /* string relation = 2; */ + if (message.relation !== "") + writer.tag(2, WireType.LengthDelimited).string(message.relation); + /* core.v1.SourcePosition source_position = 3; */ + if (message.sourcePosition) + SourcePosition.internalBinaryWrite(message.sourcePosition, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.ComputedUserset + */ +export const ComputedUserset = new ComputedUserset$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SourcePosition$Type extends MessageType { + constructor() { + super("core.v1.SourcePosition", [ + { no: 1, name: "zero_indexed_line_number", kind: "scalar", T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "zero_indexed_column_position", kind: "scalar", T: 4 /*ScalarType.UINT64*/ } + ]); + } + create(value?: PartialMessage): SourcePosition { + const message = { zeroIndexedLineNumber: "0", zeroIndexedColumnPosition: "0" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SourcePosition): SourcePosition { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 zero_indexed_line_number */ 1: + message.zeroIndexedLineNumber = reader.uint64().toString(); + break; + case /* uint64 zero_indexed_column_position */ 2: + message.zeroIndexedColumnPosition = reader.uint64().toString(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SourcePosition, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 zero_indexed_line_number = 1; */ + if (message.zeroIndexedLineNumber !== "0") + writer.tag(1, WireType.Varint).uint64(message.zeroIndexedLineNumber); + /* uint64 zero_indexed_column_position = 2; */ + if (message.zeroIndexedColumnPosition !== "0") + writer.tag(2, WireType.Varint).uint64(message.zeroIndexedColumnPosition); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.SourcePosition + */ +export const SourcePosition = new SourcePosition$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CaveatExpression$Type extends MessageType { + constructor() { + super("core.v1.CaveatExpression", [ + { no: 1, name: "operation", kind: "message", oneof: "operationOrCaveat", T: () => CaveatOperation }, + { no: 2, name: "caveat", kind: "message", oneof: "operationOrCaveat", T: () => ContextualizedCaveat } + ]); + } + create(value?: PartialMessage): CaveatExpression { + const message = { operationOrCaveat: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CaveatExpression): CaveatExpression { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.CaveatOperation operation */ 1: + message.operationOrCaveat = { + oneofKind: "operation", + operation: CaveatOperation.internalBinaryRead(reader, reader.uint32(), options, (message.operationOrCaveat as any).operation) + }; + break; + case /* core.v1.ContextualizedCaveat caveat */ 2: + message.operationOrCaveat = { + oneofKind: "caveat", + caveat: ContextualizedCaveat.internalBinaryRead(reader, reader.uint32(), options, (message.operationOrCaveat as any).caveat) + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CaveatExpression, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.CaveatOperation operation = 1; */ + if (message.operationOrCaveat.oneofKind === "operation") + CaveatOperation.internalBinaryWrite(message.operationOrCaveat.operation, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ContextualizedCaveat caveat = 2; */ + if (message.operationOrCaveat.oneofKind === "caveat") + ContextualizedCaveat.internalBinaryWrite(message.operationOrCaveat.caveat, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.CaveatExpression + */ +export const CaveatExpression = new CaveatExpression$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CaveatOperation$Type extends MessageType { + constructor() { + super("core.v1.CaveatOperation", [ + { no: 1, name: "op", kind: "enum", T: () => ["core.v1.CaveatOperation.Operation", CaveatOperation_Operation] }, + { no: 2, name: "children", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => CaveatExpression } + ]); + } + create(value?: PartialMessage): CaveatOperation { + const message = { op: 0, children: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CaveatOperation): CaveatOperation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.CaveatOperation.Operation op */ 1: + message.op = reader.int32(); + break; + case /* repeated core.v1.CaveatExpression children */ 2: + message.children.push(CaveatExpression.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CaveatOperation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.CaveatOperation.Operation op = 1; */ + if (message.op !== 0) + writer.tag(1, WireType.Varint).int32(message.op); + /* repeated core.v1.CaveatExpression children = 2; */ + for (let i = 0; i < message.children.length; i++) + CaveatExpression.internalBinaryWrite(message.children[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message core.v1.CaveatOperation + */ +export const CaveatOperation = new CaveatOperation$Type(); diff --git a/spicedb-common/src/protodevdefs/developer/v1/developer.ts b/spicedb-common/src/protodevdefs/developer/v1/developer.ts new file mode 100644 index 0000000..1b9cab7 --- /dev/null +++ b/spicedb-common/src/protodevdefs/developer/v1/developer.ts @@ -0,0 +1,1462 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "developer/v1/developer.proto" (package "developer.v1", syntax proto3) +// tslint:disable +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Struct } from "../../google/protobuf/struct"; +import { ObjectAndRelation } from "../../core/v1/core"; +import { DebugInformation as DebugInformation$ } from "../../authzed/api/v1/debug"; +import { DebugInformation } from "../../dispatch/v1/dispatch"; +import { RelationTuple } from "../../core/v1/core"; +/** + * DeveloperRequest is a single request made to the developer platform, containing zero or more + * operations to run. + * + * @generated from protobuf message developer.v1.DeveloperRequest + */ +export interface DeveloperRequest { + /** + * context is the context for the developer request. + * + * @generated from protobuf field: developer.v1.RequestContext context = 1; + */ + context?: RequestContext; + /** + * operations are the operations to be run as part of the developer request. + * + * @generated from protobuf field: repeated developer.v1.Operation operations = 2; + */ + operations: Operation[]; +} +/** + * DeveloperResponse is the response to a single request made to the developer platform. + * + * @generated from protobuf message developer.v1.DeveloperResponse + */ +export interface DeveloperResponse { + /** + * internal_error is the internal error that occurred when attempting to run this operation, if any. + * + * @generated from protobuf field: string internal_error = 1; + */ + internalError: string; + /** + * developer_errors are the developer error(s) returned in the operation, if any. + * + * @generated from protobuf field: developer.v1.DeveloperErrors developer_errors = 2; + */ + developerErrors?: DeveloperErrors; + /** + * operations_results holds the results of the operations, if any and no errors. + * + * @generated from protobuf field: developer.v1.OperationsResults operations_results = 3; + */ + operationsResults?: OperationsResults; +} +/** + * RequestContext is the context for setting up a development package environment for one or more + * operations. + * + * @generated from protobuf message developer.v1.RequestContext + */ +export interface RequestContext { + /** + * schema is the schema on which to run the developer request. + * + * @generated from protobuf field: string schema = 1; + */ + schema: string; + /** + * relationships are the test data relationships for the developer request. + * + * @generated from protobuf field: repeated core.v1.RelationTuple relationships = 2; + */ + relationships: RelationTuple[]; +} +/** + * Operation is a single operation to be processed by the development package. + * + * @generated from protobuf message developer.v1.Operation + */ +export interface Operation { + /** + * @generated from protobuf field: developer.v1.CheckOperationParameters check_parameters = 1; + */ + checkParameters?: CheckOperationParameters; + /** + * @generated from protobuf field: developer.v1.RunAssertionsParameters assertions_parameters = 2; + */ + assertionsParameters?: RunAssertionsParameters; + /** + * @generated from protobuf field: developer.v1.RunValidationParameters validation_parameters = 3; + */ + validationParameters?: RunValidationParameters; + /** + * @generated from protobuf field: developer.v1.FormatSchemaParameters format_schema_parameters = 4; + */ + formatSchemaParameters?: FormatSchemaParameters; +} +/** + * OperationsResults holds the results for the operations, indexed by the operation. + * + * @generated from protobuf message developer.v1.OperationsResults + */ +export interface OperationsResults { + /** + * @generated from protobuf field: map results = 1; + */ + results: { + [key: string]: OperationResult; + }; +} +/** + * OperationResult contains the result data given to the callback for an operation. + * + * @generated from protobuf message developer.v1.OperationResult + */ +export interface OperationResult { + /** + * @generated from protobuf field: developer.v1.CheckOperationsResult check_result = 1; + */ + checkResult?: CheckOperationsResult; + /** + * @generated from protobuf field: developer.v1.RunAssertionsResult assertions_result = 2; + */ + assertionsResult?: RunAssertionsResult; + /** + * @generated from protobuf field: developer.v1.RunValidationResult validation_result = 3; + */ + validationResult?: RunValidationResult; + /** + * @generated from protobuf field: developer.v1.FormatSchemaResult format_schema_result = 4; + */ + formatSchemaResult?: FormatSchemaResult; +} +/** + * DeveloperError represents a single error raised by the development package. Unlike an internal + * error, it represents an issue with the entered information by the calling developer. + * + * @generated from protobuf message developer.v1.DeveloperError + */ +export interface DeveloperError { + /** + * @generated from protobuf field: string message = 1; + */ + message: string; + /** + * line is the 1-indexed line for the developer error. + * + * @generated from protobuf field: uint32 line = 2; + */ + line: number; + /** + * column is the 1-indexed column on the line for the developer error. + * + * @generated from protobuf field: uint32 column = 3; + */ + column: number; + /** + * source is the source location of the error. + * + * @generated from protobuf field: developer.v1.DeveloperError.Source source = 4; + */ + source: DeveloperError_Source; + /** + * @generated from protobuf field: developer.v1.DeveloperError.ErrorKind kind = 5; + */ + kind: DeveloperError_ErrorKind; + /** + * @generated from protobuf field: repeated string path = 6; + */ + path: string[]; + /** + * context holds the context for the error. For schema issues, this will be the + * name of the object type. For relationship issues, the full relationship string. + * + * @generated from protobuf field: string context = 7; + */ + context: string; + /** + * debug_information is the debug information for the dispatched check, if this error was raised + * due to an assertion failure. + * + * @generated from protobuf field: dispatch.v1.DebugInformation check_debug_information = 8; + */ + checkDebugInformation?: DebugInformation; + /** + * resolved_debug_information is the V1 API debug information for the check, if this error was raised + * due to an assertion failure. + * + * @generated from protobuf field: authzed.api.v1.DebugInformation check_resolved_debug_information = 9; + */ + checkResolvedDebugInformation?: DebugInformation$; +} +/** + * @generated from protobuf enum developer.v1.DeveloperError.Source + */ +export enum DeveloperError_Source { + /** + * @generated from protobuf enum value: UNKNOWN_SOURCE = 0; + */ + UNKNOWN_SOURCE = 0, + /** + * @generated from protobuf enum value: SCHEMA = 1; + */ + SCHEMA = 1, + /** + * @generated from protobuf enum value: RELATIONSHIP = 2; + */ + RELATIONSHIP = 2, + /** + * @generated from protobuf enum value: VALIDATION_YAML = 3; + */ + VALIDATION_YAML = 3, + /** + * @generated from protobuf enum value: CHECK_WATCH = 4; + */ + CHECK_WATCH = 4, + /** + * @generated from protobuf enum value: ASSERTION = 5; + */ + ASSERTION = 5 +} +/** + * @generated from protobuf enum developer.v1.DeveloperError.ErrorKind + */ +export enum DeveloperError_ErrorKind { + /** + * @generated from protobuf enum value: UNKNOWN_KIND = 0; + */ + UNKNOWN_KIND = 0, + /** + * @generated from protobuf enum value: PARSE_ERROR = 1; + */ + PARSE_ERROR = 1, + /** + * @generated from protobuf enum value: SCHEMA_ISSUE = 2; + */ + SCHEMA_ISSUE = 2, + /** + * @generated from protobuf enum value: DUPLICATE_RELATIONSHIP = 3; + */ + DUPLICATE_RELATIONSHIP = 3, + /** + * @generated from protobuf enum value: MISSING_EXPECTED_RELATIONSHIP = 4; + */ + MISSING_EXPECTED_RELATIONSHIP = 4, + /** + * @generated from protobuf enum value: EXTRA_RELATIONSHIP_FOUND = 5; + */ + EXTRA_RELATIONSHIP_FOUND = 5, + /** + * @generated from protobuf enum value: UNKNOWN_OBJECT_TYPE = 6; + */ + UNKNOWN_OBJECT_TYPE = 6, + /** + * @generated from protobuf enum value: UNKNOWN_RELATION = 7; + */ + UNKNOWN_RELATION = 7, + /** + * @generated from protobuf enum value: MAXIMUM_RECURSION = 8; + */ + MAXIMUM_RECURSION = 8, + /** + * @generated from protobuf enum value: ASSERTION_FAILED = 9; + */ + ASSERTION_FAILED = 9, + /** + * @generated from protobuf enum value: INVALID_SUBJECT_TYPE = 10; + */ + INVALID_SUBJECT_TYPE = 10 +} +/** + * DeveloperErrors represents the developer error(s) found after the run has completed. + * + * @generated from protobuf message developer.v1.DeveloperErrors + */ +export interface DeveloperErrors { + /** + * input_errors are those error(s) in the schema, relationships, or assertions inputted by the developer. + * + * @generated from protobuf field: repeated developer.v1.DeveloperError input_errors = 1; + */ + inputErrors: DeveloperError[]; +} +/** + * CheckOperationParameters are the parameters for a `check` operation. + * + * @generated from protobuf message developer.v1.CheckOperationParameters + */ +export interface CheckOperationParameters { + /** + * @generated from protobuf field: core.v1.ObjectAndRelation resource = 1; + */ + resource?: ObjectAndRelation; + /** + * @generated from protobuf field: core.v1.ObjectAndRelation subject = 2; + */ + subject?: ObjectAndRelation; + /** + * * caveat_context consists of any named values that are defined at write time for the caveat expression * + * + * @generated from protobuf field: google.protobuf.Struct caveat_context = 3; + */ + caveatContext?: Struct; +} +/** + * CheckOperationsResult is the result for a `check` operation. + * + * @generated from protobuf message developer.v1.CheckOperationsResult + */ +export interface CheckOperationsResult { + /** + * @generated from protobuf field: developer.v1.CheckOperationsResult.Membership membership = 1; + */ + membership: CheckOperationsResult_Membership; + /** + * check_error is the error raised by the check, if any. + * + * @generated from protobuf field: developer.v1.DeveloperError check_error = 2; + */ + checkError?: DeveloperError; + /** + * debug_information is the debug information for the check. + * + * @generated from protobuf field: dispatch.v1.DebugInformation debug_information = 3; + */ + debugInformation?: DebugInformation; + /** + * partial_caveat_info holds information a partial evaluation of a caveat. + * + * @generated from protobuf field: developer.v1.PartialCaveatInfo partial_caveat_info = 4; + */ + partialCaveatInfo?: PartialCaveatInfo; + /** + * resolved_debug_information is the V1 API debug information for the check. + * + * @generated from protobuf field: authzed.api.v1.DebugInformation resolved_debug_information = 5; + */ + resolvedDebugInformation?: DebugInformation$; +} +/** + * @generated from protobuf enum developer.v1.CheckOperationsResult.Membership + */ +export enum CheckOperationsResult_Membership { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: NOT_MEMBER = 1; + */ + NOT_MEMBER = 1, + /** + * @generated from protobuf enum value: MEMBER = 2; + */ + MEMBER = 2, + /** + * @generated from protobuf enum value: CAVEATED_MEMBER = 3; + */ + CAVEATED_MEMBER = 3 +} +/** + * PartialCaveatInfo carries information necessary for the client to take action + * in the event a response contains a partially evaluated caveat + * + * @generated from protobuf message developer.v1.PartialCaveatInfo + */ +export interface PartialCaveatInfo { + /** + * missing_required_context is a list of one or more fields that were missing and prevented caveats + * from being fully evaluated + * + * @generated from protobuf field: repeated string missing_required_context = 1; + */ + missingRequiredContext: string[]; +} +/** + * RunAssertionsParameters are the parameters for a `runAssertions` operation. + * + * @generated from protobuf message developer.v1.RunAssertionsParameters + */ +export interface RunAssertionsParameters { + /** + * assertions_yaml are the assertions, in YAML form, to be run. + * + * @generated from protobuf field: string assertions_yaml = 1; + */ + assertionsYaml: string; +} +/** + * RunAssertionsResult is the result for a `runAssertions` operation. + * + * @generated from protobuf message developer.v1.RunAssertionsResult + */ +export interface RunAssertionsResult { + /** + * input_error is an error in the given YAML. + * + * @generated from protobuf field: developer.v1.DeveloperError input_error = 1; + */ + inputError?: DeveloperError; + /** + * validation_errors are the validation errors which occurred, if any. + * + * @generated from protobuf field: repeated developer.v1.DeveloperError validation_errors = 2; + */ + validationErrors: DeveloperError[]; +} +/** + * RunValidationParameters are the parameters for a `runValidation` operation. + * + * @generated from protobuf message developer.v1.RunValidationParameters + */ +export interface RunValidationParameters { + /** + * validation_yaml is the expected relations validation, in YAML form, to be run. + * + * @generated from protobuf field: string validation_yaml = 1; + */ + validationYaml: string; +} +/** + * RunValidationResult is the result for a `runValidation` operation. + * + * @generated from protobuf message developer.v1.RunValidationResult + */ +export interface RunValidationResult { + /** + * input_error is an error in the given YAML. + * + * @generated from protobuf field: developer.v1.DeveloperError input_error = 1; + */ + inputError?: DeveloperError; + /** + * updated_validation_yaml contains the generated and updated validation YAML for the expected + * relations tab. + * + * @generated from protobuf field: string updated_validation_yaml = 2; + */ + updatedValidationYaml: string; + /** + * validation_errors are the validation errors which occurred, if any. + * + * @generated from protobuf field: repeated developer.v1.DeveloperError validation_errors = 3; + */ + validationErrors: DeveloperError[]; +} +/** + * FormatSchemaParameters are the parameters for a `formatSchema` operation. + * + * empty + * + * @generated from protobuf message developer.v1.FormatSchemaParameters + */ +export interface FormatSchemaParameters { +} +/** + * FormatSchemaResult is the result of the `formatSchema` operation. + * + * @generated from protobuf message developer.v1.FormatSchemaResult + */ +export interface FormatSchemaResult { + /** + * @generated from protobuf field: string formatted_schema = 1; + */ + formattedSchema: string; +} +// @generated message type with reflection information, may provide speed optimized methods +class DeveloperRequest$Type extends MessageType { + constructor() { + super("developer.v1.DeveloperRequest", [ + { no: 1, name: "context", kind: "message", T: () => RequestContext }, + { no: 2, name: "operations", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Operation } + ]); + } + create(value?: PartialMessage): DeveloperRequest { + const message = { operations: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeveloperRequest): DeveloperRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.RequestContext context */ 1: + message.context = RequestContext.internalBinaryRead(reader, reader.uint32(), options, message.context); + break; + case /* repeated developer.v1.Operation operations */ 2: + message.operations.push(Operation.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DeveloperRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.RequestContext context = 1; */ + if (message.context) + RequestContext.internalBinaryWrite(message.context, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* repeated developer.v1.Operation operations = 2; */ + for (let i = 0; i < message.operations.length; i++) + Operation.internalBinaryWrite(message.operations[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.DeveloperRequest + */ +export const DeveloperRequest = new DeveloperRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DeveloperResponse$Type extends MessageType { + constructor() { + super("developer.v1.DeveloperResponse", [ + { no: 1, name: "internal_error", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "developer_errors", kind: "message", T: () => DeveloperErrors }, + { no: 3, name: "operations_results", kind: "message", T: () => OperationsResults } + ]); + } + create(value?: PartialMessage): DeveloperResponse { + const message = { internalError: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeveloperResponse): DeveloperResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string internal_error */ 1: + message.internalError = reader.string(); + break; + case /* developer.v1.DeveloperErrors developer_errors */ 2: + message.developerErrors = DeveloperErrors.internalBinaryRead(reader, reader.uint32(), options, message.developerErrors); + break; + case /* developer.v1.OperationsResults operations_results */ 3: + message.operationsResults = OperationsResults.internalBinaryRead(reader, reader.uint32(), options, message.operationsResults); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DeveloperResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string internal_error = 1; */ + if (message.internalError !== "") + writer.tag(1, WireType.LengthDelimited).string(message.internalError); + /* developer.v1.DeveloperErrors developer_errors = 2; */ + if (message.developerErrors) + DeveloperErrors.internalBinaryWrite(message.developerErrors, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.OperationsResults operations_results = 3; */ + if (message.operationsResults) + OperationsResults.internalBinaryWrite(message.operationsResults, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.DeveloperResponse + */ +export const DeveloperResponse = new DeveloperResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RequestContext$Type extends MessageType { + constructor() { + super("developer.v1.RequestContext", [ + { no: 1, name: "schema", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "relationships", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => RelationTuple } + ]); + } + create(value?: PartialMessage): RequestContext { + const message = { schema: "", relationships: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RequestContext): RequestContext { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string schema */ 1: + message.schema = reader.string(); + break; + case /* repeated core.v1.RelationTuple relationships */ 2: + message.relationships.push(RelationTuple.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RequestContext, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string schema = 1; */ + if (message.schema !== "") + writer.tag(1, WireType.LengthDelimited).string(message.schema); + /* repeated core.v1.RelationTuple relationships = 2; */ + for (let i = 0; i < message.relationships.length; i++) + RelationTuple.internalBinaryWrite(message.relationships[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.RequestContext + */ +export const RequestContext = new RequestContext$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Operation$Type extends MessageType { + constructor() { + super("developer.v1.Operation", [ + { no: 1, name: "check_parameters", kind: "message", T: () => CheckOperationParameters }, + { no: 2, name: "assertions_parameters", kind: "message", T: () => RunAssertionsParameters }, + { no: 3, name: "validation_parameters", kind: "message", T: () => RunValidationParameters }, + { no: 4, name: "format_schema_parameters", kind: "message", T: () => FormatSchemaParameters } + ]); + } + create(value?: PartialMessage): Operation { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Operation): Operation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.CheckOperationParameters check_parameters */ 1: + message.checkParameters = CheckOperationParameters.internalBinaryRead(reader, reader.uint32(), options, message.checkParameters); + break; + case /* developer.v1.RunAssertionsParameters assertions_parameters */ 2: + message.assertionsParameters = RunAssertionsParameters.internalBinaryRead(reader, reader.uint32(), options, message.assertionsParameters); + break; + case /* developer.v1.RunValidationParameters validation_parameters */ 3: + message.validationParameters = RunValidationParameters.internalBinaryRead(reader, reader.uint32(), options, message.validationParameters); + break; + case /* developer.v1.FormatSchemaParameters format_schema_parameters */ 4: + message.formatSchemaParameters = FormatSchemaParameters.internalBinaryRead(reader, reader.uint32(), options, message.formatSchemaParameters); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Operation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.CheckOperationParameters check_parameters = 1; */ + if (message.checkParameters) + CheckOperationParameters.internalBinaryWrite(message.checkParameters, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.RunAssertionsParameters assertions_parameters = 2; */ + if (message.assertionsParameters) + RunAssertionsParameters.internalBinaryWrite(message.assertionsParameters, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.RunValidationParameters validation_parameters = 3; */ + if (message.validationParameters) + RunValidationParameters.internalBinaryWrite(message.validationParameters, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.FormatSchemaParameters format_schema_parameters = 4; */ + if (message.formatSchemaParameters) + FormatSchemaParameters.internalBinaryWrite(message.formatSchemaParameters, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.Operation + */ +export const Operation = new Operation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class OperationsResults$Type extends MessageType { + constructor() { + super("developer.v1.OperationsResults", [ + { no: 1, name: "results", kind: "map", K: 4 /*ScalarType.UINT64*/, V: { kind: "message", T: () => OperationResult } } + ]); + } + create(value?: PartialMessage): OperationsResults { + const message = { results: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: OperationsResults): OperationsResults { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* map results */ 1: + this.binaryReadMap1(message.results, reader, options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap1(map: OperationsResults["results"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof OperationsResults["results"] | undefined, val: OperationsResults["results"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.uint64().toString(); + break; + case 2: + val = OperationResult.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field developer.v1.OperationsResults.results"); + } + } + map[key ?? "0"] = val ?? OperationResult.create(); + } + internalBinaryWrite(message: OperationsResults, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* map results = 1; */ + for (let k of Object.keys(message.results)) { + writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.Varint).uint64(k); + writer.tag(2, WireType.LengthDelimited).fork(); + OperationResult.internalBinaryWrite(message.results[k], writer, options); + writer.join().join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.OperationsResults + */ +export const OperationsResults = new OperationsResults$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class OperationResult$Type extends MessageType { + constructor() { + super("developer.v1.OperationResult", [ + { no: 1, name: "check_result", kind: "message", T: () => CheckOperationsResult }, + { no: 2, name: "assertions_result", kind: "message", T: () => RunAssertionsResult }, + { no: 3, name: "validation_result", kind: "message", T: () => RunValidationResult }, + { no: 4, name: "format_schema_result", kind: "message", T: () => FormatSchemaResult } + ]); + } + create(value?: PartialMessage): OperationResult { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: OperationResult): OperationResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.CheckOperationsResult check_result */ 1: + message.checkResult = CheckOperationsResult.internalBinaryRead(reader, reader.uint32(), options, message.checkResult); + break; + case /* developer.v1.RunAssertionsResult assertions_result */ 2: + message.assertionsResult = RunAssertionsResult.internalBinaryRead(reader, reader.uint32(), options, message.assertionsResult); + break; + case /* developer.v1.RunValidationResult validation_result */ 3: + message.validationResult = RunValidationResult.internalBinaryRead(reader, reader.uint32(), options, message.validationResult); + break; + case /* developer.v1.FormatSchemaResult format_schema_result */ 4: + message.formatSchemaResult = FormatSchemaResult.internalBinaryRead(reader, reader.uint32(), options, message.formatSchemaResult); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: OperationResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.CheckOperationsResult check_result = 1; */ + if (message.checkResult) + CheckOperationsResult.internalBinaryWrite(message.checkResult, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.RunAssertionsResult assertions_result = 2; */ + if (message.assertionsResult) + RunAssertionsResult.internalBinaryWrite(message.assertionsResult, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.RunValidationResult validation_result = 3; */ + if (message.validationResult) + RunValidationResult.internalBinaryWrite(message.validationResult, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.FormatSchemaResult format_schema_result = 4; */ + if (message.formatSchemaResult) + FormatSchemaResult.internalBinaryWrite(message.formatSchemaResult, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.OperationResult + */ +export const OperationResult = new OperationResult$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DeveloperError$Type extends MessageType { + constructor() { + super("developer.v1.DeveloperError", [ + { no: 1, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "line", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "column", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 4, name: "source", kind: "enum", T: () => ["developer.v1.DeveloperError.Source", DeveloperError_Source] }, + { no: 5, name: "kind", kind: "enum", T: () => ["developer.v1.DeveloperError.ErrorKind", DeveloperError_ErrorKind] }, + { no: 6, name: "path", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "context", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 8, name: "check_debug_information", kind: "message", T: () => DebugInformation }, + { no: 9, name: "check_resolved_debug_information", kind: "message", T: () => DebugInformation$ } + ]); + } + create(value?: PartialMessage): DeveloperError { + const message = { message: "", line: 0, column: 0, source: 0, kind: 0, path: [], context: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeveloperError): DeveloperError { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string message */ 1: + message.message = reader.string(); + break; + case /* uint32 line */ 2: + message.line = reader.uint32(); + break; + case /* uint32 column */ 3: + message.column = reader.uint32(); + break; + case /* developer.v1.DeveloperError.Source source */ 4: + message.source = reader.int32(); + break; + case /* developer.v1.DeveloperError.ErrorKind kind */ 5: + message.kind = reader.int32(); + break; + case /* repeated string path */ 6: + message.path.push(reader.string()); + break; + case /* string context */ 7: + message.context = reader.string(); + break; + case /* dispatch.v1.DebugInformation check_debug_information */ 8: + message.checkDebugInformation = DebugInformation.internalBinaryRead(reader, reader.uint32(), options, message.checkDebugInformation); + break; + case /* authzed.api.v1.DebugInformation check_resolved_debug_information */ 9: + message.checkResolvedDebugInformation = DebugInformation$.internalBinaryRead(reader, reader.uint32(), options, message.checkResolvedDebugInformation); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DeveloperError, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string message = 1; */ + if (message.message !== "") + writer.tag(1, WireType.LengthDelimited).string(message.message); + /* uint32 line = 2; */ + if (message.line !== 0) + writer.tag(2, WireType.Varint).uint32(message.line); + /* uint32 column = 3; */ + if (message.column !== 0) + writer.tag(3, WireType.Varint).uint32(message.column); + /* developer.v1.DeveloperError.Source source = 4; */ + if (message.source !== 0) + writer.tag(4, WireType.Varint).int32(message.source); + /* developer.v1.DeveloperError.ErrorKind kind = 5; */ + if (message.kind !== 0) + writer.tag(5, WireType.Varint).int32(message.kind); + /* repeated string path = 6; */ + for (let i = 0; i < message.path.length; i++) + writer.tag(6, WireType.LengthDelimited).string(message.path[i]); + /* string context = 7; */ + if (message.context !== "") + writer.tag(7, WireType.LengthDelimited).string(message.context); + /* dispatch.v1.DebugInformation check_debug_information = 8; */ + if (message.checkDebugInformation) + DebugInformation.internalBinaryWrite(message.checkDebugInformation, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.DebugInformation check_resolved_debug_information = 9; */ + if (message.checkResolvedDebugInformation) + DebugInformation$.internalBinaryWrite(message.checkResolvedDebugInformation, writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.DeveloperError + */ +export const DeveloperError = new DeveloperError$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DeveloperErrors$Type extends MessageType { + constructor() { + super("developer.v1.DeveloperErrors", [ + { no: 1, name: "input_errors", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DeveloperError } + ]); + } + create(value?: PartialMessage): DeveloperErrors { + const message = { inputErrors: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeveloperErrors): DeveloperErrors { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated developer.v1.DeveloperError input_errors */ 1: + message.inputErrors.push(DeveloperError.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DeveloperErrors, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated developer.v1.DeveloperError input_errors = 1; */ + for (let i = 0; i < message.inputErrors.length; i++) + DeveloperError.internalBinaryWrite(message.inputErrors[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.DeveloperErrors + */ +export const DeveloperErrors = new DeveloperErrors$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CheckOperationParameters$Type extends MessageType { + constructor() { + super("developer.v1.CheckOperationParameters", [ + { no: 1, name: "resource", kind: "message", T: () => ObjectAndRelation }, + { no: 2, name: "subject", kind: "message", T: () => ObjectAndRelation }, + { no: 3, name: "caveat_context", kind: "message", T: () => Struct, options: { "validate.rules": { message: { required: false } } } } + ]); + } + create(value?: PartialMessage): CheckOperationParameters { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CheckOperationParameters): CheckOperationParameters { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* core.v1.ObjectAndRelation resource */ 1: + message.resource = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.resource); + break; + case /* core.v1.ObjectAndRelation subject */ 2: + message.subject = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* google.protobuf.Struct caveat_context */ 3: + message.caveatContext = Struct.internalBinaryRead(reader, reader.uint32(), options, message.caveatContext); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CheckOperationParameters, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* core.v1.ObjectAndRelation resource = 1; */ + if (message.resource) + ObjectAndRelation.internalBinaryWrite(message.resource, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ObjectAndRelation subject = 2; */ + if (message.subject) + ObjectAndRelation.internalBinaryWrite(message.subject, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* google.protobuf.Struct caveat_context = 3; */ + if (message.caveatContext) + Struct.internalBinaryWrite(message.caveatContext, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.CheckOperationParameters + */ +export const CheckOperationParameters = new CheckOperationParameters$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CheckOperationsResult$Type extends MessageType { + constructor() { + super("developer.v1.CheckOperationsResult", [ + { no: 1, name: "membership", kind: "enum", T: () => ["developer.v1.CheckOperationsResult.Membership", CheckOperationsResult_Membership] }, + { no: 2, name: "check_error", kind: "message", T: () => DeveloperError }, + { no: 3, name: "debug_information", kind: "message", T: () => DebugInformation }, + { no: 4, name: "partial_caveat_info", kind: "message", T: () => PartialCaveatInfo }, + { no: 5, name: "resolved_debug_information", kind: "message", T: () => DebugInformation$ } + ]); + } + create(value?: PartialMessage): CheckOperationsResult { + const message = { membership: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CheckOperationsResult): CheckOperationsResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.CheckOperationsResult.Membership membership */ 1: + message.membership = reader.int32(); + break; + case /* developer.v1.DeveloperError check_error */ 2: + message.checkError = DeveloperError.internalBinaryRead(reader, reader.uint32(), options, message.checkError); + break; + case /* dispatch.v1.DebugInformation debug_information */ 3: + message.debugInformation = DebugInformation.internalBinaryRead(reader, reader.uint32(), options, message.debugInformation); + break; + case /* developer.v1.PartialCaveatInfo partial_caveat_info */ 4: + message.partialCaveatInfo = PartialCaveatInfo.internalBinaryRead(reader, reader.uint32(), options, message.partialCaveatInfo); + break; + case /* authzed.api.v1.DebugInformation resolved_debug_information */ 5: + message.resolvedDebugInformation = DebugInformation$.internalBinaryRead(reader, reader.uint32(), options, message.resolvedDebugInformation); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: CheckOperationsResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.CheckOperationsResult.Membership membership = 1; */ + if (message.membership !== 0) + writer.tag(1, WireType.Varint).int32(message.membership); + /* developer.v1.DeveloperError check_error = 2; */ + if (message.checkError) + DeveloperError.internalBinaryWrite(message.checkError, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.DebugInformation debug_information = 3; */ + if (message.debugInformation) + DebugInformation.internalBinaryWrite(message.debugInformation, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* developer.v1.PartialCaveatInfo partial_caveat_info = 4; */ + if (message.partialCaveatInfo) + PartialCaveatInfo.internalBinaryWrite(message.partialCaveatInfo, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* authzed.api.v1.DebugInformation resolved_debug_information = 5; */ + if (message.resolvedDebugInformation) + DebugInformation$.internalBinaryWrite(message.resolvedDebugInformation, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.CheckOperationsResult + */ +export const CheckOperationsResult = new CheckOperationsResult$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PartialCaveatInfo$Type extends MessageType { + constructor() { + super("developer.v1.PartialCaveatInfo", [ + { no: 1, name: "missing_required_context", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { repeated: { minItems: "1" } } } } + ]); + } + create(value?: PartialMessage): PartialCaveatInfo { + const message = { missingRequiredContext: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PartialCaveatInfo): PartialCaveatInfo { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated string missing_required_context */ 1: + message.missingRequiredContext.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PartialCaveatInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated string missing_required_context = 1; */ + for (let i = 0; i < message.missingRequiredContext.length; i++) + writer.tag(1, WireType.LengthDelimited).string(message.missingRequiredContext[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.PartialCaveatInfo + */ +export const PartialCaveatInfo = new PartialCaveatInfo$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RunAssertionsParameters$Type extends MessageType { + constructor() { + super("developer.v1.RunAssertionsParameters", [ + { no: 1, name: "assertions_yaml", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): RunAssertionsParameters { + const message = { assertionsYaml: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RunAssertionsParameters): RunAssertionsParameters { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string assertions_yaml */ 1: + message.assertionsYaml = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RunAssertionsParameters, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string assertions_yaml = 1; */ + if (message.assertionsYaml !== "") + writer.tag(1, WireType.LengthDelimited).string(message.assertionsYaml); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.RunAssertionsParameters + */ +export const RunAssertionsParameters = new RunAssertionsParameters$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RunAssertionsResult$Type extends MessageType { + constructor() { + super("developer.v1.RunAssertionsResult", [ + { no: 1, name: "input_error", kind: "message", T: () => DeveloperError }, + { no: 2, name: "validation_errors", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DeveloperError } + ]); + } + create(value?: PartialMessage): RunAssertionsResult { + const message = { validationErrors: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RunAssertionsResult): RunAssertionsResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.DeveloperError input_error */ 1: + message.inputError = DeveloperError.internalBinaryRead(reader, reader.uint32(), options, message.inputError); + break; + case /* repeated developer.v1.DeveloperError validation_errors */ 2: + message.validationErrors.push(DeveloperError.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RunAssertionsResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.DeveloperError input_error = 1; */ + if (message.inputError) + DeveloperError.internalBinaryWrite(message.inputError, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* repeated developer.v1.DeveloperError validation_errors = 2; */ + for (let i = 0; i < message.validationErrors.length; i++) + DeveloperError.internalBinaryWrite(message.validationErrors[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.RunAssertionsResult + */ +export const RunAssertionsResult = new RunAssertionsResult$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RunValidationParameters$Type extends MessageType { + constructor() { + super("developer.v1.RunValidationParameters", [ + { no: 1, name: "validation_yaml", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): RunValidationParameters { + const message = { validationYaml: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RunValidationParameters): RunValidationParameters { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string validation_yaml */ 1: + message.validationYaml = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RunValidationParameters, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string validation_yaml = 1; */ + if (message.validationYaml !== "") + writer.tag(1, WireType.LengthDelimited).string(message.validationYaml); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.RunValidationParameters + */ +export const RunValidationParameters = new RunValidationParameters$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RunValidationResult$Type extends MessageType { + constructor() { + super("developer.v1.RunValidationResult", [ + { no: 1, name: "input_error", kind: "message", T: () => DeveloperError }, + { no: 2, name: "updated_validation_yaml", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "validation_errors", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DeveloperError } + ]); + } + create(value?: PartialMessage): RunValidationResult { + const message = { updatedValidationYaml: "", validationErrors: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RunValidationResult): RunValidationResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* developer.v1.DeveloperError input_error */ 1: + message.inputError = DeveloperError.internalBinaryRead(reader, reader.uint32(), options, message.inputError); + break; + case /* string updated_validation_yaml */ 2: + message.updatedValidationYaml = reader.string(); + break; + case /* repeated developer.v1.DeveloperError validation_errors */ 3: + message.validationErrors.push(DeveloperError.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RunValidationResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* developer.v1.DeveloperError input_error = 1; */ + if (message.inputError) + DeveloperError.internalBinaryWrite(message.inputError, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string updated_validation_yaml = 2; */ + if (message.updatedValidationYaml !== "") + writer.tag(2, WireType.LengthDelimited).string(message.updatedValidationYaml); + /* repeated developer.v1.DeveloperError validation_errors = 3; */ + for (let i = 0; i < message.validationErrors.length; i++) + DeveloperError.internalBinaryWrite(message.validationErrors[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.RunValidationResult + */ +export const RunValidationResult = new RunValidationResult$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FormatSchemaParameters$Type extends MessageType { + constructor() { + super("developer.v1.FormatSchemaParameters", []); + } + create(value?: PartialMessage): FormatSchemaParameters { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FormatSchemaParameters): FormatSchemaParameters { + return target ?? this.create(); + } + internalBinaryWrite(message: FormatSchemaParameters, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.FormatSchemaParameters + */ +export const FormatSchemaParameters = new FormatSchemaParameters$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FormatSchemaResult$Type extends MessageType { + constructor() { + super("developer.v1.FormatSchemaResult", [ + { no: 1, name: "formatted_schema", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): FormatSchemaResult { + const message = { formattedSchema: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FormatSchemaResult): FormatSchemaResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string formatted_schema */ 1: + message.formattedSchema = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FormatSchemaResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string formatted_schema = 1; */ + if (message.formattedSchema !== "") + writer.tag(1, WireType.LengthDelimited).string(message.formattedSchema); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message developer.v1.FormatSchemaResult + */ +export const FormatSchemaResult = new FormatSchemaResult$Type(); diff --git a/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.client.ts b/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.client.ts new file mode 100644 index 0000000..e19edd2 --- /dev/null +++ b/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.client.ts @@ -0,0 +1,90 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "dispatch/v1/dispatch.proto" (package "dispatch.v1", syntax proto3) +// tslint:disable +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { DispatchService } from "./dispatch"; +import type { DispatchLookupSubjectsResponse } from "./dispatch"; +import type { DispatchLookupSubjectsRequest } from "./dispatch"; +import type { DispatchLookupResourcesResponse } from "./dispatch"; +import type { DispatchLookupResourcesRequest } from "./dispatch"; +import type { DispatchReachableResourcesResponse } from "./dispatch"; +import type { DispatchReachableResourcesRequest } from "./dispatch"; +import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; +import type { DispatchExpandResponse } from "./dispatch"; +import type { DispatchExpandRequest } from "./dispatch"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { DispatchCheckResponse } from "./dispatch"; +import type { DispatchCheckRequest } from "./dispatch"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; +/** + * @generated from protobuf service dispatch.v1.DispatchService + */ +export interface IDispatchServiceClient { + /** + * @generated from protobuf rpc: DispatchCheck(dispatch.v1.DispatchCheckRequest) returns (dispatch.v1.DispatchCheckResponse); + */ + dispatchCheck(input: DispatchCheckRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: DispatchExpand(dispatch.v1.DispatchExpandRequest) returns (dispatch.v1.DispatchExpandResponse); + */ + dispatchExpand(input: DispatchExpandRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: DispatchReachableResources(dispatch.v1.DispatchReachableResourcesRequest) returns (stream dispatch.v1.DispatchReachableResourcesResponse); + */ + dispatchReachableResources(input: DispatchReachableResourcesRequest, options?: RpcOptions): ServerStreamingCall; + /** + * @generated from protobuf rpc: DispatchLookupResources(dispatch.v1.DispatchLookupResourcesRequest) returns (stream dispatch.v1.DispatchLookupResourcesResponse); + */ + dispatchLookupResources(input: DispatchLookupResourcesRequest, options?: RpcOptions): ServerStreamingCall; + /** + * @generated from protobuf rpc: DispatchLookupSubjects(dispatch.v1.DispatchLookupSubjectsRequest) returns (stream dispatch.v1.DispatchLookupSubjectsResponse); + */ + dispatchLookupSubjects(input: DispatchLookupSubjectsRequest, options?: RpcOptions): ServerStreamingCall; +} +/** + * @generated from protobuf service dispatch.v1.DispatchService + */ +export class DispatchServiceClient implements IDispatchServiceClient, ServiceInfo { + typeName = DispatchService.typeName; + methods = DispatchService.methods; + options = DispatchService.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * @generated from protobuf rpc: DispatchCheck(dispatch.v1.DispatchCheckRequest) returns (dispatch.v1.DispatchCheckResponse); + */ + dispatchCheck(input: DispatchCheckRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: DispatchExpand(dispatch.v1.DispatchExpandRequest) returns (dispatch.v1.DispatchExpandResponse); + */ + dispatchExpand(input: DispatchExpandRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[1], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: DispatchReachableResources(dispatch.v1.DispatchReachableResourcesRequest) returns (stream dispatch.v1.DispatchReachableResourcesResponse); + */ + dispatchReachableResources(input: DispatchReachableResourcesRequest, options?: RpcOptions): ServerStreamingCall { + const method = this.methods[2], opt = this._transport.mergeOptions(options); + return stackIntercept("serverStreaming", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: DispatchLookupResources(dispatch.v1.DispatchLookupResourcesRequest) returns (stream dispatch.v1.DispatchLookupResourcesResponse); + */ + dispatchLookupResources(input: DispatchLookupResourcesRequest, options?: RpcOptions): ServerStreamingCall { + const method = this.methods[3], opt = this._transport.mergeOptions(options); + return stackIntercept("serverStreaming", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: DispatchLookupSubjects(dispatch.v1.DispatchLookupSubjectsRequest) returns (stream dispatch.v1.DispatchLookupSubjectsResponse); + */ + dispatchLookupSubjects(input: DispatchLookupSubjectsRequest, options?: RpcOptions): ServerStreamingCall { + const method = this.methods[4], opt = this._transport.mergeOptions(options); + return stackIntercept("serverStreaming", this._transport, method, opt, input); + } +} diff --git a/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.ts b/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.ts new file mode 100644 index 0000000..702200c --- /dev/null +++ b/spicedb-common/src/protodevdefs/dispatch/v1/dispatch.ts @@ -0,0 +1,1840 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "dispatch/v1/dispatch.proto" (package "dispatch.v1", syntax proto3) +// tslint:disable +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Duration } from "../../google/protobuf/duration"; +import { Struct } from "../../google/protobuf/struct"; +import { RelationTupleTreeNode } from "../../core/v1/core"; +import { CaveatExpression } from "../../core/v1/core"; +import { ObjectAndRelation } from "../../core/v1/core"; +import { RelationReference } from "../../core/v1/core"; +/** + * @generated from protobuf message dispatch.v1.DispatchCheckRequest + */ +export interface DispatchCheckRequest { + /** + * @generated from protobuf field: dispatch.v1.ResolverMeta metadata = 1; + */ + metadata?: ResolverMeta; + /** + * @generated from protobuf field: core.v1.RelationReference resource_relation = 2; + */ + resourceRelation?: RelationReference; + /** + * @generated from protobuf field: repeated string resource_ids = 3; + */ + resourceIds: string[]; + /** + * @generated from protobuf field: core.v1.ObjectAndRelation subject = 4; + */ + subject?: ObjectAndRelation; + /** + * @generated from protobuf field: dispatch.v1.DispatchCheckRequest.ResultsSetting results_setting = 5; + */ + resultsSetting: DispatchCheckRequest_ResultsSetting; + /** + * @generated from protobuf field: dispatch.v1.DispatchCheckRequest.DebugSetting debug = 6; + */ + debug: DispatchCheckRequest_DebugSetting; +} +/** + * @generated from protobuf enum dispatch.v1.DispatchCheckRequest.DebugSetting + */ +export enum DispatchCheckRequest_DebugSetting { + /** + * @generated from protobuf enum value: NO_DEBUG = 0; + */ + NO_DEBUG = 0, + /** + * @generated from protobuf enum value: ENABLE_BASIC_DEBUGGING = 1; + */ + ENABLE_BASIC_DEBUGGING = 1, + /** + * @generated from protobuf enum value: ENABLE_TRACE_DEBUGGING = 2; + */ + ENABLE_TRACE_DEBUGGING = 2 +} +/** + * @generated from protobuf enum dispatch.v1.DispatchCheckRequest.ResultsSetting + */ +export enum DispatchCheckRequest_ResultsSetting { + /** + * @generated from protobuf enum value: REQUIRE_ALL_RESULTS = 0; + */ + REQUIRE_ALL_RESULTS = 0, + /** + * @generated from protobuf enum value: ALLOW_SINGLE_RESULT = 1; + */ + ALLOW_SINGLE_RESULT = 1 +} +/** + * @generated from protobuf message dispatch.v1.DispatchCheckResponse + */ +export interface DispatchCheckResponse { + /** + * @generated from protobuf field: dispatch.v1.ResponseMeta metadata = 1; + */ + metadata?: ResponseMeta; + /** + * @generated from protobuf field: map results_by_resource_id = 2; + */ + resultsByResourceId: { + [key: string]: ResourceCheckResult; + }; +} +/** + * @generated from protobuf message dispatch.v1.ResourceCheckResult + */ +export interface ResourceCheckResult { + /** + * @generated from protobuf field: dispatch.v1.ResourceCheckResult.Membership membership = 1; + */ + membership: ResourceCheckResult_Membership; + /** + * @generated from protobuf field: core.v1.CaveatExpression expression = 2; + */ + expression?: CaveatExpression; + /** + * @generated from protobuf field: repeated string missing_expr_fields = 3; + */ + missingExprFields: string[]; +} +/** + * @generated from protobuf enum dispatch.v1.ResourceCheckResult.Membership + */ +export enum ResourceCheckResult_Membership { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: NOT_MEMBER = 1; + */ + NOT_MEMBER = 1, + /** + * @generated from protobuf enum value: MEMBER = 2; + */ + MEMBER = 2, + /** + * @generated from protobuf enum value: CAVEATED_MEMBER = 3; + */ + CAVEATED_MEMBER = 3 +} +/** + * @generated from protobuf message dispatch.v1.DispatchExpandRequest + */ +export interface DispatchExpandRequest { + /** + * @generated from protobuf field: dispatch.v1.ResolverMeta metadata = 1; + */ + metadata?: ResolverMeta; + /** + * @generated from protobuf field: core.v1.ObjectAndRelation resource_and_relation = 2; + */ + resourceAndRelation?: ObjectAndRelation; + /** + * @generated from protobuf field: dispatch.v1.DispatchExpandRequest.ExpansionMode expansion_mode = 3; + */ + expansionMode: DispatchExpandRequest_ExpansionMode; +} +/** + * @generated from protobuf enum dispatch.v1.DispatchExpandRequest.ExpansionMode + */ +export enum DispatchExpandRequest_ExpansionMode { + /** + * @generated from protobuf enum value: SHALLOW = 0; + */ + SHALLOW = 0, + /** + * @generated from protobuf enum value: RECURSIVE = 1; + */ + RECURSIVE = 1 +} +/** + * @generated from protobuf message dispatch.v1.DispatchExpandResponse + */ +export interface DispatchExpandResponse { + /** + * @generated from protobuf field: dispatch.v1.ResponseMeta metadata = 1; + */ + metadata?: ResponseMeta; + /** + * @generated from protobuf field: core.v1.RelationTupleTreeNode tree_node = 2; + */ + treeNode?: RelationTupleTreeNode; +} +/** + * @generated from protobuf message dispatch.v1.Cursor + */ +export interface Cursor { + /** + * @generated from protobuf field: repeated string sections = 2; + */ + sections: string[]; + /** + * @generated from protobuf field: uint32 dispatch_version = 3; + */ + dispatchVersion: number; +} +/** + * @generated from protobuf message dispatch.v1.DispatchReachableResourcesRequest + */ +export interface DispatchReachableResourcesRequest { + /** + * @generated from protobuf field: dispatch.v1.ResolverMeta metadata = 1; + */ + metadata?: ResolverMeta; + /** + * @generated from protobuf field: core.v1.RelationReference resource_relation = 2; + */ + resourceRelation?: RelationReference; + /** + * @generated from protobuf field: core.v1.RelationReference subject_relation = 3; + */ + subjectRelation?: RelationReference; + /** + * @generated from protobuf field: repeated string subject_ids = 4; + */ + subjectIds: string[]; + /** + * optional_cursor, if the specified, is the cursor at which to resume returning results. Note + * that reachableresources can return duplicates. + * + * @generated from protobuf field: dispatch.v1.Cursor optional_cursor = 5; + */ + optionalCursor?: Cursor; + /** + * optional_limit, if given, specifies a limit on the number of resources returned. + * + * @generated from protobuf field: uint32 optional_limit = 6; + */ + optionalLimit: number; +} +/** + * @generated from protobuf message dispatch.v1.ReachableResource + */ +export interface ReachableResource { + /** + * @generated from protobuf field: string resource_id = 1; + */ + resourceId: string; + /** + * @generated from protobuf field: dispatch.v1.ReachableResource.ResultStatus result_status = 2; + */ + resultStatus: ReachableResource_ResultStatus; + /** + * @generated from protobuf field: repeated string for_subject_ids = 3; + */ + forSubjectIds: string[]; +} +/** + * @generated from protobuf enum dispatch.v1.ReachableResource.ResultStatus + */ +export enum ReachableResource_ResultStatus { + /** + * * + * REQUIRES_CHECK indicates that the resource is reachable but a Check is required to + * determine if the resource is actually found for the user. + * + * @generated from protobuf enum value: REQUIRES_CHECK = 0; + */ + REQUIRES_CHECK = 0, + /** + * * + * HAS_PERMISSION indicates that the resource is both reachable and found for the permission + * for the subject. + * + * @generated from protobuf enum value: HAS_PERMISSION = 1; + */ + HAS_PERMISSION = 1 +} +/** + * @generated from protobuf message dispatch.v1.DispatchReachableResourcesResponse + */ +export interface DispatchReachableResourcesResponse { + /** + * @generated from protobuf field: dispatch.v1.ReachableResource resource = 1; + */ + resource?: ReachableResource; + /** + * @generated from protobuf field: dispatch.v1.ResponseMeta metadata = 2; + */ + metadata?: ResponseMeta; + /** + * @generated from protobuf field: dispatch.v1.Cursor after_response_cursor = 3; + */ + afterResponseCursor?: Cursor; +} +/** + * @generated from protobuf message dispatch.v1.DispatchLookupResourcesRequest + */ +export interface DispatchLookupResourcesRequest { + /** + * @generated from protobuf field: dispatch.v1.ResolverMeta metadata = 1; + */ + metadata?: ResolverMeta; + /** + * @generated from protobuf field: core.v1.RelationReference object_relation = 2; + */ + objectRelation?: RelationReference; + /** + * @generated from protobuf field: core.v1.ObjectAndRelation subject = 3; + */ + subject?: ObjectAndRelation; + /** + * @generated from protobuf field: google.protobuf.Struct context = 5; + */ + context?: Struct; + /** + * optional_limit, if given, specifies a limit on the number of resources returned. + * + * @generated from protobuf field: uint32 optional_limit = 4; + */ + optionalLimit: number; + /** + * optional_cursor, if the specified, is the cursor at which to resume returning results. Note + * that lookupresources can return duplicates. + * + * @generated from protobuf field: dispatch.v1.Cursor optional_cursor = 6; + */ + optionalCursor?: Cursor; +} +/** + * @generated from protobuf message dispatch.v1.ResolvedResource + */ +export interface ResolvedResource { + /** + * @generated from protobuf field: string resource_id = 1; + */ + resourceId: string; + /** + * @generated from protobuf field: dispatch.v1.ResolvedResource.Permissionship permissionship = 2; + */ + permissionship: ResolvedResource_Permissionship; + /** + * @generated from protobuf field: repeated string missing_required_context = 3; + */ + missingRequiredContext: string[]; +} +/** + * @generated from protobuf enum dispatch.v1.ResolvedResource.Permissionship + */ +export enum ResolvedResource_Permissionship { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: HAS_PERMISSION = 1; + */ + HAS_PERMISSION = 1, + /** + * @generated from protobuf enum value: CONDITIONALLY_HAS_PERMISSION = 2; + */ + CONDITIONALLY_HAS_PERMISSION = 2 +} +/** + * @generated from protobuf message dispatch.v1.DispatchLookupResourcesResponse + */ +export interface DispatchLookupResourcesResponse { + /** + * @generated from protobuf field: dispatch.v1.ResponseMeta metadata = 1; + */ + metadata?: ResponseMeta; + /** + * @generated from protobuf field: dispatch.v1.ResolvedResource resolved_resource = 2; + */ + resolvedResource?: ResolvedResource; + /** + * @generated from protobuf field: dispatch.v1.Cursor after_response_cursor = 3; + */ + afterResponseCursor?: Cursor; +} +/** + * @generated from protobuf message dispatch.v1.DispatchLookupSubjectsRequest + */ +export interface DispatchLookupSubjectsRequest { + /** + * @generated from protobuf field: dispatch.v1.ResolverMeta metadata = 1; + */ + metadata?: ResolverMeta; + /** + * @generated from protobuf field: core.v1.RelationReference resource_relation = 2; + */ + resourceRelation?: RelationReference; + /** + * @generated from protobuf field: repeated string resource_ids = 3; + */ + resourceIds: string[]; + /** + * @generated from protobuf field: core.v1.RelationReference subject_relation = 4; + */ + subjectRelation?: RelationReference; +} +/** + * @generated from protobuf message dispatch.v1.FoundSubject + */ +export interface FoundSubject { + /** + * @generated from protobuf field: string subject_id = 1; + */ + subjectId: string; + /** + * @generated from protobuf field: core.v1.CaveatExpression caveat_expression = 2; + */ + caveatExpression?: CaveatExpression; + /** + * @generated from protobuf field: repeated dispatch.v1.FoundSubject excluded_subjects = 3; + */ + excludedSubjects: FoundSubject[]; +} +/** + * @generated from protobuf message dispatch.v1.FoundSubjects + */ +export interface FoundSubjects { + /** + * @generated from protobuf field: repeated dispatch.v1.FoundSubject found_subjects = 1; + */ + foundSubjects: FoundSubject[]; +} +/** + * @generated from protobuf message dispatch.v1.DispatchLookupSubjectsResponse + */ +export interface DispatchLookupSubjectsResponse { + /** + * @generated from protobuf field: map found_subjects_by_resource_id = 1; + */ + foundSubjectsByResourceId: { + [key: string]: FoundSubjects; + }; + /** + * @generated from protobuf field: dispatch.v1.ResponseMeta metadata = 2; + */ + metadata?: ResponseMeta; +} +/** + * @generated from protobuf message dispatch.v1.ResolverMeta + */ +export interface ResolverMeta { + /** + * @generated from protobuf field: string at_revision = 1; + */ + atRevision: string; + /** + * @generated from protobuf field: uint32 depth_remaining = 2; + */ + depthRemaining: number; +} +/** + * @generated from protobuf message dispatch.v1.ResponseMeta + */ +export interface ResponseMeta { + /** + * @generated from protobuf field: uint32 dispatch_count = 1; + */ + dispatchCount: number; + /** + * @generated from protobuf field: uint32 depth_required = 2; + */ + depthRequired: number; + /** + * @generated from protobuf field: uint32 cached_dispatch_count = 3; + */ + cachedDispatchCount: number; + /** + * @generated from protobuf field: dispatch.v1.DebugInformation debug_info = 6; + */ + debugInfo?: DebugInformation; +} +/** + * @generated from protobuf message dispatch.v1.DebugInformation + */ +export interface DebugInformation { + /** + * @generated from protobuf field: dispatch.v1.CheckDebugTrace check = 1; + */ + check?: CheckDebugTrace; +} +/** + * @generated from protobuf message dispatch.v1.CheckDebugTrace + */ +export interface CheckDebugTrace { + /** + * @generated from protobuf field: dispatch.v1.DispatchCheckRequest request = 1; + */ + request?: DispatchCheckRequest; + /** + * @generated from protobuf field: dispatch.v1.CheckDebugTrace.RelationType resource_relation_type = 2; + */ + resourceRelationType: CheckDebugTrace_RelationType; + /** + * @generated from protobuf field: map results = 3; + */ + results: { + [key: string]: ResourceCheckResult; + }; + /** + * @generated from protobuf field: bool is_cached_result = 4; + */ + isCachedResult: boolean; + /** + * @generated from protobuf field: repeated dispatch.v1.CheckDebugTrace sub_problems = 5; + */ + subProblems: CheckDebugTrace[]; + /** + * @generated from protobuf field: google.protobuf.Duration duration = 6; + */ + duration?: Duration; +} +/** + * @generated from protobuf enum dispatch.v1.CheckDebugTrace.RelationType + */ +export enum CheckDebugTrace_RelationType { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: RELATION = 1; + */ + RELATION = 1, + /** + * @generated from protobuf enum value: PERMISSION = 2; + */ + PERMISSION = 2 +} +// @generated message type with reflection information, may provide speed optimized methods +class DispatchCheckRequest$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchCheckRequest", [ + { no: 1, name: "metadata", kind: "message", T: () => ResolverMeta, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "resource_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "resource_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "subject", kind: "message", T: () => ObjectAndRelation, options: { "validate.rules": { message: { required: true } } } }, + { no: 5, name: "results_setting", kind: "enum", T: () => ["dispatch.v1.DispatchCheckRequest.ResultsSetting", DispatchCheckRequest_ResultsSetting] }, + { no: 6, name: "debug", kind: "enum", T: () => ["dispatch.v1.DispatchCheckRequest.DebugSetting", DispatchCheckRequest_DebugSetting] } + ]); + } + create(value?: PartialMessage): DispatchCheckRequest { + const message = { resourceIds: [], resultsSetting: 0, debug: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchCheckRequest): DispatchCheckRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResolverMeta metadata */ 1: + message.metadata = ResolverMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.RelationReference resource_relation */ 2: + message.resourceRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.resourceRelation); + break; + case /* repeated string resource_ids */ 3: + message.resourceIds.push(reader.string()); + break; + case /* core.v1.ObjectAndRelation subject */ 4: + message.subject = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* dispatch.v1.DispatchCheckRequest.ResultsSetting results_setting */ 5: + message.resultsSetting = reader.int32(); + break; + case /* dispatch.v1.DispatchCheckRequest.DebugSetting debug */ 6: + message.debug = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchCheckRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResolverMeta metadata = 1; */ + if (message.metadata) + ResolverMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationReference resource_relation = 2; */ + if (message.resourceRelation) + RelationReference.internalBinaryWrite(message.resourceRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated string resource_ids = 3; */ + for (let i = 0; i < message.resourceIds.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.resourceIds[i]); + /* core.v1.ObjectAndRelation subject = 4; */ + if (message.subject) + ObjectAndRelation.internalBinaryWrite(message.subject, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.DispatchCheckRequest.ResultsSetting results_setting = 5; */ + if (message.resultsSetting !== 0) + writer.tag(5, WireType.Varint).int32(message.resultsSetting); + /* dispatch.v1.DispatchCheckRequest.DebugSetting debug = 6; */ + if (message.debug !== 0) + writer.tag(6, WireType.Varint).int32(message.debug); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchCheckRequest + */ +export const DispatchCheckRequest = new DispatchCheckRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchCheckResponse$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchCheckResponse", [ + { no: 1, name: "metadata", kind: "message", T: () => ResponseMeta }, + { no: 2, name: "results_by_resource_id", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => ResourceCheckResult } } + ]); + } + create(value?: PartialMessage): DispatchCheckResponse { + const message = { resultsByResourceId: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchCheckResponse): DispatchCheckResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResponseMeta metadata */ 1: + message.metadata = ResponseMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* map results_by_resource_id */ 2: + this.binaryReadMap2(message.resultsByResourceId, reader, options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap2(map: DispatchCheckResponse["resultsByResourceId"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof DispatchCheckResponse["resultsByResourceId"] | undefined, val: DispatchCheckResponse["resultsByResourceId"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = ResourceCheckResult.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field dispatch.v1.DispatchCheckResponse.results_by_resource_id"); + } + } + map[key ?? ""] = val ?? ResourceCheckResult.create(); + } + internalBinaryWrite(message: DispatchCheckResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResponseMeta metadata = 1; */ + if (message.metadata) + ResponseMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* map results_by_resource_id = 2; */ + for (let k of Object.keys(message.resultsByResourceId)) { + writer.tag(2, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + ResourceCheckResult.internalBinaryWrite(message.resultsByResourceId[k], writer, options); + writer.join().join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchCheckResponse + */ +export const DispatchCheckResponse = new DispatchCheckResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ResourceCheckResult$Type extends MessageType { + constructor() { + super("dispatch.v1.ResourceCheckResult", [ + { no: 1, name: "membership", kind: "enum", T: () => ["dispatch.v1.ResourceCheckResult.Membership", ResourceCheckResult_Membership] }, + { no: 2, name: "expression", kind: "message", T: () => CaveatExpression }, + { no: 3, name: "missing_expr_fields", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ResourceCheckResult { + const message = { membership: 0, missingExprFields: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ResourceCheckResult): ResourceCheckResult { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResourceCheckResult.Membership membership */ 1: + message.membership = reader.int32(); + break; + case /* core.v1.CaveatExpression expression */ 2: + message.expression = CaveatExpression.internalBinaryRead(reader, reader.uint32(), options, message.expression); + break; + case /* repeated string missing_expr_fields */ 3: + message.missingExprFields.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ResourceCheckResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResourceCheckResult.Membership membership = 1; */ + if (message.membership !== 0) + writer.tag(1, WireType.Varint).int32(message.membership); + /* core.v1.CaveatExpression expression = 2; */ + if (message.expression) + CaveatExpression.internalBinaryWrite(message.expression, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated string missing_expr_fields = 3; */ + for (let i = 0; i < message.missingExprFields.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.missingExprFields[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.ResourceCheckResult + */ +export const ResourceCheckResult = new ResourceCheckResult$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchExpandRequest$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchExpandRequest", [ + { no: 1, name: "metadata", kind: "message", T: () => ResolverMeta, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "resource_and_relation", kind: "message", T: () => ObjectAndRelation, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "expansion_mode", kind: "enum", T: () => ["dispatch.v1.DispatchExpandRequest.ExpansionMode", DispatchExpandRequest_ExpansionMode] } + ]); + } + create(value?: PartialMessage): DispatchExpandRequest { + const message = { expansionMode: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchExpandRequest): DispatchExpandRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResolverMeta metadata */ 1: + message.metadata = ResolverMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.ObjectAndRelation resource_and_relation */ 2: + message.resourceAndRelation = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.resourceAndRelation); + break; + case /* dispatch.v1.DispatchExpandRequest.ExpansionMode expansion_mode */ 3: + message.expansionMode = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchExpandRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResolverMeta metadata = 1; */ + if (message.metadata) + ResolverMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ObjectAndRelation resource_and_relation = 2; */ + if (message.resourceAndRelation) + ObjectAndRelation.internalBinaryWrite(message.resourceAndRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.DispatchExpandRequest.ExpansionMode expansion_mode = 3; */ + if (message.expansionMode !== 0) + writer.tag(3, WireType.Varint).int32(message.expansionMode); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchExpandRequest + */ +export const DispatchExpandRequest = new DispatchExpandRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchExpandResponse$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchExpandResponse", [ + { no: 1, name: "metadata", kind: "message", T: () => ResponseMeta }, + { no: 2, name: "tree_node", kind: "message", T: () => RelationTupleTreeNode } + ]); + } + create(value?: PartialMessage): DispatchExpandResponse { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchExpandResponse): DispatchExpandResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResponseMeta metadata */ 1: + message.metadata = ResponseMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.RelationTupleTreeNode tree_node */ 2: + message.treeNode = RelationTupleTreeNode.internalBinaryRead(reader, reader.uint32(), options, message.treeNode); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchExpandResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResponseMeta metadata = 1; */ + if (message.metadata) + ResponseMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationTupleTreeNode tree_node = 2; */ + if (message.treeNode) + RelationTupleTreeNode.internalBinaryWrite(message.treeNode, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchExpandResponse + */ +export const DispatchExpandResponse = new DispatchExpandResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Cursor$Type extends MessageType { + constructor() { + super("dispatch.v1.Cursor", [ + { no: 2, name: "sections", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "dispatch_version", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): Cursor { + const message = { sections: [], dispatchVersion: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Cursor): Cursor { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated string sections */ 2: + message.sections.push(reader.string()); + break; + case /* uint32 dispatch_version */ 3: + message.dispatchVersion = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Cursor, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated string sections = 2; */ + for (let i = 0; i < message.sections.length; i++) + writer.tag(2, WireType.LengthDelimited).string(message.sections[i]); + /* uint32 dispatch_version = 3; */ + if (message.dispatchVersion !== 0) + writer.tag(3, WireType.Varint).uint32(message.dispatchVersion); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.Cursor + */ +export const Cursor = new Cursor$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchReachableResourcesRequest$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchReachableResourcesRequest", [ + { no: 1, name: "metadata", kind: "message", T: () => ResolverMeta, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "resource_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "subject_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 4, name: "subject_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 5, name: "optional_cursor", kind: "message", T: () => Cursor }, + { no: 6, name: "optional_limit", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): DispatchReachableResourcesRequest { + const message = { subjectIds: [], optionalLimit: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchReachableResourcesRequest): DispatchReachableResourcesRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResolverMeta metadata */ 1: + message.metadata = ResolverMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.RelationReference resource_relation */ 2: + message.resourceRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.resourceRelation); + break; + case /* core.v1.RelationReference subject_relation */ 3: + message.subjectRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.subjectRelation); + break; + case /* repeated string subject_ids */ 4: + message.subjectIds.push(reader.string()); + break; + case /* dispatch.v1.Cursor optional_cursor */ 5: + message.optionalCursor = Cursor.internalBinaryRead(reader, reader.uint32(), options, message.optionalCursor); + break; + case /* uint32 optional_limit */ 6: + message.optionalLimit = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchReachableResourcesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResolverMeta metadata = 1; */ + if (message.metadata) + ResolverMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationReference resource_relation = 2; */ + if (message.resourceRelation) + RelationReference.internalBinaryWrite(message.resourceRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationReference subject_relation = 3; */ + if (message.subjectRelation) + RelationReference.internalBinaryWrite(message.subjectRelation, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* repeated string subject_ids = 4; */ + for (let i = 0; i < message.subjectIds.length; i++) + writer.tag(4, WireType.LengthDelimited).string(message.subjectIds[i]); + /* dispatch.v1.Cursor optional_cursor = 5; */ + if (message.optionalCursor) + Cursor.internalBinaryWrite(message.optionalCursor, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* uint32 optional_limit = 6; */ + if (message.optionalLimit !== 0) + writer.tag(6, WireType.Varint).uint32(message.optionalLimit); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchReachableResourcesRequest + */ +export const DispatchReachableResourcesRequest = new DispatchReachableResourcesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReachableResource$Type extends MessageType { + constructor() { + super("dispatch.v1.ReachableResource", [ + { no: 1, name: "resource_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "result_status", kind: "enum", T: () => ["dispatch.v1.ReachableResource.ResultStatus", ReachableResource_ResultStatus] }, + { no: 3, name: "for_subject_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ReachableResource { + const message = { resourceId: "", resultStatus: 0, forSubjectIds: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReachableResource): ReachableResource { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string resource_id */ 1: + message.resourceId = reader.string(); + break; + case /* dispatch.v1.ReachableResource.ResultStatus result_status */ 2: + message.resultStatus = reader.int32(); + break; + case /* repeated string for_subject_ids */ 3: + message.forSubjectIds.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ReachableResource, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string resource_id = 1; */ + if (message.resourceId !== "") + writer.tag(1, WireType.LengthDelimited).string(message.resourceId); + /* dispatch.v1.ReachableResource.ResultStatus result_status = 2; */ + if (message.resultStatus !== 0) + writer.tag(2, WireType.Varint).int32(message.resultStatus); + /* repeated string for_subject_ids = 3; */ + for (let i = 0; i < message.forSubjectIds.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.forSubjectIds[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.ReachableResource + */ +export const ReachableResource = new ReachableResource$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchReachableResourcesResponse$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchReachableResourcesResponse", [ + { no: 1, name: "resource", kind: "message", T: () => ReachableResource }, + { no: 2, name: "metadata", kind: "message", T: () => ResponseMeta }, + { no: 3, name: "after_response_cursor", kind: "message", T: () => Cursor } + ]); + } + create(value?: PartialMessage): DispatchReachableResourcesResponse { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchReachableResourcesResponse): DispatchReachableResourcesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ReachableResource resource */ 1: + message.resource = ReachableResource.internalBinaryRead(reader, reader.uint32(), options, message.resource); + break; + case /* dispatch.v1.ResponseMeta metadata */ 2: + message.metadata = ResponseMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* dispatch.v1.Cursor after_response_cursor */ 3: + message.afterResponseCursor = Cursor.internalBinaryRead(reader, reader.uint32(), options, message.afterResponseCursor); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchReachableResourcesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ReachableResource resource = 1; */ + if (message.resource) + ReachableResource.internalBinaryWrite(message.resource, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.ResponseMeta metadata = 2; */ + if (message.metadata) + ResponseMeta.internalBinaryWrite(message.metadata, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.Cursor after_response_cursor = 3; */ + if (message.afterResponseCursor) + Cursor.internalBinaryWrite(message.afterResponseCursor, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchReachableResourcesResponse + */ +export const DispatchReachableResourcesResponse = new DispatchReachableResourcesResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchLookupResourcesRequest$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchLookupResourcesRequest", [ + { no: 1, name: "metadata", kind: "message", T: () => ResolverMeta, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "object_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "subject", kind: "message", T: () => ObjectAndRelation, options: { "validate.rules": { message: { required: true } } } }, + { no: 5, name: "context", kind: "message", T: () => Struct }, + { no: 4, name: "optional_limit", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 6, name: "optional_cursor", kind: "message", T: () => Cursor } + ]); + } + create(value?: PartialMessage): DispatchLookupResourcesRequest { + const message = { optionalLimit: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchLookupResourcesRequest): DispatchLookupResourcesRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResolverMeta metadata */ 1: + message.metadata = ResolverMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.RelationReference object_relation */ 2: + message.objectRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.objectRelation); + break; + case /* core.v1.ObjectAndRelation subject */ 3: + message.subject = ObjectAndRelation.internalBinaryRead(reader, reader.uint32(), options, message.subject); + break; + case /* google.protobuf.Struct context */ 5: + message.context = Struct.internalBinaryRead(reader, reader.uint32(), options, message.context); + break; + case /* uint32 optional_limit */ 4: + message.optionalLimit = reader.uint32(); + break; + case /* dispatch.v1.Cursor optional_cursor */ 6: + message.optionalCursor = Cursor.internalBinaryRead(reader, reader.uint32(), options, message.optionalCursor); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchLookupResourcesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResolverMeta metadata = 1; */ + if (message.metadata) + ResolverMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationReference object_relation = 2; */ + if (message.objectRelation) + RelationReference.internalBinaryWrite(message.objectRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.ObjectAndRelation subject = 3; */ + if (message.subject) + ObjectAndRelation.internalBinaryWrite(message.subject, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* google.protobuf.Struct context = 5; */ + if (message.context) + Struct.internalBinaryWrite(message.context, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* uint32 optional_limit = 4; */ + if (message.optionalLimit !== 0) + writer.tag(4, WireType.Varint).uint32(message.optionalLimit); + /* dispatch.v1.Cursor optional_cursor = 6; */ + if (message.optionalCursor) + Cursor.internalBinaryWrite(message.optionalCursor, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchLookupResourcesRequest + */ +export const DispatchLookupResourcesRequest = new DispatchLookupResourcesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ResolvedResource$Type extends MessageType { + constructor() { + super("dispatch.v1.ResolvedResource", [ + { no: 1, name: "resource_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "permissionship", kind: "enum", T: () => ["dispatch.v1.ResolvedResource.Permissionship", ResolvedResource_Permissionship] }, + { no: 3, name: "missing_required_context", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ResolvedResource { + const message = { resourceId: "", permissionship: 0, missingRequiredContext: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ResolvedResource): ResolvedResource { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string resource_id */ 1: + message.resourceId = reader.string(); + break; + case /* dispatch.v1.ResolvedResource.Permissionship permissionship */ 2: + message.permissionship = reader.int32(); + break; + case /* repeated string missing_required_context */ 3: + message.missingRequiredContext.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ResolvedResource, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string resource_id = 1; */ + if (message.resourceId !== "") + writer.tag(1, WireType.LengthDelimited).string(message.resourceId); + /* dispatch.v1.ResolvedResource.Permissionship permissionship = 2; */ + if (message.permissionship !== 0) + writer.tag(2, WireType.Varint).int32(message.permissionship); + /* repeated string missing_required_context = 3; */ + for (let i = 0; i < message.missingRequiredContext.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.missingRequiredContext[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.ResolvedResource + */ +export const ResolvedResource = new ResolvedResource$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchLookupResourcesResponse$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchLookupResourcesResponse", [ + { no: 1, name: "metadata", kind: "message", T: () => ResponseMeta }, + { no: 2, name: "resolved_resource", kind: "message", T: () => ResolvedResource }, + { no: 3, name: "after_response_cursor", kind: "message", T: () => Cursor } + ]); + } + create(value?: PartialMessage): DispatchLookupResourcesResponse { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchLookupResourcesResponse): DispatchLookupResourcesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResponseMeta metadata */ 1: + message.metadata = ResponseMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* dispatch.v1.ResolvedResource resolved_resource */ 2: + message.resolvedResource = ResolvedResource.internalBinaryRead(reader, reader.uint32(), options, message.resolvedResource); + break; + case /* dispatch.v1.Cursor after_response_cursor */ 3: + message.afterResponseCursor = Cursor.internalBinaryRead(reader, reader.uint32(), options, message.afterResponseCursor); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchLookupResourcesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResponseMeta metadata = 1; */ + if (message.metadata) + ResponseMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.ResolvedResource resolved_resource = 2; */ + if (message.resolvedResource) + ResolvedResource.internalBinaryWrite(message.resolvedResource, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.Cursor after_response_cursor = 3; */ + if (message.afterResponseCursor) + Cursor.internalBinaryWrite(message.afterResponseCursor, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchLookupResourcesResponse + */ +export const DispatchLookupResourcesResponse = new DispatchLookupResourcesResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchLookupSubjectsRequest$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchLookupSubjectsRequest", [ + { no: 1, name: "metadata", kind: "message", T: () => ResolverMeta, options: { "validate.rules": { message: { required: true } } } }, + { no: 2, name: "resource_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } }, + { no: 3, name: "resource_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "subject_relation", kind: "message", T: () => RelationReference, options: { "validate.rules": { message: { required: true } } } } + ]); + } + create(value?: PartialMessage): DispatchLookupSubjectsRequest { + const message = { resourceIds: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchLookupSubjectsRequest): DispatchLookupSubjectsRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.ResolverMeta metadata */ 1: + message.metadata = ResolverMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + case /* core.v1.RelationReference resource_relation */ 2: + message.resourceRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.resourceRelation); + break; + case /* repeated string resource_ids */ 3: + message.resourceIds.push(reader.string()); + break; + case /* core.v1.RelationReference subject_relation */ 4: + message.subjectRelation = RelationReference.internalBinaryRead(reader, reader.uint32(), options, message.subjectRelation); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DispatchLookupSubjectsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.ResolverMeta metadata = 1; */ + if (message.metadata) + ResolverMeta.internalBinaryWrite(message.metadata, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* core.v1.RelationReference resource_relation = 2; */ + if (message.resourceRelation) + RelationReference.internalBinaryWrite(message.resourceRelation, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated string resource_ids = 3; */ + for (let i = 0; i < message.resourceIds.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.resourceIds[i]); + /* core.v1.RelationReference subject_relation = 4; */ + if (message.subjectRelation) + RelationReference.internalBinaryWrite(message.subjectRelation, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchLookupSubjectsRequest + */ +export const DispatchLookupSubjectsRequest = new DispatchLookupSubjectsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FoundSubject$Type extends MessageType { + constructor() { + super("dispatch.v1.FoundSubject", [ + { no: 1, name: "subject_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "caveat_expression", kind: "message", T: () => CaveatExpression }, + { no: 3, name: "excluded_subjects", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => FoundSubject } + ]); + } + create(value?: PartialMessage): FoundSubject { + const message = { subjectId: "", excludedSubjects: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FoundSubject): FoundSubject { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string subject_id */ 1: + message.subjectId = reader.string(); + break; + case /* core.v1.CaveatExpression caveat_expression */ 2: + message.caveatExpression = CaveatExpression.internalBinaryRead(reader, reader.uint32(), options, message.caveatExpression); + break; + case /* repeated dispatch.v1.FoundSubject excluded_subjects */ 3: + message.excludedSubjects.push(FoundSubject.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FoundSubject, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string subject_id = 1; */ + if (message.subjectId !== "") + writer.tag(1, WireType.LengthDelimited).string(message.subjectId); + /* core.v1.CaveatExpression caveat_expression = 2; */ + if (message.caveatExpression) + CaveatExpression.internalBinaryWrite(message.caveatExpression, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated dispatch.v1.FoundSubject excluded_subjects = 3; */ + for (let i = 0; i < message.excludedSubjects.length; i++) + FoundSubject.internalBinaryWrite(message.excludedSubjects[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.FoundSubject + */ +export const FoundSubject = new FoundSubject$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FoundSubjects$Type extends MessageType { + constructor() { + super("dispatch.v1.FoundSubjects", [ + { no: 1, name: "found_subjects", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => FoundSubject } + ]); + } + create(value?: PartialMessage): FoundSubjects { + const message = { foundSubjects: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FoundSubjects): FoundSubjects { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated dispatch.v1.FoundSubject found_subjects */ 1: + message.foundSubjects.push(FoundSubject.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FoundSubjects, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated dispatch.v1.FoundSubject found_subjects = 1; */ + for (let i = 0; i < message.foundSubjects.length; i++) + FoundSubject.internalBinaryWrite(message.foundSubjects[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.FoundSubjects + */ +export const FoundSubjects = new FoundSubjects$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DispatchLookupSubjectsResponse$Type extends MessageType { + constructor() { + super("dispatch.v1.DispatchLookupSubjectsResponse", [ + { no: 1, name: "found_subjects_by_resource_id", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => FoundSubjects } }, + { no: 2, name: "metadata", kind: "message", T: () => ResponseMeta } + ]); + } + create(value?: PartialMessage): DispatchLookupSubjectsResponse { + const message = { foundSubjectsByResourceId: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DispatchLookupSubjectsResponse): DispatchLookupSubjectsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* map found_subjects_by_resource_id */ 1: + this.binaryReadMap1(message.foundSubjectsByResourceId, reader, options); + break; + case /* dispatch.v1.ResponseMeta metadata */ 2: + message.metadata = ResponseMeta.internalBinaryRead(reader, reader.uint32(), options, message.metadata); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap1(map: DispatchLookupSubjectsResponse["foundSubjectsByResourceId"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof DispatchLookupSubjectsResponse["foundSubjectsByResourceId"] | undefined, val: DispatchLookupSubjectsResponse["foundSubjectsByResourceId"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = FoundSubjects.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field dispatch.v1.DispatchLookupSubjectsResponse.found_subjects_by_resource_id"); + } + } + map[key ?? ""] = val ?? FoundSubjects.create(); + } + internalBinaryWrite(message: DispatchLookupSubjectsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* map found_subjects_by_resource_id = 1; */ + for (let k of Object.keys(message.foundSubjectsByResourceId)) { + writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + FoundSubjects.internalBinaryWrite(message.foundSubjectsByResourceId[k], writer, options); + writer.join().join(); + } + /* dispatch.v1.ResponseMeta metadata = 2; */ + if (message.metadata) + ResponseMeta.internalBinaryWrite(message.metadata, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DispatchLookupSubjectsResponse + */ +export const DispatchLookupSubjectsResponse = new DispatchLookupSubjectsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ResolverMeta$Type extends MessageType { + constructor() { + super("dispatch.v1.ResolverMeta", [ + { no: 1, name: "at_revision", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "1024" } } } }, + { no: 2, name: "depth_remaining", kind: "scalar", T: 13 /*ScalarType.UINT32*/, options: { "validate.rules": { uint32: { gt: 0 } } } } + ]); + } + create(value?: PartialMessage): ResolverMeta { + const message = { atRevision: "", depthRemaining: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ResolverMeta): ResolverMeta { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string at_revision */ 1: + message.atRevision = reader.string(); + break; + case /* uint32 depth_remaining */ 2: + message.depthRemaining = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ResolverMeta, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string at_revision = 1; */ + if (message.atRevision !== "") + writer.tag(1, WireType.LengthDelimited).string(message.atRevision); + /* uint32 depth_remaining = 2; */ + if (message.depthRemaining !== 0) + writer.tag(2, WireType.Varint).uint32(message.depthRemaining); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.ResolverMeta + */ +export const ResolverMeta = new ResolverMeta$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ResponseMeta$Type extends MessageType { + constructor() { + super("dispatch.v1.ResponseMeta", [ + { no: 1, name: "dispatch_count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "depth_required", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "cached_dispatch_count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 6, name: "debug_info", kind: "message", T: () => DebugInformation } + ]); + } + create(value?: PartialMessage): ResponseMeta { + const message = { dispatchCount: 0, depthRequired: 0, cachedDispatchCount: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ResponseMeta): ResponseMeta { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint32 dispatch_count */ 1: + message.dispatchCount = reader.uint32(); + break; + case /* uint32 depth_required */ 2: + message.depthRequired = reader.uint32(); + break; + case /* uint32 cached_dispatch_count */ 3: + message.cachedDispatchCount = reader.uint32(); + break; + case /* dispatch.v1.DebugInformation debug_info */ 6: + message.debugInfo = DebugInformation.internalBinaryRead(reader, reader.uint32(), options, message.debugInfo); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ResponseMeta, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint32 dispatch_count = 1; */ + if (message.dispatchCount !== 0) + writer.tag(1, WireType.Varint).uint32(message.dispatchCount); + /* uint32 depth_required = 2; */ + if (message.depthRequired !== 0) + writer.tag(2, WireType.Varint).uint32(message.depthRequired); + /* uint32 cached_dispatch_count = 3; */ + if (message.cachedDispatchCount !== 0) + writer.tag(3, WireType.Varint).uint32(message.cachedDispatchCount); + /* dispatch.v1.DebugInformation debug_info = 6; */ + if (message.debugInfo) + DebugInformation.internalBinaryWrite(message.debugInfo, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.ResponseMeta + */ +export const ResponseMeta = new ResponseMeta$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DebugInformation$Type extends MessageType { + constructor() { + super("dispatch.v1.DebugInformation", [ + { no: 1, name: "check", kind: "message", T: () => CheckDebugTrace } + ]); + } + create(value?: PartialMessage): DebugInformation { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DebugInformation): DebugInformation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.CheckDebugTrace check */ 1: + message.check = CheckDebugTrace.internalBinaryRead(reader, reader.uint32(), options, message.check); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DebugInformation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.CheckDebugTrace check = 1; */ + if (message.check) + CheckDebugTrace.internalBinaryWrite(message.check, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.DebugInformation + */ +export const DebugInformation = new DebugInformation$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class CheckDebugTrace$Type extends MessageType { + constructor() { + super("dispatch.v1.CheckDebugTrace", [ + { no: 1, name: "request", kind: "message", T: () => DispatchCheckRequest }, + { no: 2, name: "resource_relation_type", kind: "enum", T: () => ["dispatch.v1.CheckDebugTrace.RelationType", CheckDebugTrace_RelationType] }, + { no: 3, name: "results", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => ResourceCheckResult } }, + { no: 4, name: "is_cached_result", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "sub_problems", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => CheckDebugTrace }, + { no: 6, name: "duration", kind: "message", T: () => Duration } + ]); + } + create(value?: PartialMessage): CheckDebugTrace { + const message = { resourceRelationType: 0, results: {}, isCachedResult: false, subProblems: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CheckDebugTrace): CheckDebugTrace { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* dispatch.v1.DispatchCheckRequest request */ 1: + message.request = DispatchCheckRequest.internalBinaryRead(reader, reader.uint32(), options, message.request); + break; + case /* dispatch.v1.CheckDebugTrace.RelationType resource_relation_type */ 2: + message.resourceRelationType = reader.int32(); + break; + case /* map results */ 3: + this.binaryReadMap3(message.results, reader, options); + break; + case /* bool is_cached_result */ 4: + message.isCachedResult = reader.bool(); + break; + case /* repeated dispatch.v1.CheckDebugTrace sub_problems */ 5: + message.subProblems.push(CheckDebugTrace.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* google.protobuf.Duration duration */ 6: + message.duration = Duration.internalBinaryRead(reader, reader.uint32(), options, message.duration); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap3(map: CheckDebugTrace["results"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof CheckDebugTrace["results"] | undefined, val: CheckDebugTrace["results"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = ResourceCheckResult.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field dispatch.v1.CheckDebugTrace.results"); + } + } + map[key ?? ""] = val ?? ResourceCheckResult.create(); + } + internalBinaryWrite(message: CheckDebugTrace, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* dispatch.v1.DispatchCheckRequest request = 1; */ + if (message.request) + DispatchCheckRequest.internalBinaryWrite(message.request, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* dispatch.v1.CheckDebugTrace.RelationType resource_relation_type = 2; */ + if (message.resourceRelationType !== 0) + writer.tag(2, WireType.Varint).int32(message.resourceRelationType); + /* map results = 3; */ + for (let k of Object.keys(message.results)) { + writer.tag(3, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + ResourceCheckResult.internalBinaryWrite(message.results[k], writer, options); + writer.join().join(); + } + /* bool is_cached_result = 4; */ + if (message.isCachedResult !== false) + writer.tag(4, WireType.Varint).bool(message.isCachedResult); + /* repeated dispatch.v1.CheckDebugTrace sub_problems = 5; */ + for (let i = 0; i < message.subProblems.length; i++) + CheckDebugTrace.internalBinaryWrite(message.subProblems[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* google.protobuf.Duration duration = 6; */ + if (message.duration) + Duration.internalBinaryWrite(message.duration, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message dispatch.v1.CheckDebugTrace + */ +export const CheckDebugTrace = new CheckDebugTrace$Type(); +/** + * @generated ServiceType for protobuf service dispatch.v1.DispatchService + */ +export const DispatchService = new ServiceType("dispatch.v1.DispatchService", [ + { name: "DispatchCheck", options: {}, I: DispatchCheckRequest, O: DispatchCheckResponse }, + { name: "DispatchExpand", options: {}, I: DispatchExpandRequest, O: DispatchExpandResponse }, + { name: "DispatchReachableResources", serverStreaming: true, options: {}, I: DispatchReachableResourcesRequest, O: DispatchReachableResourcesResponse }, + { name: "DispatchLookupResources", serverStreaming: true, options: {}, I: DispatchLookupResourcesRequest, O: DispatchLookupResourcesResponse }, + { name: "DispatchLookupSubjects", serverStreaming: true, options: {}, I: DispatchLookupSubjectsRequest, O: DispatchLookupSubjectsResponse } +]); diff --git a/spicedb-common/src/protodevdefs/google/protobuf/any.ts b/spicedb-common/src/protodevdefs/google/protobuf/any.ts new file mode 100644 index 0000000..904081a --- /dev/null +++ b/spicedb-common/src/protodevdefs/google/protobuf/any.ts @@ -0,0 +1,325 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "google/protobuf/any.proto" (package "google.protobuf", syntax proto3) +// tslint:disable +// +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { isJsonObject } from "@protobuf-ts/runtime"; +import { typeofJsonValue } from "@protobuf-ts/runtime"; +import type { JsonValue } from "@protobuf-ts/runtime"; +import { jsonWriteOptions } from "@protobuf-ts/runtime"; +import type { JsonReadOptions } from "@protobuf-ts/runtime"; +import type { JsonWriteOptions } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IMessageType } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * `Any` contains an arbitrary serialized protocol buffer message along with a + * URL that describes the type of the serialized message. + * + * Protobuf library provides support to pack/unpack Any values in the form + * of utility functions or additional generated methods of the Any type. + * + * Example 1: Pack and unpack a message in C++. + * + * Foo foo = ...; + * Any any; + * any.PackFrom(foo); + * ... + * if (any.UnpackTo(&foo)) { + * ... + * } + * + * Example 2: Pack and unpack a message in Java. + * + * Foo foo = ...; + * Any any = Any.pack(foo); + * ... + * if (any.is(Foo.class)) { + * foo = any.unpack(Foo.class); + * } + * // or ... + * if (any.isSameTypeAs(Foo.getDefaultInstance())) { + * foo = any.unpack(Foo.getDefaultInstance()); + * } + * + * Example 3: Pack and unpack a message in Python. + * + * foo = Foo(...) + * any = Any() + * any.Pack(foo) + * ... + * if any.Is(Foo.DESCRIPTOR): + * any.Unpack(foo) + * ... + * + * Example 4: Pack and unpack a message in Go + * + * foo := &pb.Foo{...} + * any, err := anypb.New(foo) + * if err != nil { + * ... + * } + * ... + * foo := &pb.Foo{} + * if err := any.UnmarshalTo(foo); err != nil { + * ... + * } + * + * The pack methods provided by protobuf library will by default use + * 'type.googleapis.com/full.type.name' as the type URL and the unpack + * methods only use the fully qualified type name after the last '/' + * in the type URL, for example "foo.bar.com/x/y.z" will yield type + * name "y.z". + * + * JSON + * + * The JSON representation of an `Any` value uses the regular + * representation of the deserialized, embedded message, with an + * additional field `@type` which contains the type URL. Example: + * + * package google.profile; + * message Person { + * string first_name = 1; + * string last_name = 2; + * } + * + * { + * "@type": "type.googleapis.com/google.profile.Person", + * "firstName": , + * "lastName": + * } + * + * If the embedded message type is well-known and has a custom JSON + * representation, that representation will be embedded adding a field + * `value` which holds the custom JSON in addition to the `@type` + * field. Example (for message [google.protobuf.Duration][]): + * + * { + * "@type": "type.googleapis.com/google.protobuf.Duration", + * "value": "1.212s" + * } + * + * + * @generated from protobuf message google.protobuf.Any + */ +export interface Any { + /** + * A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * `path/google.protobuf.Duration`). The name should be in a canonical form + * (e.g., leading "." is not accepted). + * + * In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme `http`, `https`, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows: + * + * * If no scheme is provided, `https` is assumed. + * * An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error. + * * Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.) + * + * Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. + * + * Schemes other than `http`, `https` (or the empty scheme) might be + * used with implementation specific semantics. + * + * + * @generated from protobuf field: string type_url = 1; + */ + typeUrl: string; + /** + * Must be a valid serialized protocol buffer of the above specified type. + * + * @generated from protobuf field: bytes value = 2; + */ + value: Uint8Array; +} +// @generated message type with reflection information, may provide speed optimized methods +class Any$Type extends MessageType { + constructor() { + super("google.protobuf.Any", [ + { no: 1, name: "type_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "value", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + /** + * Pack the message into a new `Any`. + * + * Uses 'type.googleapis.com/full.type.name' as the type URL. + */ + pack(message: T, type: IMessageType): Any { + return { + typeUrl: this.typeNameToUrl(type.typeName), value: type.toBinary(message), + }; + } + /** + * Unpack the message from the `Any`. + */ + unpack(any: Any, type: IMessageType, options?: Partial): T { + if (!this.contains(any, type)) + throw new Error("Cannot unpack google.protobuf.Any with typeUrl '" + any.typeUrl + "' as " + type.typeName + "."); + return type.fromBinary(any.value, options); + } + /** + * Does the given `Any` contain a packed message of the given type? + */ + contains(any: Any, type: IMessageType | string): boolean { + if (!any.typeUrl.length) + return false; + let wants = typeof type == "string" ? type : type.typeName; + let has = this.typeUrlToName(any.typeUrl); + return wants === has; + } + /** + * Convert the message to canonical JSON value. + * + * You have to provide the `typeRegistry` option so that the + * packed message can be converted to JSON. + * + * The `typeRegistry` option is also required to read + * `google.protobuf.Any` from JSON format. + */ + internalJsonWrite(any: Any, options: JsonWriteOptions): JsonValue { + if (any.typeUrl === "") + return {}; + let typeName = this.typeUrlToName(any.typeUrl); + let opt = jsonWriteOptions(options); + let type = opt.typeRegistry?.find(t => t.typeName === typeName); + if (!type) + throw new globalThis.Error("Unable to convert google.protobuf.Any with typeUrl '" + any.typeUrl + "' to JSON. The specified type " + typeName + " is not available in the type registry."); + let value = type.fromBinary(any.value, { readUnknownField: false }); + let json = type.internalJsonWrite(value, opt); + if (typeName.startsWith("google.protobuf.") || !isJsonObject(json)) + json = { value: json }; + json["@type"] = any.typeUrl; + return json; + } + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Any): Any { + if (!isJsonObject(json)) + throw new globalThis.Error("Unable to parse google.protobuf.Any from JSON " + typeofJsonValue(json) + "."); + if (typeof json["@type"] != "string" || json["@type"] == "") + return this.create(); + let typeName = this.typeUrlToName(json["@type"]); + let type = options?.typeRegistry?.find(t => t.typeName == typeName); + if (!type) + throw new globalThis.Error("Unable to parse google.protobuf.Any from JSON. The specified type " + typeName + " is not available in the type registry."); + let value; + if (typeName.startsWith("google.protobuf.") && json.hasOwnProperty("value")) + value = type.fromJson(json["value"], options); + else { + let copy = Object.assign({}, json); + delete copy["@type"]; + value = type.fromJson(copy, options); + } + if (target === undefined) + target = this.create(); + target.typeUrl = json["@type"]; + target.value = type.toBinary(value); + return target; + } + typeNameToUrl(name: string): string { + if (!name.length) + throw new Error("invalid type name: " + name); + return "type.googleapis.com/" + name; + } + typeUrlToName(url: string): string { + if (!url.length) + throw new Error("invalid type url: " + url); + let slash = url.lastIndexOf("/"); + let name = slash > 0 ? url.substring(slash + 1) : url; + if (!name.length) + throw new Error("invalid type url: " + url); + return name; + } + create(value?: PartialMessage): Any { + const message = { typeUrl: "", value: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Any): Any { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string type_url */ 1: + message.typeUrl = reader.string(); + break; + case /* bytes value */ 2: + message.value = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Any, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string type_url = 1; */ + if (message.typeUrl !== "") + writer.tag(1, WireType.LengthDelimited).string(message.typeUrl); + /* bytes value = 2; */ + if (message.value.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.value); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.Any + */ +export const Any = new Any$Type(); diff --git a/spicedb-common/src/protodevdefs/google/protobuf/descriptor.ts b/spicedb-common/src/protodevdefs/google/protobuf/descriptor.ts new file mode 100644 index 0000000..8bda63b --- /dev/null +++ b/spicedb-common/src/protodevdefs/google/protobuf/descriptor.ts @@ -0,0 +1,3662 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "google/protobuf/descriptor.proto" (package "google.protobuf", syntax proto2) +// tslint:disable +// +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). +// +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * The protocol compiler can output a FileDescriptorSet containing the .proto + * files it parses. + * + * @generated from protobuf message google.protobuf.FileDescriptorSet + */ +export interface FileDescriptorSet { + /** + * @generated from protobuf field: repeated google.protobuf.FileDescriptorProto file = 1; + */ + file: FileDescriptorProto[]; +} +/** + * Describes a complete .proto file. + * + * @generated from protobuf message google.protobuf.FileDescriptorProto + */ +export interface FileDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; // file name, relative to root of source tree + /** + * @generated from protobuf field: optional string package = 2; + */ + package?: string; // e.g. "foo", "foo.bar", etc. + /** + * Names of files imported by this file. + * + * @generated from protobuf field: repeated string dependency = 3; + */ + dependency: string[]; + /** + * Indexes of the public imported files in the dependency list above. + * + * @generated from protobuf field: repeated int32 public_dependency = 10; + */ + publicDependency: number[]; + /** + * Indexes of the weak imported files in the dependency list. + * For Google-internal migration only. Do not use. + * + * @generated from protobuf field: repeated int32 weak_dependency = 11; + */ + weakDependency: number[]; + /** + * All top-level definitions in this file. + * + * @generated from protobuf field: repeated google.protobuf.DescriptorProto message_type = 4; + */ + messageType: DescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.EnumDescriptorProto enum_type = 5; + */ + enumType: EnumDescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.ServiceDescriptorProto service = 6; + */ + service: ServiceDescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.FieldDescriptorProto extension = 7; + */ + extension: FieldDescriptorProto[]; + /** + * @generated from protobuf field: optional google.protobuf.FileOptions options = 8; + */ + options?: FileOptions; + /** + * This field contains optional information about the original source code. + * You may safely remove this entire field without harming runtime + * functionality of the descriptors -- the information is needed only by + * development tools. + * + * @generated from protobuf field: optional google.protobuf.SourceCodeInfo source_code_info = 9; + */ + sourceCodeInfo?: SourceCodeInfo; + /** + * The syntax of the proto file. + * The supported values are "proto2", "proto3", and "editions". + * + * If `edition` is present, this value must be "editions". + * + * @generated from protobuf field: optional string syntax = 12; + */ + syntax?: string; + /** + * The edition of the proto file, which is an opaque string. + * + * @generated from protobuf field: optional string edition = 13; + */ + edition?: string; +} +/** + * Describes a message type. + * + * @generated from protobuf message google.protobuf.DescriptorProto + */ +export interface DescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: repeated google.protobuf.FieldDescriptorProto field = 2; + */ + field: FieldDescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.FieldDescriptorProto extension = 6; + */ + extension: FieldDescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.DescriptorProto nested_type = 3; + */ + nestedType: DescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.EnumDescriptorProto enum_type = 4; + */ + enumType: EnumDescriptorProto[]; + /** + * @generated from protobuf field: repeated google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + extensionRange: DescriptorProto_ExtensionRange[]; + /** + * @generated from protobuf field: repeated google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + oneofDecl: OneofDescriptorProto[]; + /** + * @generated from protobuf field: optional google.protobuf.MessageOptions options = 7; + */ + options?: MessageOptions; + /** + * @generated from protobuf field: repeated google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + reservedRange: DescriptorProto_ReservedRange[]; + /** + * Reserved field names, which may not be used by fields in the same message. + * A given name may only be reserved once. + * + * @generated from protobuf field: repeated string reserved_name = 10; + */ + reservedName: string[]; +} +/** + * @generated from protobuf message google.protobuf.DescriptorProto.ExtensionRange + */ +export interface DescriptorProto_ExtensionRange { + /** + * @generated from protobuf field: optional int32 start = 1; + */ + start?: number; // Inclusive. + /** + * @generated from protobuf field: optional int32 end = 2; + */ + end?: number; // Exclusive. + /** + * @generated from protobuf field: optional google.protobuf.ExtensionRangeOptions options = 3; + */ + options?: ExtensionRangeOptions; +} +/** + * Range of reserved tag numbers. Reserved tag numbers may not be used by + * fields or extension ranges in the same message. Reserved ranges may + * not overlap. + * + * @generated from protobuf message google.protobuf.DescriptorProto.ReservedRange + */ +export interface DescriptorProto_ReservedRange { + /** + * @generated from protobuf field: optional int32 start = 1; + */ + start?: number; // Inclusive. + /** + * @generated from protobuf field: optional int32 end = 2; + */ + end?: number; // Exclusive. +} +/** + * @generated from protobuf message google.protobuf.ExtensionRangeOptions + */ +export interface ExtensionRangeOptions { + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * Describes a field within a message. + * + * @generated from protobuf message google.protobuf.FieldDescriptorProto + */ +export interface FieldDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: optional int32 number = 3; + */ + number?: number; + /** + * @generated from protobuf field: optional google.protobuf.FieldDescriptorProto.Label label = 4; + */ + label?: FieldDescriptorProto_Label; + /** + * If type_name is set, this need not be set. If both this and type_name + * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + * + * @generated from protobuf field: optional google.protobuf.FieldDescriptorProto.Type type = 5; + */ + type?: FieldDescriptorProto_Type; + /** + * For message and enum types, this is the name of the type. If the name + * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + * rules are used to find the type (i.e. first the nested types within this + * message are searched, then within the parent, on up to the root + * namespace). + * + * @generated from protobuf field: optional string type_name = 6; + */ + typeName?: string; + /** + * For extensions, this is the name of the type being extended. It is + * resolved in the same manner as type_name. + * + * @generated from protobuf field: optional string extendee = 2; + */ + extendee?: string; + /** + * For numeric types, contains the original text representation of the value. + * For booleans, "true" or "false". + * For strings, contains the default text contents (not escaped in any way). + * For bytes, contains the C escaped value. All bytes >= 128 are escaped. + * + * @generated from protobuf field: optional string default_value = 7; + */ + defaultValue?: string; + /** + * If set, gives the index of a oneof in the containing type's oneof_decl + * list. This field is a member of that oneof. + * + * @generated from protobuf field: optional int32 oneof_index = 9; + */ + oneofIndex?: number; + /** + * JSON name of this field. The value is set by protocol compiler. If the + * user has set a "json_name" option on this field, that option's value + * will be used. Otherwise, it's deduced from the field's name by converting + * it to camelCase. + * + * @generated from protobuf field: optional string json_name = 10; + */ + jsonName?: string; + /** + * @generated from protobuf field: optional google.protobuf.FieldOptions options = 8; + */ + options?: FieldOptions; + /** + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. + * + * @generated from protobuf field: optional bool proto3_optional = 17; + */ + proto3Optional?: boolean; +} +/** + * @generated from protobuf enum google.protobuf.FieldDescriptorProto.Type + */ +export enum FieldDescriptorProto_Type { + /** + * @generated synthetic value - protobuf-ts requires all enums to have a 0 value + */ + UNSPECIFIED$ = 0, + /** + * 0 is reserved for errors. + * Order is weird for historical reasons. + * + * @generated from protobuf enum value: TYPE_DOUBLE = 1; + */ + DOUBLE = 1, + /** + * @generated from protobuf enum value: TYPE_FLOAT = 2; + */ + FLOAT = 2, + /** + * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + * negative values are likely. + * + * @generated from protobuf enum value: TYPE_INT64 = 3; + */ + INT64 = 3, + /** + * @generated from protobuf enum value: TYPE_UINT64 = 4; + */ + UINT64 = 4, + /** + * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + * negative values are likely. + * + * @generated from protobuf enum value: TYPE_INT32 = 5; + */ + INT32 = 5, + /** + * @generated from protobuf enum value: TYPE_FIXED64 = 6; + */ + FIXED64 = 6, + /** + * @generated from protobuf enum value: TYPE_FIXED32 = 7; + */ + FIXED32 = 7, + /** + * @generated from protobuf enum value: TYPE_BOOL = 8; + */ + BOOL = 8, + /** + * @generated from protobuf enum value: TYPE_STRING = 9; + */ + STRING = 9, + /** + * Tag-delimited aggregate. + * Group type is deprecated and not supported in proto3. However, Proto3 + * implementations should still be able to parse the group wire format and + * treat group fields as unknown fields. + * + * @generated from protobuf enum value: TYPE_GROUP = 10; + */ + GROUP = 10, + /** + * Length-delimited aggregate. + * + * @generated from protobuf enum value: TYPE_MESSAGE = 11; + */ + MESSAGE = 11, + /** + * New in version 2. + * + * @generated from protobuf enum value: TYPE_BYTES = 12; + */ + BYTES = 12, + /** + * @generated from protobuf enum value: TYPE_UINT32 = 13; + */ + UINT32 = 13, + /** + * @generated from protobuf enum value: TYPE_ENUM = 14; + */ + ENUM = 14, + /** + * @generated from protobuf enum value: TYPE_SFIXED32 = 15; + */ + SFIXED32 = 15, + /** + * @generated from protobuf enum value: TYPE_SFIXED64 = 16; + */ + SFIXED64 = 16, + /** + * Uses ZigZag encoding. + * + * @generated from protobuf enum value: TYPE_SINT32 = 17; + */ + SINT32 = 17, + /** + * Uses ZigZag encoding. + * + * @generated from protobuf enum value: TYPE_SINT64 = 18; + */ + SINT64 = 18 +} +/** + * @generated from protobuf enum google.protobuf.FieldDescriptorProto.Label + */ +export enum FieldDescriptorProto_Label { + /** + * @generated synthetic value - protobuf-ts requires all enums to have a 0 value + */ + UNSPECIFIED$ = 0, + /** + * 0 is reserved for errors + * + * @generated from protobuf enum value: LABEL_OPTIONAL = 1; + */ + OPTIONAL = 1, + /** + * @generated from protobuf enum value: LABEL_REQUIRED = 2; + */ + REQUIRED = 2, + /** + * @generated from protobuf enum value: LABEL_REPEATED = 3; + */ + REPEATED = 3 +} +/** + * Describes a oneof. + * + * @generated from protobuf message google.protobuf.OneofDescriptorProto + */ +export interface OneofDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: optional google.protobuf.OneofOptions options = 2; + */ + options?: OneofOptions; +} +/** + * Describes an enum type. + * + * @generated from protobuf message google.protobuf.EnumDescriptorProto + */ +export interface EnumDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: repeated google.protobuf.EnumValueDescriptorProto value = 2; + */ + value: EnumValueDescriptorProto[]; + /** + * @generated from protobuf field: optional google.protobuf.EnumOptions options = 3; + */ + options?: EnumOptions; + /** + * Range of reserved numeric values. Reserved numeric values may not be used + * by enum values in the same enum declaration. Reserved ranges may not + * overlap. + * + * @generated from protobuf field: repeated google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; + */ + reservedRange: EnumDescriptorProto_EnumReservedRange[]; + /** + * Reserved enum value names, which may not be reused. A given name may only + * be reserved once. + * + * @generated from protobuf field: repeated string reserved_name = 5; + */ + reservedName: string[]; +} +/** + * Range of reserved numeric values. Reserved values may not be used by + * entries in the same enum. Reserved ranges may not overlap. + * + * Note that this is distinct from DescriptorProto.ReservedRange in that it + * is inclusive such that it can appropriately represent the entire int32 + * domain. + * + * @generated from protobuf message google.protobuf.EnumDescriptorProto.EnumReservedRange + */ +export interface EnumDescriptorProto_EnumReservedRange { + /** + * @generated from protobuf field: optional int32 start = 1; + */ + start?: number; // Inclusive. + /** + * @generated from protobuf field: optional int32 end = 2; + */ + end?: number; // Inclusive. +} +/** + * Describes a value within an enum. + * + * @generated from protobuf message google.protobuf.EnumValueDescriptorProto + */ +export interface EnumValueDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: optional int32 number = 2; + */ + number?: number; + /** + * @generated from protobuf field: optional google.protobuf.EnumValueOptions options = 3; + */ + options?: EnumValueOptions; +} +/** + * Describes a service. + * + * @generated from protobuf message google.protobuf.ServiceDescriptorProto + */ +export interface ServiceDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * @generated from protobuf field: repeated google.protobuf.MethodDescriptorProto method = 2; + */ + method: MethodDescriptorProto[]; + /** + * @generated from protobuf field: optional google.protobuf.ServiceOptions options = 3; + */ + options?: ServiceOptions; +} +/** + * Describes a method of a service. + * + * @generated from protobuf message google.protobuf.MethodDescriptorProto + */ +export interface MethodDescriptorProto { + /** + * @generated from protobuf field: optional string name = 1; + */ + name?: string; + /** + * Input and output type names. These are resolved in the same way as + * FieldDescriptorProto.type_name, but must refer to a message type. + * + * @generated from protobuf field: optional string input_type = 2; + */ + inputType?: string; + /** + * @generated from protobuf field: optional string output_type = 3; + */ + outputType?: string; + /** + * @generated from protobuf field: optional google.protobuf.MethodOptions options = 4; + */ + options?: MethodOptions; + /** + * Identifies if client streams multiple client messages + * + * @generated from protobuf field: optional bool client_streaming = 5; + */ + clientStreaming?: boolean; + /** + * Identifies if server streams multiple server messages + * + * @generated from protobuf field: optional bool server_streaming = 6; + */ + serverStreaming?: boolean; +} +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + +/** + * @generated from protobuf message google.protobuf.FileOptions + */ +export interface FileOptions { + /** + * Sets the Java package where classes generated from this .proto will be + * placed. By default, the proto package is used, but this is often + * inappropriate because proto packages do not normally start with backwards + * domain names. + * + * @generated from protobuf field: optional string java_package = 1; + */ + javaPackage?: string; + /** + * Controls the name of the wrapper Java class generated for the .proto file. + * That class will always contain the .proto file's getDescriptor() method as + * well as any top-level extensions defined in the .proto file. + * If java_multiple_files is disabled, then all the other classes from the + * .proto file will be nested inside the single wrapper outer class. + * + * @generated from protobuf field: optional string java_outer_classname = 8; + */ + javaOuterClassname?: string; + /** + * If enabled, then the Java code generator will generate a separate .java + * file for each top-level message, enum, and service defined in the .proto + * file. Thus, these types will *not* be nested inside the wrapper class + * named by java_outer_classname. However, the wrapper class will still be + * generated to contain the file's getDescriptor() method as well as any + * top-level extensions defined in the file. + * + * @generated from protobuf field: optional bool java_multiple_files = 10; + */ + javaMultipleFiles?: boolean; + /** + * This option does nothing. + * + * @deprecated + * @generated from protobuf field: optional bool java_generate_equals_and_hash = 20 [deprecated = true]; + */ + javaGenerateEqualsAndHash?: boolean; + /** + * If set true, then the Java2 code generator will generate code that + * throws an exception whenever an attempt is made to assign a non-UTF-8 + * byte sequence to a string field. + * Message reflection will do the same. + * However, an extension field still accepts non-UTF-8 byte sequences. + * This option has no effect on when used with the lite runtime. + * + * @generated from protobuf field: optional bool java_string_check_utf8 = 27; + */ + javaStringCheckUtf8?: boolean; + /** + * @generated from protobuf field: optional google.protobuf.FileOptions.OptimizeMode optimize_for = 9; + */ + optimizeFor?: FileOptions_OptimizeMode; + /** + * Sets the Go package where structs generated from this .proto will be + * placed. If omitted, the Go package will be derived from the following: + * - The basename of the package import path, if provided. + * - Otherwise, the package statement in the .proto file, if present. + * - Otherwise, the basename of the .proto file, without extension. + * + * @generated from protobuf field: optional string go_package = 11; + */ + goPackage?: string; + /** + * Should generic services be generated in each language? "Generic" services + * are not specific to any particular RPC system. They are generated by the + * main code generators in each language (without additional plugins). + * Generic services were the only kind of service generation supported by + * early versions of google.protobuf. + * + * Generic services are now considered deprecated in favor of using plugins + * that generate code specific to your particular RPC system. Therefore, + * these default to false. Old code which depends on generic services should + * explicitly set them to true. + * + * @generated from protobuf field: optional bool cc_generic_services = 16; + */ + ccGenericServices?: boolean; + /** + * @generated from protobuf field: optional bool java_generic_services = 17; + */ + javaGenericServices?: boolean; + /** + * @generated from protobuf field: optional bool py_generic_services = 18; + */ + pyGenericServices?: boolean; + /** + * @generated from protobuf field: optional bool php_generic_services = 42; + */ + phpGenericServices?: boolean; + /** + * Is this file deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for everything in the file, or it will be completely ignored; in the very + * least, this is a formalization for deprecating files. + * + * @generated from protobuf field: optional bool deprecated = 23; + */ + deprecated?: boolean; + /** + * Enables the use of arenas for the proto messages in this file. This applies + * only to generated classes for C++. + * + * @generated from protobuf field: optional bool cc_enable_arenas = 31; + */ + ccEnableArenas?: boolean; + /** + * Sets the objective c class prefix which is prepended to all objective c + * generated classes from this .proto. There is no default. + * + * @generated from protobuf field: optional string objc_class_prefix = 36; + */ + objcClassPrefix?: string; + /** + * Namespace for generated classes; defaults to the package. + * + * @generated from protobuf field: optional string csharp_namespace = 37; + */ + csharpNamespace?: string; + /** + * By default Swift generators will take the proto package and CamelCase it + * replacing '.' with underscore and use that to prefix the types/symbols + * defined. When this options is provided, they will use this value instead + * to prefix the types/symbols defined. + * + * @generated from protobuf field: optional string swift_prefix = 39; + */ + swiftPrefix?: string; + /** + * Sets the php class prefix which is prepended to all php generated classes + * from this .proto. Default is empty. + * + * @generated from protobuf field: optional string php_class_prefix = 40; + */ + phpClassPrefix?: string; + /** + * Use this option to change the namespace of php generated classes. Default + * is empty. When this option is empty, the package name will be used for + * determining the namespace. + * + * @generated from protobuf field: optional string php_namespace = 41; + */ + phpNamespace?: string; + /** + * Use this option to change the namespace of php generated metadata classes. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. + * + * @generated from protobuf field: optional string php_metadata_namespace = 44; + */ + phpMetadataNamespace?: string; + /** + * Use this option to change the package of ruby generated classes. Default + * is empty. When this option is not set, the package name will be used for + * determining the ruby package. + * + * @generated from protobuf field: optional string ruby_package = 45; + */ + rubyPackage?: string; + /** + * The parser stores options it doesn't recognize here. + * See the documentation for the "Options" section above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * Generated classes can be optimized for speed or code size. + * + * @generated from protobuf enum google.protobuf.FileOptions.OptimizeMode + */ +export enum FileOptions_OptimizeMode { + /** + * @generated synthetic value - protobuf-ts requires all enums to have a 0 value + */ + UNSPECIFIED$ = 0, + /** + * Generate complete code for parsing, serialization, + * + * @generated from protobuf enum value: SPEED = 1; + */ + SPEED = 1, + /** + * etc. + * + * Use ReflectionOps to implement these methods. + * + * @generated from protobuf enum value: CODE_SIZE = 2; + */ + CODE_SIZE = 2, + /** + * Generate code using MessageLite and the lite runtime. + * + * @generated from protobuf enum value: LITE_RUNTIME = 3; + */ + LITE_RUNTIME = 3 +} +/** + * @generated from protobuf message google.protobuf.MessageOptions + */ +export interface MessageOptions { + /** + * Set true to use the old proto1 MessageSet wire format for extensions. + * This is provided for backwards-compatibility with the MessageSet wire + * format. You should not use this for any other reason: It's less + * efficient, has fewer features, and is more complicated. + * + * The message must be defined exactly as follows: + * message Foo { + * option message_set_wire_format = true; + * extensions 4 to max; + * } + * Note that the message cannot have any defined fields; MessageSets only + * have extensions. + * + * All extensions of your type must be singular messages; e.g. they cannot + * be int32s, enums, or repeated messages. + * + * Because this is an option, the above two restrictions are not enforced by + * the protocol compiler. + * + * @generated from protobuf field: optional bool message_set_wire_format = 1; + */ + messageSetWireFormat?: boolean; + /** + * Disables the generation of the standard "descriptor()" accessor, which can + * conflict with a field of the same name. This is meant to make migration + * from proto1 easier; new code should avoid fields named "descriptor". + * + * @generated from protobuf field: optional bool no_standard_descriptor_accessor = 2; + */ + noStandardDescriptorAccessor?: boolean; + /** + * Is this message deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the message, or it will be completely ignored; in the very least, + * this is a formalization for deprecating messages. + * + * @generated from protobuf field: optional bool deprecated = 3; + */ + deprecated?: boolean; + /** + * NOTE: Do not set the option in .proto files. Always use the maps syntax + * instead. The option should only be implicitly set by the proto compiler + * parser. + * + * Whether the message is an automatically generated map entry type for the + * maps field. + * + * For maps fields: + * map map_field = 1; + * The parsed descriptor looks like: + * message MapFieldEntry { + * option map_entry = true; + * optional KeyType key = 1; + * optional ValueType value = 2; + * } + * repeated MapFieldEntry map_field = 1; + * + * Implementations may choose not to generate the map_entry=true message, but + * use a native map in the target language to hold the keys and values. + * The reflection APIs in such implementations still need to work as + * if the field is a repeated message field. + * + * @generated from protobuf field: optional bool map_entry = 7; + */ + mapEntry?: boolean; + /** + * Enable the legacy handling of JSON field name conflicts. This lowercases + * and strips underscored from the fields before comparison in proto3 only. + * The new behavior takes `json_name` into account and applies to proto2 as + * well. + * + * This should only be used as a temporary measure against broken builds due + * to the change in behavior for JSON field name conflicts. + * + * TODO(b/261750190) This is legacy behavior we plan to remove once downstream + * teams have had time to migrate. + * + * @deprecated + * @generated from protobuf field: optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true]; + */ + deprecatedLegacyJsonFieldConflicts?: boolean; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf message google.protobuf.FieldOptions + */ +export interface FieldOptions { + /** + * The ctype option instructs the C++ code generator to use a different + * representation of the field than it normally would. See the specific + * options below. This option is not yet implemented in the open source + * release -- sorry, we'll try to include it in a future version! + * + * @generated from protobuf field: optional google.protobuf.FieldOptions.CType ctype = 1; + */ + ctype?: FieldOptions_CType; + /** + * The packed option can be enabled for repeated primitive fields to enable + * a more efficient representation on the wire. Rather than repeatedly + * writing the tag and type for each element, the entire array is encoded as + * a single length-delimited blob. In proto3, only explicit setting it to + * false will avoid using packed encoding. + * + * @generated from protobuf field: optional bool packed = 2; + */ + packed?: boolean; + /** + * The jstype option determines the JavaScript type used for values of the + * field. The option is permitted only for 64 bit integral and fixed types + * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + * is represented as JavaScript string, which avoids loss of precision that + * can happen when a large value is converted to a floating point JavaScript. + * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + * use the JavaScript "number" type. The behavior of the default option + * JS_NORMAL is implementation dependent. + * + * This option is an enum to permit additional types to be added, e.g. + * goog.math.Integer. + * + * @generated from protobuf field: optional google.protobuf.FieldOptions.JSType jstype = 6; + */ + jstype?: FieldOptions_JSType; + /** + * Should this field be parsed lazily? Lazy applies only to message-type + * fields. It means that when the outer message is initially parsed, the + * inner message's contents will not be parsed but instead stored in encoded + * form. The inner message will actually be parsed when it is first accessed. + * + * This is only a hint. Implementations are free to choose whether to use + * eager or lazy parsing regardless of the value of this option. However, + * setting this option true suggests that the protocol author believes that + * using lazy parsing on this field is worth the additional bookkeeping + * overhead typically needed to implement it. + * + * This option does not affect the public interface of any generated code; + * all method signatures remain the same. Furthermore, thread-safety of the + * interface is not affected by this option; const methods remain safe to + * call from multiple threads concurrently, while non-const methods continue + * to require exclusive access. + * + * Note that implementations may choose not to check required fields within + * a lazy sub-message. That is, calling IsInitialized() on the outer message + * may return true even if the inner message has missing required fields. + * This is necessary because otherwise the inner message would have to be + * parsed in order to perform the check, defeating the purpose of lazy + * parsing. An implementation which chooses not to check required fields + * must be consistent about it. That is, for any particular sub-message, the + * implementation must either *always* check its required fields, or *never* + * check its required fields, regardless of whether or not the message has + * been parsed. + * + * As of May 2022, lazy verifies the contents of the byte stream during + * parsing. An invalid byte stream will cause the overall parsing to fail. + * + * @generated from protobuf field: optional bool lazy = 5; + */ + lazy?: boolean; + /** + * unverified_lazy does no correctness checks on the byte stream. This should + * only be used where lazy with verification is prohibitive for performance + * reasons. + * + * @generated from protobuf field: optional bool unverified_lazy = 15; + */ + unverifiedLazy?: boolean; + /** + * Is this field deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for accessors, or it will be completely ignored; in the very least, this + * is a formalization for deprecating fields. + * + * @generated from protobuf field: optional bool deprecated = 3; + */ + deprecated?: boolean; + /** + * For Google-internal migration only. Do not use. + * + * @generated from protobuf field: optional bool weak = 10; + */ + weak?: boolean; + /** + * Indicate that the field value should not be printed out when using debug + * formats, e.g. when the field contains sensitive credentials. + * + * @generated from protobuf field: optional bool debug_redact = 16; + */ + debugRedact?: boolean; + /** + * @generated from protobuf field: optional google.protobuf.FieldOptions.OptionRetention retention = 17; + */ + retention?: FieldOptions_OptionRetention; + /** + * @generated from protobuf field: optional google.protobuf.FieldOptions.OptionTargetType target = 18; + */ + target?: FieldOptions_OptionTargetType; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf enum google.protobuf.FieldOptions.CType + */ +export enum FieldOptions_CType { + /** + * Default mode. + * + * @generated from protobuf enum value: STRING = 0; + */ + STRING = 0, + /** + * @generated from protobuf enum value: CORD = 1; + */ + CORD = 1, + /** + * @generated from protobuf enum value: STRING_PIECE = 2; + */ + STRING_PIECE = 2 +} +/** + * @generated from protobuf enum google.protobuf.FieldOptions.JSType + */ +export enum FieldOptions_JSType { + /** + * Use the default type. + * + * @generated from protobuf enum value: JS_NORMAL = 0; + */ + JS_NORMAL = 0, + /** + * Use JavaScript strings. + * + * @generated from protobuf enum value: JS_STRING = 1; + */ + JS_STRING = 1, + /** + * Use JavaScript numbers. + * + * @generated from protobuf enum value: JS_NUMBER = 2; + */ + JS_NUMBER = 2 +} +/** + * If set to RETENTION_SOURCE, the option will be omitted from the binary. + * Note: as of January 2023, support for this is in progress and does not yet + * have an effect (b/264593489). + * + * @generated from protobuf enum google.protobuf.FieldOptions.OptionRetention + */ +export enum FieldOptions_OptionRetention { + /** + * @generated from protobuf enum value: RETENTION_UNKNOWN = 0; + */ + RETENTION_UNKNOWN = 0, + /** + * @generated from protobuf enum value: RETENTION_RUNTIME = 1; + */ + RETENTION_RUNTIME = 1, + /** + * @generated from protobuf enum value: RETENTION_SOURCE = 2; + */ + RETENTION_SOURCE = 2 +} +/** + * This indicates the types of entities that the field may apply to when used + * as an option. If it is unset, then the field may be freely used as an + * option on any kind of entity. Note: as of January 2023, support for this is + * in progress and does not yet have an effect (b/264593489). + * + * @generated from protobuf enum google.protobuf.FieldOptions.OptionTargetType + */ +export enum FieldOptions_OptionTargetType { + /** + * @generated from protobuf enum value: TARGET_TYPE_UNKNOWN = 0; + */ + TARGET_TYPE_UNKNOWN = 0, + /** + * @generated from protobuf enum value: TARGET_TYPE_FILE = 1; + */ + TARGET_TYPE_FILE = 1, + /** + * @generated from protobuf enum value: TARGET_TYPE_EXTENSION_RANGE = 2; + */ + TARGET_TYPE_EXTENSION_RANGE = 2, + /** + * @generated from protobuf enum value: TARGET_TYPE_MESSAGE = 3; + */ + TARGET_TYPE_MESSAGE = 3, + /** + * @generated from protobuf enum value: TARGET_TYPE_FIELD = 4; + */ + TARGET_TYPE_FIELD = 4, + /** + * @generated from protobuf enum value: TARGET_TYPE_ONEOF = 5; + */ + TARGET_TYPE_ONEOF = 5, + /** + * @generated from protobuf enum value: TARGET_TYPE_ENUM = 6; + */ + TARGET_TYPE_ENUM = 6, + /** + * @generated from protobuf enum value: TARGET_TYPE_ENUM_ENTRY = 7; + */ + TARGET_TYPE_ENUM_ENTRY = 7, + /** + * @generated from protobuf enum value: TARGET_TYPE_SERVICE = 8; + */ + TARGET_TYPE_SERVICE = 8, + /** + * @generated from protobuf enum value: TARGET_TYPE_METHOD = 9; + */ + TARGET_TYPE_METHOD = 9 +} +/** + * @generated from protobuf message google.protobuf.OneofOptions + */ +export interface OneofOptions { + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf message google.protobuf.EnumOptions + */ +export interface EnumOptions { + /** + * Set this option to true to allow mapping different tag names to the same + * value. + * + * @generated from protobuf field: optional bool allow_alias = 2; + */ + allowAlias?: boolean; + /** + * Is this enum deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum, or it will be completely ignored; in the very least, this + * is a formalization for deprecating enums. + * + * @generated from protobuf field: optional bool deprecated = 3; + */ + deprecated?: boolean; + /** + * Enable the legacy handling of JSON field name conflicts. This lowercases + * and strips underscored from the fields before comparison in proto3 only. + * The new behavior takes `json_name` into account and applies to proto2 as + * well. + * TODO(b/261750190) Remove this legacy behavior once downstream teams have + * had time to migrate. + * + * @deprecated + * @generated from protobuf field: optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true]; + */ + deprecatedLegacyJsonFieldConflicts?: boolean; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf message google.protobuf.EnumValueOptions + */ +export interface EnumValueOptions { + /** + * Is this enum value deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum value, or it will be completely ignored; in the very least, + * this is a formalization for deprecating enum values. + * + * @generated from protobuf field: optional bool deprecated = 1; + */ + deprecated?: boolean; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf message google.protobuf.ServiceOptions + */ +export interface ServiceOptions { + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + /** + * Is this service deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the service, or it will be completely ignored; in the very least, + * this is a formalization for deprecating services. + * + * @generated from protobuf field: optional bool deprecated = 33; + */ + deprecated?: boolean; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * @generated from protobuf message google.protobuf.MethodOptions + */ +export interface MethodOptions { + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + /** + * Is this method deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the method, or it will be completely ignored; in the very least, + * this is a formalization for deprecating methods. + * + * @generated from protobuf field: optional bool deprecated = 33; + */ + deprecated?: boolean; + /** + * @generated from protobuf field: optional google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34; + */ + idempotencyLevel?: MethodOptions_IdempotencyLevel; + /** + * The parser stores options it doesn't recognize here. See above. + * + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + uninterpretedOption: UninterpretedOption[]; +} +/** + * Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + * or neither? HTTP based RPC implementation may choose GET verb for safe + * methods, and PUT verb for idempotent methods instead of the default POST. + * + * @generated from protobuf enum google.protobuf.MethodOptions.IdempotencyLevel + */ +export enum MethodOptions_IdempotencyLevel { + /** + * @generated from protobuf enum value: IDEMPOTENCY_UNKNOWN = 0; + */ + IDEMPOTENCY_UNKNOWN = 0, + /** + * implies idempotent + * + * @generated from protobuf enum value: NO_SIDE_EFFECTS = 1; + */ + NO_SIDE_EFFECTS = 1, + /** + * idempotent, but may have side effects + * + * @generated from protobuf enum value: IDEMPOTENT = 2; + */ + IDEMPOTENT = 2 +} +/** + * A message representing a option the parser does not recognize. This only + * appears in options protos created by the compiler::Parser class. + * DescriptorPool resolves these when building Descriptor objects. Therefore, + * options protos in descriptor objects (e.g. returned by Descriptor::options(), + * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions + * in them. + * + * @generated from protobuf message google.protobuf.UninterpretedOption + */ +export interface UninterpretedOption { + /** + * @generated from protobuf field: repeated google.protobuf.UninterpretedOption.NamePart name = 2; + */ + name: UninterpretedOption_NamePart[]; + /** + * The value of the uninterpreted option, in whatever type the tokenizer + * identified it as during parsing. Exactly one of these should be set. + * + * @generated from protobuf field: optional string identifier_value = 3; + */ + identifierValue?: string; + /** + * @generated from protobuf field: optional uint64 positive_int_value = 4; + */ + positiveIntValue?: string; + /** + * @generated from protobuf field: optional int64 negative_int_value = 5; + */ + negativeIntValue?: string; + /** + * @generated from protobuf field: optional double double_value = 6; + */ + doubleValue?: number; + /** + * @generated from protobuf field: optional bytes string_value = 7; + */ + stringValue?: Uint8Array; + /** + * @generated from protobuf field: optional string aggregate_value = 8; + */ + aggregateValue?: string; +} +/** + * The name of the uninterpreted option. Each string represents a segment in + * a dot-separated name. is_extension is true iff a segment represents an + * extension (denoted with parentheses in options specs in .proto files). + * E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents + * "foo.(bar.baz).moo". + * + * @generated from protobuf message google.protobuf.UninterpretedOption.NamePart + */ +export interface UninterpretedOption_NamePart { + /** + * @generated from protobuf field: string name_part = 1; + */ + namePart: string; + /** + * @generated from protobuf field: bool is_extension = 2; + */ + isExtension: boolean; +} +// =================================================================== +// Optional source code info + +/** + * Encapsulates information about the original source file from which a + * FileDescriptorProto was generated. + * + * @generated from protobuf message google.protobuf.SourceCodeInfo + */ +export interface SourceCodeInfo { + /** + * A Location identifies a piece of source code in a .proto file which + * corresponds to a particular definition. This information is intended + * to be useful to IDEs, code indexers, documentation generators, and similar + * tools. + * + * For example, say we have a file like: + * message Foo { + * optional string foo = 1; + * } + * Let's look at just the field definition: + * optional string foo = 1; + * ^ ^^ ^^ ^ ^^^ + * a bc de f ghi + * We have the following locations: + * span path represents + * [a,i) [ 4, 0, 2, 0 ] The whole field definition. + * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + * + * Notes: + * - A location may refer to a repeated field itself (i.e. not to any + * particular index within it). This is used whenever a set of elements are + * logically enclosed in a single code segment. For example, an entire + * extend block (possibly containing multiple extension definitions) will + * have an outer location whose path refers to the "extensions" repeated + * field without an index. + * - Multiple locations may have the same path. This happens when a single + * logical declaration is spread out across multiple places. The most + * obvious example is the "extend" block again -- there may be multiple + * extend blocks in the same scope, each of which will have the same path. + * - A location's span is not always a subset of its parent's span. For + * example, the "extendee" of an extension declaration appears at the + * beginning of the "extend" block and is shared by all extensions within + * the block. + * - Just because a location's span is a subset of some other location's span + * does not mean that it is a descendant. For example, a "group" defines + * both a type and a field in a single declaration. Thus, the locations + * corresponding to the type and field and their components will overlap. + * - Code which tries to interpret locations should probably be designed to + * ignore those that it doesn't understand, as more types of locations could + * be recorded in the future. + * + * @generated from protobuf field: repeated google.protobuf.SourceCodeInfo.Location location = 1; + */ + location: SourceCodeInfo_Location[]; +} +/** + * @generated from protobuf message google.protobuf.SourceCodeInfo.Location + */ +export interface SourceCodeInfo_Location { + /** + * Identifies which part of the FileDescriptorProto was defined at this + * location. + * + * Each element is a field number or an index. They form a path from + * the root FileDescriptorProto to the place where the definition occurs. + * For example, this path: + * [ 4, 3, 2, 7, 1 ] + * refers to: + * file.message_type(3) // 4, 3 + * .field(7) // 2, 7 + * .name() // 1 + * This is because FileDescriptorProto.message_type has field number 4: + * repeated DescriptorProto message_type = 4; + * and DescriptorProto.field has field number 2: + * repeated FieldDescriptorProto field = 2; + * and FieldDescriptorProto.name has field number 1: + * optional string name = 1; + * + * Thus, the above path gives the location of a field name. If we removed + * the last element: + * [ 4, 3, 2, 7 ] + * this path refers to the whole field declaration (from the beginning + * of the label to the terminating semicolon). + * + * @generated from protobuf field: repeated int32 path = 1 [packed = true]; + */ + path: number[]; + /** + * Always has exactly three or four elements: start line, start column, + * end line (optional, otherwise assumed same as start line), end column. + * These are packed into a single field for efficiency. Note that line + * and column numbers are zero-based -- typically you will want to add + * 1 to each before displaying to a user. + * + * @generated from protobuf field: repeated int32 span = 2 [packed = true]; + */ + span: number[]; + /** + * If this SourceCodeInfo represents a complete declaration, these are any + * comments appearing before and after the declaration which appear to be + * attached to the declaration. + * + * A series of line comments appearing on consecutive lines, with no other + * tokens appearing on those lines, will be treated as a single comment. + * + * leading_detached_comments will keep paragraphs of comments that appear + * before (but not connected to) the current element. Each paragraph, + * separated by empty lines, will be one comment element in the repeated + * field. + * + * Only the comment content is provided; comment markers (e.g. //) are + * stripped out. For block comments, leading whitespace and an asterisk + * will be stripped from the beginning of each line other than the first. + * Newlines are included in the output. + * + * Examples: + * + * optional int32 foo = 1; // Comment attached to foo. + * // Comment attached to bar. + * optional int32 bar = 2; + * + * optional string baz = 3; + * // Comment attached to baz. + * // Another line attached to baz. + * + * // Comment attached to moo. + * // + * // Another line attached to moo. + * optional double moo = 4; + * + * // Detached comment for corge. This is not leading or trailing comments + * // to moo or corge because there are blank lines separating it from + * // both. + * + * // Detached comment for corge paragraph 2. + * + * optional string corge = 5; + * /* Block comment attached + * * to corge. Leading asterisks + * * will be removed. *\/ + * /* Block comment attached to + * * grault. *\/ + * optional int32 grault = 6; + * + * // ignored detached comments. + * + * @generated from protobuf field: optional string leading_comments = 3; + */ + leadingComments?: string; + /** + * @generated from protobuf field: optional string trailing_comments = 4; + */ + trailingComments?: string; + /** + * @generated from protobuf field: repeated string leading_detached_comments = 6; + */ + leadingDetachedComments: string[]; +} +/** + * Describes the relationship between generated code and its original source + * file. A GeneratedCodeInfo message is associated with only one generated + * source file, but may contain references to different source .proto files. + * + * @generated from protobuf message google.protobuf.GeneratedCodeInfo + */ +export interface GeneratedCodeInfo { + /** + * An Annotation connects some span of text in generated code to an element + * of its generating .proto file. + * + * @generated from protobuf field: repeated google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; + */ + annotation: GeneratedCodeInfo_Annotation[]; +} +/** + * @generated from protobuf message google.protobuf.GeneratedCodeInfo.Annotation + */ +export interface GeneratedCodeInfo_Annotation { + /** + * Identifies the element in the original source .proto file. This field + * is formatted the same as SourceCodeInfo.Location.path. + * + * @generated from protobuf field: repeated int32 path = 1 [packed = true]; + */ + path: number[]; + /** + * Identifies the filesystem path to the original source .proto. + * + * @generated from protobuf field: optional string source_file = 2; + */ + sourceFile?: string; + /** + * Identifies the starting offset in bytes in the generated code + * that relates to the identified object. + * + * @generated from protobuf field: optional int32 begin = 3; + */ + begin?: number; + /** + * Identifies the ending offset in bytes in the generated code that + * relates to the identified object. The end offset should be one past + * the last relevant byte (so the length of the text = end - begin). + * + * @generated from protobuf field: optional int32 end = 4; + */ + end?: number; + /** + * @generated from protobuf field: optional google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic = 5; + */ + semantic?: GeneratedCodeInfo_Annotation_Semantic; +} +/** + * Represents the identified object's effect on the element in the original + * .proto file. + * + * @generated from protobuf enum google.protobuf.GeneratedCodeInfo.Annotation.Semantic + */ +export enum GeneratedCodeInfo_Annotation_Semantic { + /** + * There is no effect or the effect is indescribable. + * + * @generated from protobuf enum value: NONE = 0; + */ + NONE = 0, + /** + * The element is set or otherwise mutated. + * + * @generated from protobuf enum value: SET = 1; + */ + SET = 1, + /** + * An alias to the element is returned. + * + * @generated from protobuf enum value: ALIAS = 2; + */ + ALIAS = 2 +} +// @generated message type with reflection information, may provide speed optimized methods +class FileDescriptorSet$Type extends MessageType { + constructor() { + super("google.protobuf.FileDescriptorSet", [ + { no: 1, name: "file", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => FileDescriptorProto } + ]); + } + create(value?: PartialMessage): FileDescriptorSet { + const message = { file: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FileDescriptorSet): FileDescriptorSet { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.FileDescriptorProto file */ 1: + message.file.push(FileDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FileDescriptorSet, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.FileDescriptorProto file = 1; */ + for (let i = 0; i < message.file.length; i++) + FileDescriptorProto.internalBinaryWrite(message.file[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.FileDescriptorSet + */ +export const FileDescriptorSet = new FileDescriptorSet$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FileDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.FileDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "package", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "dependency", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 10, name: "public_dependency", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 11, name: "weak_dependency", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "message_type", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DescriptorProto }, + { no: 5, name: "enum_type", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EnumDescriptorProto }, + { no: 6, name: "service", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ServiceDescriptorProto }, + { no: 7, name: "extension", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => FieldDescriptorProto }, + { no: 8, name: "options", kind: "message", T: () => FileOptions }, + { no: 9, name: "source_code_info", kind: "message", T: () => SourceCodeInfo }, + { no: 12, name: "syntax", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 13, name: "edition", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): FileDescriptorProto { + const message = { dependency: [], publicDependency: [], weakDependency: [], messageType: [], enumType: [], service: [], extension: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FileDescriptorProto): FileDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* optional string package */ 2: + message.package = reader.string(); + break; + case /* repeated string dependency */ 3: + message.dependency.push(reader.string()); + break; + case /* repeated int32 public_dependency */ 10: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.publicDependency.push(reader.int32()); + else + message.publicDependency.push(reader.int32()); + break; + case /* repeated int32 weak_dependency */ 11: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.weakDependency.push(reader.int32()); + else + message.weakDependency.push(reader.int32()); + break; + case /* repeated google.protobuf.DescriptorProto message_type */ 4: + message.messageType.push(DescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.EnumDescriptorProto enum_type */ 5: + message.enumType.push(EnumDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.ServiceDescriptorProto service */ 6: + message.service.push(ServiceDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.FieldDescriptorProto extension */ 7: + message.extension.push(FieldDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* optional google.protobuf.FileOptions options */ 8: + message.options = FileOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + case /* optional google.protobuf.SourceCodeInfo source_code_info */ 9: + message.sourceCodeInfo = SourceCodeInfo.internalBinaryRead(reader, reader.uint32(), options, message.sourceCodeInfo); + break; + case /* optional string syntax */ 12: + message.syntax = reader.string(); + break; + case /* optional string edition */ 13: + message.edition = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FileDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* optional string package = 2; */ + if (message.package !== undefined) + writer.tag(2, WireType.LengthDelimited).string(message.package); + /* repeated string dependency = 3; */ + for (let i = 0; i < message.dependency.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.dependency[i]); + /* repeated int32 public_dependency = 10; */ + for (let i = 0; i < message.publicDependency.length; i++) + writer.tag(10, WireType.Varint).int32(message.publicDependency[i]); + /* repeated int32 weak_dependency = 11; */ + for (let i = 0; i < message.weakDependency.length; i++) + writer.tag(11, WireType.Varint).int32(message.weakDependency[i]); + /* repeated google.protobuf.DescriptorProto message_type = 4; */ + for (let i = 0; i < message.messageType.length; i++) + DescriptorProto.internalBinaryWrite(message.messageType[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.EnumDescriptorProto enum_type = 5; */ + for (let i = 0; i < message.enumType.length; i++) + EnumDescriptorProto.internalBinaryWrite(message.enumType[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.ServiceDescriptorProto service = 6; */ + for (let i = 0; i < message.service.length; i++) + ServiceDescriptorProto.internalBinaryWrite(message.service[i], writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.FieldDescriptorProto extension = 7; */ + for (let i = 0; i < message.extension.length; i++) + FieldDescriptorProto.internalBinaryWrite(message.extension[i], writer.tag(7, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.FileOptions options = 8; */ + if (message.options) + FileOptions.internalBinaryWrite(message.options, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.SourceCodeInfo source_code_info = 9; */ + if (message.sourceCodeInfo) + SourceCodeInfo.internalBinaryWrite(message.sourceCodeInfo, writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + /* optional string syntax = 12; */ + if (message.syntax !== undefined) + writer.tag(12, WireType.LengthDelimited).string(message.syntax); + /* optional string edition = 13; */ + if (message.edition !== undefined) + writer.tag(13, WireType.LengthDelimited).string(message.edition); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.FileDescriptorProto + */ +export const FileDescriptorProto = new FileDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.DescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "field", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => FieldDescriptorProto }, + { no: 6, name: "extension", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => FieldDescriptorProto }, + { no: 3, name: "nested_type", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DescriptorProto }, + { no: 4, name: "enum_type", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EnumDescriptorProto }, + { no: 5, name: "extension_range", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DescriptorProto_ExtensionRange }, + { no: 8, name: "oneof_decl", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => OneofDescriptorProto }, + { no: 7, name: "options", kind: "message", T: () => MessageOptions }, + { no: 9, name: "reserved_range", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DescriptorProto_ReservedRange }, + { no: 10, name: "reserved_name", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): DescriptorProto { + const message = { field: [], extension: [], nestedType: [], enumType: [], extensionRange: [], oneofDecl: [], reservedRange: [], reservedName: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DescriptorProto): DescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* repeated google.protobuf.FieldDescriptorProto field */ 2: + message.field.push(FieldDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.FieldDescriptorProto extension */ 6: + message.extension.push(FieldDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.DescriptorProto nested_type */ 3: + message.nestedType.push(DescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.EnumDescriptorProto enum_type */ 4: + message.enumType.push(EnumDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.DescriptorProto.ExtensionRange extension_range */ 5: + message.extensionRange.push(DescriptorProto_ExtensionRange.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.OneofDescriptorProto oneof_decl */ 8: + message.oneofDecl.push(OneofDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* optional google.protobuf.MessageOptions options */ 7: + message.options = MessageOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + case /* repeated google.protobuf.DescriptorProto.ReservedRange reserved_range */ 9: + message.reservedRange.push(DescriptorProto_ReservedRange.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated string reserved_name */ 10: + message.reservedName.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* repeated google.protobuf.FieldDescriptorProto field = 2; */ + for (let i = 0; i < message.field.length; i++) + FieldDescriptorProto.internalBinaryWrite(message.field[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.FieldDescriptorProto extension = 6; */ + for (let i = 0; i < message.extension.length; i++) + FieldDescriptorProto.internalBinaryWrite(message.extension[i], writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.DescriptorProto nested_type = 3; */ + for (let i = 0; i < message.nestedType.length; i++) + DescriptorProto.internalBinaryWrite(message.nestedType[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.EnumDescriptorProto enum_type = 4; */ + for (let i = 0; i < message.enumType.length; i++) + EnumDescriptorProto.internalBinaryWrite(message.enumType[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; */ + for (let i = 0; i < message.extensionRange.length; i++) + DescriptorProto_ExtensionRange.internalBinaryWrite(message.extensionRange[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.OneofDescriptorProto oneof_decl = 8; */ + for (let i = 0; i < message.oneofDecl.length; i++) + OneofDescriptorProto.internalBinaryWrite(message.oneofDecl[i], writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.MessageOptions options = 7; */ + if (message.options) + MessageOptions.internalBinaryWrite(message.options, writer.tag(7, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; */ + for (let i = 0; i < message.reservedRange.length; i++) + DescriptorProto_ReservedRange.internalBinaryWrite(message.reservedRange[i], writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + /* repeated string reserved_name = 10; */ + for (let i = 0; i < message.reservedName.length; i++) + writer.tag(10, WireType.LengthDelimited).string(message.reservedName[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.DescriptorProto + */ +export const DescriptorProto = new DescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DescriptorProto_ExtensionRange$Type extends MessageType { + constructor() { + super("google.protobuf.DescriptorProto.ExtensionRange", [ + { no: 1, name: "start", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "end", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "options", kind: "message", T: () => ExtensionRangeOptions } + ]); + } + create(value?: PartialMessage): DescriptorProto_ExtensionRange { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DescriptorProto_ExtensionRange): DescriptorProto_ExtensionRange { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int32 start */ 1: + message.start = reader.int32(); + break; + case /* optional int32 end */ 2: + message.end = reader.int32(); + break; + case /* optional google.protobuf.ExtensionRangeOptions options */ 3: + message.options = ExtensionRangeOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DescriptorProto_ExtensionRange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int32 start = 1; */ + if (message.start !== undefined) + writer.tag(1, WireType.Varint).int32(message.start); + /* optional int32 end = 2; */ + if (message.end !== undefined) + writer.tag(2, WireType.Varint).int32(message.end); + /* optional google.protobuf.ExtensionRangeOptions options = 3; */ + if (message.options) + ExtensionRangeOptions.internalBinaryWrite(message.options, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.DescriptorProto.ExtensionRange + */ +export const DescriptorProto_ExtensionRange = new DescriptorProto_ExtensionRange$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DescriptorProto_ReservedRange$Type extends MessageType { + constructor() { + super("google.protobuf.DescriptorProto.ReservedRange", [ + { no: 1, name: "start", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "end", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): DescriptorProto_ReservedRange { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DescriptorProto_ReservedRange): DescriptorProto_ReservedRange { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int32 start */ 1: + message.start = reader.int32(); + break; + case /* optional int32 end */ 2: + message.end = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DescriptorProto_ReservedRange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int32 start = 1; */ + if (message.start !== undefined) + writer.tag(1, WireType.Varint).int32(message.start); + /* optional int32 end = 2; */ + if (message.end !== undefined) + writer.tag(2, WireType.Varint).int32(message.end); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.DescriptorProto.ReservedRange + */ +export const DescriptorProto_ReservedRange = new DescriptorProto_ReservedRange$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ExtensionRangeOptions$Type extends MessageType { + constructor() { + super("google.protobuf.ExtensionRangeOptions", [ + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): ExtensionRangeOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ExtensionRangeOptions): ExtensionRangeOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ExtensionRangeOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.ExtensionRangeOptions + */ +export const ExtensionRangeOptions = new ExtensionRangeOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FieldDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.FieldDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "number", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "label", kind: "enum", opt: true, T: () => ["google.protobuf.FieldDescriptorProto.Label", FieldDescriptorProto_Label, "LABEL_"] }, + { no: 5, name: "type", kind: "enum", opt: true, T: () => ["google.protobuf.FieldDescriptorProto.Type", FieldDescriptorProto_Type, "TYPE_"] }, + { no: 6, name: "type_name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "extendee", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "default_value", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 9, name: "oneof_index", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 10, name: "json_name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 8, name: "options", kind: "message", T: () => FieldOptions }, + { no: 17, name: "proto3_optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): FieldDescriptorProto { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FieldDescriptorProto): FieldDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* optional int32 number */ 3: + message.number = reader.int32(); + break; + case /* optional google.protobuf.FieldDescriptorProto.Label label */ 4: + message.label = reader.int32(); + break; + case /* optional google.protobuf.FieldDescriptorProto.Type type */ 5: + message.type = reader.int32(); + break; + case /* optional string type_name */ 6: + message.typeName = reader.string(); + break; + case /* optional string extendee */ 2: + message.extendee = reader.string(); + break; + case /* optional string default_value */ 7: + message.defaultValue = reader.string(); + break; + case /* optional int32 oneof_index */ 9: + message.oneofIndex = reader.int32(); + break; + case /* optional string json_name */ 10: + message.jsonName = reader.string(); + break; + case /* optional google.protobuf.FieldOptions options */ 8: + message.options = FieldOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + case /* optional bool proto3_optional */ 17: + message.proto3Optional = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FieldDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* optional int32 number = 3; */ + if (message.number !== undefined) + writer.tag(3, WireType.Varint).int32(message.number); + /* optional google.protobuf.FieldDescriptorProto.Label label = 4; */ + if (message.label !== undefined) + writer.tag(4, WireType.Varint).int32(message.label); + /* optional google.protobuf.FieldDescriptorProto.Type type = 5; */ + if (message.type !== undefined) + writer.tag(5, WireType.Varint).int32(message.type); + /* optional string type_name = 6; */ + if (message.typeName !== undefined) + writer.tag(6, WireType.LengthDelimited).string(message.typeName); + /* optional string extendee = 2; */ + if (message.extendee !== undefined) + writer.tag(2, WireType.LengthDelimited).string(message.extendee); + /* optional string default_value = 7; */ + if (message.defaultValue !== undefined) + writer.tag(7, WireType.LengthDelimited).string(message.defaultValue); + /* optional int32 oneof_index = 9; */ + if (message.oneofIndex !== undefined) + writer.tag(9, WireType.Varint).int32(message.oneofIndex); + /* optional string json_name = 10; */ + if (message.jsonName !== undefined) + writer.tag(10, WireType.LengthDelimited).string(message.jsonName); + /* optional google.protobuf.FieldOptions options = 8; */ + if (message.options) + FieldOptions.internalBinaryWrite(message.options, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* optional bool proto3_optional = 17; */ + if (message.proto3Optional !== undefined) + writer.tag(17, WireType.Varint).bool(message.proto3Optional); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.FieldDescriptorProto + */ +export const FieldDescriptorProto = new FieldDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class OneofDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.OneofDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "options", kind: "message", T: () => OneofOptions } + ]); + } + create(value?: PartialMessage): OneofDescriptorProto { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: OneofDescriptorProto): OneofDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* optional google.protobuf.OneofOptions options */ 2: + message.options = OneofOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: OneofDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* optional google.protobuf.OneofOptions options = 2; */ + if (message.options) + OneofOptions.internalBinaryWrite(message.options, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.OneofDescriptorProto + */ +export const OneofDescriptorProto = new OneofDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.EnumDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "value", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EnumValueDescriptorProto }, + { no: 3, name: "options", kind: "message", T: () => EnumOptions }, + { no: 4, name: "reserved_range", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EnumDescriptorProto_EnumReservedRange }, + { no: 5, name: "reserved_name", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): EnumDescriptorProto { + const message = { value: [], reservedRange: [], reservedName: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumDescriptorProto): EnumDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* repeated google.protobuf.EnumValueDescriptorProto value */ 2: + message.value.push(EnumValueDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* optional google.protobuf.EnumOptions options */ 3: + message.options = EnumOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + case /* repeated google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range */ 4: + message.reservedRange.push(EnumDescriptorProto_EnumReservedRange.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated string reserved_name */ 5: + message.reservedName.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* repeated google.protobuf.EnumValueDescriptorProto value = 2; */ + for (let i = 0; i < message.value.length; i++) + EnumValueDescriptorProto.internalBinaryWrite(message.value[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.EnumOptions options = 3; */ + if (message.options) + EnumOptions.internalBinaryWrite(message.options, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; */ + for (let i = 0; i < message.reservedRange.length; i++) + EnumDescriptorProto_EnumReservedRange.internalBinaryWrite(message.reservedRange[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* repeated string reserved_name = 5; */ + for (let i = 0; i < message.reservedName.length; i++) + writer.tag(5, WireType.LengthDelimited).string(message.reservedName[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.EnumDescriptorProto + */ +export const EnumDescriptorProto = new EnumDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumDescriptorProto_EnumReservedRange$Type extends MessageType { + constructor() { + super("google.protobuf.EnumDescriptorProto.EnumReservedRange", [ + { no: 1, name: "start", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "end", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): EnumDescriptorProto_EnumReservedRange { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumDescriptorProto_EnumReservedRange): EnumDescriptorProto_EnumReservedRange { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int32 start */ 1: + message.start = reader.int32(); + break; + case /* optional int32 end */ 2: + message.end = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumDescriptorProto_EnumReservedRange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int32 start = 1; */ + if (message.start !== undefined) + writer.tag(1, WireType.Varint).int32(message.start); + /* optional int32 end = 2; */ + if (message.end !== undefined) + writer.tag(2, WireType.Varint).int32(message.end); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.EnumDescriptorProto.EnumReservedRange + */ +export const EnumDescriptorProto_EnumReservedRange = new EnumDescriptorProto_EnumReservedRange$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumValueDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.EnumValueDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "number", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "options", kind: "message", T: () => EnumValueOptions } + ]); + } + create(value?: PartialMessage): EnumValueDescriptorProto { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumValueDescriptorProto): EnumValueDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* optional int32 number */ 2: + message.number = reader.int32(); + break; + case /* optional google.protobuf.EnumValueOptions options */ 3: + message.options = EnumValueOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumValueDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* optional int32 number = 2; */ + if (message.number !== undefined) + writer.tag(2, WireType.Varint).int32(message.number); + /* optional google.protobuf.EnumValueOptions options = 3; */ + if (message.options) + EnumValueOptions.internalBinaryWrite(message.options, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.EnumValueDescriptorProto + */ +export const EnumValueDescriptorProto = new EnumValueDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ServiceDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.ServiceDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "method", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => MethodDescriptorProto }, + { no: 3, name: "options", kind: "message", T: () => ServiceOptions } + ]); + } + create(value?: PartialMessage): ServiceDescriptorProto { + const message = { method: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ServiceDescriptorProto): ServiceDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* repeated google.protobuf.MethodDescriptorProto method */ 2: + message.method.push(MethodDescriptorProto.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* optional google.protobuf.ServiceOptions options */ 3: + message.options = ServiceOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ServiceDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* repeated google.protobuf.MethodDescriptorProto method = 2; */ + for (let i = 0; i < message.method.length; i++) + MethodDescriptorProto.internalBinaryWrite(message.method[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.ServiceOptions options = 3; */ + if (message.options) + ServiceOptions.internalBinaryWrite(message.options, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.ServiceDescriptorProto + */ +export const ServiceDescriptorProto = new ServiceDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MethodDescriptorProto$Type extends MessageType { + constructor() { + super("google.protobuf.MethodDescriptorProto", [ + { no: 1, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "input_type", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "output_type", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "options", kind: "message", T: () => MethodOptions }, + { no: 5, name: "client_streaming", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "server_streaming", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): MethodDescriptorProto { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MethodDescriptorProto): MethodDescriptorProto { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string name */ 1: + message.name = reader.string(); + break; + case /* optional string input_type */ 2: + message.inputType = reader.string(); + break; + case /* optional string output_type */ 3: + message.outputType = reader.string(); + break; + case /* optional google.protobuf.MethodOptions options */ 4: + message.options = MethodOptions.internalBinaryRead(reader, reader.uint32(), options, message.options); + break; + case /* optional bool client_streaming */ 5: + message.clientStreaming = reader.bool(); + break; + case /* optional bool server_streaming */ 6: + message.serverStreaming = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MethodDescriptorProto, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string name = 1; */ + if (message.name !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* optional string input_type = 2; */ + if (message.inputType !== undefined) + writer.tag(2, WireType.LengthDelimited).string(message.inputType); + /* optional string output_type = 3; */ + if (message.outputType !== undefined) + writer.tag(3, WireType.LengthDelimited).string(message.outputType); + /* optional google.protobuf.MethodOptions options = 4; */ + if (message.options) + MethodOptions.internalBinaryWrite(message.options, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* optional bool client_streaming = 5; */ + if (message.clientStreaming !== undefined) + writer.tag(5, WireType.Varint).bool(message.clientStreaming); + /* optional bool server_streaming = 6; */ + if (message.serverStreaming !== undefined) + writer.tag(6, WireType.Varint).bool(message.serverStreaming); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.MethodDescriptorProto + */ +export const MethodDescriptorProto = new MethodDescriptorProto$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FileOptions$Type extends MessageType { + constructor() { + super("google.protobuf.FileOptions", [ + { no: 1, name: "java_package", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 8, name: "java_outer_classname", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 10, name: "java_multiple_files", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 20, name: "java_generate_equals_and_hash", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 27, name: "java_string_check_utf8", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 9, name: "optimize_for", kind: "enum", opt: true, T: () => ["google.protobuf.FileOptions.OptimizeMode", FileOptions_OptimizeMode] }, + { no: 11, name: "go_package", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 16, name: "cc_generic_services", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 17, name: "java_generic_services", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 18, name: "py_generic_services", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 42, name: "php_generic_services", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 23, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 31, name: "cc_enable_arenas", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 36, name: "objc_class_prefix", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 37, name: "csharp_namespace", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 39, name: "swift_prefix", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 40, name: "php_class_prefix", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 41, name: "php_namespace", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 44, name: "php_metadata_namespace", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 45, name: "ruby_package", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): FileOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FileOptions): FileOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string java_package */ 1: + message.javaPackage = reader.string(); + break; + case /* optional string java_outer_classname */ 8: + message.javaOuterClassname = reader.string(); + break; + case /* optional bool java_multiple_files */ 10: + message.javaMultipleFiles = reader.bool(); + break; + case /* optional bool java_generate_equals_and_hash = 20 [deprecated = true];*/ 20: + message.javaGenerateEqualsAndHash = reader.bool(); + break; + case /* optional bool java_string_check_utf8 */ 27: + message.javaStringCheckUtf8 = reader.bool(); + break; + case /* optional google.protobuf.FileOptions.OptimizeMode optimize_for */ 9: + message.optimizeFor = reader.int32(); + break; + case /* optional string go_package */ 11: + message.goPackage = reader.string(); + break; + case /* optional bool cc_generic_services */ 16: + message.ccGenericServices = reader.bool(); + break; + case /* optional bool java_generic_services */ 17: + message.javaGenericServices = reader.bool(); + break; + case /* optional bool py_generic_services */ 18: + message.pyGenericServices = reader.bool(); + break; + case /* optional bool php_generic_services */ 42: + message.phpGenericServices = reader.bool(); + break; + case /* optional bool deprecated */ 23: + message.deprecated = reader.bool(); + break; + case /* optional bool cc_enable_arenas */ 31: + message.ccEnableArenas = reader.bool(); + break; + case /* optional string objc_class_prefix */ 36: + message.objcClassPrefix = reader.string(); + break; + case /* optional string csharp_namespace */ 37: + message.csharpNamespace = reader.string(); + break; + case /* optional string swift_prefix */ 39: + message.swiftPrefix = reader.string(); + break; + case /* optional string php_class_prefix */ 40: + message.phpClassPrefix = reader.string(); + break; + case /* optional string php_namespace */ 41: + message.phpNamespace = reader.string(); + break; + case /* optional string php_metadata_namespace */ 44: + message.phpMetadataNamespace = reader.string(); + break; + case /* optional string ruby_package */ 45: + message.rubyPackage = reader.string(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FileOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string java_package = 1; */ + if (message.javaPackage !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.javaPackage); + /* optional string java_outer_classname = 8; */ + if (message.javaOuterClassname !== undefined) + writer.tag(8, WireType.LengthDelimited).string(message.javaOuterClassname); + /* optional bool java_multiple_files = 10; */ + if (message.javaMultipleFiles !== undefined) + writer.tag(10, WireType.Varint).bool(message.javaMultipleFiles); + /* optional bool java_generate_equals_and_hash = 20 [deprecated = true]; */ + if (message.javaGenerateEqualsAndHash !== undefined) + writer.tag(20, WireType.Varint).bool(message.javaGenerateEqualsAndHash); + /* optional bool java_string_check_utf8 = 27; */ + if (message.javaStringCheckUtf8 !== undefined) + writer.tag(27, WireType.Varint).bool(message.javaStringCheckUtf8); + /* optional google.protobuf.FileOptions.OptimizeMode optimize_for = 9; */ + if (message.optimizeFor !== undefined) + writer.tag(9, WireType.Varint).int32(message.optimizeFor); + /* optional string go_package = 11; */ + if (message.goPackage !== undefined) + writer.tag(11, WireType.LengthDelimited).string(message.goPackage); + /* optional bool cc_generic_services = 16; */ + if (message.ccGenericServices !== undefined) + writer.tag(16, WireType.Varint).bool(message.ccGenericServices); + /* optional bool java_generic_services = 17; */ + if (message.javaGenericServices !== undefined) + writer.tag(17, WireType.Varint).bool(message.javaGenericServices); + /* optional bool py_generic_services = 18; */ + if (message.pyGenericServices !== undefined) + writer.tag(18, WireType.Varint).bool(message.pyGenericServices); + /* optional bool php_generic_services = 42; */ + if (message.phpGenericServices !== undefined) + writer.tag(42, WireType.Varint).bool(message.phpGenericServices); + /* optional bool deprecated = 23; */ + if (message.deprecated !== undefined) + writer.tag(23, WireType.Varint).bool(message.deprecated); + /* optional bool cc_enable_arenas = 31; */ + if (message.ccEnableArenas !== undefined) + writer.tag(31, WireType.Varint).bool(message.ccEnableArenas); + /* optional string objc_class_prefix = 36; */ + if (message.objcClassPrefix !== undefined) + writer.tag(36, WireType.LengthDelimited).string(message.objcClassPrefix); + /* optional string csharp_namespace = 37; */ + if (message.csharpNamespace !== undefined) + writer.tag(37, WireType.LengthDelimited).string(message.csharpNamespace); + /* optional string swift_prefix = 39; */ + if (message.swiftPrefix !== undefined) + writer.tag(39, WireType.LengthDelimited).string(message.swiftPrefix); + /* optional string php_class_prefix = 40; */ + if (message.phpClassPrefix !== undefined) + writer.tag(40, WireType.LengthDelimited).string(message.phpClassPrefix); + /* optional string php_namespace = 41; */ + if (message.phpNamespace !== undefined) + writer.tag(41, WireType.LengthDelimited).string(message.phpNamespace); + /* optional string php_metadata_namespace = 44; */ + if (message.phpMetadataNamespace !== undefined) + writer.tag(44, WireType.LengthDelimited).string(message.phpMetadataNamespace); + /* optional string ruby_package = 45; */ + if (message.rubyPackage !== undefined) + writer.tag(45, WireType.LengthDelimited).string(message.rubyPackage); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.FileOptions + */ +export const FileOptions = new FileOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MessageOptions$Type extends MessageType { + constructor() { + super("google.protobuf.MessageOptions", [ + { no: 1, name: "message_set_wire_format", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "no_standard_descriptor_accessor", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 7, name: "map_entry", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 11, name: "deprecated_legacy_json_field_conflicts", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): MessageOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MessageOptions): MessageOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool message_set_wire_format */ 1: + message.messageSetWireFormat = reader.bool(); + break; + case /* optional bool no_standard_descriptor_accessor */ 2: + message.noStandardDescriptorAccessor = reader.bool(); + break; + case /* optional bool deprecated */ 3: + message.deprecated = reader.bool(); + break; + case /* optional bool map_entry */ 7: + message.mapEntry = reader.bool(); + break; + case /* optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true];*/ 11: + message.deprecatedLegacyJsonFieldConflicts = reader.bool(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MessageOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool message_set_wire_format = 1; */ + if (message.messageSetWireFormat !== undefined) + writer.tag(1, WireType.Varint).bool(message.messageSetWireFormat); + /* optional bool no_standard_descriptor_accessor = 2; */ + if (message.noStandardDescriptorAccessor !== undefined) + writer.tag(2, WireType.Varint).bool(message.noStandardDescriptorAccessor); + /* optional bool deprecated = 3; */ + if (message.deprecated !== undefined) + writer.tag(3, WireType.Varint).bool(message.deprecated); + /* optional bool map_entry = 7; */ + if (message.mapEntry !== undefined) + writer.tag(7, WireType.Varint).bool(message.mapEntry); + /* optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true]; */ + if (message.deprecatedLegacyJsonFieldConflicts !== undefined) + writer.tag(11, WireType.Varint).bool(message.deprecatedLegacyJsonFieldConflicts); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.MessageOptions + */ +export const MessageOptions = new MessageOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FieldOptions$Type extends MessageType { + constructor() { + super("google.protobuf.FieldOptions", [ + { no: 1, name: "ctype", kind: "enum", opt: true, T: () => ["google.protobuf.FieldOptions.CType", FieldOptions_CType] }, + { no: 2, name: "packed", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "jstype", kind: "enum", opt: true, T: () => ["google.protobuf.FieldOptions.JSType", FieldOptions_JSType] }, + { no: 5, name: "lazy", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 15, name: "unverified_lazy", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 10, name: "weak", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 16, name: "debug_redact", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 17, name: "retention", kind: "enum", opt: true, T: () => ["google.protobuf.FieldOptions.OptionRetention", FieldOptions_OptionRetention] }, + { no: 18, name: "target", kind: "enum", opt: true, T: () => ["google.protobuf.FieldOptions.OptionTargetType", FieldOptions_OptionTargetType] }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): FieldOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FieldOptions): FieldOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional google.protobuf.FieldOptions.CType ctype */ 1: + message.ctype = reader.int32(); + break; + case /* optional bool packed */ 2: + message.packed = reader.bool(); + break; + case /* optional google.protobuf.FieldOptions.JSType jstype */ 6: + message.jstype = reader.int32(); + break; + case /* optional bool lazy */ 5: + message.lazy = reader.bool(); + break; + case /* optional bool unverified_lazy */ 15: + message.unverifiedLazy = reader.bool(); + break; + case /* optional bool deprecated */ 3: + message.deprecated = reader.bool(); + break; + case /* optional bool weak */ 10: + message.weak = reader.bool(); + break; + case /* optional bool debug_redact */ 16: + message.debugRedact = reader.bool(); + break; + case /* optional google.protobuf.FieldOptions.OptionRetention retention */ 17: + message.retention = reader.int32(); + break; + case /* optional google.protobuf.FieldOptions.OptionTargetType target */ 18: + message.target = reader.int32(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FieldOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional google.protobuf.FieldOptions.CType ctype = 1; */ + if (message.ctype !== undefined) + writer.tag(1, WireType.Varint).int32(message.ctype); + /* optional bool packed = 2; */ + if (message.packed !== undefined) + writer.tag(2, WireType.Varint).bool(message.packed); + /* optional google.protobuf.FieldOptions.JSType jstype = 6; */ + if (message.jstype !== undefined) + writer.tag(6, WireType.Varint).int32(message.jstype); + /* optional bool lazy = 5; */ + if (message.lazy !== undefined) + writer.tag(5, WireType.Varint).bool(message.lazy); + /* optional bool unverified_lazy = 15; */ + if (message.unverifiedLazy !== undefined) + writer.tag(15, WireType.Varint).bool(message.unverifiedLazy); + /* optional bool deprecated = 3; */ + if (message.deprecated !== undefined) + writer.tag(3, WireType.Varint).bool(message.deprecated); + /* optional bool weak = 10; */ + if (message.weak !== undefined) + writer.tag(10, WireType.Varint).bool(message.weak); + /* optional bool debug_redact = 16; */ + if (message.debugRedact !== undefined) + writer.tag(16, WireType.Varint).bool(message.debugRedact); + /* optional google.protobuf.FieldOptions.OptionRetention retention = 17; */ + if (message.retention !== undefined) + writer.tag(17, WireType.Varint).int32(message.retention); + /* optional google.protobuf.FieldOptions.OptionTargetType target = 18; */ + if (message.target !== undefined) + writer.tag(18, WireType.Varint).int32(message.target); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.FieldOptions + */ +export const FieldOptions = new FieldOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class OneofOptions$Type extends MessageType { + constructor() { + super("google.protobuf.OneofOptions", [ + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): OneofOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: OneofOptions): OneofOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: OneofOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.OneofOptions + */ +export const OneofOptions = new OneofOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumOptions$Type extends MessageType { + constructor() { + super("google.protobuf.EnumOptions", [ + { no: 2, name: "allow_alias", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "deprecated_legacy_json_field_conflicts", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): EnumOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumOptions): EnumOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool allow_alias */ 2: + message.allowAlias = reader.bool(); + break; + case /* optional bool deprecated */ 3: + message.deprecated = reader.bool(); + break; + case /* optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true];*/ 6: + message.deprecatedLegacyJsonFieldConflicts = reader.bool(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool allow_alias = 2; */ + if (message.allowAlias !== undefined) + writer.tag(2, WireType.Varint).bool(message.allowAlias); + /* optional bool deprecated = 3; */ + if (message.deprecated !== undefined) + writer.tag(3, WireType.Varint).bool(message.deprecated); + /* optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true]; */ + if (message.deprecatedLegacyJsonFieldConflicts !== undefined) + writer.tag(6, WireType.Varint).bool(message.deprecatedLegacyJsonFieldConflicts); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.EnumOptions + */ +export const EnumOptions = new EnumOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumValueOptions$Type extends MessageType { + constructor() { + super("google.protobuf.EnumValueOptions", [ + { no: 1, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): EnumValueOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumValueOptions): EnumValueOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool deprecated */ 1: + message.deprecated = reader.bool(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumValueOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool deprecated = 1; */ + if (message.deprecated !== undefined) + writer.tag(1, WireType.Varint).bool(message.deprecated); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.EnumValueOptions + */ +export const EnumValueOptions = new EnumValueOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ServiceOptions$Type extends MessageType { + constructor() { + super("google.protobuf.ServiceOptions", [ + { no: 33, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): ServiceOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ServiceOptions): ServiceOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool deprecated */ 33: + message.deprecated = reader.bool(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ServiceOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool deprecated = 33; */ + if (message.deprecated !== undefined) + writer.tag(33, WireType.Varint).bool(message.deprecated); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.ServiceOptions + */ +export const ServiceOptions = new ServiceOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MethodOptions$Type extends MessageType { + constructor() { + super("google.protobuf.MethodOptions", [ + { no: 33, name: "deprecated", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 34, name: "idempotency_level", kind: "enum", opt: true, T: () => ["google.protobuf.MethodOptions.IdempotencyLevel", MethodOptions_IdempotencyLevel] }, + { no: 999, name: "uninterpreted_option", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption } + ]); + } + create(value?: PartialMessage): MethodOptions { + const message = { uninterpretedOption: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MethodOptions): MethodOptions { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool deprecated */ 33: + message.deprecated = reader.bool(); + break; + case /* optional google.protobuf.MethodOptions.IdempotencyLevel idempotency_level */ 34: + message.idempotencyLevel = reader.int32(); + break; + case /* repeated google.protobuf.UninterpretedOption uninterpreted_option */ 999: + message.uninterpretedOption.push(UninterpretedOption.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MethodOptions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool deprecated = 33; */ + if (message.deprecated !== undefined) + writer.tag(33, WireType.Varint).bool(message.deprecated); + /* optional google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34; */ + if (message.idempotencyLevel !== undefined) + writer.tag(34, WireType.Varint).int32(message.idempotencyLevel); + /* repeated google.protobuf.UninterpretedOption uninterpreted_option = 999; */ + for (let i = 0; i < message.uninterpretedOption.length; i++) + UninterpretedOption.internalBinaryWrite(message.uninterpretedOption[i], writer.tag(999, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.MethodOptions + */ +export const MethodOptions = new MethodOptions$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UninterpretedOption$Type extends MessageType { + constructor() { + super("google.protobuf.UninterpretedOption", [ + { no: 2, name: "name", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => UninterpretedOption_NamePart }, + { no: 3, name: "identifier_value", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "positive_int_value", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 5, name: "negative_int_value", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 6, name: "double_value", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 7, name: "string_value", kind: "scalar", opt: true, T: 12 /*ScalarType.BYTES*/ }, + { no: 8, name: "aggregate_value", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): UninterpretedOption { + const message = { name: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UninterpretedOption): UninterpretedOption { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.UninterpretedOption.NamePart name */ 2: + message.name.push(UninterpretedOption_NamePart.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* optional string identifier_value */ 3: + message.identifierValue = reader.string(); + break; + case /* optional uint64 positive_int_value */ 4: + message.positiveIntValue = reader.uint64().toString(); + break; + case /* optional int64 negative_int_value */ 5: + message.negativeIntValue = reader.int64().toString(); + break; + case /* optional double double_value */ 6: + message.doubleValue = reader.double(); + break; + case /* optional bytes string_value */ 7: + message.stringValue = reader.bytes(); + break; + case /* optional string aggregate_value */ 8: + message.aggregateValue = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UninterpretedOption, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.UninterpretedOption.NamePart name = 2; */ + for (let i = 0; i < message.name.length; i++) + UninterpretedOption_NamePart.internalBinaryWrite(message.name[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* optional string identifier_value = 3; */ + if (message.identifierValue !== undefined) + writer.tag(3, WireType.LengthDelimited).string(message.identifierValue); + /* optional uint64 positive_int_value = 4; */ + if (message.positiveIntValue !== undefined) + writer.tag(4, WireType.Varint).uint64(message.positiveIntValue); + /* optional int64 negative_int_value = 5; */ + if (message.negativeIntValue !== undefined) + writer.tag(5, WireType.Varint).int64(message.negativeIntValue); + /* optional double double_value = 6; */ + if (message.doubleValue !== undefined) + writer.tag(6, WireType.Bit64).double(message.doubleValue); + /* optional bytes string_value = 7; */ + if (message.stringValue !== undefined) + writer.tag(7, WireType.LengthDelimited).bytes(message.stringValue); + /* optional string aggregate_value = 8; */ + if (message.aggregateValue !== undefined) + writer.tag(8, WireType.LengthDelimited).string(message.aggregateValue); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.UninterpretedOption + */ +export const UninterpretedOption = new UninterpretedOption$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UninterpretedOption_NamePart$Type extends MessageType { + constructor() { + super("google.protobuf.UninterpretedOption.NamePart", [ + { no: 1, name: "name_part", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "is_extension", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): UninterpretedOption_NamePart { + const message = { namePart: "", isExtension: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UninterpretedOption_NamePart): UninterpretedOption_NamePart { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name_part */ 1: + message.namePart = reader.string(); + break; + case /* bool is_extension */ 2: + message.isExtension = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UninterpretedOption_NamePart, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name_part = 1; */ + if (message.namePart !== "") + writer.tag(1, WireType.LengthDelimited).string(message.namePart); + /* bool is_extension = 2; */ + if (message.isExtension !== false) + writer.tag(2, WireType.Varint).bool(message.isExtension); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.UninterpretedOption.NamePart + */ +export const UninterpretedOption_NamePart = new UninterpretedOption_NamePart$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SourceCodeInfo$Type extends MessageType { + constructor() { + super("google.protobuf.SourceCodeInfo", [ + { no: 1, name: "location", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => SourceCodeInfo_Location } + ]); + } + create(value?: PartialMessage): SourceCodeInfo { + const message = { location: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SourceCodeInfo): SourceCodeInfo { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.SourceCodeInfo.Location location */ 1: + message.location.push(SourceCodeInfo_Location.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SourceCodeInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.SourceCodeInfo.Location location = 1; */ + for (let i = 0; i < message.location.length; i++) + SourceCodeInfo_Location.internalBinaryWrite(message.location[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.SourceCodeInfo + */ +export const SourceCodeInfo = new SourceCodeInfo$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SourceCodeInfo_Location$Type extends MessageType { + constructor() { + super("google.protobuf.SourceCodeInfo.Location", [ + { no: 1, name: "path", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "span", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "leading_comments", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "trailing_comments", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 6, name: "leading_detached_comments", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): SourceCodeInfo_Location { + const message = { path: [], span: [], leadingDetachedComments: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SourceCodeInfo_Location): SourceCodeInfo_Location { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated int32 path = 1 [packed = true];*/ 1: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.path.push(reader.int32()); + else + message.path.push(reader.int32()); + break; + case /* repeated int32 span = 2 [packed = true];*/ 2: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.span.push(reader.int32()); + else + message.span.push(reader.int32()); + break; + case /* optional string leading_comments */ 3: + message.leadingComments = reader.string(); + break; + case /* optional string trailing_comments */ 4: + message.trailingComments = reader.string(); + break; + case /* repeated string leading_detached_comments */ 6: + message.leadingDetachedComments.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SourceCodeInfo_Location, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated int32 path = 1 [packed = true]; */ + if (message.path.length) { + writer.tag(1, WireType.LengthDelimited).fork(); + for (let i = 0; i < message.path.length; i++) + writer.int32(message.path[i]); + writer.join(); + } + /* repeated int32 span = 2 [packed = true]; */ + if (message.span.length) { + writer.tag(2, WireType.LengthDelimited).fork(); + for (let i = 0; i < message.span.length; i++) + writer.int32(message.span[i]); + writer.join(); + } + /* optional string leading_comments = 3; */ + if (message.leadingComments !== undefined) + writer.tag(3, WireType.LengthDelimited).string(message.leadingComments); + /* optional string trailing_comments = 4; */ + if (message.trailingComments !== undefined) + writer.tag(4, WireType.LengthDelimited).string(message.trailingComments); + /* repeated string leading_detached_comments = 6; */ + for (let i = 0; i < message.leadingDetachedComments.length; i++) + writer.tag(6, WireType.LengthDelimited).string(message.leadingDetachedComments[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.SourceCodeInfo.Location + */ +export const SourceCodeInfo_Location = new SourceCodeInfo_Location$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class GeneratedCodeInfo$Type extends MessageType { + constructor() { + super("google.protobuf.GeneratedCodeInfo", [ + { no: 1, name: "annotation", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => GeneratedCodeInfo_Annotation } + ]); + } + create(value?: PartialMessage): GeneratedCodeInfo { + const message = { annotation: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GeneratedCodeInfo): GeneratedCodeInfo { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.GeneratedCodeInfo.Annotation annotation */ 1: + message.annotation.push(GeneratedCodeInfo_Annotation.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GeneratedCodeInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; */ + for (let i = 0; i < message.annotation.length; i++) + GeneratedCodeInfo_Annotation.internalBinaryWrite(message.annotation[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.GeneratedCodeInfo + */ +export const GeneratedCodeInfo = new GeneratedCodeInfo$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class GeneratedCodeInfo_Annotation$Type extends MessageType { + constructor() { + super("google.protobuf.GeneratedCodeInfo.Annotation", [ + { no: 1, name: "path", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "source_file", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "begin", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "end", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 5, name: "semantic", kind: "enum", opt: true, T: () => ["google.protobuf.GeneratedCodeInfo.Annotation.Semantic", GeneratedCodeInfo_Annotation_Semantic] } + ]); + } + create(value?: PartialMessage): GeneratedCodeInfo_Annotation { + const message = { path: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GeneratedCodeInfo_Annotation): GeneratedCodeInfo_Annotation { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated int32 path = 1 [packed = true];*/ 1: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.path.push(reader.int32()); + else + message.path.push(reader.int32()); + break; + case /* optional string source_file */ 2: + message.sourceFile = reader.string(); + break; + case /* optional int32 begin */ 3: + message.begin = reader.int32(); + break; + case /* optional int32 end */ 4: + message.end = reader.int32(); + break; + case /* optional google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic */ 5: + message.semantic = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GeneratedCodeInfo_Annotation, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated int32 path = 1 [packed = true]; */ + if (message.path.length) { + writer.tag(1, WireType.LengthDelimited).fork(); + for (let i = 0; i < message.path.length; i++) + writer.int32(message.path[i]); + writer.join(); + } + /* optional string source_file = 2; */ + if (message.sourceFile !== undefined) + writer.tag(2, WireType.LengthDelimited).string(message.sourceFile); + /* optional int32 begin = 3; */ + if (message.begin !== undefined) + writer.tag(3, WireType.Varint).int32(message.begin); + /* optional int32 end = 4; */ + if (message.end !== undefined) + writer.tag(4, WireType.Varint).int32(message.end); + /* optional google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic = 5; */ + if (message.semantic !== undefined) + writer.tag(5, WireType.Varint).int32(message.semantic); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.GeneratedCodeInfo.Annotation + */ +export const GeneratedCodeInfo_Annotation = new GeneratedCodeInfo_Annotation$Type(); diff --git a/spicedb-common/src/protodevdefs/google/protobuf/duration.ts b/spicedb-common/src/protodevdefs/google/protobuf/duration.ts new file mode 100644 index 0000000..f5bc4c8 --- /dev/null +++ b/spicedb-common/src/protodevdefs/google/protobuf/duration.ts @@ -0,0 +1,230 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "google/protobuf/duration.proto" (package "google.protobuf", syntax proto3) +// tslint:disable +// +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { typeofJsonValue } from "@protobuf-ts/runtime"; +import type { JsonValue } from "@protobuf-ts/runtime"; +import type { JsonReadOptions } from "@protobuf-ts/runtime"; +import type { JsonWriteOptions } from "@protobuf-ts/runtime"; +import { PbLong } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * A Duration represents a signed, fixed-length span of time represented + * as a count of seconds and fractions of seconds at nanosecond + * resolution. It is independent of any calendar and concepts like "day" + * or "month". It is related to Timestamp in that the difference between + * two Timestamp values is a Duration and it can be added or subtracted + * from a Timestamp. Range is approximately +-10,000 years. + * + * # Examples + * + * Example 1: Compute Duration from two Timestamps in pseudo code. + * + * Timestamp start = ...; + * Timestamp end = ...; + * Duration duration = ...; + * + * duration.seconds = end.seconds - start.seconds; + * duration.nanos = end.nanos - start.nanos; + * + * if (duration.seconds < 0 && duration.nanos > 0) { + * duration.seconds += 1; + * duration.nanos -= 1000000000; + * } else if (duration.seconds > 0 && duration.nanos < 0) { + * duration.seconds -= 1; + * duration.nanos += 1000000000; + * } + * + * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. + * + * Timestamp start = ...; + * Duration duration = ...; + * Timestamp end = ...; + * + * end.seconds = start.seconds + duration.seconds; + * end.nanos = start.nanos + duration.nanos; + * + * if (end.nanos < 0) { + * end.seconds -= 1; + * end.nanos += 1000000000; + * } else if (end.nanos >= 1000000000) { + * end.seconds += 1; + * end.nanos -= 1000000000; + * } + * + * Example 3: Compute Duration from datetime.timedelta in Python. + * + * td = datetime.timedelta(days=3, minutes=10) + * duration = Duration() + * duration.FromTimedelta(td) + * + * # JSON Mapping + * + * In JSON format, the Duration type is encoded as a string rather than an + * object, where the string ends in the suffix "s" (indicating seconds) and + * is preceded by the number of seconds, with nanoseconds expressed as + * fractional seconds. For example, 3 seconds with 0 nanoseconds should be + * encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should + * be expressed in JSON format as "3.000000001s", and 3 seconds and 1 + * microsecond should be expressed in JSON format as "3.000001s". + * + * + * @generated from protobuf message google.protobuf.Duration + */ +export interface Duration { + /** + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + * + * @generated from protobuf field: int64 seconds = 1; + */ + seconds: string; + /** + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + * + * @generated from protobuf field: int32 nanos = 2; + */ + nanos: number; +} +// @generated message type with reflection information, may provide speed optimized methods +class Duration$Type extends MessageType { + constructor() { + super("google.protobuf.Duration", [ + { no: 1, name: "seconds", kind: "scalar", T: 3 /*ScalarType.INT64*/ }, + { no: 2, name: "nanos", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + /** + * Encode `Duration` to JSON string like "3.000001s". + */ + internalJsonWrite(message: Duration, options: JsonWriteOptions): JsonValue { + let s = PbLong.from(message.seconds).toNumber(); + if (s > 315576000000 || s < -315576000000) + throw new Error("Duration value out of range."); + let text = message.seconds.toString(); + if (s === 0 && message.nanos < 0) + text = "-" + text; + if (message.nanos !== 0) { + let nanosStr = Math.abs(message.nanos).toString(); + nanosStr = "0".repeat(9 - nanosStr.length) + nanosStr; + if (nanosStr.substring(3) === "000000") + nanosStr = nanosStr.substring(0, 3); + else if (nanosStr.substring(6) === "000") + nanosStr = nanosStr.substring(0, 6); + text += "." + nanosStr; + } + return text + "s"; + } + /** + * Decode `Duration` from JSON string like "3.000001s" + */ + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Duration): Duration { + if (typeof json !== "string") + throw new Error("Unable to parse Duration from JSON " + typeofJsonValue(json) + ". Expected string."); + let match = json.match(/^(-?)([0-9]+)(?:\.([0-9]+))?s/); + if (match === null) + throw new Error("Unable to parse Duration from JSON string. Invalid format."); + if (!target) + target = this.create(); + let [, sign, secs, nanos] = match; + let longSeconds = PbLong.from(sign + secs); + if (longSeconds.toNumber() > 315576000000 || longSeconds.toNumber() < -315576000000) + throw new Error("Unable to parse Duration from JSON string. Value out of range."); + target.seconds = longSeconds.toString(); + if (typeof nanos == "string") { + let nanosStr = sign + nanos + "0".repeat(9 - nanos.length); + target.nanos = parseInt(nanosStr); + } + return target; + } + create(value?: PartialMessage): Duration { + const message = { seconds: "0", nanos: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Duration): Duration { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 seconds */ 1: + message.seconds = reader.int64().toString(); + break; + case /* int32 nanos */ 2: + message.nanos = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Duration, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 seconds = 1; */ + if (message.seconds !== "0") + writer.tag(1, WireType.Varint).int64(message.seconds); + /* int32 nanos = 2; */ + if (message.nanos !== 0) + writer.tag(2, WireType.Varint).int32(message.nanos); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.Duration + */ +export const Duration = new Duration$Type(); diff --git a/spicedb-common/src/protodevdefs/google/protobuf/struct.ts b/spicedb-common/src/protodevdefs/google/protobuf/struct.ts new file mode 100644 index 0000000..9038e6c --- /dev/null +++ b/spicedb-common/src/protodevdefs/google/protobuf/struct.ts @@ -0,0 +1,483 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "google/protobuf/struct.proto" (package "google.protobuf", syntax proto3) +// tslint:disable +// +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { isJsonObject } from "@protobuf-ts/runtime"; +import { typeofJsonValue } from "@protobuf-ts/runtime"; +import type { JsonValue } from "@protobuf-ts/runtime"; +import type { JsonReadOptions } from "@protobuf-ts/runtime"; +import type { JsonWriteOptions } from "@protobuf-ts/runtime"; +import type { JsonObject } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * `Struct` represents a structured data value, consisting of fields + * which map to dynamically typed values. In some languages, `Struct` + * might be supported by a native representation. For example, in + * scripting languages like JS a struct is represented as an + * object. The details of that representation are described together + * with the proto support for the language. + * + * The JSON representation for `Struct` is JSON object. + * + * @generated from protobuf message google.protobuf.Struct + */ +export interface Struct { + /** + * Unordered map of dynamically typed values. + * + * @generated from protobuf field: map fields = 1; + */ + fields: { + [key: string]: Value; + }; +} +/** + * `Value` represents a dynamically typed value which can be either + * null, a number, a string, a boolean, a recursive struct value, or a + * list of values. A producer of value is expected to set one of these + * variants. Absence of any variant indicates an error. + * + * The JSON representation for `Value` is JSON value. + * + * @generated from protobuf message google.protobuf.Value + */ +export interface Value { + /** + * @generated from protobuf oneof: kind + */ + kind: { + oneofKind: "nullValue"; + /** + * Represents a null value. + * + * @generated from protobuf field: google.protobuf.NullValue null_value = 1; + */ + nullValue: NullValue; + } | { + oneofKind: "numberValue"; + /** + * Represents a double value. + * + * @generated from protobuf field: double number_value = 2; + */ + numberValue: number; + } | { + oneofKind: "stringValue"; + /** + * Represents a string value. + * + * @generated from protobuf field: string string_value = 3; + */ + stringValue: string; + } | { + oneofKind: "boolValue"; + /** + * Represents a boolean value. + * + * @generated from protobuf field: bool bool_value = 4; + */ + boolValue: boolean; + } | { + oneofKind: "structValue"; + /** + * Represents a structured value. + * + * @generated from protobuf field: google.protobuf.Struct struct_value = 5; + */ + structValue: Struct; + } | { + oneofKind: "listValue"; + /** + * Represents a repeated `Value`. + * + * @generated from protobuf field: google.protobuf.ListValue list_value = 6; + */ + listValue: ListValue; + } | { + oneofKind: undefined; + }; +} +/** + * `ListValue` is a wrapper around a repeated field of values. + * + * The JSON representation for `ListValue` is JSON array. + * + * @generated from protobuf message google.protobuf.ListValue + */ +export interface ListValue { + /** + * Repeated field of dynamically typed values. + * + * @generated from protobuf field: repeated google.protobuf.Value values = 1; + */ + values: Value[]; +} +/** + * `NullValue` is a singleton enumeration to represent the null value for the + * `Value` type union. + * + * The JSON representation for `NullValue` is JSON `null`. + * + * @generated from protobuf enum google.protobuf.NullValue + */ +export enum NullValue { + /** + * Null value. + * + * @generated from protobuf enum value: NULL_VALUE = 0; + */ + NULL_VALUE = 0 +} +// @generated message type with reflection information, may provide speed optimized methods +class Struct$Type extends MessageType { + constructor() { + super("google.protobuf.Struct", [ + { no: 1, name: "fields", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => Value } } + ]); + } + /** + * Encode `Struct` to JSON object. + */ + internalJsonWrite(message: Struct, options: JsonWriteOptions): JsonValue { + let json: JsonObject = {}; + for (let [k, v] of Object.entries(message.fields)) { + json[k] = Value.toJson(v); + } + return json; + } + /** + * Decode `Struct` from JSON object. + */ + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Struct): Struct { + if (!isJsonObject(json)) + throw new globalThis.Error("Unable to parse message " + this.typeName + " from JSON " + typeofJsonValue(json) + "."); + if (!target) + target = this.create(); + for (let [k, v] of globalThis.Object.entries(json)) { + target.fields[k] = Value.fromJson(v); + } + return target; + } + create(value?: PartialMessage): Struct { + const message = { fields: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Struct): Struct { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* map fields */ 1: + this.binaryReadMap1(message.fields, reader, options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap1(map: Struct["fields"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof Struct["fields"] | undefined, val: Struct["fields"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = Value.internalBinaryRead(reader, reader.uint32(), options); + break; + default: throw new globalThis.Error("unknown map entry field for field google.protobuf.Struct.fields"); + } + } + map[key ?? ""] = val ?? Value.create(); + } + internalBinaryWrite(message: Struct, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* map fields = 1; */ + for (let k of Object.keys(message.fields)) { + writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k); + writer.tag(2, WireType.LengthDelimited).fork(); + Value.internalBinaryWrite(message.fields[k], writer, options); + writer.join().join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.Struct + */ +export const Struct = new Struct$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Value$Type extends MessageType { + constructor() { + super("google.protobuf.Value", [ + { no: 1, name: "null_value", kind: "enum", oneof: "kind", T: () => ["google.protobuf.NullValue", NullValue] }, + { no: 2, name: "number_value", kind: "scalar", oneof: "kind", T: 1 /*ScalarType.DOUBLE*/ }, + { no: 3, name: "string_value", kind: "scalar", oneof: "kind", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "bool_value", kind: "scalar", oneof: "kind", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "struct_value", kind: "message", oneof: "kind", T: () => Struct }, + { no: 6, name: "list_value", kind: "message", oneof: "kind", T: () => ListValue } + ]); + } + /** + * Encode `Value` to JSON value. + */ + internalJsonWrite(message: Value, options: JsonWriteOptions): JsonValue { + if (message.kind.oneofKind === undefined) + throw new globalThis.Error(); + switch (message.kind.oneofKind) { + case undefined: throw new globalThis.Error(); + case "boolValue": return message.kind.boolValue; + case "nullValue": return null; + case "numberValue": + let numberValue = message.kind.numberValue; + if (typeof numberValue == "number" && !Number.isFinite(numberValue)) + throw new globalThis.Error(); + return numberValue; + case "stringValue": return message.kind.stringValue; + case "listValue": + let listValueField = this.fields.find(f => f.no === 6); + if (listValueField?.kind !== "message") + throw new globalThis.Error(); + return listValueField.T().toJson(message.kind.listValue); + case "structValue": + let structValueField = this.fields.find(f => f.no === 5); + if (structValueField?.kind !== "message") + throw new globalThis.Error(); + return structValueField.T().toJson(message.kind.structValue); + } + } + /** + * Decode `Value` from JSON value. + */ + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Value): Value { + if (!target) + target = this.create(); + switch (typeof json) { + case "number": + target.kind = { oneofKind: "numberValue", numberValue: json }; + break; + case "string": + target.kind = { oneofKind: "stringValue", stringValue: json }; + break; + case "boolean": + target.kind = { oneofKind: "boolValue", boolValue: json }; + break; + case "object": + if (json === null) { + target.kind = { oneofKind: "nullValue", nullValue: NullValue.NULL_VALUE }; + } + else if (globalThis.Array.isArray(json)) { + target.kind = { oneofKind: "listValue", listValue: ListValue.fromJson(json) }; + } + else { + target.kind = { oneofKind: "structValue", structValue: Struct.fromJson(json) }; + } + break; + default: throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json)); + } + return target; + } + create(value?: PartialMessage): Value { + const message = { kind: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Value): Value { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* google.protobuf.NullValue null_value */ 1: + message.kind = { + oneofKind: "nullValue", + nullValue: reader.int32() + }; + break; + case /* double number_value */ 2: + message.kind = { + oneofKind: "numberValue", + numberValue: reader.double() + }; + break; + case /* string string_value */ 3: + message.kind = { + oneofKind: "stringValue", + stringValue: reader.string() + }; + break; + case /* bool bool_value */ 4: + message.kind = { + oneofKind: "boolValue", + boolValue: reader.bool() + }; + break; + case /* google.protobuf.Struct struct_value */ 5: + message.kind = { + oneofKind: "structValue", + structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).structValue) + }; + break; + case /* google.protobuf.ListValue list_value */ 6: + message.kind = { + oneofKind: "listValue", + listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).listValue) + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Value, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* google.protobuf.NullValue null_value = 1; */ + if (message.kind.oneofKind === "nullValue") + writer.tag(1, WireType.Varint).int32(message.kind.nullValue); + /* double number_value = 2; */ + if (message.kind.oneofKind === "numberValue") + writer.tag(2, WireType.Bit64).double(message.kind.numberValue); + /* string string_value = 3; */ + if (message.kind.oneofKind === "stringValue") + writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue); + /* bool bool_value = 4; */ + if (message.kind.oneofKind === "boolValue") + writer.tag(4, WireType.Varint).bool(message.kind.boolValue); + /* google.protobuf.Struct struct_value = 5; */ + if (message.kind.oneofKind === "structValue") + Struct.internalBinaryWrite(message.kind.structValue, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* google.protobuf.ListValue list_value = 6; */ + if (message.kind.oneofKind === "listValue") + ListValue.internalBinaryWrite(message.kind.listValue, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.Value + */ +export const Value = new Value$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListValue$Type extends MessageType { + constructor() { + super("google.protobuf.ListValue", [ + { no: 1, name: "values", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Value } + ]); + } + /** + * Encode `ListValue` to JSON array. + */ + internalJsonWrite(message: ListValue, options: JsonWriteOptions): JsonValue { + return message.values.map(v => Value.toJson(v)); + } + /** + * Decode `ListValue` from JSON array. + */ + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: ListValue): ListValue { + if (!globalThis.Array.isArray(json)) + throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json)); + if (!target) + target = this.create(); + let values = json.map(v => Value.fromJson(v)); + target.values.push(...values); + return target; + } + create(value?: PartialMessage): ListValue { + const message = { values: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListValue): ListValue { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated google.protobuf.Value values */ 1: + message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListValue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated google.protobuf.Value values = 1; */ + for (let i = 0; i < message.values.length; i++) + Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.ListValue + */ +export const ListValue = new ListValue$Type(); diff --git a/spicedb-common/src/protodevdefs/google/protobuf/timestamp.ts b/spicedb-common/src/protodevdefs/google/protobuf/timestamp.ts new file mode 100644 index 0000000..19e695e --- /dev/null +++ b/spicedb-common/src/protodevdefs/google/protobuf/timestamp.ts @@ -0,0 +1,287 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "google/protobuf/timestamp.proto" (package "google.protobuf", syntax proto3) +// tslint:disable +// +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { typeofJsonValue } from "@protobuf-ts/runtime"; +import type { JsonValue } from "@protobuf-ts/runtime"; +import type { JsonReadOptions } from "@protobuf-ts/runtime"; +import type { JsonWriteOptions } from "@protobuf-ts/runtime"; +import { PbLong } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * A Timestamp represents a point in time independent of any time zone or local + * calendar, encoded as a count of seconds and fractions of seconds at + * nanosecond resolution. The count is relative to an epoch at UTC midnight on + * January 1, 1970, in the proleptic Gregorian calendar which extends the + * Gregorian calendar backwards to year one. + * + * All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap + * second table is needed for interpretation, using a [24-hour linear + * smear](https://developers.google.com/time/smear). + * + * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By + * restricting to that range, we ensure that we can convert to and from [RFC + * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. + * + * # Examples + * + * Example 1: Compute Timestamp from POSIX `time()`. + * + * Timestamp timestamp; + * timestamp.set_seconds(time(NULL)); + * timestamp.set_nanos(0); + * + * Example 2: Compute Timestamp from POSIX `gettimeofday()`. + * + * struct timeval tv; + * gettimeofday(&tv, NULL); + * + * Timestamp timestamp; + * timestamp.set_seconds(tv.tv_sec); + * timestamp.set_nanos(tv.tv_usec * 1000); + * + * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. + * + * FILETIME ft; + * GetSystemTimeAsFileTime(&ft); + * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; + * + * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z + * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. + * Timestamp timestamp; + * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); + * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); + * + * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. + * + * long millis = System.currentTimeMillis(); + * + * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) + * .setNanos((int) ((millis % 1000) * 1000000)).build(); + * + * Example 5: Compute Timestamp from Java `Instant.now()`. + * + * Instant now = Instant.now(); + * + * Timestamp timestamp = + * Timestamp.newBuilder().setSeconds(now.getEpochSecond()) + * .setNanos(now.getNano()).build(); + * + * Example 6: Compute Timestamp from current time in Python. + * + * timestamp = Timestamp() + * timestamp.GetCurrentTime() + * + * # JSON Mapping + * + * In JSON format, the Timestamp type is encoded as a string in the + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the + * format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" + * where {year} is always expressed using four digits while {month}, {day}, + * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional + * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), + * are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone + * is required. A proto3 JSON serializer should always use UTC (as indicated by + * "Z") when printing the Timestamp type and a proto3 JSON parser should be + * able to accept both UTC and other timezones (as indicated by an offset). + * + * For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past + * 01:30 UTC on January 15, 2017. + * + * In JavaScript, one can convert a Date object to this format using the + * standard + * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) + * method. In Python, a standard `datetime.datetime` object can be converted + * to this format using + * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with + * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use + * the Joda Time's [`ISODateTimeFormat.dateTime()`]( + * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D + * ) to obtain a formatter capable of generating timestamps in this format. + * + * + * @generated from protobuf message google.protobuf.Timestamp + */ +export interface Timestamp { + /** + * Represents seconds of UTC time since Unix epoch + * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + * 9999-12-31T23:59:59Z inclusive. + * + * @generated from protobuf field: int64 seconds = 1; + */ + seconds: string; + /** + * Non-negative fractions of a second at nanosecond resolution. Negative + * second values with fractions must still have non-negative nanos values + * that count forward in time. Must be from 0 to 999,999,999 + * inclusive. + * + * @generated from protobuf field: int32 nanos = 2; + */ + nanos: number; +} +// @generated message type with reflection information, may provide speed optimized methods +class Timestamp$Type extends MessageType { + constructor() { + super("google.protobuf.Timestamp", [ + { no: 1, name: "seconds", kind: "scalar", T: 3 /*ScalarType.INT64*/ }, + { no: 2, name: "nanos", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + /** + * Creates a new `Timestamp` for the current time. + */ + now(): Timestamp { + const msg = this.create(); + const ms = Date.now(); + msg.seconds = PbLong.from(Math.floor(ms / 1000)).toString(); + msg.nanos = (ms % 1000) * 1000000; + return msg; + } + /** + * Converts a `Timestamp` to a JavaScript Date. + */ + toDate(message: Timestamp): Date { + return new Date(PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000)); + } + /** + * Converts a JavaScript Date to a `Timestamp`. + */ + fromDate(date: Date): Timestamp { + const msg = this.create(); + const ms = date.getTime(); + msg.seconds = PbLong.from(Math.floor(ms / 1000)).toString(); + msg.nanos = (ms % 1000) * 1000000; + return msg; + } + /** + * In JSON format, the `Timestamp` type is encoded as a string + * in the RFC 3339 format. + */ + internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue { + let ms = PbLong.from(message.seconds).toNumber() * 1000; + if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z")) + throw new Error("Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive."); + if (message.nanos < 0) + throw new Error("Unable to encode invalid Timestamp to JSON. Nanos must not be negative."); + let z = "Z"; + if (message.nanos > 0) { + let nanosStr = (message.nanos + 1000000000).toString().substring(1); + if (nanosStr.substring(3) === "000000") + z = "." + nanosStr.substring(0, 3) + "Z"; + else if (nanosStr.substring(6) === "000") + z = "." + nanosStr.substring(0, 6) + "Z"; + else + z = "." + nanosStr + "Z"; + } + return new Date(ms).toISOString().replace(".000Z", z); + } + /** + * In JSON format, the `Timestamp` type is encoded as a string + * in the RFC 3339 format. + */ + internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp { + if (typeof json !== "string") + throw new Error("Unable to parse Timestamp from JSON " + typeofJsonValue(json) + "."); + let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/); + if (!matches) + throw new Error("Unable to parse Timestamp from JSON. Invalid format."); + let ms = Date.parse(matches[1] + "-" + matches[2] + "-" + matches[3] + "T" + matches[4] + ":" + matches[5] + ":" + matches[6] + (matches[8] ? matches[8] : "Z")); + if (Number.isNaN(ms)) + throw new Error("Unable to parse Timestamp from JSON. Invalid value."); + if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z")) + throw new globalThis.Error("Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive."); + if (!target) + target = this.create(); + target.seconds = PbLong.from(ms / 1000).toString(); + target.nanos = 0; + if (matches[7]) + target.nanos = (parseInt("1" + matches[7] + "0".repeat(9 - matches[7].length)) - 1000000000); + return target; + } + create(value?: PartialMessage): Timestamp { + const message = { seconds: "0", nanos: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 seconds */ 1: + message.seconds = reader.int64().toString(); + break; + case /* int32 nanos */ 2: + message.nanos = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 seconds = 1; */ + if (message.seconds !== "0") + writer.tag(1, WireType.Varint).int64(message.seconds); + /* int32 nanos = 2; */ + if (message.nanos !== 0) + writer.tag(2, WireType.Varint).int32(message.nanos); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message google.protobuf.Timestamp + */ +export const Timestamp = new Timestamp$Type(); diff --git a/spicedb-common/src/protodevdefs/validate/validate.ts b/spicedb-common/src/protodevdefs/validate/validate.ts new file mode 100644 index 0000000..241dc25 --- /dev/null +++ b/spicedb-common/src/protodevdefs/validate/validate.ts @@ -0,0 +1,4112 @@ +// @generated by protobuf-ts 2.9.1 with parameter long_type_string,generate_dependencies +// @generated from protobuf file "validate/validate.proto" (package "validate", syntax proto2) +// tslint:disable +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Timestamp } from "../google/protobuf/timestamp"; +import { Duration } from "../google/protobuf/duration"; +/** + * FieldRules encapsulates the rules for each type of field. Depending on the + * field, the correct set should be used to ensure proper validations. + * + * @generated from protobuf message validate.FieldRules + */ +export interface FieldRules { + /** + * @generated from protobuf field: optional validate.MessageRules message = 17; + */ + message?: MessageRules; + /** + * @generated from protobuf oneof: type + */ + type: { + oneofKind: "float"; + /** + * Scalar Field Types + * + * @generated from protobuf field: validate.FloatRules float = 1; + */ + float: FloatRules; + } | { + oneofKind: "double"; + /** + * @generated from protobuf field: validate.DoubleRules double = 2; + */ + double: DoubleRules; + } | { + oneofKind: "int32"; + /** + * @generated from protobuf field: validate.Int32Rules int32 = 3; + */ + int32: Int32Rules; + } | { + oneofKind: "int64"; + /** + * @generated from protobuf field: validate.Int64Rules int64 = 4; + */ + int64: Int64Rules; + } | { + oneofKind: "uint32"; + /** + * @generated from protobuf field: validate.UInt32Rules uint32 = 5; + */ + uint32: UInt32Rules; + } | { + oneofKind: "uint64"; + /** + * @generated from protobuf field: validate.UInt64Rules uint64 = 6; + */ + uint64: UInt64Rules; + } | { + oneofKind: "sint32"; + /** + * @generated from protobuf field: validate.SInt32Rules sint32 = 7; + */ + sint32: SInt32Rules; + } | { + oneofKind: "sint64"; + /** + * @generated from protobuf field: validate.SInt64Rules sint64 = 8; + */ + sint64: SInt64Rules; + } | { + oneofKind: "fixed32"; + /** + * @generated from protobuf field: validate.Fixed32Rules fixed32 = 9; + */ + fixed32: Fixed32Rules; + } | { + oneofKind: "fixed64"; + /** + * @generated from protobuf field: validate.Fixed64Rules fixed64 = 10; + */ + fixed64: Fixed64Rules; + } | { + oneofKind: "sfixed32"; + /** + * @generated from protobuf field: validate.SFixed32Rules sfixed32 = 11; + */ + sfixed32: SFixed32Rules; + } | { + oneofKind: "sfixed64"; + /** + * @generated from protobuf field: validate.SFixed64Rules sfixed64 = 12; + */ + sfixed64: SFixed64Rules; + } | { + oneofKind: "bool"; + /** + * @generated from protobuf field: validate.BoolRules bool = 13; + */ + bool: BoolRules; + } | { + oneofKind: "string"; + /** + * @generated from protobuf field: validate.StringRules string = 14; + */ + string: StringRules; + } | { + oneofKind: "bytes"; + /** + * @generated from protobuf field: validate.BytesRules bytes = 15; + */ + bytes: BytesRules; + } | { + oneofKind: "enum"; + /** + * Complex Field Types + * + * @generated from protobuf field: validate.EnumRules enum = 16; + */ + enum: EnumRules; + } | { + oneofKind: "repeated"; + /** + * @generated from protobuf field: validate.RepeatedRules repeated = 18; + */ + repeated: RepeatedRules; + } | { + oneofKind: "map"; + /** + * @generated from protobuf field: validate.MapRules map = 19; + */ + map: MapRules; + } | { + oneofKind: "any"; + /** + * Well-Known Field Types + * + * @generated from protobuf field: validate.AnyRules any = 20; + */ + any: AnyRules; + } | { + oneofKind: "duration"; + /** + * @generated from protobuf field: validate.DurationRules duration = 21; + */ + duration: DurationRules; + } | { + oneofKind: "timestamp"; + /** + * @generated from protobuf field: validate.TimestampRules timestamp = 22; + */ + timestamp: TimestampRules; + } | { + oneofKind: undefined; + }; +} +/** + * FloatRules describes the constraints applied to `float` values + * + * @generated from protobuf message validate.FloatRules + */ +export interface FloatRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional float const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional float lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional float lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional float gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional float gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated float in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated float not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * DoubleRules describes the constraints applied to `double` values + * + * @generated from protobuf message validate.DoubleRules + */ +export interface DoubleRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional double const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional double lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional double lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional double gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional double gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated double in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated double not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * Int32Rules describes the constraints applied to `int32` values + * + * @generated from protobuf message validate.Int32Rules + */ +export interface Int32Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional int32 const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional int32 lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional int32 lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional int32 gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional int32 gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int32 in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int32 not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * Int64Rules describes the constraints applied to `int64` values + * + * @generated from protobuf message validate.Int64Rules + */ +export interface Int64Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional int64 const = 1; + */ + const?: string; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional int64 lt = 2; + */ + lt?: string; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional int64 lte = 3; + */ + lte?: string; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional int64 gt = 4; + */ + gt?: string; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional int64 gte = 5; + */ + gte?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int64 in = 6; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int64 not_in = 7; + */ + notIn: string[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * UInt32Rules describes the constraints applied to `uint32` values + * + * @generated from protobuf message validate.UInt32Rules + */ +export interface UInt32Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional uint32 const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional uint32 lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional uint32 lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional uint32 gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional uint32 gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated uint32 in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated uint32 not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * UInt64Rules describes the constraints applied to `uint64` values + * + * @generated from protobuf message validate.UInt64Rules + */ +export interface UInt64Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional uint64 const = 1; + */ + const?: string; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional uint64 lt = 2; + */ + lt?: string; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional uint64 lte = 3; + */ + lte?: string; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional uint64 gt = 4; + */ + gt?: string; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional uint64 gte = 5; + */ + gte?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated uint64 in = 6; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated uint64 not_in = 7; + */ + notIn: string[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * SInt32Rules describes the constraints applied to `sint32` values + * + * @generated from protobuf message validate.SInt32Rules + */ +export interface SInt32Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional sint32 const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional sint32 lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional sint32 lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional sint32 gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional sint32 gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sint32 in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sint32 not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * SInt64Rules describes the constraints applied to `sint64` values + * + * @generated from protobuf message validate.SInt64Rules + */ +export interface SInt64Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional sint64 const = 1; + */ + const?: string; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional sint64 lt = 2; + */ + lt?: string; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional sint64 lte = 3; + */ + lte?: string; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional sint64 gt = 4; + */ + gt?: string; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional sint64 gte = 5; + */ + gte?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sint64 in = 6; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sint64 not_in = 7; + */ + notIn: string[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * Fixed32Rules describes the constraints applied to `fixed32` values + * + * @generated from protobuf message validate.Fixed32Rules + */ +export interface Fixed32Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional fixed32 const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional fixed32 lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional fixed32 lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional fixed32 gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional fixed32 gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated fixed32 in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated fixed32 not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * Fixed64Rules describes the constraints applied to `fixed64` values + * + * @generated from protobuf message validate.Fixed64Rules + */ +export interface Fixed64Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional fixed64 const = 1; + */ + const?: string; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional fixed64 lt = 2; + */ + lt?: string; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional fixed64 lte = 3; + */ + lte?: string; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional fixed64 gt = 4; + */ + gt?: string; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional fixed64 gte = 5; + */ + gte?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated fixed64 in = 6; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated fixed64 not_in = 7; + */ + notIn: string[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * SFixed32Rules describes the constraints applied to `sfixed32` values + * + * @generated from protobuf message validate.SFixed32Rules + */ +export interface SFixed32Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional sfixed32 const = 1; + */ + const?: number; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional sfixed32 lt = 2; + */ + lt?: number; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional sfixed32 lte = 3; + */ + lte?: number; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional sfixed32 gt = 4; + */ + gt?: number; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional sfixed32 gte = 5; + */ + gte?: number; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sfixed32 in = 6; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sfixed32 not_in = 7; + */ + notIn: number[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * SFixed64Rules describes the constraints applied to `sfixed64` values + * + * @generated from protobuf message validate.SFixed64Rules + */ +export interface SFixed64Rules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional sfixed64 const = 1; + */ + const?: string; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional sfixed64 lt = 2; + */ + lt?: string; + /** + * Lte specifies that this field must be less than or equal to the + * specified value, inclusive + * + * @generated from protobuf field: optional sfixed64 lte = 3; + */ + lte?: string; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive. If the value of Gt is larger than a specified Lt or Lte, the + * range is reversed. + * + * @generated from protobuf field: optional sfixed64 gt = 4; + */ + gt?: string; + /** + * Gte specifies that this field must be greater than or equal to the + * specified value, inclusive. If the value of Gte is larger than a + * specified Lt or Lte, the range is reversed. + * + * @generated from protobuf field: optional sfixed64 gte = 5; + */ + gte?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sfixed64 in = 6; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated sfixed64 not_in = 7; + */ + notIn: string[]; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 8; + */ + ignoreEmpty?: boolean; +} +/** + * BoolRules describes the constraints applied to `bool` values + * + * @generated from protobuf message validate.BoolRules + */ +export interface BoolRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional bool const = 1; + */ + const?: boolean; +} +/** + * StringRules describe the constraints applied to `string` values + * + * @generated from protobuf message validate.StringRules + */ +export interface StringRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional string const = 1; + */ + const?: string; + /** + * Len specifies that this field must be the specified number of + * characters (Unicode code points). Note that the number of + * characters may differ from the number of bytes in the string. + * + * @generated from protobuf field: optional uint64 len = 19; + */ + len?: string; + /** + * MinLen specifies that this field must be the specified number of + * characters (Unicode code points) at a minimum. Note that the number of + * characters may differ from the number of bytes in the string. + * + * @generated from protobuf field: optional uint64 min_len = 2; + */ + minLen?: string; + /** + * MaxLen specifies that this field must be the specified number of + * characters (Unicode code points) at a maximum. Note that the number of + * characters may differ from the number of bytes in the string. + * + * @generated from protobuf field: optional uint64 max_len = 3; + */ + maxLen?: string; + /** + * LenBytes specifies that this field must be the specified number of bytes + * at a minimum + * + * @generated from protobuf field: optional uint64 len_bytes = 20; + */ + lenBytes?: string; + /** + * MinBytes specifies that this field must be the specified number of bytes + * at a minimum + * + * @generated from protobuf field: optional uint64 min_bytes = 4; + */ + minBytes?: string; + /** + * MaxBytes specifies that this field must be the specified number of bytes + * at a maximum + * + * @generated from protobuf field: optional uint64 max_bytes = 5; + */ + maxBytes?: string; + /** + * Pattern specifes that this field must match against the specified + * regular expression (RE2 syntax). The included expression should elide + * any delimiters. + * + * @generated from protobuf field: optional string pattern = 6; + */ + pattern?: string; + /** + * Prefix specifies that this field must have the specified substring at + * the beginning of the string. + * + * @generated from protobuf field: optional string prefix = 7; + */ + prefix?: string; + /** + * Suffix specifies that this field must have the specified substring at + * the end of the string. + * + * @generated from protobuf field: optional string suffix = 8; + */ + suffix?: string; + /** + * Contains specifies that this field must have the specified substring + * anywhere in the string. + * + * @generated from protobuf field: optional string contains = 9; + */ + contains?: string; + /** + * NotContains specifies that this field cannot have the specified substring + * anywhere in the string. + * + * @generated from protobuf field: optional string not_contains = 23; + */ + notContains?: string; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated string in = 10; + */ + in: string[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated string not_in = 11; + */ + notIn: string[]; + /** + * @generated from protobuf oneof: well_known + */ + wellKnown: { + oneofKind: "email"; + /** + * Email specifies that the field must be a valid email address as + * defined by RFC 5322 + * + * @generated from protobuf field: bool email = 12; + */ + email: boolean; + } | { + oneofKind: "hostname"; + /** + * Hostname specifies that the field must be a valid hostname as + * defined by RFC 1034. This constraint does not support + * internationalized domain names (IDNs). + * + * @generated from protobuf field: bool hostname = 13; + */ + hostname: boolean; + } | { + oneofKind: "ip"; + /** + * Ip specifies that the field must be a valid IP (v4 or v6) address. + * Valid IPv6 addresses should not include surrounding square brackets. + * + * @generated from protobuf field: bool ip = 14; + */ + ip: boolean; + } | { + oneofKind: "ipv4"; + /** + * Ipv4 specifies that the field must be a valid IPv4 address. + * + * @generated from protobuf field: bool ipv4 = 15; + */ + ipv4: boolean; + } | { + oneofKind: "ipv6"; + /** + * Ipv6 specifies that the field must be a valid IPv6 address. Valid + * IPv6 addresses should not include surrounding square brackets. + * + * @generated from protobuf field: bool ipv6 = 16; + */ + ipv6: boolean; + } | { + oneofKind: "uri"; + /** + * Uri specifies that the field must be a valid, absolute URI as defined + * by RFC 3986 + * + * @generated from protobuf field: bool uri = 17; + */ + uri: boolean; + } | { + oneofKind: "uriRef"; + /** + * UriRef specifies that the field must be a valid URI as defined by RFC + * 3986 and may be relative or absolute. + * + * @generated from protobuf field: bool uri_ref = 18; + */ + uriRef: boolean; + } | { + oneofKind: "address"; + /** + * Address specifies that the field must be either a valid hostname as + * defined by RFC 1034 (which does not support internationalized domain + * names or IDNs), or it can be a valid IP (v4 or v6). + * + * @generated from protobuf field: bool address = 21; + */ + address: boolean; + } | { + oneofKind: "uuid"; + /** + * Uuid specifies that the field must be a valid UUID as defined by + * RFC 4122 + * + * @generated from protobuf field: bool uuid = 22; + */ + uuid: boolean; + } | { + oneofKind: "wellKnownRegex"; + /** + * WellKnownRegex specifies a common well known pattern defined as a regex. + * + * @generated from protobuf field: validate.KnownRegex well_known_regex = 24; + */ + wellKnownRegex: KnownRegex; + } | { + oneofKind: undefined; + }; + /** + * This applies to regexes HTTP_HEADER_NAME and HTTP_HEADER_VALUE to enable + * strict header validation. + * By default, this is true, and HTTP header validations are RFC-compliant. + * Setting to false will enable a looser validations that only disallows + * \r\n\0 characters, which can be used to bypass header matching rules. + * + * @generated from protobuf field: optional bool strict = 25; + */ + strict?: boolean; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 26; + */ + ignoreEmpty?: boolean; +} +/** + * BytesRules describe the constraints applied to `bytes` values + * + * @generated from protobuf message validate.BytesRules + */ +export interface BytesRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional bytes const = 1; + */ + const?: Uint8Array; + /** + * Len specifies that this field must be the specified number of bytes + * + * @generated from protobuf field: optional uint64 len = 13; + */ + len?: string; + /** + * MinLen specifies that this field must be the specified number of bytes + * at a minimum + * + * @generated from protobuf field: optional uint64 min_len = 2; + */ + minLen?: string; + /** + * MaxLen specifies that this field must be the specified number of bytes + * at a maximum + * + * @generated from protobuf field: optional uint64 max_len = 3; + */ + maxLen?: string; + /** + * Pattern specifes that this field must match against the specified + * regular expression (RE2 syntax). The included expression should elide + * any delimiters. + * + * @generated from protobuf field: optional string pattern = 4; + */ + pattern?: string; + /** + * Prefix specifies that this field must have the specified bytes at the + * beginning of the string. + * + * @generated from protobuf field: optional bytes prefix = 5; + */ + prefix?: Uint8Array; + /** + * Suffix specifies that this field must have the specified bytes at the + * end of the string. + * + * @generated from protobuf field: optional bytes suffix = 6; + */ + suffix?: Uint8Array; + /** + * Contains specifies that this field must have the specified bytes + * anywhere in the string. + * + * @generated from protobuf field: optional bytes contains = 7; + */ + contains?: Uint8Array; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated bytes in = 8; + */ + in: Uint8Array[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated bytes not_in = 9; + */ + notIn: Uint8Array[]; + /** + * @generated from protobuf oneof: well_known + */ + wellKnown: { + oneofKind: "ip"; + /** + * Ip specifies that the field must be a valid IP (v4 or v6) address in + * byte format + * + * @generated from protobuf field: bool ip = 10; + */ + ip: boolean; + } | { + oneofKind: "ipv4"; + /** + * Ipv4 specifies that the field must be a valid IPv4 address in byte + * format + * + * @generated from protobuf field: bool ipv4 = 11; + */ + ipv4: boolean; + } | { + oneofKind: "ipv6"; + /** + * Ipv6 specifies that the field must be a valid IPv6 address in byte + * format + * + * @generated from protobuf field: bool ipv6 = 12; + */ + ipv6: boolean; + } | { + oneofKind: undefined; + }; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 14; + */ + ignoreEmpty?: boolean; +} +/** + * EnumRules describe the constraints applied to enum values + * + * @generated from protobuf message validate.EnumRules + */ +export interface EnumRules { + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional int32 const = 1; + */ + const?: number; + /** + * DefinedOnly specifies that this field must be only one of the defined + * values for this enum, failing on any undefined value. + * + * @generated from protobuf field: optional bool defined_only = 2; + */ + definedOnly?: boolean; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int32 in = 3; + */ + in: number[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated int32 not_in = 4; + */ + notIn: number[]; +} +/** + * MessageRules describe the constraints applied to embedded message values. + * For message-type fields, validation is performed recursively. + * + * @generated from protobuf message validate.MessageRules + */ +export interface MessageRules { + /** + * Skip specifies that the validation rules of this field should not be + * evaluated + * + * @generated from protobuf field: optional bool skip = 1; + */ + skip?: boolean; + /** + * Required specifies that this field must be set + * + * @generated from protobuf field: optional bool required = 2; + */ + required?: boolean; +} +/** + * RepeatedRules describe the constraints applied to `repeated` values + * + * @generated from protobuf message validate.RepeatedRules + */ +export interface RepeatedRules { + /** + * MinItems specifies that this field must have the specified number of + * items at a minimum + * + * @generated from protobuf field: optional uint64 min_items = 1; + */ + minItems?: string; + /** + * MaxItems specifies that this field must have the specified number of + * items at a maximum + * + * @generated from protobuf field: optional uint64 max_items = 2; + */ + maxItems?: string; + /** + * Unique specifies that all elements in this field must be unique. This + * contraint is only applicable to scalar and enum types (messages are not + * supported). + * + * @generated from protobuf field: optional bool unique = 3; + */ + unique?: boolean; + /** + * Items specifies the contraints to be applied to each item in the field. + * Repeated message fields will still execute validation against each item + * unless skip is specified here. + * + * @generated from protobuf field: optional validate.FieldRules items = 4; + */ + items?: FieldRules; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 5; + */ + ignoreEmpty?: boolean; +} +/** + * MapRules describe the constraints applied to `map` values + * + * @generated from protobuf message validate.MapRules + */ +export interface MapRules { + /** + * MinPairs specifies that this field must have the specified number of + * KVs at a minimum + * + * @generated from protobuf field: optional uint64 min_pairs = 1; + */ + minPairs?: string; + /** + * MaxPairs specifies that this field must have the specified number of + * KVs at a maximum + * + * @generated from protobuf field: optional uint64 max_pairs = 2; + */ + maxPairs?: string; + /** + * NoSparse specifies values in this field cannot be unset. This only + * applies to map's with message value types. + * + * @generated from protobuf field: optional bool no_sparse = 3; + */ + noSparse?: boolean; + /** + * Keys specifies the constraints to be applied to each key in the field. + * + * @generated from protobuf field: optional validate.FieldRules keys = 4; + */ + keys?: FieldRules; + /** + * Values specifies the constraints to be applied to the value of each key + * in the field. Message values will still have their validations evaluated + * unless skip is specified here. + * + * @generated from protobuf field: optional validate.FieldRules values = 5; + */ + values?: FieldRules; + /** + * IgnoreEmpty specifies that the validation rules of this field should be + * evaluated only if the field is not empty + * + * @generated from protobuf field: optional bool ignore_empty = 6; + */ + ignoreEmpty?: boolean; +} +/** + * AnyRules describe constraints applied exclusively to the + * `google.protobuf.Any` well-known type + * + * @generated from protobuf message validate.AnyRules + */ +export interface AnyRules { + /** + * Required specifies that this field must be set + * + * @generated from protobuf field: optional bool required = 1; + */ + required?: boolean; + /** + * In specifies that this field's `type_url` must be equal to one of the + * specified values. + * + * @generated from protobuf field: repeated string in = 2; + */ + in: string[]; + /** + * NotIn specifies that this field's `type_url` must not be equal to any of + * the specified values. + * + * @generated from protobuf field: repeated string not_in = 3; + */ + notIn: string[]; +} +/** + * DurationRules describe the constraints applied exclusively to the + * `google.protobuf.Duration` well-known type + * + * @generated from protobuf message validate.DurationRules + */ +export interface DurationRules { + /** + * Required specifies that this field must be set + * + * @generated from protobuf field: optional bool required = 1; + */ + required?: boolean; + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional google.protobuf.Duration const = 2; + */ + const?: Duration; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional google.protobuf.Duration lt = 3; + */ + lt?: Duration; + /** + * Lt specifies that this field must be less than the specified value, + * inclusive + * + * @generated from protobuf field: optional google.protobuf.Duration lte = 4; + */ + lte?: Duration; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive + * + * @generated from protobuf field: optional google.protobuf.Duration gt = 5; + */ + gt?: Duration; + /** + * Gte specifies that this field must be greater than the specified value, + * inclusive + * + * @generated from protobuf field: optional google.protobuf.Duration gte = 6; + */ + gte?: Duration; + /** + * In specifies that this field must be equal to one of the specified + * values + * + * @generated from protobuf field: repeated google.protobuf.Duration in = 7; + */ + in: Duration[]; + /** + * NotIn specifies that this field cannot be equal to one of the specified + * values + * + * @generated from protobuf field: repeated google.protobuf.Duration not_in = 8; + */ + notIn: Duration[]; +} +/** + * TimestampRules describe the constraints applied exclusively to the + * `google.protobuf.Timestamp` well-known type + * + * @generated from protobuf message validate.TimestampRules + */ +export interface TimestampRules { + /** + * Required specifies that this field must be set + * + * @generated from protobuf field: optional bool required = 1; + */ + required?: boolean; + /** + * Const specifies that this field must be exactly the specified value + * + * @generated from protobuf field: optional google.protobuf.Timestamp const = 2; + */ + const?: Timestamp; + /** + * Lt specifies that this field must be less than the specified value, + * exclusive + * + * @generated from protobuf field: optional google.protobuf.Timestamp lt = 3; + */ + lt?: Timestamp; + /** + * Lte specifies that this field must be less than the specified value, + * inclusive + * + * @generated from protobuf field: optional google.protobuf.Timestamp lte = 4; + */ + lte?: Timestamp; + /** + * Gt specifies that this field must be greater than the specified value, + * exclusive + * + * @generated from protobuf field: optional google.protobuf.Timestamp gt = 5; + */ + gt?: Timestamp; + /** + * Gte specifies that this field must be greater than the specified value, + * inclusive + * + * @generated from protobuf field: optional google.protobuf.Timestamp gte = 6; + */ + gte?: Timestamp; + /** + * LtNow specifies that this must be less than the current time. LtNow + * can only be used with the Within rule. + * + * @generated from protobuf field: optional bool lt_now = 7; + */ + ltNow?: boolean; + /** + * GtNow specifies that this must be greater than the current time. GtNow + * can only be used with the Within rule. + * + * @generated from protobuf field: optional bool gt_now = 8; + */ + gtNow?: boolean; + /** + * Within specifies that this field must be within this duration of the + * current time. This constraint can be used alone or with the LtNow and + * GtNow rules. + * + * @generated from protobuf field: optional google.protobuf.Duration within = 9; + */ + within?: Duration; +} +/** + * WellKnownRegex contain some well-known patterns. + * + * @generated from protobuf enum validate.KnownRegex + */ +export enum KnownRegex { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * HTTP header name as defined by RFC 7230. + * + * @generated from protobuf enum value: HTTP_HEADER_NAME = 1; + */ + HTTP_HEADER_NAME = 1, + /** + * HTTP header value as defined by RFC 7230. + * + * @generated from protobuf enum value: HTTP_HEADER_VALUE = 2; + */ + HTTP_HEADER_VALUE = 2 +} +// @generated message type with reflection information, may provide speed optimized methods +class FieldRules$Type extends MessageType { + constructor() { + super("validate.FieldRules", [ + { no: 17, name: "message", kind: "message", T: () => MessageRules }, + { no: 1, name: "float", kind: "message", oneof: "type", T: () => FloatRules }, + { no: 2, name: "double", kind: "message", oneof: "type", T: () => DoubleRules }, + { no: 3, name: "int32", kind: "message", oneof: "type", T: () => Int32Rules }, + { no: 4, name: "int64", kind: "message", oneof: "type", T: () => Int64Rules }, + { no: 5, name: "uint32", kind: "message", oneof: "type", T: () => UInt32Rules }, + { no: 6, name: "uint64", kind: "message", oneof: "type", T: () => UInt64Rules }, + { no: 7, name: "sint32", kind: "message", oneof: "type", T: () => SInt32Rules }, + { no: 8, name: "sint64", kind: "message", oneof: "type", T: () => SInt64Rules }, + { no: 9, name: "fixed32", kind: "message", oneof: "type", T: () => Fixed32Rules }, + { no: 10, name: "fixed64", kind: "message", oneof: "type", T: () => Fixed64Rules }, + { no: 11, name: "sfixed32", kind: "message", oneof: "type", T: () => SFixed32Rules }, + { no: 12, name: "sfixed64", kind: "message", oneof: "type", T: () => SFixed64Rules }, + { no: 13, name: "bool", kind: "message", oneof: "type", T: () => BoolRules }, + { no: 14, name: "string", kind: "message", oneof: "type", T: () => StringRules }, + { no: 15, name: "bytes", kind: "message", oneof: "type", T: () => BytesRules }, + { no: 16, name: "enum", kind: "message", oneof: "type", T: () => EnumRules }, + { no: 18, name: "repeated", kind: "message", oneof: "type", T: () => RepeatedRules }, + { no: 19, name: "map", kind: "message", oneof: "type", T: () => MapRules }, + { no: 20, name: "any", kind: "message", oneof: "type", T: () => AnyRules }, + { no: 21, name: "duration", kind: "message", oneof: "type", T: () => DurationRules }, + { no: 22, name: "timestamp", kind: "message", oneof: "type", T: () => TimestampRules } + ]); + } + create(value?: PartialMessage): FieldRules { + const message = { type: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FieldRules): FieldRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional validate.MessageRules message */ 17: + message.message = MessageRules.internalBinaryRead(reader, reader.uint32(), options, message.message); + break; + case /* validate.FloatRules float */ 1: + message.type = { + oneofKind: "float", + float: FloatRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).float) + }; + break; + case /* validate.DoubleRules double */ 2: + message.type = { + oneofKind: "double", + double: DoubleRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).double) + }; + break; + case /* validate.Int32Rules int32 */ 3: + message.type = { + oneofKind: "int32", + int32: Int32Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).int32) + }; + break; + case /* validate.Int64Rules int64 */ 4: + message.type = { + oneofKind: "int64", + int64: Int64Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).int64) + }; + break; + case /* validate.UInt32Rules uint32 */ 5: + message.type = { + oneofKind: "uint32", + uint32: UInt32Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).uint32) + }; + break; + case /* validate.UInt64Rules uint64 */ 6: + message.type = { + oneofKind: "uint64", + uint64: UInt64Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).uint64) + }; + break; + case /* validate.SInt32Rules sint32 */ 7: + message.type = { + oneofKind: "sint32", + sint32: SInt32Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).sint32) + }; + break; + case /* validate.SInt64Rules sint64 */ 8: + message.type = { + oneofKind: "sint64", + sint64: SInt64Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).sint64) + }; + break; + case /* validate.Fixed32Rules fixed32 */ 9: + message.type = { + oneofKind: "fixed32", + fixed32: Fixed32Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).fixed32) + }; + break; + case /* validate.Fixed64Rules fixed64 */ 10: + message.type = { + oneofKind: "fixed64", + fixed64: Fixed64Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).fixed64) + }; + break; + case /* validate.SFixed32Rules sfixed32 */ 11: + message.type = { + oneofKind: "sfixed32", + sfixed32: SFixed32Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).sfixed32) + }; + break; + case /* validate.SFixed64Rules sfixed64 */ 12: + message.type = { + oneofKind: "sfixed64", + sfixed64: SFixed64Rules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).sfixed64) + }; + break; + case /* validate.BoolRules bool */ 13: + message.type = { + oneofKind: "bool", + bool: BoolRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).bool) + }; + break; + case /* validate.StringRules string */ 14: + message.type = { + oneofKind: "string", + string: StringRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).string) + }; + break; + case /* validate.BytesRules bytes */ 15: + message.type = { + oneofKind: "bytes", + bytes: BytesRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).bytes) + }; + break; + case /* validate.EnumRules enum */ 16: + message.type = { + oneofKind: "enum", + enum: EnumRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).enum) + }; + break; + case /* validate.RepeatedRules repeated */ 18: + message.type = { + oneofKind: "repeated", + repeated: RepeatedRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).repeated) + }; + break; + case /* validate.MapRules map */ 19: + message.type = { + oneofKind: "map", + map: MapRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).map) + }; + break; + case /* validate.AnyRules any */ 20: + message.type = { + oneofKind: "any", + any: AnyRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).any) + }; + break; + case /* validate.DurationRules duration */ 21: + message.type = { + oneofKind: "duration", + duration: DurationRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).duration) + }; + break; + case /* validate.TimestampRules timestamp */ 22: + message.type = { + oneofKind: "timestamp", + timestamp: TimestampRules.internalBinaryRead(reader, reader.uint32(), options, (message.type as any).timestamp) + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FieldRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional validate.MessageRules message = 17; */ + if (message.message) + MessageRules.internalBinaryWrite(message.message, writer.tag(17, WireType.LengthDelimited).fork(), options).join(); + /* validate.FloatRules float = 1; */ + if (message.type.oneofKind === "float") + FloatRules.internalBinaryWrite(message.type.float, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* validate.DoubleRules double = 2; */ + if (message.type.oneofKind === "double") + DoubleRules.internalBinaryWrite(message.type.double, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* validate.Int32Rules int32 = 3; */ + if (message.type.oneofKind === "int32") + Int32Rules.internalBinaryWrite(message.type.int32, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* validate.Int64Rules int64 = 4; */ + if (message.type.oneofKind === "int64") + Int64Rules.internalBinaryWrite(message.type.int64, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* validate.UInt32Rules uint32 = 5; */ + if (message.type.oneofKind === "uint32") + UInt32Rules.internalBinaryWrite(message.type.uint32, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* validate.UInt64Rules uint64 = 6; */ + if (message.type.oneofKind === "uint64") + UInt64Rules.internalBinaryWrite(message.type.uint64, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* validate.SInt32Rules sint32 = 7; */ + if (message.type.oneofKind === "sint32") + SInt32Rules.internalBinaryWrite(message.type.sint32, writer.tag(7, WireType.LengthDelimited).fork(), options).join(); + /* validate.SInt64Rules sint64 = 8; */ + if (message.type.oneofKind === "sint64") + SInt64Rules.internalBinaryWrite(message.type.sint64, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + /* validate.Fixed32Rules fixed32 = 9; */ + if (message.type.oneofKind === "fixed32") + Fixed32Rules.internalBinaryWrite(message.type.fixed32, writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + /* validate.Fixed64Rules fixed64 = 10; */ + if (message.type.oneofKind === "fixed64") + Fixed64Rules.internalBinaryWrite(message.type.fixed64, writer.tag(10, WireType.LengthDelimited).fork(), options).join(); + /* validate.SFixed32Rules sfixed32 = 11; */ + if (message.type.oneofKind === "sfixed32") + SFixed32Rules.internalBinaryWrite(message.type.sfixed32, writer.tag(11, WireType.LengthDelimited).fork(), options).join(); + /* validate.SFixed64Rules sfixed64 = 12; */ + if (message.type.oneofKind === "sfixed64") + SFixed64Rules.internalBinaryWrite(message.type.sfixed64, writer.tag(12, WireType.LengthDelimited).fork(), options).join(); + /* validate.BoolRules bool = 13; */ + if (message.type.oneofKind === "bool") + BoolRules.internalBinaryWrite(message.type.bool, writer.tag(13, WireType.LengthDelimited).fork(), options).join(); + /* validate.StringRules string = 14; */ + if (message.type.oneofKind === "string") + StringRules.internalBinaryWrite(message.type.string, writer.tag(14, WireType.LengthDelimited).fork(), options).join(); + /* validate.BytesRules bytes = 15; */ + if (message.type.oneofKind === "bytes") + BytesRules.internalBinaryWrite(message.type.bytes, writer.tag(15, WireType.LengthDelimited).fork(), options).join(); + /* validate.EnumRules enum = 16; */ + if (message.type.oneofKind === "enum") + EnumRules.internalBinaryWrite(message.type.enum, writer.tag(16, WireType.LengthDelimited).fork(), options).join(); + /* validate.RepeatedRules repeated = 18; */ + if (message.type.oneofKind === "repeated") + RepeatedRules.internalBinaryWrite(message.type.repeated, writer.tag(18, WireType.LengthDelimited).fork(), options).join(); + /* validate.MapRules map = 19; */ + if (message.type.oneofKind === "map") + MapRules.internalBinaryWrite(message.type.map, writer.tag(19, WireType.LengthDelimited).fork(), options).join(); + /* validate.AnyRules any = 20; */ + if (message.type.oneofKind === "any") + AnyRules.internalBinaryWrite(message.type.any, writer.tag(20, WireType.LengthDelimited).fork(), options).join(); + /* validate.DurationRules duration = 21; */ + if (message.type.oneofKind === "duration") + DurationRules.internalBinaryWrite(message.type.duration, writer.tag(21, WireType.LengthDelimited).fork(), options).join(); + /* validate.TimestampRules timestamp = 22; */ + if (message.type.oneofKind === "timestamp") + TimestampRules.internalBinaryWrite(message.type.timestamp, writer.tag(22, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.FieldRules + */ +export const FieldRules = new FieldRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FloatRules$Type extends MessageType { + constructor() { + super("validate.FloatRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 2 /*ScalarType.FLOAT*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 2 /*ScalarType.FLOAT*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): FloatRules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FloatRules): FloatRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional float const */ 1: + message.const = reader.float(); + break; + case /* optional float lt */ 2: + message.lt = reader.float(); + break; + case /* optional float lte */ 3: + message.lte = reader.float(); + break; + case /* optional float gt */ 4: + message.gt = reader.float(); + break; + case /* optional float gte */ 5: + message.gte = reader.float(); + break; + case /* repeated float in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.float()); + else + message.in.push(reader.float()); + break; + case /* repeated float not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.float()); + else + message.notIn.push(reader.float()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FloatRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional float const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit32).float(message.const); + /* optional float lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit32).float(message.lt); + /* optional float lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit32).float(message.lte); + /* optional float gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit32).float(message.gt); + /* optional float gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit32).float(message.gte); + /* repeated float in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit32).float(message.in[i]); + /* repeated float not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit32).float(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.FloatRules + */ +export const FloatRules = new FloatRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DoubleRules$Type extends MessageType { + constructor() { + super("validate.DoubleRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 1 /*ScalarType.DOUBLE*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): DoubleRules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DoubleRules): DoubleRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional double const */ 1: + message.const = reader.double(); + break; + case /* optional double lt */ 2: + message.lt = reader.double(); + break; + case /* optional double lte */ 3: + message.lte = reader.double(); + break; + case /* optional double gt */ 4: + message.gt = reader.double(); + break; + case /* optional double gte */ 5: + message.gte = reader.double(); + break; + case /* repeated double in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.double()); + else + message.in.push(reader.double()); + break; + case /* repeated double not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.double()); + else + message.notIn.push(reader.double()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DoubleRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional double const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit64).double(message.const); + /* optional double lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit64).double(message.lt); + /* optional double lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit64).double(message.lte); + /* optional double gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit64).double(message.gt); + /* optional double gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit64).double(message.gte); + /* repeated double in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit64).double(message.in[i]); + /* repeated double not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit64).double(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.DoubleRules + */ +export const DoubleRules = new DoubleRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Int32Rules$Type extends MessageType { + constructor() { + super("validate.Int32Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): Int32Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Int32Rules): Int32Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int32 const */ 1: + message.const = reader.int32(); + break; + case /* optional int32 lt */ 2: + message.lt = reader.int32(); + break; + case /* optional int32 lte */ 3: + message.lte = reader.int32(); + break; + case /* optional int32 gt */ 4: + message.gt = reader.int32(); + break; + case /* optional int32 gte */ 5: + message.gte = reader.int32(); + break; + case /* repeated int32 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.int32()); + else + message.in.push(reader.int32()); + break; + case /* repeated int32 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.int32()); + else + message.notIn.push(reader.int32()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Int32Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).int32(message.const); + /* optional int32 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).int32(message.lt); + /* optional int32 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).int32(message.lte); + /* optional int32 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).int32(message.gt); + /* optional int32 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).int32(message.gte); + /* repeated int32 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).int32(message.in[i]); + /* repeated int32 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).int32(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.Int32Rules + */ +export const Int32Rules = new Int32Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Int64Rules$Type extends MessageType { + constructor() { + super("validate.Int64Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 3 /*ScalarType.INT64*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 3 /*ScalarType.INT64*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): Int64Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Int64Rules): Int64Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int64 const */ 1: + message.const = reader.int64().toString(); + break; + case /* optional int64 lt */ 2: + message.lt = reader.int64().toString(); + break; + case /* optional int64 lte */ 3: + message.lte = reader.int64().toString(); + break; + case /* optional int64 gt */ 4: + message.gt = reader.int64().toString(); + break; + case /* optional int64 gte */ 5: + message.gte = reader.int64().toString(); + break; + case /* repeated int64 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.int64().toString()); + else + message.in.push(reader.int64().toString()); + break; + case /* repeated int64 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.int64().toString()); + else + message.notIn.push(reader.int64().toString()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Int64Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int64 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).int64(message.const); + /* optional int64 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).int64(message.lt); + /* optional int64 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).int64(message.lte); + /* optional int64 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).int64(message.gt); + /* optional int64 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).int64(message.gte); + /* repeated int64 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).int64(message.in[i]); + /* repeated int64 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).int64(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.Int64Rules + */ +export const Int64Rules = new Int64Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UInt32Rules$Type extends MessageType { + constructor() { + super("validate.UInt32Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 13 /*ScalarType.UINT32*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 13 /*ScalarType.UINT32*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): UInt32Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UInt32Rules): UInt32Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional uint32 const */ 1: + message.const = reader.uint32(); + break; + case /* optional uint32 lt */ 2: + message.lt = reader.uint32(); + break; + case /* optional uint32 lte */ 3: + message.lte = reader.uint32(); + break; + case /* optional uint32 gt */ 4: + message.gt = reader.uint32(); + break; + case /* optional uint32 gte */ 5: + message.gte = reader.uint32(); + break; + case /* repeated uint32 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.uint32()); + else + message.in.push(reader.uint32()); + break; + case /* repeated uint32 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.uint32()); + else + message.notIn.push(reader.uint32()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UInt32Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional uint32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).uint32(message.const); + /* optional uint32 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).uint32(message.lt); + /* optional uint32 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).uint32(message.lte); + /* optional uint32 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).uint32(message.gt); + /* optional uint32 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).uint32(message.gte); + /* repeated uint32 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).uint32(message.in[i]); + /* repeated uint32 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).uint32(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.UInt32Rules + */ +export const UInt32Rules = new UInt32Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UInt64Rules$Type extends MessageType { + constructor() { + super("validate.UInt64Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 4 /*ScalarType.UINT64*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 4 /*ScalarType.UINT64*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): UInt64Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UInt64Rules): UInt64Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional uint64 const */ 1: + message.const = reader.uint64().toString(); + break; + case /* optional uint64 lt */ 2: + message.lt = reader.uint64().toString(); + break; + case /* optional uint64 lte */ 3: + message.lte = reader.uint64().toString(); + break; + case /* optional uint64 gt */ 4: + message.gt = reader.uint64().toString(); + break; + case /* optional uint64 gte */ 5: + message.gte = reader.uint64().toString(); + break; + case /* repeated uint64 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.uint64().toString()); + else + message.in.push(reader.uint64().toString()); + break; + case /* repeated uint64 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.uint64().toString()); + else + message.notIn.push(reader.uint64().toString()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UInt64Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional uint64 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).uint64(message.const); + /* optional uint64 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).uint64(message.lt); + /* optional uint64 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).uint64(message.lte); + /* optional uint64 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).uint64(message.gt); + /* optional uint64 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).uint64(message.gte); + /* repeated uint64 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).uint64(message.in[i]); + /* repeated uint64 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).uint64(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.UInt64Rules + */ +export const UInt64Rules = new UInt64Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SInt32Rules$Type extends MessageType { + constructor() { + super("validate.SInt32Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 17 /*ScalarType.SINT32*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 17 /*ScalarType.SINT32*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 17 /*ScalarType.SINT32*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 17 /*ScalarType.SINT32*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 17 /*ScalarType.SINT32*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 17 /*ScalarType.SINT32*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 17 /*ScalarType.SINT32*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): SInt32Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SInt32Rules): SInt32Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional sint32 const */ 1: + message.const = reader.sint32(); + break; + case /* optional sint32 lt */ 2: + message.lt = reader.sint32(); + break; + case /* optional sint32 lte */ 3: + message.lte = reader.sint32(); + break; + case /* optional sint32 gt */ 4: + message.gt = reader.sint32(); + break; + case /* optional sint32 gte */ 5: + message.gte = reader.sint32(); + break; + case /* repeated sint32 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.sint32()); + else + message.in.push(reader.sint32()); + break; + case /* repeated sint32 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.sint32()); + else + message.notIn.push(reader.sint32()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SInt32Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional sint32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).sint32(message.const); + /* optional sint32 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).sint32(message.lt); + /* optional sint32 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).sint32(message.lte); + /* optional sint32 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).sint32(message.gt); + /* optional sint32 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).sint32(message.gte); + /* repeated sint32 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).sint32(message.in[i]); + /* repeated sint32 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).sint32(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.SInt32Rules + */ +export const SInt32Rules = new SInt32Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SInt64Rules$Type extends MessageType { + constructor() { + super("validate.SInt64Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 18 /*ScalarType.SINT64*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 18 /*ScalarType.SINT64*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 18 /*ScalarType.SINT64*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 18 /*ScalarType.SINT64*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 18 /*ScalarType.SINT64*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 18 /*ScalarType.SINT64*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 18 /*ScalarType.SINT64*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): SInt64Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SInt64Rules): SInt64Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional sint64 const */ 1: + message.const = reader.sint64().toString(); + break; + case /* optional sint64 lt */ 2: + message.lt = reader.sint64().toString(); + break; + case /* optional sint64 lte */ 3: + message.lte = reader.sint64().toString(); + break; + case /* optional sint64 gt */ 4: + message.gt = reader.sint64().toString(); + break; + case /* optional sint64 gte */ 5: + message.gte = reader.sint64().toString(); + break; + case /* repeated sint64 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.sint64().toString()); + else + message.in.push(reader.sint64().toString()); + break; + case /* repeated sint64 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.sint64().toString()); + else + message.notIn.push(reader.sint64().toString()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SInt64Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional sint64 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).sint64(message.const); + /* optional sint64 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Varint).sint64(message.lt); + /* optional sint64 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Varint).sint64(message.lte); + /* optional sint64 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Varint).sint64(message.gt); + /* optional sint64 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Varint).sint64(message.gte); + /* repeated sint64 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Varint).sint64(message.in[i]); + /* repeated sint64 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Varint).sint64(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.SInt64Rules + */ +export const SInt64Rules = new SInt64Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Fixed32Rules$Type extends MessageType { + constructor() { + super("validate.Fixed32Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 7 /*ScalarType.FIXED32*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 7 /*ScalarType.FIXED32*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 7 /*ScalarType.FIXED32*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 7 /*ScalarType.FIXED32*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 7 /*ScalarType.FIXED32*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 7 /*ScalarType.FIXED32*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 7 /*ScalarType.FIXED32*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): Fixed32Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Fixed32Rules): Fixed32Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional fixed32 const */ 1: + message.const = reader.fixed32(); + break; + case /* optional fixed32 lt */ 2: + message.lt = reader.fixed32(); + break; + case /* optional fixed32 lte */ 3: + message.lte = reader.fixed32(); + break; + case /* optional fixed32 gt */ 4: + message.gt = reader.fixed32(); + break; + case /* optional fixed32 gte */ 5: + message.gte = reader.fixed32(); + break; + case /* repeated fixed32 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.fixed32()); + else + message.in.push(reader.fixed32()); + break; + case /* repeated fixed32 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.fixed32()); + else + message.notIn.push(reader.fixed32()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Fixed32Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional fixed32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit32).fixed32(message.const); + /* optional fixed32 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit32).fixed32(message.lt); + /* optional fixed32 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit32).fixed32(message.lte); + /* optional fixed32 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit32).fixed32(message.gt); + /* optional fixed32 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit32).fixed32(message.gte); + /* repeated fixed32 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit32).fixed32(message.in[i]); + /* repeated fixed32 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit32).fixed32(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.Fixed32Rules + */ +export const Fixed32Rules = new Fixed32Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Fixed64Rules$Type extends MessageType { + constructor() { + super("validate.Fixed64Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 6 /*ScalarType.FIXED64*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 6 /*ScalarType.FIXED64*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 6 /*ScalarType.FIXED64*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 6 /*ScalarType.FIXED64*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 6 /*ScalarType.FIXED64*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 6 /*ScalarType.FIXED64*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 6 /*ScalarType.FIXED64*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): Fixed64Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Fixed64Rules): Fixed64Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional fixed64 const */ 1: + message.const = reader.fixed64().toString(); + break; + case /* optional fixed64 lt */ 2: + message.lt = reader.fixed64().toString(); + break; + case /* optional fixed64 lte */ 3: + message.lte = reader.fixed64().toString(); + break; + case /* optional fixed64 gt */ 4: + message.gt = reader.fixed64().toString(); + break; + case /* optional fixed64 gte */ 5: + message.gte = reader.fixed64().toString(); + break; + case /* repeated fixed64 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.fixed64().toString()); + else + message.in.push(reader.fixed64().toString()); + break; + case /* repeated fixed64 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.fixed64().toString()); + else + message.notIn.push(reader.fixed64().toString()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Fixed64Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional fixed64 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit64).fixed64(message.const); + /* optional fixed64 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit64).fixed64(message.lt); + /* optional fixed64 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit64).fixed64(message.lte); + /* optional fixed64 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit64).fixed64(message.gt); + /* optional fixed64 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit64).fixed64(message.gte); + /* repeated fixed64 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit64).fixed64(message.in[i]); + /* repeated fixed64 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit64).fixed64(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.Fixed64Rules + */ +export const Fixed64Rules = new Fixed64Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SFixed32Rules$Type extends MessageType { + constructor() { + super("validate.SFixed32Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 15 /*ScalarType.SFIXED32*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): SFixed32Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SFixed32Rules): SFixed32Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional sfixed32 const */ 1: + message.const = reader.sfixed32(); + break; + case /* optional sfixed32 lt */ 2: + message.lt = reader.sfixed32(); + break; + case /* optional sfixed32 lte */ 3: + message.lte = reader.sfixed32(); + break; + case /* optional sfixed32 gt */ 4: + message.gt = reader.sfixed32(); + break; + case /* optional sfixed32 gte */ 5: + message.gte = reader.sfixed32(); + break; + case /* repeated sfixed32 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.sfixed32()); + else + message.in.push(reader.sfixed32()); + break; + case /* repeated sfixed32 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.sfixed32()); + else + message.notIn.push(reader.sfixed32()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SFixed32Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional sfixed32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit32).sfixed32(message.const); + /* optional sfixed32 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit32).sfixed32(message.lt); + /* optional sfixed32 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit32).sfixed32(message.lte); + /* optional sfixed32 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit32).sfixed32(message.gt); + /* optional sfixed32 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit32).sfixed32(message.gte); + /* repeated sfixed32 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit32).sfixed32(message.in[i]); + /* repeated sfixed32 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit32).sfixed32(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.SFixed32Rules + */ +export const SFixed32Rules = new SFixed32Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SFixed64Rules$Type extends MessageType { + constructor() { + super("validate.SFixed64Rules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 2, name: "lt", kind: "scalar", opt: true, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 3, name: "lte", kind: "scalar", opt: true, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 4, name: "gt", kind: "scalar", opt: true, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 5, name: "gte", kind: "scalar", opt: true, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 6, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 7, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 16 /*ScalarType.SFIXED64*/ }, + { no: 8, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): SFixed64Rules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SFixed64Rules): SFixed64Rules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional sfixed64 const */ 1: + message.const = reader.sfixed64().toString(); + break; + case /* optional sfixed64 lt */ 2: + message.lt = reader.sfixed64().toString(); + break; + case /* optional sfixed64 lte */ 3: + message.lte = reader.sfixed64().toString(); + break; + case /* optional sfixed64 gt */ 4: + message.gt = reader.sfixed64().toString(); + break; + case /* optional sfixed64 gte */ 5: + message.gte = reader.sfixed64().toString(); + break; + case /* repeated sfixed64 in */ 6: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.sfixed64().toString()); + else + message.in.push(reader.sfixed64().toString()); + break; + case /* repeated sfixed64 not_in */ 7: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.sfixed64().toString()); + else + message.notIn.push(reader.sfixed64().toString()); + break; + case /* optional bool ignore_empty */ 8: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SFixed64Rules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional sfixed64 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Bit64).sfixed64(message.const); + /* optional sfixed64 lt = 2; */ + if (message.lt !== undefined) + writer.tag(2, WireType.Bit64).sfixed64(message.lt); + /* optional sfixed64 lte = 3; */ + if (message.lte !== undefined) + writer.tag(3, WireType.Bit64).sfixed64(message.lte); + /* optional sfixed64 gt = 4; */ + if (message.gt !== undefined) + writer.tag(4, WireType.Bit64).sfixed64(message.gt); + /* optional sfixed64 gte = 5; */ + if (message.gte !== undefined) + writer.tag(5, WireType.Bit64).sfixed64(message.gte); + /* repeated sfixed64 in = 6; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(6, WireType.Bit64).sfixed64(message.in[i]); + /* repeated sfixed64 not_in = 7; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(7, WireType.Bit64).sfixed64(message.notIn[i]); + /* optional bool ignore_empty = 8; */ + if (message.ignoreEmpty !== undefined) + writer.tag(8, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.SFixed64Rules + */ +export const SFixed64Rules = new SFixed64Rules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BoolRules$Type extends MessageType { + constructor() { + super("validate.BoolRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): BoolRules { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BoolRules): BoolRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool const */ 1: + message.const = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BoolRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).bool(message.const); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.BoolRules + */ +export const BoolRules = new BoolRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class StringRules$Type extends MessageType { + constructor() { + super("validate.StringRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 19, name: "len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "min_len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 3, name: "max_len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 20, name: "len_bytes", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 4, name: "min_bytes", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 5, name: "max_bytes", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 6, name: "pattern", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "prefix", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 8, name: "suffix", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 9, name: "contains", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 23, name: "not_contains", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 10, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 11, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 12, name: "email", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 13, name: "hostname", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 14, name: "ip", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 15, name: "ipv4", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 16, name: "ipv6", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 17, name: "uri", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 18, name: "uri_ref", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 21, name: "address", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 22, name: "uuid", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 24, name: "well_known_regex", kind: "enum", oneof: "wellKnown", T: () => ["validate.KnownRegex", KnownRegex] }, + { no: 25, name: "strict", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 26, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): StringRules { + const message = { in: [], notIn: [], wellKnown: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: StringRules): StringRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional string const */ 1: + message.const = reader.string(); + break; + case /* optional uint64 len */ 19: + message.len = reader.uint64().toString(); + break; + case /* optional uint64 min_len */ 2: + message.minLen = reader.uint64().toString(); + break; + case /* optional uint64 max_len */ 3: + message.maxLen = reader.uint64().toString(); + break; + case /* optional uint64 len_bytes */ 20: + message.lenBytes = reader.uint64().toString(); + break; + case /* optional uint64 min_bytes */ 4: + message.minBytes = reader.uint64().toString(); + break; + case /* optional uint64 max_bytes */ 5: + message.maxBytes = reader.uint64().toString(); + break; + case /* optional string pattern */ 6: + message.pattern = reader.string(); + break; + case /* optional string prefix */ 7: + message.prefix = reader.string(); + break; + case /* optional string suffix */ 8: + message.suffix = reader.string(); + break; + case /* optional string contains */ 9: + message.contains = reader.string(); + break; + case /* optional string not_contains */ 23: + message.notContains = reader.string(); + break; + case /* repeated string in */ 10: + message.in.push(reader.string()); + break; + case /* repeated string not_in */ 11: + message.notIn.push(reader.string()); + break; + case /* bool email */ 12: + message.wellKnown = { + oneofKind: "email", + email: reader.bool() + }; + break; + case /* bool hostname */ 13: + message.wellKnown = { + oneofKind: "hostname", + hostname: reader.bool() + }; + break; + case /* bool ip */ 14: + message.wellKnown = { + oneofKind: "ip", + ip: reader.bool() + }; + break; + case /* bool ipv4 */ 15: + message.wellKnown = { + oneofKind: "ipv4", + ipv4: reader.bool() + }; + break; + case /* bool ipv6 */ 16: + message.wellKnown = { + oneofKind: "ipv6", + ipv6: reader.bool() + }; + break; + case /* bool uri */ 17: + message.wellKnown = { + oneofKind: "uri", + uri: reader.bool() + }; + break; + case /* bool uri_ref */ 18: + message.wellKnown = { + oneofKind: "uriRef", + uriRef: reader.bool() + }; + break; + case /* bool address */ 21: + message.wellKnown = { + oneofKind: "address", + address: reader.bool() + }; + break; + case /* bool uuid */ 22: + message.wellKnown = { + oneofKind: "uuid", + uuid: reader.bool() + }; + break; + case /* validate.KnownRegex well_known_regex */ 24: + message.wellKnown = { + oneofKind: "wellKnownRegex", + wellKnownRegex: reader.int32() + }; + break; + case /* optional bool strict */ 25: + message.strict = reader.bool(); + break; + case /* optional bool ignore_empty */ 26: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: StringRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional string const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.LengthDelimited).string(message.const); + /* optional uint64 len = 19; */ + if (message.len !== undefined) + writer.tag(19, WireType.Varint).uint64(message.len); + /* optional uint64 min_len = 2; */ + if (message.minLen !== undefined) + writer.tag(2, WireType.Varint).uint64(message.minLen); + /* optional uint64 max_len = 3; */ + if (message.maxLen !== undefined) + writer.tag(3, WireType.Varint).uint64(message.maxLen); + /* optional uint64 len_bytes = 20; */ + if (message.lenBytes !== undefined) + writer.tag(20, WireType.Varint).uint64(message.lenBytes); + /* optional uint64 min_bytes = 4; */ + if (message.minBytes !== undefined) + writer.tag(4, WireType.Varint).uint64(message.minBytes); + /* optional uint64 max_bytes = 5; */ + if (message.maxBytes !== undefined) + writer.tag(5, WireType.Varint).uint64(message.maxBytes); + /* optional string pattern = 6; */ + if (message.pattern !== undefined) + writer.tag(6, WireType.LengthDelimited).string(message.pattern); + /* optional string prefix = 7; */ + if (message.prefix !== undefined) + writer.tag(7, WireType.LengthDelimited).string(message.prefix); + /* optional string suffix = 8; */ + if (message.suffix !== undefined) + writer.tag(8, WireType.LengthDelimited).string(message.suffix); + /* optional string contains = 9; */ + if (message.contains !== undefined) + writer.tag(9, WireType.LengthDelimited).string(message.contains); + /* optional string not_contains = 23; */ + if (message.notContains !== undefined) + writer.tag(23, WireType.LengthDelimited).string(message.notContains); + /* repeated string in = 10; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(10, WireType.LengthDelimited).string(message.in[i]); + /* repeated string not_in = 11; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(11, WireType.LengthDelimited).string(message.notIn[i]); + /* bool email = 12; */ + if (message.wellKnown.oneofKind === "email") + writer.tag(12, WireType.Varint).bool(message.wellKnown.email); + /* bool hostname = 13; */ + if (message.wellKnown.oneofKind === "hostname") + writer.tag(13, WireType.Varint).bool(message.wellKnown.hostname); + /* bool ip = 14; */ + if (message.wellKnown.oneofKind === "ip") + writer.tag(14, WireType.Varint).bool(message.wellKnown.ip); + /* bool ipv4 = 15; */ + if (message.wellKnown.oneofKind === "ipv4") + writer.tag(15, WireType.Varint).bool(message.wellKnown.ipv4); + /* bool ipv6 = 16; */ + if (message.wellKnown.oneofKind === "ipv6") + writer.tag(16, WireType.Varint).bool(message.wellKnown.ipv6); + /* bool uri = 17; */ + if (message.wellKnown.oneofKind === "uri") + writer.tag(17, WireType.Varint).bool(message.wellKnown.uri); + /* bool uri_ref = 18; */ + if (message.wellKnown.oneofKind === "uriRef") + writer.tag(18, WireType.Varint).bool(message.wellKnown.uriRef); + /* bool address = 21; */ + if (message.wellKnown.oneofKind === "address") + writer.tag(21, WireType.Varint).bool(message.wellKnown.address); + /* bool uuid = 22; */ + if (message.wellKnown.oneofKind === "uuid") + writer.tag(22, WireType.Varint).bool(message.wellKnown.uuid); + /* validate.KnownRegex well_known_regex = 24; */ + if (message.wellKnown.oneofKind === "wellKnownRegex") + writer.tag(24, WireType.Varint).int32(message.wellKnown.wellKnownRegex); + /* optional bool strict = 25; */ + if (message.strict !== undefined) + writer.tag(25, WireType.Varint).bool(message.strict); + /* optional bool ignore_empty = 26; */ + if (message.ignoreEmpty !== undefined) + writer.tag(26, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.StringRules + */ +export const StringRules = new StringRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BytesRules$Type extends MessageType { + constructor() { + super("validate.BytesRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 12 /*ScalarType.BYTES*/ }, + { no: 13, name: "len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "min_len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 3, name: "max_len", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 4, name: "pattern", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 5, name: "prefix", kind: "scalar", opt: true, T: 12 /*ScalarType.BYTES*/ }, + { no: 6, name: "suffix", kind: "scalar", opt: true, T: 12 /*ScalarType.BYTES*/ }, + { no: 7, name: "contains", kind: "scalar", opt: true, T: 12 /*ScalarType.BYTES*/ }, + { no: 8, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 9, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 10, name: "ip", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 11, name: "ipv4", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 12, name: "ipv6", kind: "scalar", oneof: "wellKnown", T: 8 /*ScalarType.BOOL*/ }, + { no: 14, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): BytesRules { + const message = { in: [], notIn: [], wellKnown: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BytesRules): BytesRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bytes const */ 1: + message.const = reader.bytes(); + break; + case /* optional uint64 len */ 13: + message.len = reader.uint64().toString(); + break; + case /* optional uint64 min_len */ 2: + message.minLen = reader.uint64().toString(); + break; + case /* optional uint64 max_len */ 3: + message.maxLen = reader.uint64().toString(); + break; + case /* optional string pattern */ 4: + message.pattern = reader.string(); + break; + case /* optional bytes prefix */ 5: + message.prefix = reader.bytes(); + break; + case /* optional bytes suffix */ 6: + message.suffix = reader.bytes(); + break; + case /* optional bytes contains */ 7: + message.contains = reader.bytes(); + break; + case /* repeated bytes in */ 8: + message.in.push(reader.bytes()); + break; + case /* repeated bytes not_in */ 9: + message.notIn.push(reader.bytes()); + break; + case /* bool ip */ 10: + message.wellKnown = { + oneofKind: "ip", + ip: reader.bool() + }; + break; + case /* bool ipv4 */ 11: + message.wellKnown = { + oneofKind: "ipv4", + ipv4: reader.bool() + }; + break; + case /* bool ipv6 */ 12: + message.wellKnown = { + oneofKind: "ipv6", + ipv6: reader.bool() + }; + break; + case /* optional bool ignore_empty */ 14: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BytesRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bytes const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.LengthDelimited).bytes(message.const); + /* optional uint64 len = 13; */ + if (message.len !== undefined) + writer.tag(13, WireType.Varint).uint64(message.len); + /* optional uint64 min_len = 2; */ + if (message.minLen !== undefined) + writer.tag(2, WireType.Varint).uint64(message.minLen); + /* optional uint64 max_len = 3; */ + if (message.maxLen !== undefined) + writer.tag(3, WireType.Varint).uint64(message.maxLen); + /* optional string pattern = 4; */ + if (message.pattern !== undefined) + writer.tag(4, WireType.LengthDelimited).string(message.pattern); + /* optional bytes prefix = 5; */ + if (message.prefix !== undefined) + writer.tag(5, WireType.LengthDelimited).bytes(message.prefix); + /* optional bytes suffix = 6; */ + if (message.suffix !== undefined) + writer.tag(6, WireType.LengthDelimited).bytes(message.suffix); + /* optional bytes contains = 7; */ + if (message.contains !== undefined) + writer.tag(7, WireType.LengthDelimited).bytes(message.contains); + /* repeated bytes in = 8; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(8, WireType.LengthDelimited).bytes(message.in[i]); + /* repeated bytes not_in = 9; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(9, WireType.LengthDelimited).bytes(message.notIn[i]); + /* bool ip = 10; */ + if (message.wellKnown.oneofKind === "ip") + writer.tag(10, WireType.Varint).bool(message.wellKnown.ip); + /* bool ipv4 = 11; */ + if (message.wellKnown.oneofKind === "ipv4") + writer.tag(11, WireType.Varint).bool(message.wellKnown.ipv4); + /* bool ipv6 = 12; */ + if (message.wellKnown.oneofKind === "ipv6") + writer.tag(12, WireType.Varint).bool(message.wellKnown.ipv6); + /* optional bool ignore_empty = 14; */ + if (message.ignoreEmpty !== undefined) + writer.tag(14, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.BytesRules + */ +export const BytesRules = new BytesRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EnumRules$Type extends MessageType { + constructor() { + super("validate.EnumRules", [ + { no: 1, name: "const", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "defined_only", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): EnumRules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EnumRules): EnumRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional int32 const */ 1: + message.const = reader.int32(); + break; + case /* optional bool defined_only */ 2: + message.definedOnly = reader.bool(); + break; + case /* repeated int32 in */ 3: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.in.push(reader.int32()); + else + message.in.push(reader.int32()); + break; + case /* repeated int32 not_in */ 4: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.notIn.push(reader.int32()); + else + message.notIn.push(reader.int32()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EnumRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional int32 const = 1; */ + if (message.const !== undefined) + writer.tag(1, WireType.Varint).int32(message.const); + /* optional bool defined_only = 2; */ + if (message.definedOnly !== undefined) + writer.tag(2, WireType.Varint).bool(message.definedOnly); + /* repeated int32 in = 3; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(3, WireType.Varint).int32(message.in[i]); + /* repeated int32 not_in = 4; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(4, WireType.Varint).int32(message.notIn[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.EnumRules + */ +export const EnumRules = new EnumRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MessageRules$Type extends MessageType { + constructor() { + super("validate.MessageRules", [ + { no: 1, name: "skip", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "required", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): MessageRules { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MessageRules): MessageRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool skip */ 1: + message.skip = reader.bool(); + break; + case /* optional bool required */ 2: + message.required = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MessageRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool skip = 1; */ + if (message.skip !== undefined) + writer.tag(1, WireType.Varint).bool(message.skip); + /* optional bool required = 2; */ + if (message.required !== undefined) + writer.tag(2, WireType.Varint).bool(message.required); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.MessageRules + */ +export const MessageRules = new MessageRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RepeatedRules$Type extends MessageType { + constructor() { + super("validate.RepeatedRules", [ + { no: 1, name: "min_items", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "max_items", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 3, name: "unique", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 4, name: "items", kind: "message", T: () => FieldRules }, + { no: 5, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): RepeatedRules { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RepeatedRules): RepeatedRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional uint64 min_items */ 1: + message.minItems = reader.uint64().toString(); + break; + case /* optional uint64 max_items */ 2: + message.maxItems = reader.uint64().toString(); + break; + case /* optional bool unique */ 3: + message.unique = reader.bool(); + break; + case /* optional validate.FieldRules items */ 4: + message.items = FieldRules.internalBinaryRead(reader, reader.uint32(), options, message.items); + break; + case /* optional bool ignore_empty */ 5: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RepeatedRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional uint64 min_items = 1; */ + if (message.minItems !== undefined) + writer.tag(1, WireType.Varint).uint64(message.minItems); + /* optional uint64 max_items = 2; */ + if (message.maxItems !== undefined) + writer.tag(2, WireType.Varint).uint64(message.maxItems); + /* optional bool unique = 3; */ + if (message.unique !== undefined) + writer.tag(3, WireType.Varint).bool(message.unique); + /* optional validate.FieldRules items = 4; */ + if (message.items) + FieldRules.internalBinaryWrite(message.items, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* optional bool ignore_empty = 5; */ + if (message.ignoreEmpty !== undefined) + writer.tag(5, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.RepeatedRules + */ +export const RepeatedRules = new RepeatedRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MapRules$Type extends MessageType { + constructor() { + super("validate.MapRules", [ + { no: 1, name: "min_pairs", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 2, name: "max_pairs", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/ }, + { no: 3, name: "no_sparse", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 4, name: "keys", kind: "message", T: () => FieldRules }, + { no: 5, name: "values", kind: "message", T: () => FieldRules }, + { no: 6, name: "ignore_empty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): MapRules { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MapRules): MapRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional uint64 min_pairs */ 1: + message.minPairs = reader.uint64().toString(); + break; + case /* optional uint64 max_pairs */ 2: + message.maxPairs = reader.uint64().toString(); + break; + case /* optional bool no_sparse */ 3: + message.noSparse = reader.bool(); + break; + case /* optional validate.FieldRules keys */ 4: + message.keys = FieldRules.internalBinaryRead(reader, reader.uint32(), options, message.keys); + break; + case /* optional validate.FieldRules values */ 5: + message.values = FieldRules.internalBinaryRead(reader, reader.uint32(), options, message.values); + break; + case /* optional bool ignore_empty */ 6: + message.ignoreEmpty = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MapRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional uint64 min_pairs = 1; */ + if (message.minPairs !== undefined) + writer.tag(1, WireType.Varint).uint64(message.minPairs); + /* optional uint64 max_pairs = 2; */ + if (message.maxPairs !== undefined) + writer.tag(2, WireType.Varint).uint64(message.maxPairs); + /* optional bool no_sparse = 3; */ + if (message.noSparse !== undefined) + writer.tag(3, WireType.Varint).bool(message.noSparse); + /* optional validate.FieldRules keys = 4; */ + if (message.keys) + FieldRules.internalBinaryWrite(message.keys, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* optional validate.FieldRules values = 5; */ + if (message.values) + FieldRules.internalBinaryWrite(message.values, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* optional bool ignore_empty = 6; */ + if (message.ignoreEmpty !== undefined) + writer.tag(6, WireType.Varint).bool(message.ignoreEmpty); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.MapRules + */ +export const MapRules = new MapRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AnyRules$Type extends MessageType { + constructor() { + super("validate.AnyRules", [ + { no: 1, name: "required", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "not_in", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): AnyRules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AnyRules): AnyRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool required */ 1: + message.required = reader.bool(); + break; + case /* repeated string in */ 2: + message.in.push(reader.string()); + break; + case /* repeated string not_in */ 3: + message.notIn.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AnyRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool required = 1; */ + if (message.required !== undefined) + writer.tag(1, WireType.Varint).bool(message.required); + /* repeated string in = 2; */ + for (let i = 0; i < message.in.length; i++) + writer.tag(2, WireType.LengthDelimited).string(message.in[i]); + /* repeated string not_in = 3; */ + for (let i = 0; i < message.notIn.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.notIn[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.AnyRules + */ +export const AnyRules = new AnyRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class DurationRules$Type extends MessageType { + constructor() { + super("validate.DurationRules", [ + { no: 1, name: "required", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "const", kind: "message", T: () => Duration }, + { no: 3, name: "lt", kind: "message", T: () => Duration }, + { no: 4, name: "lte", kind: "message", T: () => Duration }, + { no: 5, name: "gt", kind: "message", T: () => Duration }, + { no: 6, name: "gte", kind: "message", T: () => Duration }, + { no: 7, name: "in", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Duration }, + { no: 8, name: "not_in", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Duration } + ]); + } + create(value?: PartialMessage): DurationRules { + const message = { in: [], notIn: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DurationRules): DurationRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool required */ 1: + message.required = reader.bool(); + break; + case /* optional google.protobuf.Duration const */ 2: + message.const = Duration.internalBinaryRead(reader, reader.uint32(), options, message.const); + break; + case /* optional google.protobuf.Duration lt */ 3: + message.lt = Duration.internalBinaryRead(reader, reader.uint32(), options, message.lt); + break; + case /* optional google.protobuf.Duration lte */ 4: + message.lte = Duration.internalBinaryRead(reader, reader.uint32(), options, message.lte); + break; + case /* optional google.protobuf.Duration gt */ 5: + message.gt = Duration.internalBinaryRead(reader, reader.uint32(), options, message.gt); + break; + case /* optional google.protobuf.Duration gte */ 6: + message.gte = Duration.internalBinaryRead(reader, reader.uint32(), options, message.gte); + break; + case /* repeated google.protobuf.Duration in */ 7: + message.in.push(Duration.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated google.protobuf.Duration not_in */ 8: + message.notIn.push(Duration.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DurationRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool required = 1; */ + if (message.required !== undefined) + writer.tag(1, WireType.Varint).bool(message.required); + /* optional google.protobuf.Duration const = 2; */ + if (message.const) + Duration.internalBinaryWrite(message.const, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Duration lt = 3; */ + if (message.lt) + Duration.internalBinaryWrite(message.lt, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Duration lte = 4; */ + if (message.lte) + Duration.internalBinaryWrite(message.lte, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Duration gt = 5; */ + if (message.gt) + Duration.internalBinaryWrite(message.gt, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Duration gte = 6; */ + if (message.gte) + Duration.internalBinaryWrite(message.gte, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.Duration in = 7; */ + for (let i = 0; i < message.in.length; i++) + Duration.internalBinaryWrite(message.in[i], writer.tag(7, WireType.LengthDelimited).fork(), options).join(); + /* repeated google.protobuf.Duration not_in = 8; */ + for (let i = 0; i < message.notIn.length; i++) + Duration.internalBinaryWrite(message.notIn[i], writer.tag(8, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.DurationRules + */ +export const DurationRules = new DurationRules$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TimestampRules$Type extends MessageType { + constructor() { + super("validate.TimestampRules", [ + { no: 1, name: "required", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "const", kind: "message", T: () => Timestamp }, + { no: 3, name: "lt", kind: "message", T: () => Timestamp }, + { no: 4, name: "lte", kind: "message", T: () => Timestamp }, + { no: 5, name: "gt", kind: "message", T: () => Timestamp }, + { no: 6, name: "gte", kind: "message", T: () => Timestamp }, + { no: 7, name: "lt_now", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 8, name: "gt_now", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }, + { no: 9, name: "within", kind: "message", T: () => Duration } + ]); + } + create(value?: PartialMessage): TimestampRules { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TimestampRules): TimestampRules { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional bool required */ 1: + message.required = reader.bool(); + break; + case /* optional google.protobuf.Timestamp const */ 2: + message.const = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.const); + break; + case /* optional google.protobuf.Timestamp lt */ 3: + message.lt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lt); + break; + case /* optional google.protobuf.Timestamp lte */ 4: + message.lte = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lte); + break; + case /* optional google.protobuf.Timestamp gt */ 5: + message.gt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.gt); + break; + case /* optional google.protobuf.Timestamp gte */ 6: + message.gte = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.gte); + break; + case /* optional bool lt_now */ 7: + message.ltNow = reader.bool(); + break; + case /* optional bool gt_now */ 8: + message.gtNow = reader.bool(); + break; + case /* optional google.protobuf.Duration within */ 9: + message.within = Duration.internalBinaryRead(reader, reader.uint32(), options, message.within); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TimestampRules, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional bool required = 1; */ + if (message.required !== undefined) + writer.tag(1, WireType.Varint).bool(message.required); + /* optional google.protobuf.Timestamp const = 2; */ + if (message.const) + Timestamp.internalBinaryWrite(message.const, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Timestamp lt = 3; */ + if (message.lt) + Timestamp.internalBinaryWrite(message.lt, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Timestamp lte = 4; */ + if (message.lte) + Timestamp.internalBinaryWrite(message.lte, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Timestamp gt = 5; */ + if (message.gt) + Timestamp.internalBinaryWrite(message.gt, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* optional google.protobuf.Timestamp gte = 6; */ + if (message.gte) + Timestamp.internalBinaryWrite(message.gte, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); + /* optional bool lt_now = 7; */ + if (message.ltNow !== undefined) + writer.tag(7, WireType.Varint).bool(message.ltNow); + /* optional bool gt_now = 8; */ + if (message.gtNow !== undefined) + writer.tag(8, WireType.Varint).bool(message.gtNow); + /* optional google.protobuf.Duration within = 9; */ + if (message.within) + Duration.internalBinaryWrite(message.within, writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message validate.TimestampRules + */ +export const TimestampRules = new TimestampRules$Type(); diff --git a/spicedb-common/src/react-app-env.d.ts b/spicedb-common/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/spicedb-common/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/spicedb-common/src/services/developerservice.ts b/spicedb-common/src/services/developerservice.ts new file mode 100644 index 0000000..7932614 --- /dev/null +++ b/spicedb-common/src/services/developerservice.ts @@ -0,0 +1,342 @@ +import { useCallback, useEffect, useState } from 'react'; +import { parseRelationships } from '../parsing'; +import { RelationTuple as Relationship } from '../protodevdefs/core/v1/core'; +import { + CheckOperationParameters, + CheckOperationsResult, + DeveloperRequest, + DeveloperResponse, + FormatSchemaParameters, + FormatSchemaResult, + Operation, + OperationResult, + RunAssertionsParameters, + RunAssertionsResult, + RunValidationParameters, + RunValidationResult, +} from '../protodevdefs/developer/v1/developer'; + +const WASM_FILE = `${process.env.PUBLIC_URL}/static/main.wasm`; +const ESTIMATED_WASM_BINARY_SIZE = 31161196; // bytes +const ENTRYPOINT_FUNCTION = 'runSpiceDBDeveloperRequest'; + +/** + * DeveloperService is a helper service which invokes the developer package against a locally + * running WASM-based service. + */ +export interface DeveloperService { + /** + * state is the state of the developer service. + */ + state: DeveloperServiceState; + + /** + * newRequest creates and returns a new request to the developer service, with the given schema + * and relationships (as a newline separated string) as test data. + */ + newRequest: ( + schema: string, + relationshipsString: string + ) => DeveloperServiceRequest | undefined; +} + +/** + * DeveloperServiceState represents the various states of the developer service. + */ +export type DeveloperServiceState = + | { + status: 'initializing' | 'unsupported' | 'loaderror' | 'ready'; + } + | { + status: 'loading'; + progress: number; + }; + +/** + * DeveloperServiceError is a possible error raised by the developer service itself; this is usally + * considered a fatal error and not based on bad user input. + */ +export type DeveloperServiceError = string | null; + +export type DevServiceCallback = (result: T) => void; + +type ResultExtractor = (result: OperationResult) => void; + +type OperationAndCallback = + | { + operation: 'check'; + parameters: { + checkParameters: CheckOperationParameters; + }; + callback: ResultExtractor; + } + | { + operation: 'runAssertions'; + parameters: { + assertionsParameters: RunAssertionsParameters; + }; + callback: ResultExtractor; + } + | { + operation: 'runValidation'; + parameters: { + validationParameters: RunValidationParameters; + }; + callback: ResultExtractor; + } + | { + operation: 'formatSchema'; + parameters: { + formatSchemaParameters: FormatSchemaParameters; + }; + callback: ResultExtractor; + }; + +/** + * DeveloperServiceRequest is a request being constructed to call the developer package. + * All calls to the various developer methods will be collected and only executed when + * the `execute` method is invoked. + */ +class DeveloperServiceRequest { + private relationships: Relationship[] = []; + private operations: OperationAndCallback[] = []; + + constructor(private schema: string, relationshipsString: string) { + this.relationships = parseRelationships(relationshipsString); + } + + /** + * formatSchema returns the request's schema formatted. + */ + public formatSchema(callback: DevServiceCallback) { + this.operations.push({ + operation: 'formatSchema', + parameters: { + formatSchemaParameters: {}, + }, + callback: (result: OperationResult) => { + callback(result.formatSchemaResult!); + }, + }); + } + + /** + * check adds a check request operation to be executed. + */ + public check( + parameters: CheckOperationParameters, + callback: DevServiceCallback + ) { + this.operations.push({ + operation: 'check', + parameters: { + checkParameters: parameters, + }, + callback: (result: OperationResult) => { + callback(result.checkResult!); + }, + }); + } + + /** + * runAssertions adds a run assertions operation to be executed. + */ + public runAssertions( + yaml: string, + callback: DevServiceCallback + ) { + this.operations.push({ + operation: 'runAssertions', + parameters: { + assertionsParameters: { + assertionsYaml: yaml, + }, + }, + callback: (result: OperationResult) => { + callback(result.assertionsResult!); + }, + }); + } + + /** + * runValidation adds a run validation operation to be executed. + */ + public runValidation( + yaml: string, + callback: DevServiceCallback + ) { + this.operations.push({ + operation: 'runValidation', + parameters: { + validationParameters: { + validationYaml: yaml, + }, + }, + callback: (result: OperationResult) => { + callback(result.validationResult!); + }, + }); + } + + /** + * execute executes the queued operations, returning any *input* errors found. + */ + public execute(): DeveloperResponse { + const request: DeveloperRequest = { + context: { + schema: this.schema, + relationships: this.relationships, + }, + operations: this.operations.map( + (opc: OperationAndCallback): Operation => { + return opc.parameters; + } + ), + }; + + const encodedResponse: string = (window as any)[ENTRYPOINT_FUNCTION]( + DeveloperRequest.toJsonString(request) + ); + + const response = DeveloperResponse.fromJsonString(encodedResponse, { + ignoreUnknownFields: true, + }); + if (this.operations.length > 0 && response.operationsResults) { + this.operations.forEach((osc, index) => { + osc.callback(response.operationsResults?.results[index]!); + }); + } + return response; + } +} + +const wasmVersion: number | string = Math.random(); + +/** + * useDeveloperService returns a reference to the developer service for invoking calls against the WASM-based + * developer package. Note that it is safe to invoke this hook multiple times; it will instantiate a singleton + * WASM interface and invoke operations through it automatically. + */ +export function useDeveloperService(): DeveloperService { + const [state, setState] = useState({ + status: 'initializing', + }); + + const loadWebAssembly = useCallback(async () => { + console.log('Loading developer package'); + + setState({ + status: 'loading', + progress: 0, + }); + + // WebAssembly.instantiateStreaming is not currently available in Safari + if (WebAssembly && !WebAssembly.instantiateStreaming) { + // polyfill + WebAssembly.instantiateStreaming = async (resp, importObject) => { + const source = await (await resp).arrayBuffer(); + return await WebAssembly.instantiate(source, importObject); + }; + } + + // Fetch the WASM file with progress tracking. + const fetched = await fetch(`${WASM_FILE}?_r=${wasmVersion}`); + const contentLength = +( + fetched.headers.get('Content-Length') ?? ESTIMATED_WASM_BINARY_SIZE + ); + + const reader = fetched.body?.getReader(); + if (!reader) { + console.warn('Failed to download developer package'); + setState({ + status: 'loaderror', + }); + return; + } + + let totalDownloaded = 0; + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + + totalDownloaded += value?.length ?? 0; + setState({ + status: 'loading', + progress: totalDownloaded / contentLength, + }); + } + + // Refetch, which should be from cache. + const go = new (window as any).Go(); + const refetched = await fetch(`${WASM_FILE}?_r=${wasmVersion}`); + + try { + const result = await WebAssembly.instantiateStreaming( + refetched, + go.importObject + ); + go.run(result.instance); + setState({ + status: 'ready', + }); + } catch (e) { + console.warn('Failed to load developer package:', e); + setState({ + status: 'loaderror', + }); + } + }, [setState]); + + useEffect(() => { + switch (state.status) { + case 'initializing': + const initialized = (window as any)[ENTRYPOINT_FUNCTION]; + if (!!initialized) { + setState({ + status: 'ready', + }); + return; + } + + if (!global.WebAssembly || !(window as any).Go) { + console.error('WebAssembly is not supported in your browser'); + setState({ + status: 'unsupported', + }); + return; + } + + loadWebAssembly(); + break; + + case 'ready': + // Nothing to do. + break; + + case 'loading': + // Working + break; + + case 'loaderror': + // Nothing to do. + break; + + case 'unsupported': + // Nothing to do. + break; + } + }, [state, setState, loadWebAssembly]); + + return { + state: state, + newRequest: (schema: string, relationshipsString: string) => { + if (!(window as any)[ENTRYPOINT_FUNCTION]) { + return undefined; + } + + return new DeveloperServiceRequest(schema, relationshipsString); + }, + }; +} diff --git a/spicedb-common/src/services/relationshipsservice.ts b/spicedb-common/src/services/relationshipsservice.ts new file mode 100644 index 0000000..99a5cc8 --- /dev/null +++ b/spicedb-common/src/services/relationshipsservice.ts @@ -0,0 +1,198 @@ +import { + interpolateBlues, + interpolateGreens, + interpolateOranges, interpolatePurples, interpolateRdPu, interpolateReds, interpolateYlGn, + interpolateYlOrBr +} from 'd3-scale-chromatic'; +import { useMemo } from "react"; +import { RelationTuple as Relationship } from "../protodevdefs/core/v1/core"; + +/** + * RelationshipsService represents a service for looking up context-sensitive information + * from the relationships defined. + */ +export interface RelationshipsService { + /** + * relationships are the parsed and valid relationships. + */ + relationships: Relationship[] + + /** + * resourceTypes is the set of object types used for resources. + */ + resourceTypes: string[] + + /** + * resources is the set of resources defined, without relations, in the form + * `namespacename:objectid`. + */ + resources: string[] + + /** + * subjects is the set of subjects defined in the form `namespacename:objectid`. + * If the subject has a relation, it is added as a distinct entry of the form + * `namespacename:objectid#relation`. + */ + subjects: string[] + + /** + * subjectTypes is the set of object types used for subjects. + */ + subjectTypes: string[] + + /** + * getObjectIds returns the set of IDs for objects used as resources or subjects + * for the given object type. + */ + getObjectIds: (objectType: string) => string[] | undefined + + /** + * getTypeColor returns a unique color for the given object type. + */ + getTypeColor: (objectType: string) => string | undefined + + /** + * getObjectColor returns a color (derived from that for the given object type) for + * the object ID. + */ + getObjectColor: (objectType: string, objectId: string) => string | undefined +} + +const filter = (values: (string | null | undefined)[]): string[] => { + const filtered = values.filter((v: string | null | undefined) => !!v); + const set = new Set(filtered); + const deduped: string[] = []; + set.forEach((value: string | null | undefined) => { + deduped.push(value!); + }); + return deduped; +} + +const colorSchemes = [ + interpolatePurples, + interpolateBlues, + interpolateGreens, + interpolateOranges, + interpolateReds, + interpolateYlOrBr, + interpolateRdPu, + interpolateYlGn, +] + +/** + * useRelationshipsService is a service which provides easy lookup of resources, subjects and actions + * based on entered test relationships. + * @param relationshipsString The encoded string of test relationships. + */ +export function useRelationshipsService(relationships: Relationship[]): RelationshipsService { + return useMemo(() => { + const buildingObjectsByType: Map> = new Map>(); + + const addObject = (objectType: string, objectId: string) => { + if (!buildingObjectsByType.has(objectType)) { + buildingObjectsByType.set(objectType, new Set()) + } + + buildingObjectsByType.get(objectType)?.add(objectId); + }; + + const resources = filter(relationships.map((rt: Relationship) => { + const onr = rt.resourceAndRelation + if (onr === undefined) { + return null; + } + + addObject(onr.namespace, onr.objectId); + return `${onr.namespace}:${onr.objectId}`; + })); + + const resourceTypes = filter(relationships.map((rt: Relationship) => { + const onr = rt.resourceAndRelation; + if (onr === undefined) { + return null; + } + + return onr.namespace; + })); + + const subjects = filter(relationships.map((rt: Relationship) => { + const subject = rt.subject; + if (subject === undefined) { + return null; + } + + addObject(subject.namespace, subject.objectId); + if (subject.relation === '...') { + return `${subject.namespace}:${subject.objectId}`; + } + return `${subject.namespace}:${subject.objectId}#${subject.relation}`; + })); + + const subjectTypes = filter(relationships.map((rt: Relationship) => { + const subject = rt.subject; + if (subject === undefined) { + return null; + } + + return subject.namespace; + })); + + + const calculateColor = (colorSet: (n: number) => string, valueSet: string[], value: string) => { + if (valueSet.indexOf(value) < 0) { + return undefined; + } + return colorSet(1 - (valueSet.indexOf(value) / 9)); + }; + + const possibleObjectTypes = []; + possibleObjectTypes.push(...resourceTypes); + possibleObjectTypes.push(...subjectTypes); + + const objectTypes = Array.from(new Set(possibleObjectTypes)); + + const objectsByType: Record = {}; + buildingObjectsByType.forEach((idSet: Set, objectType: string) => { + const arr = Array.from(idSet); + arr.sort(); + objectsByType[objectType] = arr; + }); + + return { + relationships: relationships, + resources: resources, + resourceTypes: resourceTypes, + subjectTypes: subjectTypes, + subjects: subjects, + getObjectIds: (objectType: string) => { + const resourceIDs = (relationships + .filter((rel: Relationship) => rel.resourceAndRelation?.namespace === objectType) + .map((rel: Relationship) => rel.resourceAndRelation?.objectId ?? '') + .filter((value: string) => !!value) + ); + const subjectIDs = (relationships + .filter((rel: Relationship) => rel.subject?.namespace === objectType) + .map((rel: Relationship) => rel.subject?.objectId ?? '') + .filter((value: string) => !!value) + ); + return Array.from(new Set([...resourceIDs, ...subjectIDs])) + }, + getObjectColor: (objectType: string, objectId: string): string | undefined => { + const index = objectTypes.indexOf(objectType); + const scheme = colorSchemes[index % colorSchemes.length]; + if (!scheme) { + return undefined; + } + return calculateColor(scheme, objectsByType[objectType] ?? [], objectId); + }, + getTypeColor: (objectType: string): string | undefined => { + const index = objectTypes.indexOf(objectType); + const scheme = colorSchemes[index % colorSchemes.length]; + if (!scheme) { + return undefined; + } + return scheme(0.65); + }, + }; + }, [relationships]); +} diff --git a/spicedb-common/src/services/zedservice.ts b/spicedb-common/src/services/zedservice.ts new file mode 100644 index 0000000..5b7e886 --- /dev/null +++ b/spicedb-common/src/services/zedservice.ts @@ -0,0 +1,215 @@ +import { RelationTuple as Relationship } from '@code/spicedb-common/src/protodevdefs/core/v1/core'; +import { useCallback, useEffect, useState } from 'react'; +import { parseRelationships } from '../parsing'; +import { RequestContext } from '../protodevdefs/developer/v1/developer'; + +const WASM_FILE = `${process.env.PUBLIC_URL}/static/zed.wasm`; +const ESTIMATED_WASM_BINARY_SIZE = 49262480; // bytes +const ENTRYPOINT_FUNCTION = 'runZedCommand'; + +/** + * ZedService exposes a service for running commands against an in-memory `zed` + * instance serviced by WASM. + */ +export interface ZedService { + /** + * state is the state of the developer service. + */ + state: ZedServiceState; + + /** + * start starts the zed service if it is in standby mode. + * @returns + */ + start: () => void; + + /** + * runCommand runs a zed command over the given schema and string containing + * relationships, returning the result. + * @param schema The schema as a string. + * @param relationshipsString A string with newline delimited relationships. + * @param args The args for the zed command without the `zed` itself. + * @returns The result of the command run. + */ + runCommand: ( + schema: string, + relationshipsString: string, + args: string[] + ) => CommandResult; +} + +export type CommandResult = { + updatedSchema: string | undefined; + updatedRelationships: Relationship[] | undefined; + output: string | undefined; + error: string | undefined; +}; + +export type ZedServiceState = + | { + status: + | 'standby' + | 'initializing' + | 'unsupported' + | 'loaderror' + | 'ready'; + } + | { + status: 'loading'; + progress: number; + }; + +const wasmVersion: number | string = Math.random(); + +export function useZedService(): ZedService { + const [state, setState] = useState({ + status: 'standby', + }); + + const loadWebAssembly = useCallback(async () => { + console.log('Loading zed package'); + + setState({ + status: 'loading', + progress: 0, + }); + + // WebAssembly.instantiateStreaming is not currently available in Safari + if (WebAssembly && !WebAssembly.instantiateStreaming) { + // polyfill + WebAssembly.instantiateStreaming = async (resp, importObject) => { + const source = await (await resp).arrayBuffer(); + return await WebAssembly.instantiate(source, importObject); + }; + } + + // Fetch the WASM file with progress tracking. + const fetched = await fetch(`${WASM_FILE}?_r=${wasmVersion}`); + const contentLength = +( + fetched.headers.get('Content-Length') ?? ESTIMATED_WASM_BINARY_SIZE + ); + + const reader = fetched.body?.getReader(); + if (!reader) { + console.warn('Failed to download developer package'); + setState({ + status: 'loaderror', + }); + return; + } + + let totalDownloaded = 0; + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + + totalDownloaded += value?.length ?? 0; + setState({ + status: 'loading', + progress: totalDownloaded / contentLength, + }); + } + + // Refetch, which should be from cache. + const go = new (window as any).Go(); + const refetched = await fetch(`${WASM_FILE}?_r=${wasmVersion}`); + + try { + const result = await WebAssembly.instantiateStreaming( + refetched, + go.importObject + ); + go.run(result.instance); + setState({ + status: 'ready', + }); + } catch (e) { + console.warn('Failed to load developer package:', e); + setState({ + status: 'loaderror', + }); + } + }, [setState]); + + useEffect(() => { + switch (state.status) { + case 'standby': + return; + + case 'initializing': + const initialized = (window as any)[ENTRYPOINT_FUNCTION]; + if (!!initialized) { + setState({ + status: 'ready', + }); + return; + } + + if (!global.WebAssembly || !(window as any).Go) { + console.error('WebAssembly is not supported in your browser'); + setState({ + status: 'unsupported', + }); + return; + } + + loadWebAssembly(); + break; + + case 'ready': + // Nothing to do. + break; + + case 'loading': + // Working + break; + + case 'loaderror': + // Nothing to do. + break; + + case 'unsupported': + // Nothing to do. + break; + } + }, [state, setState, loadWebAssembly]); + + return { + state: state, + start: () => { + if (state.status === 'standby') { + setState({ + status: 'initializing', + }); + return; + } + }, + runCommand: ( + schema: string, + relationshipsString: string, + args: string[] + ): CommandResult => { + const reqContext = { + schema: schema, + relationships: parseRelationships(relationshipsString), + }; + + const contextJSONString = RequestContext.toJsonString(reqContext); + + const result = JSON.parse( + (window as any)[ENTRYPOINT_FUNCTION](contextJSONString, args) + ); + const updatedContext = result.updated_context + ? RequestContext.fromJsonString(result.updated_context) + : undefined; + return { + updatedSchema: updatedContext?.schema, + updatedRelationships: updatedContext?.relationships, + output: result.output, + error: result.error, + }; + }, + }; +} diff --git a/spicedb-common/src/services/zedterminalservice.ts b/spicedb-common/src/services/zedterminalservice.ts new file mode 100644 index 0000000..c39ebed --- /dev/null +++ b/spicedb-common/src/services/zedterminalservice.ts @@ -0,0 +1,110 @@ +import { useState } from 'react'; +import { CommandResult, useZedService, ZedServiceState } from './zedservice'; + +/** + * ZedTerminalService is a service which exposes a virtual terminal for running + * zed commands. + */ +export interface ZedTerminalService { + /** + * runCommand runs the given command against zed, adding it to the terminal's + * history and output. + * @param cmd The command to run, including the `zed` prefixed (if entered) + * @param schema The schema against which to run the command. + * @param relationshipsString The string containing the newline-delimited relationships. + * @returns [the result of the command (if any), the updated number of history entries] + */ + runCommand: ( + cmd: string, + schema: string, + relationshipsString: string + ) => [CommandResult | undefined, number]; + + /** + * commandHistory is the history of commands entered. + */ + commandHistory: string[]; + + /** + * outputSections are the sections of the terminal output. + */ + outputSections: TerminalSection[]; + + /** + * state is the state of the underlying zed service. + */ + state: ZedServiceState; + + /** + * start starts the underlying zed service if necessary. + */ + start(): void; +} + +/** + * TerminalCommand is a command that was executed. + */ +export interface TerminalCommand { + command: string; +} + +/** + * TerminalOutput is output written to the terminal. + */ +export interface TerminalOutput { + output: string; +} + +/** + * TerminalSection represents a section of terminal output. + */ +export type TerminalSection = TerminalCommand | TerminalOutput; + +/** + * useZedTerminalService creates a new zed terminal service. + * @returns + */ +export function useZedTerminalService(): ZedTerminalService { + const zedService = useZedService(); + + const [terminalSections, setTerminalSections] = useState( + [] + ); + const [commandHistory, setCommandHistory] = useState([]); + + return { + runCommand: (cmd, schema, relationshipsString) => { + const cloned = Array.from(commandHistory); + cloned.push(cmd); + setCommandHistory(cloned); + + const updatedSections = Array.from(terminalSections); + updatedSections.push({ command: cmd }); + + if (cmd === 'clear') { + setTerminalSections([]); + return [undefined, cloned.length]; + } + + if (!cmd.startsWith('zed')) { + updatedSections.push({ output: `Only 'zed' commands (and 'clear') are supported` }); + setTerminalSections(updatedSections); + return [undefined, cloned.length]; + } + + const args = cmd.substring('zed '.length).split(' '); + const result = zedService.runCommand(schema, relationshipsString, args); + updatedSections.push({ + output: (result.output || result.error || '').trim(), + }); + setTerminalSections(updatedSections); + return [result, cloned.length]; + }, + commandHistory: commandHistory, + outputSections: terminalSections, + state: zedService.state, + start: () => { + zedService.start(); + }, + }; +} diff --git a/spicedb-common/src/types.d.ts b/spicedb-common/src/types.d.ts new file mode 100644 index 0000000..c8b1662 --- /dev/null +++ b/spicedb-common/src/types.d.ts @@ -0,0 +1,13 @@ +declare module '*.yaml' { + const data: any + export default data +} + +declare module '*.md' { + const data: any + export default data +} + +declare global { + interface Window { Go: any; } +} diff --git a/spicedb-common/src/validationfileformat.test.ts b/spicedb-common/src/validationfileformat.test.ts new file mode 100644 index 0000000..75fea2b --- /dev/null +++ b/spicedb-common/src/validationfileformat.test.ts @@ -0,0 +1,103 @@ +import { parseValidationYAML } from "./validationfileformat"; + +describe("parsing validation YAML", () => { + it("returns undefined for an empty file", () => { + expect(parseValidationYAML("")).toEqual({ + message: "data must be object", + }); + }); + + it("returns undefined for an invalid file", () => { + expect(parseValidationYAML("sdfdsfsdf")).toEqual({ + message: "data must be object", + }); + }); + + it("returns undefined for a file missing schema", () => { + expect(parseValidationYAML("schema: null")).toEqual({ + message: "data must have required property 'relationships'", + }); + }); + + it("returns undefined for a file missing relationships", () => { + expect( + parseValidationYAML(`schema: hi +relationships: null +`) + ).toEqual({ + message: "data/relationships must be string", + }); + }); + + it("returns properly for null assertions", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +assertions: null +`) + ).toHaveProperty("schema"); + }); + + it("returns properly for missing assertions", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +`) + ).toHaveProperty("schema"); + }); + + it("returns properly for null validation", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +assertions: {} +validation: null +`) + ).toHaveProperty("schema"); + }); + + it("returns properly for missing validation", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +assertions: {} +`) + ).toHaveProperty("schema"); + }); + + it("returns properly for invalid assertions", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +assertions: invalid +`) + ).toEqual({ message: "data/assertions must be object,null" }); + }); + + it("returns properly for invalid assertions list", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +assertions: [] +`) + ).toEqual({ message: "data/assertions must be object,null" }); + }); + + it("returns properly for invalid validation", () => { + expect( + parseValidationYAML(`schema: hi +relationships: hello +validation: invalid +`) + ).toEqual({ message: "data/validation must be object,null" }); + }); + + it("returns properly for fully valid", () => { + const parsed = parseValidationYAML(`schema: hi +relationships: hello +assertions: {} +validation: {} + `); + expect(parsed).toHaveProperty("schema"); + }); +}); diff --git a/spicedb-common/src/validationfileformat.ts b/spicedb-common/src/validationfileformat.ts new file mode 100644 index 0000000..1a3bc41 --- /dev/null +++ b/spicedb-common/src/validationfileformat.ts @@ -0,0 +1,97 @@ +import Ajv from "ajv"; +import yaml from "yaml"; + +export type AssertionData = { + assertTrue?: string[]; + assertFalse?: string[]; +}; + +export interface ParsedValidation { + schema: string; + relationships: string; + assertions?: AssertionData; + validation?: ValidationData; +} + +export type ValidationData = Record; + +const schema = { + type: "object", + properties: { + schema: { type: "string" }, + relationships: { type: "string" }, + assertions: { + type: ["object", "null"], + properties: { + assertTrue: { + type: "array", + items: { + type: "string", + }, + }, + assertFalse: { + type: "array", + items: { + type: "string", + }, + }, + additionalProperties: false, + }, + }, + validation: { + type: ["object", "null"], + additionalProperties: true, + }, + }, + required: ["schema", "relationships"], + additionalProperties: false, +}; + +export interface ParseValidationError { + message: string; +} + +/** + * parseValidationYAML parses the contents as a validation YAML, returning the ParsedValidation + * file or undefined if invalid. + */ +export const parseValidationYAML = ( + contents: string +): ParsedValidation | ParseValidationError => { + let parsed = undefined; + try { + parsed = yaml.parse(contents); + } catch (e) { + return { message: `parse error: ${e}` }; + } + + const ajv = new Ajv(); + const valid = ajv.validate(schema, parsed); + if (!valid) { + return { + message: ajv.errorsText(ajv.errors), + }; + } + + return parsed as ParsedValidation; +}; + +/** + * getValidationBlockContents returns the contents of the validation block. + */ +export const getValidationBlockContents = ( + validationBlockYaml: string +): string | undefined => { + let parsed = undefined; + try { + parsed = yaml.parse(validationBlockYaml); + } catch (e) { + console.log(e); + } + + if (parsed === undefined || typeof parsed["validation"] !== "object") { + return undefined; + } + + return yaml.stringify(parsed["validation"]); +}; diff --git a/spicedb-common/tsconfig.json b/spicedb-common/tsconfig.json new file mode 100644 index 0000000..7ad0b81 --- /dev/null +++ b/spicedb-common/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react", + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src", + ] +} \ No newline at end of file diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..9db1a25 --- /dev/null +++ b/vercel.json @@ -0,0 +1,65 @@ +{ + "headers": [ + { + "source": "/static/(.*)", + "headers": [ + { + "key": "Cache-Control", + "value": "max-age=31536000;" + }, + { + "key": "Content-Security-Policy", + "value": "frame-ancestors 'self';" + } + ] + }, + { + "source": "/index.html", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache;" + }, + { + "key": "Content-Security-Policy", + "value": "frame-ancestors 'self';" + } + ] + }, + { + "source": "/config.json", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache;" + }, + { + "key": "Content-Security-Policy", + "value": "frame-ancestors 'self';" + } + ] + }, + { + "source": "/config-env.js", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache;" + }, + { + "key": "Content-Security-Policy", + "value": "frame-ancestors 'self';" + } + ] + }, + { + "source": "/(.*)", + "headers": [ + { + "key": "Content-Security-Policy", + "value": "frame-ancestors 'self';" + } + ] + } + ] +} diff --git a/wasm/main.wasm b/wasm/main.wasm new file mode 100755 index 0000000..9aa257b --- /dev/null +++ b/wasm/main.wasm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af26f81fd57ac5d5573368fa2cf7a1be097a88f1155fae53cfd8b5e8801af1d7 +size 45260507 diff --git a/wasm/zed.wasm b/wasm/zed.wasm new file mode 100755 index 0000000..1069156 --- /dev/null +++ b/wasm/zed.wasm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:927d0bd5f6c6d2f2d4962dcde7580c0438f584a5f4f35e7fb471891c4ba598b0 +size 52643236 diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..e9f71ec --- /dev/null +++ b/yarn.lock @@ -0,0 +1,15252 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + +"@apollo/client@^3.0.0-beta.23", "@apollo/client@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.7.3.tgz#ab3fe31046e74bc1a3762363a185ba5bcfffc58b" + integrity sha512-nzZ6d6a4flLpm3pZOGpuAUxLlp9heob7QcCkyIqZlCLvciUibgufRfYTwfkWCc4NaGHGSZyodzvfr79H6oUwGQ== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@wry/context" "^0.7.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + graphql-tag "^2.12.6" + hoist-non-react-statics "^3.3.2" + optimism "^0.16.1" + prop-types "^15.7.2" + response-iterator "^0.2.6" + symbol-observable "^4.0.0" + ts-invariant "^0.10.3" + tslib "^2.3.0" + zen-observable-ts "^1.2.5" + +"@apollo/link-context@^2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@apollo/link-context/-/link-context-2.0.0-beta.3.tgz#0da6cec0cf63ccc180c27bdfb77990c19f4ebab6" + integrity sha512-oqdPayK9opMB80U+/vFiEwoSjtGLchys2vSysaCOE93LdotwQlmO0W0G2INN+tAgUfb+JEAj7rBwlBoXrHOy8A== + dependencies: + "@apollo/client" "^3.0.0-beta.23" + tslib "^1.9.3" + +"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.9.tgz#ac7996ceaafcf8f410119c8af0d1db4cf914a210" + integrity sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw== + +"@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.17": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.4.tgz#a70d06c58ae1fce39c23f8efd79f9d5eb8b2f397" + integrity sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" + integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== + dependencies: + "@babel/types" "^7.15.4" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" + integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-builder-react-jsx-experimental@^7.12.4": + version "7.12.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" + integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz#a6f8c3de208b1e5629424a9a63567f56501955fc" + integrity sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.7" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8" + integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== + dependencies: + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-member-expression-to-functions@^7.14.5", "@babel/helper-member-expression-to-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-module-transforms@^7.14.5": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz#d4279f7e3fd5f4d5d342d833af36d4dd87d7dc49" + integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.8" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + +"@babel/helper-module-transforms@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" + integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" + integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-simple-access@^7.14.5", "@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8", "@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== + dependencies: + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== + +"@babel/parser@^7.14.5": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.9.tgz#596c1ad67608070058ebf8df50c1eaf65db895a4" + integrity sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ== + +"@babel/parser@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.4.tgz#02f2931b822512d3aad17d475ae83da74a255a84" + integrity sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w== + +"@babel/parser@^7.16.0", "@babel/parser@^7.16.5": + version "7.16.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" + integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" + integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-async-generator-functions@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a" + integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@7.12.1", "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-class-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" + integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" + integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" + integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd" + integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-jsx@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-classes@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" + integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-flow-strip-types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.13": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== + dependencies: + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.15.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + dependencies: + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" + integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-display-name@7.12.1", "@babel/plugin-transform-react-display-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65" + integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx-development@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz#4c2a647de79c7e2b16bfe4540677ba3121e82a08" + integrity sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-jsx-development@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" + integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.14.5" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" + integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" + integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f" + integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-jsx@^7.14.5": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c" + integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.14.5" + "@babel/types" "^7.14.9" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-pure-annotations@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" + integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-spread@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/preset-env@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-env@^7.12.1": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.9.tgz#4a3bbbd745f20e9121d5925170bef040a21b7819" + integrity sha512-BV5JvCwBDebkyh67bPKBYVCC6gGw0MCzU6HfKe5Pm3upFpPVqiC/hB33zkOe0tVdAzaMywah0LSXQeD9v/BYdQ== + dependencies: + "@babel/compat-data" "^7.14.9" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.9" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@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-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.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.9" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.9" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.16.0" + semver "^6.3.0" + +"@babel/preset-env@^7.8.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" + integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.7" + core-js-compat "^3.7.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + 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" + +"@babel/preset-react@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.12.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" + integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.14.5" + "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/plugin-transform-react-jsx-development" "^7.14.5" + "@babel/plugin-transform-react-pure-annotations" "^7.14.5" + +"@babel/preset-typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.10.2": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" + integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/template@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/template@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8", "@babel/traverse@^7.15.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3" + integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.5" + "@babel/helper-environment-visitor" "^7.16.5" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.5" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.9.tgz#f2b19c3f2f77c5708d67fe8f6046e9cea2b5036d" + integrity sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + +"@babel/types@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d" + integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@craco/craco@^6.4.3": + version "6.4.3" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.4.3.tgz#784395b6ebab764056550a2860494d24c3abd44e" + integrity sha512-RzkXYmNzRCGUyG7mM+IUMM+nvrpSfA34352sPSGQN76UivAmCAht3sI4v5JKgzO05oUK9Zwi6abCKD7iKXI8hQ== + dependencies: + cosmiconfig "^7.0.1" + cosmiconfig-typescript-loader "^1.0.0" + cross-spawn "^7.0.0" + lodash "^4.17.15" + semver "^7.3.2" + webpack-merge "^4.2.2" + +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== + +"@cypress/request@^2.88.10": + version "2.88.10" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" + integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@emotion/babel-plugin@^11.7.1": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0" + integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/runtime" "^7.13.10" + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.5" + "@emotion/serialize" "^1.0.2" + babel-plugin-macros "^2.6.1" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.0.13" + +"@emotion/cache@^11.4.0", "@emotion/cache@^11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" + integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== + dependencies: + "@emotion/memoize" "^0.7.4" + "@emotion/sheet" "^1.1.0" + "@emotion/utils" "^1.0.0" + "@emotion/weak-memoize" "^0.2.5" + stylis "4.0.13" + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/is-prop-valid@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== + dependencies: + "@emotion/memoize" "^0.8.0" + +"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" + integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/react@^11.1.1": + version "11.8.2" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70" + integrity sha512-+1bcHBaNJv5nkIIgnGKVsie3otS0wF9f1T1hteF3WeVvMNQEtfZ4YyFpnphGoot3ilU/wWMgP2SgIDuHLE/wAA== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.7.1" + "@emotion/serialize" "^1.0.2" + "@emotion/utils" "^1.1.0" + "@emotion/weak-memoize" "^0.2.5" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" + integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== + dependencies: + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.4" + "@emotion/unitless" "^0.7.5" + "@emotion/utils" "^1.0.0" + csstype "^3.0.2" + +"@emotion/sheet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" + integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4", "@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" + integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== + +"@emotion/weak-memoize@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@fortawesome/fontawesome-common-types@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz#411e02a820744d3f7e0d8d9df9d82b471beaa073" + integrity sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ== + +"@fortawesome/fontawesome-common-types@6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz#88da2b70d6ca18aaa6ed3687832e11f39e80624b" + integrity sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ== + +"@fortawesome/fontawesome-svg-core@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz#3727552eff9179506e9203d72feb5b1063c11a21" + integrity sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw== + dependencies: + "@fortawesome/fontawesome-common-types" "6.4.0" + +"@fortawesome/free-solid-svg-icons@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz#2290ea5adcf1537cbd0c43de6feb38af02141d27" + integrity sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw== + dependencies: + "@fortawesome/fontawesome-common-types" "6.2.1" + +"@fortawesome/react-fontawesome@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz#d90dd8a9211830b4e3c08e94b63a0ba7291ddcf4" + integrity sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw== + dependencies: + prop-types "^15.8.1" + +"@gilbarbara/deep-equal@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@gilbarbara/deep-equal/-/deep-equal-0.1.2.tgz#1a106721368dba5e7e9fb7e9a3a6f9efbd8df36d" + integrity sha512-jk+qzItoEb0D0xSSmrKDDzf9sheQj/BAPxlgNxgmOaA3mxpUa6ndJLYGZKsJnIVEQSD8zcTbyILz7I0HcnBCRA== + +"@glideapps/glide-data-grid-cells@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@glideapps/glide-data-grid-cells/-/glide-data-grid-cells-4.0.2.tgz#e0867e369d8c47bcf89b67fda3ad04dd8988d972" + integrity sha512-e8eJnE63+T4eLr9/eRFln93nMKL/bI+C3wZ4iUPi1uznfOZeRDI7RMuojRgQf8o4layIhZ+qY1PjAR9c5eLZdQ== + dependencies: + "@glideapps/glide-data-grid" "4.0.2" + "@toast-ui/editor" "^3.1.3" + "@toast-ui/react-editor" "^3.1.3" + react-select "^5.2.2" + +"@glideapps/glide-data-grid@4.0.2", "@glideapps/glide-data-grid@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@glideapps/glide-data-grid/-/glide-data-grid-4.0.2.tgz#9cf0bcb167c5ebcdb3f297319a885902f4ecaeda" + integrity sha512-LalVVxeD6XIEonKtFNX9wyZCD1A97Q5KJAEsKgY1rNX7Ga2Qpod8/UAhYxzEf1n/3wXYOKc4w90vUpjVaeLk3g== + dependencies: + react-number-format "^4.4.1" + react-virtualized-auto-sizer "^1.0.2" + +"@graphql-typed-document-node/core@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" + integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + 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" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.0", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/expect-utils@^29.0.1": + version "29.0.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.1.tgz#c1a84ee66caaef537f351dd82f7c63d559cf78d5" + integrity sha512-Tw5kUUOKmXGQDmQ9TSgTraFFS7HMC1HG/B7y0AN2G2UzjdAXz9BzK2rmNpCSDl7g7y0Gf/VLBm//blonvhtOTQ== + dependencies: + jest-get-type "^29.0.0" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.0", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^29.0.1": + version "29.0.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.1.tgz#1985650acf137bdb81710ff39a4689ec071dd86a" + integrity sha512-ft01rxzVsbh9qZPJ6EFgAIj3PT9FCRfBF9Xljo2/33VDOUjLZr0ZJ2oKANqh9S/K0/GERCsHDAQlBwj7RxA+9g== + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@material-ui/core@^4.12.4": + version "4.12.4" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" + integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/styles" "^4.11.5" + "@material-ui/system" "^4.12.2" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.3" + "@types/react-transition-group" "^4.2.0" + clsx "^1.0.4" + hoist-non-react-statics "^3.3.2" + popper.js "1.16.1-lts" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + react-transition-group "^4.4.0" + +"@material-ui/icons@^4.11.3": + version "4.11.3" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" + integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== + dependencies: + "@babel/runtime" "^7.4.4" + +"@material-ui/lab@^4.0.0-alpha.61": + version "4.0.0-alpha.61" + resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" + integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.11.3" + clsx "^1.0.4" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + +"@material-ui/styles@^4.11.5": + version "4.11.5" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" + integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/hash" "^0.8.0" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.3" + clsx "^1.0.4" + csstype "^2.5.2" + hoist-non-react-statics "^3.3.2" + jss "^10.5.1" + jss-plugin-camel-case "^10.5.1" + jss-plugin-default-unit "^10.5.1" + jss-plugin-global "^10.5.1" + jss-plugin-nested "^10.5.1" + jss-plugin-props-sort "^10.5.1" + jss-plugin-rule-value-function "^10.5.1" + jss-plugin-vendor-prefixer "^10.5.1" + prop-types "^15.7.2" + +"@material-ui/system@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" + integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.11.3" + csstype "^2.5.2" + prop-types "^15.7.2" + +"@material-ui/types@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== + +"@material-ui/utils@^4.11.3": + version "4.11.3" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" + integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== + dependencies: + "@babel/runtime" "^7.4.4" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + +"@monaco-editor/loader@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.2.0.tgz#373fad69973384624e3d9b60eefd786461a76acd" + integrity sha512-cJVCG/T/KxXgzYnjKqyAgsKDbH9mGLjcXxN6AmwumBwa2rVFkwvGcUj1RJtD0ko4XqLqJxwqsN/Z/KURB5f1OQ== + dependencies: + state-local "^1.0.6" + +"@monaco-editor/react@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.3.1.tgz#d65bcbf174c39b6d4e7fec43d0cddda82b70a12a" + integrity sha512-f+0BK1PP/W5I50hHHmwf11+Ea92E5H1VZXs+wvKplWUWOfyMa1VVwqkJrXjRvbcqHL+XdIGYWhWNdi4McEvnZg== + dependencies: + "@monaco-editor/loader" "^1.2.0" + prop-types "^15.7.2" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== + dependencies: + mkdirp "^1.0.4" + +"@pmmmwh/react-refresh-webpack-plugin@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + +"@protobuf-ts/plugin-framework@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin-framework/-/plugin-framework-2.6.0.tgz#b65c57a51e63d6e008c9dc79992baf9727e2fba9" + integrity sha512-CHTPpwjX9VlidutYpDeYGLYwJp4+RrZQCL3fUudmUezW5rj3uA3+7v3iKPt9rS9RegfZQvBFOW42wWF0O/82ag== + dependencies: + "@protobuf-ts/runtime" "^2.6.0" + typescript "^3.9" + +"@protobuf-ts/plugin@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin/-/plugin-2.6.0.tgz#23475432e0029594cb814df7ad6b4125ac6a7af4" + integrity sha512-95Nf4mT2FzVvDE5nvWrd6SHpOX5VNBUVEujtnC4mTRfvsTwZWfiE+ZtoMHxpHQBMNrs28T69yGeFWrr6qLP4Wg== + dependencies: + "@protobuf-ts/plugin-framework" "^2.6.0" + "@protobuf-ts/protoc" "^2.6.0" + "@protobuf-ts/runtime" "^2.6.0" + "@protobuf-ts/runtime-rpc" "^2.6.0" + typescript "^3.9" + +"@protobuf-ts/protoc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@protobuf-ts/protoc/-/protoc-2.6.0.tgz#413d022dcf2138e0dd2c3a80a326cfdc72e2cbaf" + integrity sha512-Y+B3yn6jm9Mz1au4JJrADKpGmezlf9zv4S6bO3i8oJhOitEiFYHw3VdAbwJ+qqyHMe4KlgpzkiyO0uY8yeYN8g== + +"@protobuf-ts/runtime-rpc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.6.0.tgz#66fbcf6d9b0ad0d5b892d86ef4e1fbd17516a26e" + integrity sha512-PUAUUI4NJgg/3i0mfyxzrBsIs+V3/B+ybG2sDSf6mZhPYRZkUFBQqmnaFGx3UHOAU0JORqAIFC1dac6bUjaauw== + dependencies: + "@protobuf-ts/runtime" "^2.6.0" + +"@protobuf-ts/runtime@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.6.0.tgz#d823470768383c0657cdc87a745c19af5ef63550" + integrity sha512-ZXQxypattRL87U9Ki+unh2en+REp8m+VZDTCHHHt1gqTZpjbUn2zzELkSEmli+4WKWPEZRExIhzfAUz0xRskJQ== + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz#7dd84c17755d62b509577f2db37eb524d7ca88ca" + integrity sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sinclair/typebox@^0.24.1": + version "0.24.34" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.34.tgz#35b799cf98a203d1940c8ce06688f9a09fbc0f50" + integrity sha512-x3ejWKw7rpy30Bvm6U0AQMOHdjqe2E3YJrBHlTxH0KFsp77bBa+MH324nJxtXZFpnTy/JW2h5HPYVm0vG2WPnw== + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + dependencies: + ejs "^2.6.1" + magic-string "^0.25.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.5.0", "@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@testing-library/dom@^9.0.0": + version "9.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.1.tgz#8094f560e9389fb973fe957af41bf766937a9ee9" + integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== + dependencies: + "@adobe/css-tools" "^4.0.1" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" + integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.4.3": + version "14.4.3" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" + integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== + +"@toast-ui/editor@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@toast-ui/editor/-/editor-3.1.3.tgz#12f15dab1fc9c1db336683f51208f8ba8017abb9" + integrity sha512-4W8nKIhct4bGOKNMkYY2nGzt2k+8LUWlINwGZvCbNgIo6WKlcOarsbWD0o8stOAleaq2TeG6ixIvYK/wTG0OxA== + dependencies: + dompurify "^2.3.3" + prosemirror-commands "^1.1.9" + prosemirror-history "^1.1.3" + prosemirror-inputrules "^1.1.3" + prosemirror-keymap "^1.1.4" + prosemirror-model "^1.14.1" + prosemirror-state "^1.3.4" + prosemirror-view "^1.18.7" + +"@toast-ui/react-editor@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@toast-ui/react-editor/-/react-editor-3.1.3.tgz#5d55ecf08df4c6a230c104f5e4dbab9212107941" + integrity sha512-k5W53y/R3cZvSH3UfDgeT8L1k8MpRri4O9hcTeuXtnbkkCtPQjt0m696tKrZvSXRNeqa4mKT0m8uNbHJAqWD4g== + dependencies: + "@toast-ui/editor" "^3.1.3" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/aria-query@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" + integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + dependencies: + "@babel/types" "^7.3.0" + +"@types/color-hash@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/color-hash/-/color-hash-1.0.2.tgz#22aec4c488929804c875bd4ef6827499fce00151" + integrity sha512-QJCVXSVRse+mMvzWQ8vH6AcKxtqCgHPHf5abAdGn86DEeQdUpSJnKAeCa1+hZuohaUF3l4RhigC9akRx82Bwig== + +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + +"@types/d3-scale-chromatic@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#103124777e8cdec85b20b51fd3397c682ee1e954" + integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw== + +"@types/eslint@^7.2.6": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" + integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/file-saver@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.5.tgz#9ee342a5d1314bb0928375424a2f162f97c310c7" + integrity sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + dependencies: + "@types/node" "*" + +"@types/history@*": + version "4.7.8" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" + integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + +"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.0.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.0.0.tgz#bc66835bf6b09d6a47e22c21d7f5b82692e60e72" + integrity sha512-X6Zjz3WO4cT39Gkl0lZ2baFRaEMqJl5NC1OjElkwtNzAlbkr2K/WJXkBkH5VP0zx4Hgsd2TZYdOEfvp2Dxia+Q== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/jest@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" + integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json-schema@^7.0.8": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/line-column@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/line-column/-/line-column-1.0.0.tgz#fa5a59c21e885fef3739a273b43dacf55b63437f" + integrity sha512-wbw+IDRw/xY/RGy+BL6f4Eey4jsUgHQrMuA4Qj0CSG3x/7C2Oc57pmRoM2z3M4DkylWRz+G1pfX06sCXQm0J+w== + +"@types/linkify-it@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.0.tgz#c0ca4c253664492dbf47a646f31cfd483a6bbc95" + integrity sha512-x9OaQQTb1N2hPZ/LWJsqushexDvz7NgzuZxiRmZio44WPuolTZNHDBCrOxCzRVOMwamJRO2dWax5NbygOf1OTQ== + +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "18.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.2.tgz#c076ed1d7b6095078ad3cf21dfeea951842778b1" + integrity sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA== + +"@types/node@^14.14.31": + version "14.18.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24" + integrity sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A== + +"@types/node@^20.3.3": + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parsimmon@^1.10.6": + version "1.10.6" + resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.6.tgz#8fcf95990514d2a7624aa5f630c13bf2427f9cdd" + integrity sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA== + +"@types/prettier@^2.0.0": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/react-copy-to-clipboard@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz#558f2c38a97f53693e537815f6024f1e41e36a7e" + integrity sha512-otTJsJpofYAeaIeOwV5xBUGpo6exXG2HX7X4nseToCB2VgPEBxGBHCm/FecZ676doNR7HCSTVtmohxfG2b3/yQ== + dependencies: + "@types/react" "*" + +"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.10": + version "18.0.11" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" + integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + dependencies: + "@types/react" "*" + +"@types/react-page-visibility@^6.4.1": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@types/react-page-visibility/-/react-page-visibility-6.4.1.tgz#21c3bc4a3f310d38d188916cadc55f2bde65f27d" + integrity sha512-vNlYAqKhB2SU1HmF9ARFTFZN0NSPzWn8HSjBpFqYuQlJhsb/aSYeIZdygeqfSjAg0PZ70id2IFWHGULJwe59Aw== + dependencies: + "@types/react" "*" + +"@types/react-router-dom@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.0.tgz#8c4e0aa0ccaf638ba965829ad29a10ac3cbe2212" + integrity sha512-svUzpEpKDwK8nmfV2vpZNSsiijFNKY8+gUqGqvGGOVrXvX58k1JIJubZa5igkwacbq/0umphO5SsQn/BQsnKpw== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.8.tgz#4614e5ba7559657438e17766bb95ef6ed6acc3fa" + integrity sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-transition-group@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" + integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.0": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^17.0.38": + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + +"@types/sjcl@^1.0.30": + version "1.0.30" + resolved "https://registry.yarnpkg.com/@types/sjcl/-/sjcl-1.0.30.tgz#c1db866622ef4da56af081fa2e258d76fb255b89" + integrity sha512-4ebBtj1rx3Kh3To5RnPua+U4JzVwH2MxUmHQvAlxWpzmfmupBRyyXAIEQceon+e5tW9aBeOApTYA6EXfBysRyQ== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/styled-components@^5.1.26": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.1" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.1.tgz#014162a5cee6571819d48e999980694e2f657c3c" + integrity sha512-Gk9vaXfbzc5zCXI9eYE9BI5BNHEp4D3FWjgqBE/ePGYElLAP+KvxBcsdkwfIVvezs605oiyd/VrpiHe3Oeg+Aw== + dependencies: + "@types/jest" "*" + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/use-deep-compare-effect@^1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@types/use-deep-compare-effect/-/use-deep-compare-effect-1.5.1.tgz#738e24ace9610a1bf672d698a837c7c115ae4a00" + integrity sha512-IpPu2lOV4HWjuzncETLsPpeYKJEOfYHbx6Bn7leBwp5X+a8TBmd4jIBcMQJ5F+WXz/lYkeKphmB4uUij3W4Gdg== + dependencies: + use-deep-compare-effect "*" + +"@types/uuid@^9.0.1": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" + integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" + integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.12.tgz#0745ff3e4872b4ace98616d4b7e37ccbd75f9526" + integrity sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yauzl@^2.9.1": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" + integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.9.1.tgz#66758cbe129b965fe9c63b04b405d0cf5280868b" + integrity sha512-QRLDSvIPeI1pz5tVuurD+cStNR4sle4avtHhxA+2uyixWGFjKzJ+EaFVRW6dA/jOgjV5DTAjOxboQkRDE8cRlQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.9.1" + "@typescript-eslint/scope-manager" "4.9.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.9.1", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.9.1.tgz#86633e8395191d65786a808dc3df030a55267ae2" + integrity sha512-c3k/xJqk0exLFs+cWSJxIjqLYwdHCuLWhnpnikmPQD2+NGAx9KjLYlBDcSI81EArh9FDYSL6dslAUSwILeWOxg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.5.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.9.1.tgz#2d74c4db5dd5117379a9659081a4d1ec02629055" + integrity sha512-Gv2VpqiomvQ2v4UL+dXlQcZ8zCX4eTkoIW+1aGVWT6yTO+6jbxsw7yQl2z2pPl/4B9qa5JXeIbhJpONKjXIy3g== + dependencies: + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.9.1.tgz#cc2fde310b3f3deafe8436a924e784eaab265103" + integrity sha512-sa4L9yUfD/1sg9Kl8OxPxvpUcqxKXRjBeZxBuZSSV1v13hjfEJkn84n0An2hN8oLQ1PmEl2uA6FkI07idXeFgQ== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/types@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.9.1.tgz#a1a7dd80e4e5ac2c593bc458d75dd1edaf77faa2" + integrity sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz#6e5b86ff5a5f66809e1f347469fadeec69ac50bf" + integrity sha512-bzP8vqwX6Vgmvs81bPtCkLtM/Skh36NE6unu6tsDeU/ZFoYthlTXbBmpIrvosgiDKlWTfb2ZpPELHH89aQjeQw== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/visitor-keys@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz#d76374a58c4ead9e92b454d186fea63487b25ae1" + integrity sha512-9gspzc6UqLQHd7lXQS7oWs+hrYggspv/rk6zzEMhCbYwPE/sF7oxo7GAjkS35Tdlt7wguIG+ViWCPtVZHz/ybQ== + dependencies: + "@typescript-eslint/types" "4.9.1" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@wry/context@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.0.tgz#f903eceb89d238ef7e8168ed30f4511f92d83e06" + integrity sha512-sAgendOXR8dM7stJw3FusRxFHF/ZinU0lffsA2YTyyIOfic86JX02qlPqPVqJNZJPAxFt+2EE8bvq6ZlS0Kf+Q== + dependencies: + tslib "^2.1.0" + +"@wry/context@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" + integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.0": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.1.tgz#b22e4e1674d7bf1439f8ccdccfd6a785f6de68b0" + integrity sha512-FZKbdpbcVcbDxQrKcaBClNsQaMg9nof1RKM7mReJe5DKUzM5u8S7T+PqwNqvib5O2j2xxF1R4p5O3+b6baTrbw== + dependencies: + tslib "^2.1.0" + +"@wry/trie@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.0.tgz#3245e74988c4e3033299e479a1bf004430752463" + integrity sha512-Yw1akIogPhAT6XPYsRHlZZIS0tIGmAl9EYXHi2scf7LPKKqdqmow/Hu4kEqP2cJR3EjaU/9L0ZlAjFf3hFxmug== + dependencies: + tslib "^2.1.0" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.4.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +ajv@^8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-to-html@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.7.2.tgz#a92c149e4184b571eb29a0135ca001a8e2d710cb" + integrity sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g== + dependencies: + entities "^2.2.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" + +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axe-core@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz#70a7855888e287f7add66002211a423937063eaf" + integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== + dependencies: + babylon "^6.18.0" + +babel-jest@^26.6.0, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@2.8.0, babel-plugin-macros@^2.6.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-named-asset-import@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" + integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.14.0" + +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + +"babel-plugin-styled-components@>= 1.12.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz#0fac11402dc9db73698b55847ab1dc73f5197c54" + integrity sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@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-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== + dependencies: + "@babel/core" "7.12.3" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-proposal-decorators" "7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" + "@babel/plugin-proposal-numeric-separator" "7.12.1" + "@babel/plugin-proposal-optional-chaining" "7.12.1" + "@babel/plugin-transform-flow-strip-types" "7.12.1" + "@babel/plugin-transform-react-display-name" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.1" + "@babel/preset-env" "7.12.1" + "@babel/preset-react" "7.12.1" + "@babel/preset-typescript" "7.12.1" + "@babel/runtime" "7.12.1" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.5.5, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + 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" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.15.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" + integrity sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ== + dependencies: + caniuse-lite "^1.0.30001164" + colorette "^1.2.1" + electron-to-chromium "^1.3.612" + escalade "^3.1.1" + node-releases "^1.1.67" + +browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001164, caniuse-lite@^1.0.30001219: + version "1.0.30001252" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz" + integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.5: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" + integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== + dependencies: + string-width "^4.2.0" + optionalDependencies: + colors "1.4.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clsx@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-hash@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/color-hash/-/color-hash-2.0.2.tgz#abf735705da71874ddec7dcef50cd7479e7d64e9" + integrity sha512-6exeENAqBTuIR1wIo36mR8xVVBv6l1hSLd7Qmvf6158Ld1L15/dbahR9VUOiX7GmGJBCnQyS0EY+I8x+wa7egg== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + +colornames@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" + integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y= + +colors@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +convert-source-map@^1.5.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.14.0, core-js-compat@^3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.0.tgz#fced4a0a534e7e02f7e084bff66c701f8281805f" + integrity sha512-5D9sPHCdewoUK7pSUPfTF7ZhLh8k9/CoJXWUEo+F1dZT5Z1DVgcuRqUKhjeKW+YLb8f21rTFgWwQJiNw1hoZ5Q== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + +core-js-compat@^3.6.2, core-js-compat@^3.7.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + dependencies: + browserslist "^4.15.0" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.1.tgz#23f84048f366fdfcf52d3fd1c68fec349177d119" + integrity sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g== + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.6.5: + version "3.22.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.3.tgz#498c41d997654cb00e81c7a54b44f0ab21ab01d5" + integrity sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig-typescript-loader@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.6.tgz#6d879cece8063b15ec8a3258f55a8e94893c7cca" + integrity sha512-2nEotziYJWtNtoTjKbchj9QrdTT6DBxCvqjNKoDKARw+e2yZmTQCa07uRrykLIZuvSgp69YXLH89UHc0WhdMfQ== + dependencies: + cosmiconfig "^7" + ts-node "^10.6.0" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + 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" + +craco-babel-loader@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/craco-babel-loader/-/craco-babel-loader-1.0.3.tgz#9939113b2019815dc1f5cbab279b6309848bd389" + integrity sha512-kkXRwI8ieNO5ypmBz6NPz/4f5xQ/qFnI0g6O6ztkGpi/TEfMJQ65sZP3vYRJaHqfAx/V7YGxcSjkgA7U1thXJw== + +craco-esbuild@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/craco-esbuild/-/craco-esbuild-0.4.5.tgz#c3229b5851201efc882fe5062a39eaa78456e078" + integrity sha512-kBIZkNj0i8TZifK936GivJROGMU3DxUJ0xiWG0TP+VsigWL6RtIE4YMCb/3KoCTkwdbBHGMXEYwv8PebJuP9QQ== + dependencies: + "@svgr/webpack" "^5.5.0" + esbuild-jest "0.5.0" + esbuild-loader "^2.15.1" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== + dependencies: + "@babel/runtime" "^7.8.3" + is-in-browser "^1.0.2" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^2.5.2: + version "2.6.14" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.14.tgz#004822a4050345b55ad4dcc00be1d9cf2f4296de" + integrity sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A== + +csstype@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" + integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ== + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +cypress-wait-until@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-1.7.2.tgz#7f534dd5a11c89b65359e7a0210f20d3dfc22107" + integrity sha512-uZ+M8/MqRcpf+FII/UZrU7g1qYZ4aVlHcgyVopnladyoBrpoaMJ4PKZDrdOJ05H5RHbr7s9Tid635X3E+ZLU/Q== + +cypress@^12.9.0: + version "12.9.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.9.0.tgz#e6ab43cf329fd7c821ef7645517649d72ccf0a12" + integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== + dependencies: + "@cypress/request" "^2.88.10" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.4" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.6" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.3.2" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + +"d3-color@1 - 2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" + integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== + +"d3-interpolate@1 - 2": + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" + integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== + dependencies: + d3-color "1 - 2" + +d3-scale-chromatic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab" + integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA== + dependencies: + d3-color "1 - 2" + d3-interpolate "1 - 2" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +dayjs@^1.10.4: + version "1.10.8" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.8.tgz#267df4bc6276fcb33c04a6735287e3f429abec41" + integrity sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-equal@^2.0.5: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" + 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" + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dequal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.0.tgz#41c6065e70de738541c82cdbedea5292277a017e" + integrity sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw== + +dequal@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diff-sequences@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f" + integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.13" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" + integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" + integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +dompurify@^2.3.3: + version "2.3.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.6.tgz#2e019d7d7617aacac07cbbe3d88ae3ad354cf875" + integrity sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg== + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.612: + version "1.3.621" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.621.tgz#0bbe2100ef0b28f88d0b1101fbdf433312f69be0" + integrity sha512-FeIuBzArONbAmKmZIsZIFGu/Gc9AVGlVeVbhCq+G2YIl6QkT0TDn2HKN/FMf1btXEB9kEmIuQf3/lBTVAbmFOg== + +electron-to-chromium@^1.3.723: + version "1.3.792" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.792.tgz#791b0d8fcf7411885d086193fb49aaef0c1594ca" + integrity sha512-RM2O2xrNarM7Cs+XF/OE2qX/aBROyOZqqgP+8FXMXSuWuUqCfUUzg7NytQrzZU3aSqk1Qq6zqnVkJsbfMkIatg== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emitter-component@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.1.tgz#065e2dbed6959bf470679edabeaf7981d1003ab6" + integrity sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY= + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a" + integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +entities@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + 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" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +esbuild-android-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz#3705f32f209deeb11c275af47c298c8783dd5f0c" + integrity sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ== + +esbuild-darwin-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz#c07e4eae6d938300a2d330ea82494c55bcea84e5" + integrity sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg== + +esbuild-darwin-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz#a8631e13a51a6f784fb0906e2a64c6ab53988755" + integrity sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg== + +esbuild-freebsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz#c280c2b944746b27ee6c6487c2691865c90bed2e" + integrity sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA== + +esbuild-freebsd-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz#aa4e21276efcf20e5ab2487e91ca1d789573189b" + integrity sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA== + +esbuild-jest@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/esbuild-jest/-/esbuild-jest-0.5.0.tgz#7a9964bfdecafca3b675a8aeb08193bcdba8b9d7" + integrity sha512-AMZZCdEpXfNVOIDvURlqYyHwC8qC1/BFjgsrOiSL1eyiIArVtHL8YAC83Shhn16cYYoAWEW17yZn0W/RJKJKHQ== + dependencies: + "@babel/core" "^7.12.17" + "@babel/plugin-transform-modules-commonjs" "^7.12.13" + babel-jest "^26.6.3" + +esbuild-linux-32@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz#3db4d929239203ce38a9060d5419ac6a6d28846c" + integrity sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg== + +esbuild-linux-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz#f880026254c1f565a7a10fdebb7cff9b083a127d" + integrity sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ== + +esbuild-linux-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz#a34bc3076e50b109c3b8c8bad9c146e35942322b" + integrity sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw== + +esbuild-linux-arm@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz#231ffd12fef69ee06365d4c94b69850e4830e927" + integrity sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ== + +esbuild-linux-mips64le@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz#bd00570e3a30422224b732c7a5f262146c357403" + integrity sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg== + +esbuild-linux-ppc64le@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz#430609413fd9e04d9def4e3f06726b031b23d825" + integrity sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w== + +esbuild-linux-s390x@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz#2f0d8cbfe53cf3cb97f6372549a41a8051dbd689" + integrity sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw== + +esbuild-loader@^2.15.1: + version "2.18.0" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.18.0.tgz#7b9548578ab954574fd94655693d22aa5ec74120" + integrity sha512-AKqxM3bI+gvGPV8o6NAhR+cBxVO8+dh+O0OXBHIXXwuSGumckbPWHzZ17subjBGI2YEGyJ1STH7Haj8aCrwL/w== + dependencies: + esbuild "^0.14.6" + joycon "^3.0.1" + json5 "^2.2.0" + loader-utils "^2.0.0" + tapable "^2.2.0" + webpack-sources "^2.2.0" + +esbuild-netbsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz#3e44de35e1add7e9582f3c0d2558d86aafbc813b" + integrity sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ== + +esbuild-openbsd-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz#04710ef1d01cd9f15d54f50d20b5a3778f8306a2" + integrity sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg== + +esbuild-sunos-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz#8e583dd92c5c7ac4303ddc37f588e44211e04e19" + integrity sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ== + +esbuild-windows-32@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz#6d293ddfb71229f21cc13d85d5d2f43e8131693b" + integrity sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg== + +esbuild-windows-64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz#08a36844b69542f8ec1cb33a5ddcea02b9d0b2e8" + integrity sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A== + +esbuild-windows-arm64@0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz#ca747ce4066d5b8a79dbe48fe6ecd92d202e5366" + integrity sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg== + +esbuild@^0.14.6: + version "0.14.14" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.14.tgz#3b99f20d628013c3e2ae90e67687e03f1d6eb071" + integrity sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg== + optionalDependencies: + esbuild-android-arm64 "0.14.14" + esbuild-darwin-64 "0.14.14" + esbuild-darwin-arm64 "0.14.14" + esbuild-freebsd-64 "0.14.14" + esbuild-freebsd-arm64 "0.14.14" + esbuild-linux-32 "0.14.14" + esbuild-linux-64 "0.14.14" + esbuild-linux-arm "0.14.14" + esbuild-linux-arm64 "0.14.14" + esbuild-linux-mips64le "0.14.14" + esbuild-linux-ppc64le "0.14.14" + esbuild-linux-s390x "0.14.14" + esbuild-netbsd-64 "0.14.14" + esbuild-openbsd-64 "0.14.14" + esbuild-sunos-64 "0.14.14" + esbuild-windows-32 "0.14.14" + esbuild-windows-64 "0.14.14" + esbuild-windows-arm64 "0.14.14" + +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-react-app@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== + dependencies: + confusing-browser-globals "^1.0.10" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.0.tgz#a4bef5dc18f9b2bdb41569a4ab05d73805a3d261" + integrity sha512-z7ULdTxuhlRJcEe1MVljePXricuPOrsWfScRXFhNzVD5dmTHWjIF57AxD0e7AbEoLSbjSsaA5S+hCg43WvpXJQ== + dependencies: + lodash "^4.17.15" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jest@^24.1.0: + version "24.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" + integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== + dependencies: + "@typescript-eslint/experimental-utils" "^4.0.1" + +eslint-plugin-jsx-a11y@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.21.5: + version "7.21.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-plugin-testing-library@^3.9.2: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.1.tgz#4dd02306d601c3238fdabf1d1dbc5f2a8e85d531" + integrity sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ== + dependencies: + "@typescript-eslint/experimental-utils" "^3.10.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-webpack-plugin@^2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz#473b84932f1a8e2c2b8e66a402d0497bf440b986" + integrity sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw== + dependencies: + "@types/eslint" "^7.2.6" + arrify "^2.0.1" + jest-worker "^26.6.2" + micromatch "^4.0.2" + normalize-path "^3.0.0" + schema-utils "^3.0.0" + +eslint@^7.11.0: + version "7.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" + integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.1.2" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.2.tgz#bc75ae1c60209e7cb1541231980460343eaea7c2" + integrity sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@4.1.0, execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exenv@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.0, expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +expect@^29.0.0: + version "29.0.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.1.tgz#a2fa64a59cffe4b4007877e730bc82be3d1742bb" + integrity sha512-yQgemsjLU+1S8t2A7pXT3Sn/v5/37LY8J+tocWtKEA0iEYYc6gfKbbJJX2fxHZmd7K9WpdbQqXUpmYkq1aewYg== + dependencies: + "@jest/expect-utils" "^29.0.1" + jest-get-type "^29.0.0" + jest-matcher-utils "^29.0.1" + jest-message-util "^29.0.1" + jest-util "^29.0.1" + +express@^4.17.1: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + 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" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + +file-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-saver@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + +file-select-dialog@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/file-select-dialog/-/file-select-dialog-1.5.4.tgz#71c774401bf3bb6217ddf8fdbafbb1ec1163ebc1" + integrity sha512-KrutaoxLbYGx8WSBsKJEVysGU+us9uXzvzUcOY9RkegS21RUgoRvtQIm42qJosS3jJrFqJ5ZHyi0Dw/frpDmgw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + 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" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" + integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== + +fontsource-roboto@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fontsource-roboto/-/fontsource-roboto-4.0.0.tgz#35eacd4fb8d90199053c0eec9b34a57fb79cd820" + integrity sha512-zD6L8nvdWRcwSgp4ojxFchG+MPj8kXXQKDEAH9bfhbxy+lkpvpC1WgAK0lCa4dwobv+hvAe0uyHaawcgH7WH/g== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fsevents@^2.1.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.1, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-intrinsic@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + 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" + +get-node-dimensions@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823" + integrity sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + 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" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@11.0.1, globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +google-protobuf@^3.21.2: + version "3.21.2" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" + integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@16.6.0: + version "16.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +grpc-web@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/grpc-web/-/grpc-web-1.3.1.tgz#6d8affe75a103790b7ad570824e765a1d6a418e4" + integrity sha512-VxyYEAGsatecAFY3xieRDzsuhm92yQBsJD7fd5Z3MY150hZWPwkrUWetzJ0QK5W0uym4+VedPQrei38wk0eIjQ== + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +hammerjs@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" + integrity sha1-BO93hiz/K7edMPdpIJWTAiK/YPE= + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hex-rgb@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.2.1, html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" + integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +hyphenate-style-name@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +install@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776" + integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +internal-slot@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-callable@^1.1.4, is-callable@^1.2.2, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.0.0, is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= + +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-lite@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/is-lite/-/is-lite-0.8.2.tgz#26ab98b32aae8cc8b226593b9a641d2bf4bd3b6a" + integrity sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw== + +is-lite@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/is-lite/-/is-lite-0.9.2.tgz#4b19e9a26b7c99ed50f748bcf088db57893d0730" + integrity sha512-qZuxbaEiKLOKhX4sbHLfhFN9iA3YciuZLb37/DfXCpWnz8p7qNL2lwkpxYMXfjlS8eEEjpULPZxAUI8N6FYvYQ== + +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-negative-zero@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regex@^1.1.1, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.1, is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + 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" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-circus@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" + integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.0" + "@jest/test-result" "^26.6.0" + "@jest/types" "^26.6.0" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.0" + is-generator-fn "^2.0.0" + jest-each "^26.6.0" + jest-matcher-utils "^26.6.0" + jest-message-util "^26.6.0" + jest-runner "^26.6.0" + jest-runtime "^26.6.0" + jest-snapshot "^26.6.0" + jest-util "^26.6.0" + pretty-format "^26.6.0" + stack-utils "^2.0.2" + throat "^5.0.0" + +jest-cli@^26.6.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-diff@^29.0.1: + version "29.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.1.tgz#d14e900a38ee4798d42feaaf0c61cb5b98e4c028" + integrity sha512-l8PYeq2VhcdxG9tl5cU78ClAlg/N7RtVSp0v3MlXURR0Y99i6eFnegmasOandyTmO6uEdo20+FByAjBFEO9nuw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.0.0" + jest-get-type "^29.0.0" + pretty-format "^29.0.1" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.0, jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-get-type@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" + integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^29.0.1: + version "29.0.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.1.tgz#eaa92dd5405c2df9d31d45ec4486361d219de3e9" + integrity sha512-/e6UbCDmprRQFnl7+uBKqn4G22c/OmwriE5KCMVqxhElKCQUDcFnq5XM9iJeKtzy4DUjxT27y9VHmKPD8BQPaw== + dependencies: + chalk "^4.0.0" + jest-diff "^29.0.1" + jest-get-type "^29.0.0" + pretty-format "^29.0.1" + +jest-message-util@^26.6.0, jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-message-util@^29.0.1: + version "29.0.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.1.tgz#85c4b5b90296c228da158e168eaa5b079f2ab879" + integrity sha512-wRMAQt3HrLpxSubdnzOo68QoTfQ+NLXFzU0Heb18ZUzO2S9GgaXNEdQ4rpd0fI9dq2NXkpCk1IUWSqzYKji64A== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.0.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.0.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" + integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + dependencies: + "@jest/types" "^26.6.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.0, jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.0, jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-util@^29.0.1: + version "29.0.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.1.tgz#f854a4a8877c7817316c4afbc2a851ceb2e71598" + integrity sha512-GIWkgNfkeA9d84rORDHPGGTFBrRD13A38QVSKE0bVrGSnoR1KDn8Kqz+0yI5kezMgbT/7zrWaruWP1Kbghlb2A== + dependencies: + "@jest/types" "^29.0.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watch-typeahead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^26.5.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" + integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + dependencies: + "@jest/core" "^26.6.0" + import-local "^3.0.2" + jest-cli "^26.6.0" + +joycon@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.4.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jss-plugin-camel-case@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" + integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== + dependencies: + "@babel/runtime" "^7.3.1" + hyphenate-style-name "^1.0.3" + jss "10.9.0" + +jss-plugin-default-unit@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" + integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-global@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" + integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-nested@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" + integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-props-sort@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" + integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-rule-value-function@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" + integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-vendor-prefixer@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" + integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== + dependencies: + "@babel/runtime" "^7.3.1" + css-vendor "^2.0.8" + jss "10.9.0" + +jss@10.9.0, jss@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" + integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== + dependencies: + "@babel/runtime" "^7.3.1" + csstype "^3.0.2" + is-in-browser "^1.1.3" + tiny-warning "^1.0.2" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb" + integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q== + dependencies: + array-includes "^3.1.4" + object.assign "^4.1.2" + +jsx-ast-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.1" + +keycharm@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/keycharm/-/keycharm-0.2.0.tgz#fa6ea2e43b90a68028843d27f2075d35a8c3e6f9" + integrity sha1-+m6i5DuQpoAohD0n8gddNajD5vk= + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + +lodash.trimstart@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" + integrity sha1-j/TexTLYJIavWVc8OURZFOlEp/E= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.words@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-4.2.0.tgz#5ecfeaf8ecf8acaa8e0c8386295f1993c9cf4036" + integrity sha1-Xs/q+Oz4rKqODIOGKV8Zk8nPQDY= + +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-it@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +marked@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.10.tgz#423e295385cc0c3a70fa495e0df68b007b879423" + integrity sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" + integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@^2.20.1: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +monaco-editor-core@^0.39.0: + version "0.39.0" + resolved "https://registry.yarnpkg.com/monaco-editor-core/-/monaco-editor-core-0.39.0.tgz#bfa19ba4e57d62741acd30a0e5a4e928f7c3bbf0" + integrity sha512-40OuC5krS/kmXMXj0tJgRnxS5ia+3uSdP6jgiNHitns7kQHN/jFkRIW6MCS8JrxlmSNHBLnQjDa+0ZPIRGnLrA== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-notifier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.61, node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + +node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +nwsapi@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" + integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-is@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + 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" + +object.entries@^1.1.0, object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" + integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.values@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.3.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.3.0.tgz#45461fdee46444f3645b6e14eb3ca94b82e1be69" + integrity sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimism@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d" + integrity sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg== + dependencies: + "@wry/context" "^0.6.0" + "@wry/trie" "^0.3.0" + +optimize-css-assets-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + 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" + +orderedmap@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.1.5.tgz#4174c90b61bd7c25294932edf789f3b5677744d0" + integrity sha512-/fzlCGKRmfayGoI9UUXvJfc2nMZlJHW30QqEvwPvlg8tsX7jyiUSomYie6mYqx7Z9bOMGoag0H/q1PS/0PjYkg== + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +parsimmon@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.18.1.tgz#d8dd9c28745647d02fc6566f217690897eed7709" + integrity sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0, pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +popper.js@1.16.1-lts: + version "1.16.1-lts" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== + +popper.js@^1.16.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + dependencies: + postcss "^7" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== + dependencies: + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-safe-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + dependencies: + postcss "^8.1.0" + +postcss-safe-parser@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" + integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.2: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.0: + version "8.4.37" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.37.tgz#4505f992cd0c20e03d25f13b31901640b2db731a" + integrity sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^26.6.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^29.0.0, pretty-format@^29.0.1: + version "29.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.1.tgz#2f8077114cdac92a59b464292972a106410c7ad0" + integrity sha512-iTHy3QZMzuL484mSTYbQIM1AHhEQsH8mXWS2/vd2yFBYnG3EBqGiMONo28PlPgrW7P/8s/1ISv+y7WH306l8cw== + dependencies: + "@jest/schemas" "^29.0.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + +prompts@2.4.0, prompts@^2.0.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +propagating-hammerjs@^1.4.6: + version "1.5.0" + resolved "https://registry.yarnpkg.com/propagating-hammerjs/-/propagating-hammerjs-1.5.0.tgz#223d58465489b64879fb0cef2c99ba92b294c239" + integrity sha512-3PUXWmomwutoZfydC+lJwK1bKCh6sK6jZGB31RUX6+4EXzsbkDZrK4/sVR7gBrvJaEIwpTVyxQUAd29FKkmVdw== + dependencies: + hammerjs "^2.0.8" + +prosemirror-commands@^1.1.9: + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz#1bd167372ee20abf488aca9cece63c43fab182c9" + integrity sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-history@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.2.0.tgz#04cc4df8d2f7b2a46651a2780de191ada6d465ea" + integrity sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ== + dependencies: + prosemirror-state "^1.2.2" + prosemirror-transform "^1.0.0" + rope-sequence "^1.3.0" + +prosemirror-inputrules@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.1.3.tgz#93f9199ca02473259c30d7e352e4c14022d54638" + integrity sha512-ZaHCLyBtvbyIHv0f5p6boQTIJjlD6o2NPZiEaZWT2DA+j591zS29QQEMT4lBqwcLW3qRSf7ZvoKNbf05YrsStw== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-keymap@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.1.5.tgz#b5984c7d30f5c75956c853126c54e9e624c0327b" + integrity sha512-8SZgPH3K+GLsHL2wKuwBD9rxhsbnVBTwpHCO4VUO5GmqUQlxd/2GtBVWTsyLq4Dp3N9nGgPd3+lZFKUDuVp+Vw== + dependencies: + prosemirror-state "^1.0.0" + w3c-keyname "^2.2.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.14.1, prosemirror-model@^1.16.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.16.1.tgz#fb388270bc9609b66298d6a7e15d0cc1d6c61253" + integrity sha512-r1/w0HDU40TtkXp0DyKBnFPYwd8FSlUSJmGCGFv4DeynfeSlyQF2FD0RQbVEMOe6P3PpUSXM6LZBV7W/YNZ4mA== + dependencies: + orderedmap "^1.1.0" + +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.3.4.tgz#4c6b52628216e753fc901c6d2bfd84ce109e8952" + integrity sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.4.1.tgz#d34ed699c5e7721b97f6c2dae080e48dbf3de134" + integrity sha512-H/yrA934hJeHjANq6QArqjzg+kdyIq7gf4qEY/EX3WEaVnc+mX+yvyIwE7W4iqQ8Bmps4kZxECHaWMnolPRsGA== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-view@^1.18.7: + version "1.23.11" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.11.tgz#297f6ef8d10e1ff78c505d9c57358e062810a80e" + integrity sha512-iBqsyrQZz9NYcJ13JC7sPZ+4PdbBbUXhs1qzbxkDQ2tplcVROwxmAn3bnxpVFst/guv+XFI5KTHHbw5stvKt0g== + dependencies: + prosemirror-model "^1.16.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" + integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + dependencies: + core-js "^3.6.5" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + whatwg-fetch "^3.4.1" + +react-cookie@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-4.1.1.tgz#832e134ad720e0de3e03deaceaab179c4061a19d" + integrity sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A== + dependencies: + "@types/hoist-non-react-statics" "^3.0.1" + hoist-non-react-statics "^3.0.0" + universal-cookie "^4.0.0" + +react-countdown@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/react-countdown/-/react-countdown-2.3.5.tgz#70c035b5cbc7e8fdb4ad91fe5f44afd7a7933a68" + integrity sha512-K26ENYEesMfPxhRRtm1r+Pf70SErrvW3g4CArLi/x6MPFjgfDFYePT4UghEj8p2nI0cqVV7/JjDgjyr//U60Og== + dependencies: + prop-types "^15.7.2" + +react-dev-utils@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-easy-swipe@^0.0.21: + version "0.0.21" + resolved "https://registry.yarnpkg.com/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz#ce9384d576f7a8529dc2ca377c1bf03920bac8eb" + integrity sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg== + dependencies: + prop-types "^15.5.8" + +react-error-overlay@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + +react-floater@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/react-floater/-/react-floater-0.7.6.tgz#a98ee90e3d51200c6e6a564ff33496f3c0d7cfee" + integrity sha512-tt/15k/HpaShbtvWCwsQYLR+ebfUuYbl+oAUJ3DcEDkgYKeUcSkDey2PdAIERdVwzdFZANz47HbwoET2/Rduxg== + dependencies: + deepmerge "^4.2.2" + exenv "^1.2.2" + is-lite "^0.8.2" + popper.js "^1.16.0" + prop-types "^15.8.1" + react-proptype-conditional-require "^1.0.4" + tree-changes "^0.9.1" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-joyride@^2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/react-joyride/-/react-joyride-2.5.3.tgz#3e753f80502a74abcc956babec4873d204345911" + integrity sha512-DKKvb/JAAsHm0x/RWO3WI6NOtTMHDso5v8MTauxTSz2dFs7Tu1rWg1BDBWmEMj6pUCvem7hblFbCiDAcvhs8tQ== + dependencies: + deepmerge "^4.2.2" + exenv "^1.2.2" + is-lite "^0.9.2" + prop-types "^15.8.1" + react-floater "^0.7.6" + react-is "^16.13.1" + scroll "^3.0.1" + scrollparent "^2.0.1" + tree-changes "^0.9.2" + +react-measure@^2.0.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-measure/-/react-measure-2.5.2.tgz#4ffc410e8b9cb836d9455a9ff18fc1f0fca67f89" + integrity sha512-M+rpbTLWJ3FD6FXvYV6YEGvQ5tMayQ3fGrZhRPHrE9bVlBYfDCLuDcgNttYfk8IqfOI03jz6cbpqMRTUclQnaA== + dependencies: + "@babel/runtime" "^7.2.0" + get-node-dimensions "^1.2.1" + prop-types "^15.6.2" + resize-observer-polyfill "^1.5.0" + +react-number-format@^4.4.1: + version "4.9.0" + resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-4.9.0.tgz#fd1defb74cc6ccc43a9e579f67d752c03ba897e4" + integrity sha512-HC4ZfvZSm6Gqq77/D4gz823XkvqK4AWAg4PxPv9Paz08hryAOnDjZk89iWmRLafeSOYG3TOx37ypHXMRez8q+w== + dependencies: + prop-types "^15.7.2" + +react-page-visibility@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/react-page-visibility/-/react-page-visibility-7.0.0.tgz#13dfe604790d061e70b900038bad1ca769a36cbc" + integrity sha512-d4Kq/8TtJSr8dQc8EJeAZcSKTrGzC5OPTm6UrMur9BnwP0fgTawI9+Nd+ZGB7vwCfn2yZS0qDF9DR3/QYTGazw== + dependencies: + prop-types "^15.7.2" + +react-proptype-conditional-require@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz#69c2d5741e6df5e08f230f36bbc2944ee1222555" + integrity sha1-acLVdB5t9eCPIw82u8KUTuEiJVU= + +react-reflex@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/react-reflex/-/react-reflex-4.0.9.tgz#3f20d0afacb43f5f37b93e0b56f5042b63b54d06" + integrity sha512-XFTNRekFK4ul8mzVd1lniKT/SI0FvNYhXyLNl5gagS1i3iW9QKlpFYcRfVhZlxxaYHb8UyLOs3+H4Ay5cjtbxQ== + dependencies: + "@babel/runtime" "^7.0.0" + lodash.throttle "^4.1.1" + prop-types "^15.5.8" + react-measure "^2.0.2" + +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-responsive-carousel@^3.2.23: + version "3.2.23" + resolved "https://registry.yarnpkg.com/react-responsive-carousel/-/react-responsive-carousel-3.2.23.tgz#4c0016ff54603e604bb5c1f9e7ef2d1eda133f1d" + integrity sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg== + dependencies: + classnames "^2.2.5" + prop-types "^15.5.8" + react-easy-swipe "^0.0.21" + +react-router-dom@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-scripts@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.3.tgz#b1cafed7c3fa603e7628ba0f187787964cb5d345" + integrity sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A== + dependencies: + "@babel/core" "7.12.3" + "@pmmmwh/react-refresh-webpack-plugin" "0.4.3" + "@svgr/webpack" "5.5.0" + "@typescript-eslint/eslint-plugin" "^4.5.0" + "@typescript-eslint/parser" "^4.5.0" + babel-eslint "^10.1.0" + babel-jest "^26.6.0" + babel-loader "8.1.0" + babel-plugin-named-asset-import "^0.3.7" + babel-preset-react-app "^10.0.0" + bfj "^7.0.2" + camelcase "^6.1.0" + case-sensitive-paths-webpack-plugin "2.3.0" + css-loader "4.3.0" + dotenv "8.2.0" + dotenv-expand "5.1.0" + eslint "^7.11.0" + eslint-config-react-app "^6.0.0" + eslint-plugin-flowtype "^5.2.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jest "^24.1.0" + eslint-plugin-jsx-a11y "^6.3.1" + eslint-plugin-react "^7.21.5" + eslint-plugin-react-hooks "^4.2.0" + eslint-plugin-testing-library "^3.9.2" + eslint-webpack-plugin "^2.5.2" + file-loader "6.1.1" + fs-extra "^9.0.1" + html-webpack-plugin "4.5.0" + identity-obj-proxy "3.0.0" + jest "26.6.0" + jest-circus "26.6.0" + jest-resolve "26.6.0" + jest-watch-typeahead "0.6.1" + mini-css-extract-plugin "0.11.3" + optimize-css-assets-webpack-plugin "5.0.4" + pnp-webpack-plugin "1.6.4" + postcss-flexbugs-fixes "4.2.1" + postcss-loader "3.0.0" + postcss-normalize "8.0.1" + postcss-preset-env "6.7.0" + postcss-safe-parser "5.0.2" + prompts "2.4.0" + react-app-polyfill "^2.0.0" + react-dev-utils "^11.0.3" + react-refresh "^0.8.3" + resolve "1.18.1" + resolve-url-loader "^3.1.2" + sass-loader "^10.0.5" + semver "7.3.2" + style-loader "1.3.0" + terser-webpack-plugin "4.2.3" + ts-pnp "1.2.0" + url-loader "4.1.1" + webpack "4.44.2" + webpack-dev-server "3.11.1" + webpack-manifest-plugin "2.2.0" + workbox-webpack-plugin "5.1.4" + optionalDependencies: + fsevents "^2.1.3" + +react-select@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.2.2.tgz#3d5edf0a60f1276fd5f29f9f90a305f0a25a5189" + integrity sha512-miGS2rT1XbFNjduMZT+V73xbJEeMzVkJOz727F6MeAr2hKE0uUSA8Ff7vD44H32x2PD3SRB6OXTY/L+fTV3z9w== + dependencies: + "@babel/runtime" "^7.12.0" + "@emotion/cache" "^11.4.0" + "@emotion/react" "^11.1.1" + "@types/react-transition-group" "^4.4.0" + memoize-one "^5.0.0" + prop-types "^15.6.0" + react-transition-group "^4.3.0" + +react-transition-group@^4.3.0, react-transition-group@^4.4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react-virtualized-auto-sizer@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz#66c5b1c9278064c5ef1699ed40a29c11518f97ca" + integrity sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ== + +react@^18.0.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" + integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== + dependencies: + loose-envify "^1.1.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + 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" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" + integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= + dependencies: + throttleit "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url-loader@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +response-iterator@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" + integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rgb-hex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-3.0.0.tgz#eab0168cc1279563b18a14605315389142e2e487" + integrity sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-babel@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-terser@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.31.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +rope-sequence@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.2.tgz#a19e02d72991ca71feb6b5f8a91154e48e3c098b" + integrity sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg== + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^7.5.1: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + +sass-loader@^10.0.5: + version "10.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" + integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +scroll@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scroll/-/scroll-3.0.1.tgz#d5afb59fb3592ee3df31c89743e78b39e4cd8a26" + integrity sha512-pz7y517OVls1maEzlirKO5nPYle9AXsFzTMNJrRGmT951mzpIBy7sNHOg5o/0MQd/NqliCiWnAi0kZneMPFLcg== + +scrollparent@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/scrollparent/-/scrollparent-2.0.1.tgz#715d5b9cc57760fb22bdccc3befb5bfe06b1a317" + integrity sha1-cV1bnMV3YPsivczDvvtb/gaxoxc= + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.2.1, semver@^7.3.2: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + 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" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + 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" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.2, side-channel@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + dependencies: + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sjcl@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/sjcl/-/sjcl-1.0.8.tgz#f2ec8d7dc1f0f21b069b8914a41a8f236b0e252a" + integrity sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + 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" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + 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" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" + integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== + +state-local@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" + integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-to-color@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/string-to-color/-/string-to-color-2.2.2.tgz#46210bf7777dc9198dcdf997bd18ae6749cc9a73" + integrity sha512-XeA2goP7PNsSlz8RRn6KhYswnMf5Tl+38ajfy8n4oZJyMGC4qqKgHNHsZ/3qwvr42NRIjf9eSr721SyetDeMkA== + dependencies: + colornames "^1.1.1" + hex-rgb "^4.1.0" + lodash.padend "^4.6.1" + lodash.trimstart "^4.5.1" + lodash.words "^4.2.0" + rgb-hex "^3.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" + integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + +string.prototype.replaceall@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.replaceall/-/string.prototype.replaceall-1.0.6.tgz#566cba7c413713d0b1a85c5dba98b31f8db38196" + integrity sha512-OA8VDhE7ssNFlyoDXUHxw6V5cjgPrtosyJKqJX5i1P5tV9eUynsbhx1yz0g+Ye4fjFwAxhKLxt8GSRx2Aqc+Sw== + 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.2" + is-regex "^1.1.4" + +string.prototype.trimend@^1.0.1, string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1, string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +styled-components@^5.3.6: + version "5.3.6" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" + integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^1.1.0" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylis@4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.0.2: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + 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" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + +tiny-warning@^1.0.0, tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tree-changes@^0.9.1, tree-changes@^0.9.2: + version "0.9.3" + resolved "https://registry.yarnpkg.com/tree-changes/-/tree-changes-0.9.3.tgz#89433ab3b4250c2910d386be1f83912b7144efcc" + integrity sha512-vvvS+O6kEeGRzMglTKbc19ltLWNtmNt1cpBoSYLj/iEcPVvpJasemKOlxBrmZaCtDJoF+4bwv3m01UKYi8mukQ== + dependencies: + "@gilbarbara/deep-equal" "^0.1.1" + is-lite "^0.8.2" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + +ts-node@^10.6.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" + integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.0" + yn "3.1.1" + +ts-pnp@1.2.0, ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typeface-roboto-mono@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/typeface-roboto-mono/-/typeface-roboto-mono-1.1.13.tgz#2af8662db8f9119c00efd55d6ed8877d2a69ec94" + integrity sha512-pnzDc70b7ywJHin/BUFL7HZX8DyOTBLT2qxlJ92eH1UJOFcENIBXa9IZrxsJX/gEKjbEDKhW5vz/TKRBNk/ufQ== + +typescript@^3.9: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +typescript@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.3.tgz#fe976f0c826a88d0a382007681cbb2da44afdedf" + integrity sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +unbox-primitive@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + 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" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universal-cookie@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" + integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== + dependencies: + "@types/cookie" "^0.3.3" + cookie "^0.4.0" + +universalify@^0.1.0, universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse@^1.5.1: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-deep-compare-effect@*, use-deep-compare-effect@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz#ef0ce3b3271edb801da1ec23bf0754ef4189d0c6" + integrity sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q== + dependencies: + "@babel/runtime" "^7.12.5" + dequal "^2.0.2" + +use-deep-compare@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-deep-compare/-/use-deep-compare-1.1.0.tgz#85580dde751f68400bf6ef7e043c7f986595cef8" + integrity sha512-6yY3zmKNCJ1jjIivfZMZMReZjr8e6iC6Uqtp701jvWJ6ejC/usXD+JjmslZDPJQgX8P4B1Oi5XSLHkOLeYSJsA== + dependencies: + dequal "1.0.0" + +use-keyboard-shortcuts@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/use-keyboard-shortcuts/-/use-keyboard-shortcuts-2.2.2.tgz#93cb84e242d5b5f09ba575e7485822acb104cf1b" + integrity sha512-4HgEbrF1dxT5gVdx5KfjiBOuSCAdHedpS2J4u4+QCCk3gs1bdPey1aYqoyv45vHHSKvmzyA/llXofP72bzddMw== + +use-window-focus@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/use-window-focus/-/use-window-focus-1.4.2.tgz#18cd99d14b9f75b7b1d08ea6e1832762731f5510" + integrity sha512-6aLzUtgcph92IoT+ZmEPpkdLW3O5frL7sNIpbt/2pBh6HwHZTRagsIxILrLTfrguzEDQqy5FM76K4wqIj4V6mw== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +visjs-network@^4.24.11: + version "4.24.11" + resolved "https://registry.yarnpkg.com/visjs-network/-/visjs-network-4.24.11.tgz#b23a511cd30c11483cc243db22d56d35090b27c5" + integrity sha512-pG42egtTDcLC/5pSKg2Y698JTnrmaDadZoz6g82KlU7D5qk6p+oUaFu/iGamc3US4+ll2dMN2eS4ikp0Ue6TvA== + dependencies: + emitter-component "^1.1.1" + hammerjs "^2.0.8" + keycharm "^0.2.0" + moment "^2.20.1" + propagating-hammerjs "^1.4.6" + timsort "^0.3.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-keyname@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz#4ade6916f6290224cdbd1db8ac49eab03d0eef6b" + integrity sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw== + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#c74028bf5ba8885aaf230e48a20e8936ab8511f0" + integrity sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.4.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" + integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + 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" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + 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" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + 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" + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +workbox-background-sync@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" + integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + dependencies: + workbox-core "^5.1.4" + +workbox-broadcast-update@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" + integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + dependencies: + workbox-core "^5.1.4" + +workbox-build@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" + integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^8.1.0" + glob "^7.1.6" + lodash.template "^4.5.0" + pretty-bytes "^5.3.0" + rollup "^1.31.1" + rollup-plugin-babel "^4.3.3" + rollup-plugin-terser "^5.3.1" + source-map "^0.7.3" + source-map-url "^0.4.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + tempy "^0.3.0" + upath "^1.2.0" + workbox-background-sync "^5.1.4" + workbox-broadcast-update "^5.1.4" + workbox-cacheable-response "^5.1.4" + workbox-core "^5.1.4" + workbox-expiration "^5.1.4" + workbox-google-analytics "^5.1.4" + workbox-navigation-preload "^5.1.4" + workbox-precaching "^5.1.4" + workbox-range-requests "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + workbox-streams "^5.1.4" + workbox-sw "^5.1.4" + workbox-window "^5.1.4" + +workbox-cacheable-response@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" + integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + dependencies: + workbox-core "^5.1.4" + +workbox-core@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" + integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + +workbox-expiration@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" + integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + dependencies: + workbox-core "^5.1.4" + +workbox-google-analytics@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" + integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + dependencies: + workbox-background-sync "^5.1.4" + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + +workbox-navigation-preload@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" + integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + dependencies: + workbox-core "^5.1.4" + +workbox-precaching@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" + integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + dependencies: + workbox-core "^5.1.4" + +workbox-range-requests@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" + integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + dependencies: + workbox-core "^5.1.4" + +workbox-routing@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" + integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + dependencies: + workbox-core "^5.1.4" + +workbox-strategies@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" + integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-streams@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" + integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-sw@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" + integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + +workbox-webpack-plugin@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" + integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + dependencies: + "@babel/runtime" "^7.5.5" + fast-json-stable-stringify "^2.0.0" + source-map-url "^0.4.0" + upath "^1.1.2" + webpack-sources "^1.3.0" + workbox-build "^5.1.4" + +workbox-window@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" + integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + dependencies: + workbox-core "^5.1.4" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.0.1.tgz#71886d6021f3da28169dbefde78d4dd0f8d83650" + integrity sha512-1NpAYQ3wjzIlMs0mgdBmYzLkFgWBIWrzYVDYfrixhoFNNgJ444/jT2kUT2sicRbJES3oQYRZugjB6Ro8SjKeFg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==