├── .eslintrc
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── LICENSE
├── README.md
├── examples
└── single-file-sync
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── README.md
│ ├── components
│ ├── Editor
│ │ ├── Editor.module.css
│ │ ├── GitHub.tsx
│ │ ├── index.tsx
│ │ ├── options.ts
│ │ └── theme.ts
│ ├── Footer
│ │ ├── Footer.module.css
│ │ └── index.tsx
│ ├── Head
│ │ └── index.tsx
│ ├── Header
│ │ ├── Header.module.css
│ │ └── index.tsx
│ └── Navbar
│ │ ├── Navbar.module.css
│ │ └── index.tsx
│ ├── lib
│ ├── constants.ts
│ ├── use-interval.ts
│ ├── y-config.ts
│ └── y-monaco.ts
│ ├── next-env.d.ts
│ ├── next.config.js
│ ├── package.json
│ ├── pages
│ ├── _app.js
│ └── index.tsx
│ ├── public
│ └── favicon.ico
│ ├── styles
│ ├── Shared.module.css
│ ├── globals.css
│ └── yjs.css
│ ├── tsconfig.json
│ ├── types.d.ts
│ └── yarn.lock
├── package.json
├── src
├── cache.ts
├── constants.ts
├── helpers.ts
├── index.ts
└── yjs.ts
├── tsconfig.json
└── yarn.lock
/.eslintrc:
--------------------------------------------------------------------------------
1 | // next is loading eslintrc from root directory, adding this to avoid eslint rules been overridden
2 | {}
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 | .vscode
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .next
3 | build
4 | dist
5 | *.tsbuildinfo
6 | *.gitignore
7 | *.svg
8 | *.lock
9 | *.npmignore
10 | *.sql
11 | *.png
12 | *.jpg
13 | *.jpeg
14 | *.gif
15 | *.ico
16 | *.sh
17 | Dockerfile
18 | Dockerfile.*
19 | .env
20 | .env.*
21 | LICENSE
22 | *.log
23 | .DS_Store
24 | .dockerignore
25 | *.patch
26 | *.toml
27 | *.prisma
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "tabWidth": 2,
5 | "useTabs": false
6 | }
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Motif
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # YFS
2 |
3 | Synchronize text files between the browser and the file system using the
4 | [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)
5 | and [Yjs](https://yjs.dev/).
6 |
7 |
8 | Blog post explaining the underlying concepts: [Syncing text files between browser and disk using Yjs and the File System Access API](https://motif.land/blog/syncing-text-files-using-yjs-and-the-file-system-access-api).
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | ## Installation
21 |
22 | To get started, install the `@yfs/react` package via npm or yarn:
23 |
24 | ```shell
25 | # npm
26 | npm install @yfs/react
27 |
28 | # Yarn
29 | yarn add @yfs/react
30 | ```
31 |
32 | ## Usage
33 |
34 | Example:
35 |
36 |
37 | ```jsx
38 | import React, { useState } from 'react'
39 | import * as Y from 'yjs'
40 | import useYFS from '@yfs/react'
41 |
42 | function Editor () {
43 | const { setRootDirectory, directoryName, syncDoc } = useYFS()
44 | const [doc] = useState(new Y.Doc())
45 |
46 | return (
47 |
48 |
59 | {/* Editor code... */}
60 |
61 | )
62 | }
63 | ```
64 |
65 | ## Authors
66 |
67 | This library is created by the team behind [Motif](https://motif.land)
68 | ([@motifland](https://twitter.com/motifland)).
69 |
70 | - Michael Fester ([@michaelfester](https://twitter.com/michaelfester))
71 |
72 | It is based on the great work by [Kevin Jahns](https://twitter.com/kevin_jahns)
73 | on [Yjs](https://yjs.dev/).
74 |
75 | ## License
76 |
77 | MIT
78 |
--------------------------------------------------------------------------------
/examples/single-file-sync/.eslintrc.js:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 | module.exports = {
3 | env: {
4 | browser: true,
5 | es2021: true,
6 | node: true,
7 | },
8 | extends: ['eslint:recommended', 'plugin:react/recommended', 'next'],
9 | ignorePatterns: ['public/**/*'],
10 | parserOptions: {
11 | ecmaVersion: 12,
12 | sourceType: 'module',
13 | },
14 | plugins: ['react', 'react-hooks'],
15 | rules: {
16 | 'react-hooks/rules-of-hooks': 'error',
17 | 'react-hooks/exhaustive-deps': [
18 | 'error',
19 | { additionalHooks: '(useDeepCompareEffect)' },
20 | ],
21 | '@next/next/no-img-element': 'off',
22 | },
23 | settings: {
24 | react: {
25 | version: 'detect',
26 | },
27 | },
28 | overrides: [
29 | {
30 | files: ['*.ts', '*.tsx'],
31 | parser: '@typescript-eslint/parser',
32 | plugins: ['@typescript-eslint'],
33 | extends: ['plugin:@typescript-eslint/recommended'],
34 | rules: {
35 | '@typescript-eslint/no-unused-vars': 'error',
36 | '@typescript-eslint/no-explicit-any': 'off',
37 | '@typescript-eslint/explicit-module-boundary-types': 'off',
38 | },
39 | },
40 | ],
41 | }
42 |
--------------------------------------------------------------------------------
/examples/single-file-sync/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
--------------------------------------------------------------------------------
/examples/single-file-sync/README.md:
--------------------------------------------------------------------------------
1 | This is a sample app showcasing a browser-based editor
2 | ([Monaco](https://microsoft.github.io/monaco-editor/)) syncing its content with
3 | the file system. It is using the
4 | [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API),
5 | in conjunction with the [Yjs](https://yjs.dev/) CRDT implementation.
6 |
7 | ## Getting Started
8 |
9 | First, install the dependencies:
10 |
11 | ```bash
12 | yarn
13 | ```
14 |
15 | Then, run the development server:
16 |
17 | ```bash
18 | yarn dev
19 | ```
20 |
21 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the
22 | result.
23 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Editor/Editor.module.css:
--------------------------------------------------------------------------------
1 | .editor {
2 | width: 100%;
3 | height: 100%;
4 | }
5 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Editor/GitHub.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react'
2 |
3 | const GitHub = (props: any) => {
4 | return (
5 |
20 | )
21 | }
22 |
23 | export default GitHub
24 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Editor/index.tsx:
--------------------------------------------------------------------------------
1 | import React, { useCallback } from 'react'
2 | import MonacoEditor from '@monaco-editor/react'
3 | import theme from './theme'
4 | import options from './options'
5 |
6 | export default function Editor ({
7 | onDidMount,
8 | }: {
9 | onDidMount: (monaco: any, editor: any) => void
10 | }) {
11 | const onEditorDidMount = useCallback(
12 | (editor: any, monaco: any) => {
13 | monaco.editor.defineTheme('custom', theme)
14 | monaco.editor.setTheme('custom')
15 | onDidMount(monaco, editor)
16 | },
17 | [onDidMount],
18 | )
19 |
20 | return (
21 | >}
27 | options={options}
28 | />
29 | )
30 | }
31 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Editor/options.ts:
--------------------------------------------------------------------------------
1 | const options = {
2 | codeLens: false,
3 | fontSize: 14,
4 | lineHeight: 24,
5 | lineNumbers: 'off',
6 | padding: {
7 | top: 30,
8 | bottom: 30
9 | },
10 | selectionHighlight: false,
11 | wordWrap: 'on',
12 | folding: false,
13 | fontFamily:
14 | 'Menlo, ui-monospace, SFMono-Regular, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',
15 | hideCursorInOverviewRuler: true,
16 | glyphMargin: false,
17 | lightbulb: { enabled: false },
18 | lineDecorationsWidth: 20,
19 | minimap: { enabled: false },
20 | renderLineHighlight: 'none',
21 | roundedSelection: true,
22 | scrollbar: {
23 | alwaysConsumeMouseWheel: false,
24 | horizontal: 'hidden',
25 | vertical: 'hidden',
26 | useShadows: false,
27 | verticalHasArrows: false,
28 | verticalScrollbarSize: 0
29 | },
30 | scrollBeyondLastLine: false,
31 | smoothScrolling: true,
32 | snippetSuggestions: 'none',
33 | suggest: {
34 | showIcons: false
35 | },
36 | tabCompletion: 'off',
37 | tabSize: 2,
38 | wordBasedSuggestions: false,
39 | wrappingStrategy: 'advanced'
40 | }
41 |
42 | export default options
43 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Editor/theme.ts:
--------------------------------------------------------------------------------
1 | const theme = {
2 | base: 'vs',
3 | inherit: true,
4 | rules: [
5 | { token: '', foreground: '0F172A' },
6 | { token: 'invalid', foreground: '0F172A' },
7 | { token: 'emphasis', fontStyle: 'italic' },
8 | { token: 'strong', fontStyle: 'bold' },
9 | { token: 'variable', foreground: '5c6773' },
10 | { token: 'variable.predefined', foreground: '5c6773' },
11 | { token: 'constant', foreground: '854D0E' },
12 | { token: 'comment', foreground: 'abb0b6', fontStyle: 'italic' },
13 | { token: 'number', foreground: '854D0E' },
14 | { token: 'number.hex', foreground: '854D0E' },
15 | { token: 'regexp', foreground: '4dbf99' },
16 | { token: 'annotation', foreground: '701A75' },
17 | { token: 'type', foreground: '701A75' },
18 | { token: 'delimiter', foreground: '5c6773' },
19 | { token: 'delimiter.html', foreground: '5c6773' },
20 | { token: 'delimiter.xml', foreground: '5c6773' },
21 | { token: 'tag', foreground: '701A75' },
22 | { token: 'tag.id.jade', foreground: 'C026D3' },
23 | { token: 'tag.class.jade', foreground: 'C026D3' },
24 | { token: 'meta.scss', foreground: 'C026D3' },
25 | { token: 'metatag', foreground: 'C026D3' },
26 | { token: 'metatag.content.html', foreground: '0E7490' },
27 | { token: 'metatag.html', foreground: 'C026D3' },
28 | { token: 'metatag.xml', foreground: 'C026D3' },
29 | { token: 'metatag.php', fontStyle: 'bold' },
30 | { token: 'key', foreground: '701A75' },
31 | { token: 'string.key.json', foreground: '701A75' },
32 | { token: 'string.value.json', foreground: '0E7490' },
33 | { token: 'attribute.name', foreground: '854D0E' },
34 | { token: 'attribute.value', foreground: '0451A5' },
35 | { token: 'attribute.value.number', foreground: 'abb0b6' },
36 | { token: 'attribute.value.unit', foreground: '0E7490' },
37 | { token: 'attribute.value.html', foreground: '0E7490' },
38 | { token: 'attribute.value.xml', foreground: '0E7490' },
39 | { token: 'string', foreground: '0F172A' },
40 | { token: 'string.html', foreground: '0E7490' },
41 | { token: 'string.sql', foreground: '0E7490' },
42 | { token: 'string.yaml', foreground: '0E7490' },
43 | { token: 'string.js', foreground: '0E7490' },
44 | { token: 'string.mdx', foreground: '0E7490' },
45 | { token: 'string.link', foreground: '0369A1' },
46 | { token: 'string.heading', fontStyle: 'bold' },
47 | { token: 'string.target', foreground: 'A1A1AA' },
48 | { token: 'string.codedelimiter.mdx', foreground: 'A1A1AA' },
49 | { token: 'keyword', foreground: '854d0e' },
50 | { token: 'keyword.json', foreground: '854d0e' },
51 | { token: 'keyword.flow', foreground: '854d0e' },
52 | { token: 'keyword.flow.scss', foreground: '854d0e' },
53 | { token: 'operator.scss', foreground: '666666' },
54 | { token: 'operator.sql', foreground: '778899' },
55 | { token: 'operator.swift', foreground: '666666' },
56 | { token: 'predefined.sql', foreground: 'FF00FF' }
57 | ],
58 | // Cf. https://github.com/Microsoft/monaco-editor/blob/main/test/playground.generated/customizing-the-appearence-exposed-colors.html
59 | colors: {
60 | 'editor.background': '#FFFFFF',
61 | 'editor.foreground': '#1c1917',
62 | 'editorIndentGuide.background': '#E4E4E7',
63 | 'editorIndentGuide.activeBackground': '#A1A1AA',
64 | 'editorCursor.foreground': '#51A7F8',
65 | 'editor.selectionBackground': '#CFDFEC',
66 | 'editor.inactiveSelectionBackground': '#F5F5F5',
67 | 'editorLineNumber.foreground': '#D1D5DB'
68 | }
69 | }
70 |
71 | export default theme
72 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Footer/Footer.module.css:
--------------------------------------------------------------------------------
1 | .syncFooter {
2 | display: flex;
3 | flex-direction: row;
4 | gap: 10px;
5 | align-items: center;
6 | align-self: flex-start;
7 | padding: 0 6px;
8 | font-size: var(--font-size-sm);
9 | color: var(--text-light);
10 | }
11 |
12 | .syncFooter p {
13 | margin: 0;
14 | padding: 0;
15 | }
16 |
17 | .dot {
18 | width: 8px;
19 | height: 8px;
20 | border-radius: 9999px;
21 | }
22 |
23 | .dotBlue {
24 | background-color: #15e3ff;
25 | }
26 |
27 | .dotOrange {
28 | background-color: #f7c444;
29 | }
30 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Footer/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styles from './Footer.module.css'
3 | import sharedStyles from '../../styles/Shared.module.css'
4 |
5 | export default function Footer ({
6 | directoryName,
7 | isWritePermissionGranted,
8 | unsetRootDirectory,
9 | grantWritePermission,
10 | }: {
11 | directoryName: string | undefined
12 | isWritePermissionGranted: boolean
13 | unsetRootDirectory: () => void
14 | grantWritePermission: () => void
15 | }) {
16 | if (!directoryName) {
17 | return <>>
18 | }
19 |
20 | return (
21 |
22 |
27 | {isWritePermissionGranted && (
28 | <>
29 |
30 | Syncing with folder{' '}
31 | {directoryName}.
32 |
33 |
34 | Disconnect
35 |
36 | >
37 | )}
38 | {!isWritePermissionGranted && (
39 | <>
40 |
41 | Syncing with folder{' '}
42 | {directoryName} is
43 | paused.
44 |
45 |
46 | Grant permissions
47 |
48 | >
49 | )}
50 |
51 | )
52 | }
53 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Head/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import NextHead from 'next/head'
3 |
4 | export default function Head () {
5 | return (
6 |
7 | File Sync Demo
8 |
12 |
13 |
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Header/Header.module.css:
--------------------------------------------------------------------------------
1 | .cta {
2 | display: inline-block;
3 | color: white;
4 | background-color: var(--button-dark);
5 | outline: 0 !important;
6 | outline-offset: 2px;
7 | box-shadow: none;
8 | font-weight: 500;
9 | font-size: var(--font-size-base);
10 | padding: 10px 20px;
11 | border-radius: 5px;
12 | cursor: pointer;
13 | -webkit-appearance: button;
14 | border-style: solid;
15 | border-width: 0;
16 | transition-duration: 150ms;
17 | }
18 |
19 | .cta:hover {
20 | opacity: 0.9;
21 | box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
22 | }
23 |
24 | .warning {
25 | color: var(--text-warning);
26 | text-align: center;
27 | }
28 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Header/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styles from './Header.module.css'
3 |
4 | export default function Header ({
5 | isFSAPISupported,
6 | directoryName,
7 | setRootDirectory,
8 | }: {
9 | isFSAPISupported: boolean
10 | directoryName: string | undefined
11 | setRootDirectory: (writable: boolean) => void
12 | }) {
13 | return (
14 |
15 | {isFSAPISupported && !directoryName && (
16 |
24 | )}
25 | {!isFSAPISupported && (
26 |
27 | The File System Access API is currently not supported in this browser.
28 |
29 | )}
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Navbar/Navbar.module.css:
--------------------------------------------------------------------------------
1 | .nav {
2 | display: flex;
3 | flex-direction: row;
4 | gap: 10px;
5 | align-items: center;
6 | width: 100%;
7 | padding: 1.5rem;
8 | }
9 |
10 | .nav div:first-child {
11 | flex: 1;
12 | display: flex;
13 | gap: 5px;
14 | flex-direction: column;
15 | }
16 |
17 | .nav div:first-child h1,
18 | .nav div:first-child p {
19 | margin: 0;
20 | }
21 |
22 | .nav div:first-child h1 {
23 | font-size: 18px;
24 | color: var(--text-dark);
25 | }
26 |
27 | .nav div:first-child p {
28 | font-size: var(--font-size-sm);
29 | color: var(--text-light);
30 | }
31 |
32 | .nav div:last-child {
33 | display: flex;
34 | gap: 25px;
35 | flex-direction: row;
36 | align-items: center;
37 | }
38 |
39 | .nav div:last-child a {
40 | font-size: var(--font-size-sm);
41 | color: var(--text-dark);
42 | }
43 |
--------------------------------------------------------------------------------
/examples/single-file-sync/components/Navbar/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import GitHub from 'components/Editor/GitHub'
3 | import styles from './Navbar.module.css'
4 | import sharedStyles from '../../styles/Shared.module.css'
5 |
6 | export default function Navbar () {
7 | return (
8 |
49 | )
50 | }
51 |
--------------------------------------------------------------------------------
/examples/single-file-sync/lib/constants.ts:
--------------------------------------------------------------------------------
1 | export const YDOC_UPDATE_ORIGIN_CURRENT_EDITOR =
2 | 'YDOC_UPDATE_ORIGIN_CURRENT_EDITOR'
3 |
4 | export const ROOM_ID = 'yfs-sample-room'
5 | export const TEST_FILE_NAME = 'yfs-test.md'
6 |
7 | export const WEBRTC_SIGNALING_SERVERS = [
8 | 'wss://motif-signaling.fly.dev/',
9 | ]
10 |
--------------------------------------------------------------------------------
/examples/single-file-sync/lib/use-interval.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef } from 'react'
2 |
3 | export const useInterval = (callback: () => void, delay: number | null) => {
4 | const savedCallback = useRef()
5 |
6 | useEffect(() => {
7 | savedCallback.current = callback
8 | }, [callback])
9 |
10 | useEffect(() => {
11 | const tick = () => {
12 | savedCallback.current()
13 | }
14 | if (delay !== null) {
15 | const id = setInterval(tick, delay)
16 | return () => clearInterval(id)
17 | }
18 | }, [delay])
19 | }
20 |
--------------------------------------------------------------------------------
/examples/single-file-sync/lib/y-config.ts:
--------------------------------------------------------------------------------
1 | import * as Y from 'yjs'
2 | import * as awarenessProtocol from 'y-protocols/awareness.js'
3 | import { WebrtcProvider } from 'y-webrtc'
4 | import { IndexeddbPersistence } from 'y-indexeddb'
5 | import * as mutex from 'lib0/mutex.js'
6 | import { MonacoBinding } from './y-monaco'
7 | import { ROOM_ID, WEBRTC_SIGNALING_SERVERS } from './constants'
8 |
9 | export const YDOC_UPDATE_ORIGIN_CURRENT_EDITOR =
10 | 'YDOC_UPDATE_ORIGIN_CURRENT_EDITOR'
11 | export const YDOC_UPDATE_ORIGIN_PROGRAMMATIC = 'YDOC_UPDATE_ORIGIN_PROGRAMMATIC'
12 |
13 | export class YConfig {
14 | roomId: string
15 | monaco: any
16 | model: any
17 | editor: any
18 | userId: number
19 | doc: Y.Doc | undefined
20 | initialEncodedYDoc: string | undefined
21 | awareness: awarenessProtocol.Awareness | undefined
22 | webRTCProvider: WebrtcProvider | undefined
23 | indexedDBPersistence: IndexeddbPersistence | undefined
24 | monacoBinding: MonacoBinding | undefined
25 | mux: mutex.mutex
26 | updateTimeoutId: ReturnType | null
27 |
28 | constructor (
29 | monaco: any,
30 | editor: any,
31 | userId: number
32 | ) {
33 | this.roomId = ROOM_ID
34 | // this.onNonProgrammaticDocUpdateImmediate = onNonProgrammaticDocUpdateImmediate
35 | // this.onLocalEditorUpdateDebounced = onLocalEditorUpdateDebounced
36 | this.monaco = monaco
37 | this.editor = editor
38 | this.model = editor.getModel()
39 | this.userId = userId
40 | this.mux = mutex.createMutex()
41 | this.updateTimeoutId = null
42 | this.initYDoc()
43 | }
44 |
45 | initYDoc (): void {
46 | this.doc = new Y.Doc()
47 |
48 | this.awareness = new awarenessProtocol.Awareness(this.doc)
49 |
50 | this.webRTCProvider = new WebrtcProvider(this.roomId, this.doc, {
51 | signaling: WEBRTC_SIGNALING_SERVERS,
52 | password: null,
53 | awareness: this.awareness,
54 | maxConns: 50 + Math.floor(Math.random() * 15),
55 | filterBcConns: true,
56 | peerOpts: {}
57 | })
58 |
59 | this.monacoBinding = new MonacoBinding(
60 | this.monaco,
61 | this.doc.getText(),
62 | this.model,
63 | this.editor,
64 | this.awareness,
65 | this.userId
66 | )
67 |
68 | this.indexedDBPersistence = new IndexeddbPersistence(
69 | 'y-indexeddb',
70 | this.doc
71 | )
72 |
73 | if (!this.webRTCProvider.connected) {
74 | this.webRTCProvider.connect()
75 | }
76 | }
77 |
78 | destroy (): void {
79 | this.awareness?.destroy()
80 | this.monacoBinding?.destroy()
81 | this.webRTCProvider?.disconnect()
82 | this.webRTCProvider?.destroy()
83 | this.doc?.destroy()
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/examples/single-file-sync/lib/y-monaco.ts:
--------------------------------------------------------------------------------
1 | import * as Y from 'yjs'
2 | import * as error from 'lib0/error.js'
3 | import { createMutex, mutex } from 'lib0/mutex.js'
4 | import * as awarenessProtocol from 'y-protocols/awareness.js'
5 | import { YDOC_UPDATE_ORIGIN_CURRENT_EDITOR } from './constants'
6 |
7 | type Direction = any
8 | type Selection = {
9 | start: Y.RelativePosition
10 | end: Y.RelativePosition
11 | direction: Direction
12 | }
13 |
14 | class RelativeSelection {
15 | start: Y.RelativePosition
16 | end: Y.RelativePosition
17 | direction: Direction
18 |
19 | constructor (
20 | start: Y.RelativePosition,
21 | end: Y.RelativePosition,
22 | direction: Direction,
23 | ) {
24 | this.start = start
25 | this.end = end
26 | this.direction = direction
27 | }
28 | }
29 |
30 | const createRelativeSelection = (
31 | editor: any,
32 | monacoModel: any,
33 | type: Y.AbstractType,
34 | ) => {
35 | const sel = editor.getSelection()
36 | if (sel !== null) {
37 | const startPos = sel.getStartPosition()
38 | const endPos = sel.getEndPosition()
39 | const start = Y.createRelativePositionFromTypeIndex(
40 | type,
41 | monacoModel.getOffsetAt(startPos),
42 | )
43 | const end = Y.createRelativePositionFromTypeIndex(
44 | type,
45 | monacoModel.getOffsetAt(endPos),
46 | )
47 | return new RelativeSelection(start, end, sel.getDirection())
48 | }
49 | return null
50 | }
51 |
52 | const createMonacoSelectionFromRelativeSelection = (
53 | monaco: any,
54 | editor: any,
55 | type: Y.AbstractType,
56 | relSel: Selection,
57 | doc: Y.Doc,
58 | ) => {
59 | const start = Y.createAbsolutePositionFromRelativePosition(relSel.start, doc)
60 | const end = Y.createAbsolutePositionFromRelativePosition(relSel.end, doc)
61 | if (
62 | start !== null &&
63 | end !== null &&
64 | start.type === type &&
65 | end.type === type
66 | ) {
67 | const model = editor.getModel()
68 | if (!model) {
69 | return null
70 | }
71 | const startPos = model.getPositionAt(start.index)
72 | const endPos = model.getPositionAt(end.index)
73 | return monaco.Selection.createWithDirection(
74 | startPos.lineNumber,
75 | startPos.column,
76 | endPos.lineNumber,
77 | endPos.column,
78 | relSel.direction,
79 | )
80 | }
81 | return null
82 | }
83 |
84 | export class MonacoBinding {
85 | doc: Y.Doc
86 | ytext: Y.Text
87 | monacoModel: any
88 | editor: any
89 | mux: mutex
90 | color: number
91 | awareness: awarenessProtocol.Awareness | undefined
92 | _savedSelections: Map
93 | _decorations: any
94 | _rerenderDecorations: any
95 | _monacoChangeHandler: any
96 | _beforeTransaction: () => void
97 | _ytextObserver: (event: Y.YTextEvent) => void
98 |
99 | constructor (
100 | monaco: any,
101 | ytext: Y.Text,
102 | monacoModel: any,
103 | editor: any,
104 | awareness: awarenessProtocol.Awareness,
105 | userId: number,
106 | ) {
107 | this.doc = ytext.doc as Y.Doc
108 | this.ytext = ytext
109 | this.monacoModel = monacoModel
110 | this.editor = editor
111 | this.mux = createMutex()
112 | this._savedSelections = new Map()
113 | this.color = userId % 8
114 |
115 | this._beforeTransaction = () => {
116 | this.mux(() => {
117 | this._savedSelections = new Map()
118 | if (editor.getModel() === monacoModel) {
119 | const rsel = createRelativeSelection(editor, monacoModel, ytext)
120 | if (rsel !== null) {
121 | this._savedSelections.set(editor, rsel)
122 | }
123 | }
124 | })
125 | }
126 |
127 | this.doc.on('beforeAllTransactions', this._beforeTransaction)
128 |
129 | this._decorations = new Map()
130 |
131 | this._rerenderDecorations = () => {
132 | if (awareness && editor.getModel() === monacoModel) {
133 | // render decorations
134 | const currentDecorations = this._decorations.get(editor) || []
135 | const newDecorations: any = []
136 | awareness.getStates().forEach((state, clientID) => {
137 | if (
138 | clientID !== this.doc.clientID &&
139 | state.selection != null &&
140 | state.selection.anchor != null &&
141 | state.selection.head != null
142 | ) {
143 | const anchorAbs = Y.createAbsolutePositionFromRelativePosition(
144 | state.selection.anchor,
145 | this.doc,
146 | )
147 | const headAbs = Y.createAbsolutePositionFromRelativePosition(
148 | state.selection.head,
149 | this.doc,
150 | )
151 | if (
152 | anchorAbs !== null &&
153 | headAbs !== null &&
154 | anchorAbs.type === ytext &&
155 | headAbs.type === ytext
156 | ) {
157 | let start, end, afterContentClassName, beforeContentClassName
158 | if (anchorAbs.index < headAbs.index) {
159 | start = monacoModel.getPositionAt(anchorAbs.index)
160 | end = monacoModel.getPositionAt(headAbs.index)
161 | afterContentClassName = `ySelectionHead yBorder-${this.color}`
162 | beforeContentClassName = null
163 | } else {
164 | start = monacoModel.getPositionAt(headAbs.index)
165 | end = monacoModel.getPositionAt(anchorAbs.index)
166 | afterContentClassName = null
167 | beforeContentClassName = `ySelectionHead yBorder-${this.color}`
168 | }
169 | newDecorations.push({
170 | range: new monaco.Range(
171 | start.lineNumber,
172 | start.column,
173 | end.lineNumber,
174 | end.column,
175 | ),
176 | options: {
177 | className: `ySelection-${this.color}`,
178 | afterContentClassName,
179 | beforeContentClassName,
180 | },
181 | })
182 | }
183 | }
184 | })
185 | this._decorations.set(
186 | editor,
187 | editor.deltaDecorations(currentDecorations, newDecorations),
188 | )
189 | } else {
190 | // ignore decorations
191 | this._decorations.delete(editor)
192 | }
193 | }
194 |
195 | this._ytextObserver = event => {
196 | this.mux(() => {
197 | let index = 0
198 | event.delta.forEach(op => {
199 | if (op.retain !== undefined) {
200 | index += op.retain
201 | } else if (op.insert !== undefined) {
202 | const pos = monacoModel.getPositionAt(index)
203 | const range = new monaco.Selection(
204 | pos.lineNumber,
205 | pos.column,
206 | pos.lineNumber,
207 | pos.column,
208 | )
209 | monacoModel.applyEdits([{ range, text: op.insert as string }])
210 | index += (op.insert as any).length
211 | } else if (op.delete !== undefined) {
212 | const pos = monacoModel.getPositionAt(index)
213 | const endPos = monacoModel.getPositionAt(index + op.delete)
214 | const range = new monaco.Selection(
215 | pos.lineNumber,
216 | pos.column,
217 | endPos.lineNumber,
218 | endPos.column,
219 | )
220 | monacoModel.applyEdits([{ range, text: '' }])
221 | } else {
222 | throw error.unexpectedCase()
223 | }
224 | })
225 | this._savedSelections.forEach((rsel, editor) => {
226 | const sel = createMonacoSelectionFromRelativeSelection(
227 | monaco,
228 | editor,
229 | ytext,
230 | rsel,
231 | this.doc,
232 | )
233 | if (sel !== null) {
234 | editor.setSelection(sel)
235 | }
236 | })
237 | })
238 | this._rerenderDecorations()
239 | }
240 |
241 | ytext.observe(this._ytextObserver)
242 | monacoModel.setValue(ytext.toString())
243 |
244 | this._monacoChangeHandler = monacoModel.onDidChangeContent((event: any) => {
245 | // Apply changes from right to left
246 | this.mux(() => {
247 | this.doc.transact(() => {
248 | event.changes
249 | .sort(
250 | (change1: any, change2: any) =>
251 | change2.rangeOffset - change1.rangeOffset,
252 | )
253 | .forEach((change: any) => {
254 | ytext.delete(change.rangeOffset, change.rangeLength)
255 | ytext.insert(change.rangeOffset, change.text)
256 | })
257 | }, YDOC_UPDATE_ORIGIN_CURRENT_EDITOR)
258 | })
259 | })
260 |
261 | monacoModel.onWillDispose(() => {
262 | this.destroy()
263 | })
264 |
265 | if (awareness) {
266 | editor.onDidChangeCursorSelection(() => {
267 | if (editor.getModel() === monacoModel) {
268 | const sel = editor.getSelection()
269 | if (sel === null) {
270 | return
271 | }
272 | let anchor = monacoModel.getOffsetAt(sel.getStartPosition())
273 | let head = monacoModel.getOffsetAt(sel.getEndPosition())
274 | if (sel.getDirection() === monaco.SelectionDirection.RTL) {
275 | const tmp = anchor
276 | anchor = head
277 | head = tmp
278 | }
279 | awareness.setLocalStateField('selection', {
280 | anchor: Y.createRelativePositionFromTypeIndex(ytext, anchor),
281 | head: Y.createRelativePositionFromTypeIndex(ytext, head),
282 | })
283 | }
284 | })
285 | awareness.on('change', this._rerenderDecorations)
286 | this.awareness = awareness
287 | }
288 | }
289 |
290 | destroy (): void {
291 | this._monacoChangeHandler.dispose()
292 | this.ytext.unobserve(this._ytextObserver)
293 | this.doc.off('beforeAllTransactions', this._beforeTransaction)
294 | if (this.awareness) {
295 | this.awareness.off('change', this._rerenderDecorations)
296 | }
297 | }
298 | }
299 |
--------------------------------------------------------------------------------
/examples/single-file-sync/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/examples/single-file-sync/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: true,
4 | }
5 |
6 | module.exports = nextConfig
7 |
--------------------------------------------------------------------------------
/examples/single-file-sync/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "yfs-single-file-sync-example",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@monaco-editor/react": "^4.4.4",
13 | "@yfs/react": "^0.0.15",
14 | "lib0": "^0.2.51",
15 | "next": "12.1.5",
16 | "react": "18.1.0",
17 | "react-dom": "18.1.0",
18 | "y-indexeddb": "^9.0.7",
19 | "y-webrtc": "^10.2.3",
20 | "yjs": "^13.5.35"
21 | },
22 | "devDependencies": {
23 | "@types/node": "^17.0.30",
24 | "@types/react": "^18.0.8",
25 | "@typescript-eslint/eslint-plugin": "^5.22.0",
26 | "@typescript-eslint/parser": "^5.22.0",
27 | "eslint": "8.14.0",
28 | "eslint-config-next": "12.1.5",
29 | "typescript": "^4.6.4"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/examples/single-file-sync/pages/_app.js:
--------------------------------------------------------------------------------
1 | import '../styles/globals.css'
2 | import '../styles/yjs.css'
3 |
4 | function MyApp({ Component, pageProps }) {
5 | return
6 | }
7 |
8 | export default MyApp
9 |
--------------------------------------------------------------------------------
/examples/single-file-sync/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React, { useCallback, useRef } from 'react'
2 | import useFileSync from '@yfs/react'
3 | import Editor from 'components/Editor'
4 | import Head from 'components/Head'
5 | import Navbar from 'components/Navbar'
6 | import Footer from 'components/Footer'
7 | import Header from 'components/Header'
8 | import { useInterval } from 'lib/use-interval'
9 | import styles from '../styles/Shared.module.css'
10 | import { YConfig } from 'lib/y-config'
11 | import { TEST_FILE_NAME } from 'lib/constants'
12 |
13 | export default function Home () {
14 | const config = useRef(undefined)
15 | const {
16 | isSupported,
17 | setRootDirectory,
18 | unsetRootDirectory,
19 | grantWritePermission,
20 | directoryName,
21 | isWritePermissionGranted,
22 | syncDoc
23 | } = useFileSync()
24 |
25 | const onEditorDidMount = useCallback((monaco: any, editor: any) => {
26 | config.current?.destroy()
27 | config.current = new YConfig(monaco, editor, Math.floor(Math.random() * 8))
28 | }, [])
29 |
30 | const sync = useCallback(() => {
31 | if (!config.current?.doc) {
32 | return
33 | }
34 | syncDoc(TEST_FILE_NAME, config.current.doc)
35 | }, [syncDoc])
36 |
37 | useInterval(sync, isWritePermissionGranted ? 10000 : null)
38 |
39 | return (
40 |
41 |
42 |
43 |
44 |
49 |
50 |
51 |
52 |
58 |
59 |
60 | )
61 | }
62 |
--------------------------------------------------------------------------------
/examples/single-file-sync/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Motif-Archived/yfs/46248a771784726b0b305b6816e447b57558e776/examples/single-file-sync/public/favicon.ico
--------------------------------------------------------------------------------
/examples/single-file-sync/styles/Shared.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | min-height: 100vh;
3 | padding: 2rem 0;
4 | flex: 1;
5 | display: flex;
6 | flex-direction: column;
7 | align-items: center;
8 | color: var(--text-dark);
9 | }
10 |
11 | .container {
12 | padding: 0;
13 | }
14 |
15 | .subtleLink {
16 | text-decoration: underline dotted var(--text-extralight);
17 | cursor: pointer;
18 | }
19 |
20 | .subtleLink:hover {
21 | opacity: 0.9;
22 | }
23 |
24 | .main {
25 | position: relative;
26 | padding: 0 1.5rem 2rem 1.5rem;
27 | width: 100%;
28 | max-width: 980px;
29 | margin-top: 50px;
30 | display: flex;
31 | gap: 10px;
32 | flex-direction: column;
33 | align-items: center;
34 | }
35 |
36 | .editorContainer {
37 | width: 100%;
38 | height: 100vh;
39 | max-height: 480px;
40 | padding: 0 1rem;
41 | border-radius: 5px;
42 | border-width: 1px;
43 | overflow: hidden;
44 | background-color: white;
45 | border-color: var(--border-light);
46 | border-style: solid;
47 | }
48 |
--------------------------------------------------------------------------------
/examples/single-file-sync/styles/globals.css:
--------------------------------------------------------------------------------
1 | @import url('https://rsms.me/inter/inter.css');
2 |
3 | :root {
4 | --background: #eeede9;
5 | --border-light: #e3e3e3;
6 | --text-dark: #1c1917;
7 | --text-light: #78716c;
8 | --text-extralight: #a8a29e;
9 | --text-warning: #f97316;
10 | --font-size-base: 16px;
11 | --font-size-sm: 14px;
12 | --button-dark: #0f172a;
13 | --orange-light: #ffedd5;
14 | --green-light: #dcfce7;
15 | --sky-light: #e0f2fe;
16 | --violet-light: #ede9fe;
17 | --rose-light: #ffe4e6;
18 | --amber-light: #fef3c7;
19 | --lime-light: #ecfccb;
20 | --fuchsia-light: #fae8ff;
21 | --orange: #fb923c;
22 | --green: #4ade80;
23 | --sky: #38bdf8;
24 | --violet: #a78bfa;
25 | --rose: #fb7185;
26 | --amber: #fbbf24;
27 | --lime: #a3e635;
28 | --fuchsia: #e879f9;
29 | }
30 |
31 | html,
32 | body {
33 | padding: 0;
34 | margin: 0;
35 | font-family: 'Inter', -apple-system, BlinkMacSystemFont, Segoe UI, Roboto,
36 | Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
37 | background-color: var(--background);
38 | -webkit-font-smoothing: antialiased;
39 | -moz-osx-font-smoothing: grayscale;
40 | }
41 |
42 | a {
43 | color: inherit;
44 | text-decoration: none;
45 | }
46 |
47 | * {
48 | box-sizing: border-box;
49 | }
50 |
--------------------------------------------------------------------------------
/examples/single-file-sync/styles/yjs.css:
--------------------------------------------------------------------------------
1 | /* Selection */
2 |
3 | .ySelection-0 {
4 | background-color: var(--orange-light);
5 | }
6 | .ySelection-1 {
7 | background-color: var(--green-light);
8 | }
9 | .ySelection-2 {
10 | background-color: var(--sky-light);
11 | }
12 | .ySelection-3 {
13 | background-color: var(--violet-light);
14 | }
15 | .ySelection-4 {
16 | background-color: var(--rose-light);
17 | }
18 | .ySelection-5 {
19 | background-color: var(--amber-light);
20 | }
21 | .ySelection-6 {
22 | background-color: var(--lime-light);
23 | }
24 | .ySelection-7 {
25 | background-color: var(--fuchsia-light);
26 | }
27 |
28 | /* Background */
29 |
30 | .yBackground-0 {
31 | background-color: var(--orange);
32 | }
33 | .yBackground-1 {
34 | background-color: var(--green);
35 | }
36 | .yBackground-2 {
37 | background-color: var(--sky);
38 | }
39 | .yBackground-3 {
40 | background-color: var(--violet);
41 | }
42 | .yBackground-4 {
43 | background-color: var(--rose);
44 | }
45 | .yBackground-5 {
46 | background-color: var(--amber);
47 | }
48 | .yBackground-6 {
49 | background-color: var(--lime);
50 | }
51 | .yBackground-7 {
52 | background-color: var(--fuchsia);
53 | }
54 |
55 | /* Border */
56 |
57 | .yBorder-0 {
58 | border-color: var(--orange);
59 | }
60 | .yBorder-1 {
61 | border-color: var(--green);
62 | }
63 | .yBorder-2 {
64 | border-color: var(--sky);
65 | }
66 | .yBorder-3 {
67 | border-color: var(--violet);
68 | }
69 | .yBorder-4 {
70 | border-color: var(--rose);
71 | }
72 | .yBorder-5 {
73 | border-color: var(--amber);
74 | }
75 | .yBorder-6 {
76 | border-color: var(--lime);
77 | }
78 | .yBorder-7 {
79 | border-color: var(--fuchsia);
80 | }
81 |
82 | /* Selection head */
83 |
84 | .ySelectionHead {
85 | position: absolute;
86 | box-sizing: border-box;
87 | height: 100%;
88 | border-left-width: 2px;
89 | border-top-width: 1px;
90 | border-bottom-width: 1px;
91 | }
92 |
--------------------------------------------------------------------------------
/examples/single-file-sync/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowSyntheticDefaultImports": true,
4 | "baseUrl": "./",
5 | "target": "esnext",
6 | "lib": [
7 | "dom",
8 | "dom.iterable",
9 | "esnext",
10 | "webworker"
11 | ],
12 | "allowJs": true,
13 | "skipLibCheck": true,
14 | "strict": true,
15 | "forceConsistentCasingInFileNames": true,
16 | "noEmit": true,
17 | "esModuleInterop": true,
18 | "module": "esnext",
19 | "moduleResolution": "node",
20 | "resolveJsonModule": true,
21 | "isolatedModules": true,
22 | "jsx": "preserve",
23 | "downlevelIteration": true,
24 | "incremental": true
25 | },
26 | "exclude": [
27 | "node_modules"
28 | ],
29 | "include": [
30 | "next-env.d.ts",
31 | "**/*.ts",
32 | "**/*.tsx"
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/examples/single-file-sync/types.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'y-monaco'
2 |
--------------------------------------------------------------------------------
/examples/single-file-sync/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime-corejs3@^7.10.2":
6 | version "7.17.9"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055"
8 | integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==
9 | dependencies:
10 | core-js-pure "^3.20.2"
11 | regenerator-runtime "^0.13.4"
12 |
13 | "@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3":
14 | version "7.17.9"
15 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
16 | integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
17 | dependencies:
18 | regenerator-runtime "^0.13.4"
19 |
20 | "@eslint/eslintrc@^1.2.2":
21 | version "1.2.2"
22 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae"
23 | integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==
24 | dependencies:
25 | ajv "^6.12.4"
26 | debug "^4.3.2"
27 | espree "^9.3.1"
28 | globals "^13.9.0"
29 | ignore "^5.2.0"
30 | import-fresh "^3.2.1"
31 | js-yaml "^4.1.0"
32 | minimatch "^3.0.4"
33 | strip-json-comments "^3.1.1"
34 |
35 | "@humanwhocodes/config-array@^0.9.2":
36 | version "0.9.5"
37 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
38 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
39 | dependencies:
40 | "@humanwhocodes/object-schema" "^1.2.1"
41 | debug "^4.1.1"
42 | minimatch "^3.0.4"
43 |
44 | "@humanwhocodes/object-schema@^1.2.1":
45 | version "1.2.1"
46 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
47 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
48 |
49 | "@monaco-editor/loader@^1.3.1":
50 | version "1.3.1"
51 | resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.1.tgz#35d198fb13a983dd49e9e448a172b6a9da309411"
52 | integrity sha512-LfpAO6e54SZQW0nnI1sWKO4XtAlNx3WHXYZixeVy0HhZ4txGPOok4rs2u4dSi2+iRWeL198cZ2FlFQKr8mH+cw==
53 | dependencies:
54 | state-local "^1.0.6"
55 |
56 | "@monaco-editor/react@^4.4.4":
57 | version "4.4.4"
58 | resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.4.4.tgz#8d6b0ac144e2b673f85408e30f1facafff9b7aab"
59 | integrity sha512-yQsYnVkgP5RC5ZMoRVCXSBn4D4hLUOgoQK+AZJpVY57NDXmEb57OVaaYKh8/RTzxkpuLV278hKNw5DnuzlgQwg==
60 | dependencies:
61 | "@monaco-editor/loader" "^1.3.1"
62 | prop-types "^15.7.2"
63 |
64 | "@next/env@12.1.5":
65 | version "12.1.5"
66 | resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.5.tgz#a21ba6708022d630402ca2b340316e69a0296dfc"
67 | integrity sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q==
68 |
69 | "@next/eslint-plugin-next@12.1.5":
70 | version "12.1.5"
71 | resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.5.tgz#273885b35e6bbcd40ff1436d2a8d0ec03fb6f6ef"
72 | integrity sha512-Cnb8ERC5bNKBFrnMH6203sp/b0Y78QRx1XsFu+86oBtDBmQmOFoHu7teQjHm69ER73XKK3aGaeoLiXacHoUFsg==
73 | dependencies:
74 | glob "7.1.7"
75 |
76 | "@next/swc-android-arm-eabi@12.1.5":
77 | version "12.1.5"
78 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5.tgz#36729ab3dfd7743e82cfe536b43254dcb146620c"
79 | integrity sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==
80 |
81 | "@next/swc-android-arm64@12.1.5":
82 | version "12.1.5"
83 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.5.tgz#52578f552305c92d0b9b81d603c9643fb71e0835"
84 | integrity sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==
85 |
86 | "@next/swc-darwin-arm64@12.1.5":
87 | version "12.1.5"
88 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5.tgz#3d5b53211484c72074f4975ba0ec2b1107db300e"
89 | integrity sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==
90 |
91 | "@next/swc-darwin-x64@12.1.5":
92 | version "12.1.5"
93 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5.tgz#adcabb732d226453777c0d37d58eaff9328b66fd"
94 | integrity sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==
95 |
96 | "@next/swc-linux-arm-gnueabihf@12.1.5":
97 | version "12.1.5"
98 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5.tgz#82a7cde67482b756bc65fbebf1dfa8a782074e93"
99 | integrity sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==
100 |
101 | "@next/swc-linux-arm64-gnu@12.1.5":
102 | version "12.1.5"
103 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5.tgz#f82ca014504950aab751e81f467492e9be0bad5d"
104 | integrity sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==
105 |
106 | "@next/swc-linux-arm64-musl@12.1.5":
107 | version "12.1.5"
108 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5.tgz#f811ec9f4b12a978426c284c95ab2f515ddf7f9e"
109 | integrity sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==
110 |
111 | "@next/swc-linux-x64-gnu@12.1.5":
112 | version "12.1.5"
113 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5.tgz#d44857257e6d20dc841998951d584ab1f25772c3"
114 | integrity sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==
115 |
116 | "@next/swc-linux-x64-musl@12.1.5":
117 | version "12.1.5"
118 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5.tgz#3cc523abadc9a2a6de680593aff06e71cc29ecef"
119 | integrity sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==
120 |
121 | "@next/swc-win32-arm64-msvc@12.1.5":
122 | version "12.1.5"
123 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5.tgz#c62232d869f1f9b22e8f24e4e7f05307c20f30ca"
124 | integrity sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==
125 |
126 | "@next/swc-win32-ia32-msvc@12.1.5":
127 | version "12.1.5"
128 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5.tgz#2bd9b28a9ba730d12a493e7d9d18e150fe89d496"
129 | integrity sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==
130 |
131 | "@next/swc-win32-x64-msvc@12.1.5":
132 | version "12.1.5"
133 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5.tgz#02f377e4d41eaaacf265e34bab9bacd8efc4a351"
134 | integrity sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==
135 |
136 | "@nodelib/fs.scandir@2.1.5":
137 | version "2.1.5"
138 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
139 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
140 | dependencies:
141 | "@nodelib/fs.stat" "2.0.5"
142 | run-parallel "^1.1.9"
143 |
144 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
145 | version "2.0.5"
146 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
147 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
148 |
149 | "@nodelib/fs.walk@^1.2.3":
150 | version "1.2.8"
151 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
152 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
153 | dependencies:
154 | "@nodelib/fs.scandir" "2.1.5"
155 | fastq "^1.6.0"
156 |
157 | "@rushstack/eslint-patch@1.0.8":
158 | version "1.0.8"
159 | resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.8.tgz#be3e914e84eacf16dbebd311c0d0b44aa1174c64"
160 | integrity sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw==
161 |
162 | "@types/json-schema@^7.0.9":
163 | version "7.0.11"
164 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
165 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
166 |
167 | "@types/json5@^0.0.29":
168 | version "0.0.29"
169 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
170 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
171 |
172 | "@types/node@^17.0.30":
173 | version "17.0.30"
174 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.30.tgz#2c6e8512acac70815e8176aa30c38025067880ef"
175 | integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==
176 |
177 | "@types/prop-types@*":
178 | version "15.7.5"
179 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
180 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
181 |
182 | "@types/react@^18.0.8":
183 | version "18.0.8"
184 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87"
185 | integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw==
186 | dependencies:
187 | "@types/prop-types" "*"
188 | "@types/scheduler" "*"
189 | csstype "^3.0.2"
190 |
191 | "@types/scheduler@*":
192 | version "0.16.2"
193 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
194 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
195 |
196 | "@typescript-eslint/eslint-plugin@^5.22.0":
197 | version "5.22.0"
198 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz#7b52a0de2e664044f28b36419210aea4ab619e2a"
199 | integrity sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==
200 | dependencies:
201 | "@typescript-eslint/scope-manager" "5.22.0"
202 | "@typescript-eslint/type-utils" "5.22.0"
203 | "@typescript-eslint/utils" "5.22.0"
204 | debug "^4.3.2"
205 | functional-red-black-tree "^1.0.1"
206 | ignore "^5.1.8"
207 | regexpp "^3.2.0"
208 | semver "^7.3.5"
209 | tsutils "^3.21.0"
210 |
211 | "@typescript-eslint/parser@5.10.1":
212 | version "5.10.1"
213 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.1.tgz#4ce9633cc33fc70bc13786cb793c1a76fe5ad6bd"
214 | integrity sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==
215 | dependencies:
216 | "@typescript-eslint/scope-manager" "5.10.1"
217 | "@typescript-eslint/types" "5.10.1"
218 | "@typescript-eslint/typescript-estree" "5.10.1"
219 | debug "^4.3.2"
220 |
221 | "@typescript-eslint/parser@^5.22.0":
222 | version "5.22.0"
223 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.22.0.tgz#7bedf8784ef0d5d60567c5ba4ce162460e70c178"
224 | integrity sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==
225 | dependencies:
226 | "@typescript-eslint/scope-manager" "5.22.0"
227 | "@typescript-eslint/types" "5.22.0"
228 | "@typescript-eslint/typescript-estree" "5.22.0"
229 | debug "^4.3.2"
230 |
231 | "@typescript-eslint/scope-manager@5.10.1":
232 | version "5.10.1"
233 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz#f0539c73804d2423506db2475352a4dec36cd809"
234 | integrity sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==
235 | dependencies:
236 | "@typescript-eslint/types" "5.10.1"
237 | "@typescript-eslint/visitor-keys" "5.10.1"
238 |
239 | "@typescript-eslint/scope-manager@5.22.0":
240 | version "5.22.0"
241 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz#590865f244ebe6e46dc3e9cab7976fc2afa8af24"
242 | integrity sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==
243 | dependencies:
244 | "@typescript-eslint/types" "5.22.0"
245 | "@typescript-eslint/visitor-keys" "5.22.0"
246 |
247 | "@typescript-eslint/type-utils@5.22.0":
248 | version "5.22.0"
249 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz#0c0e93b34210e334fbe1bcb7250c470f4a537c19"
250 | integrity sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==
251 | dependencies:
252 | "@typescript-eslint/utils" "5.22.0"
253 | debug "^4.3.2"
254 | tsutils "^3.21.0"
255 |
256 | "@typescript-eslint/types@5.10.1":
257 | version "5.10.1"
258 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea"
259 | integrity sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==
260 |
261 | "@typescript-eslint/types@5.22.0":
262 | version "5.22.0"
263 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.22.0.tgz#50a4266e457a5d4c4b87ac31903b28b06b2c3ed0"
264 | integrity sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==
265 |
266 | "@typescript-eslint/typescript-estree@5.10.1":
267 | version "5.10.1"
268 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz#b268e67be0553f8790ba3fe87113282977adda15"
269 | integrity sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==
270 | dependencies:
271 | "@typescript-eslint/types" "5.10.1"
272 | "@typescript-eslint/visitor-keys" "5.10.1"
273 | debug "^4.3.2"
274 | globby "^11.0.4"
275 | is-glob "^4.0.3"
276 | semver "^7.3.5"
277 | tsutils "^3.21.0"
278 |
279 | "@typescript-eslint/typescript-estree@5.22.0":
280 | version "5.22.0"
281 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz#e2116fd644c3e2fda7f4395158cddd38c0c6df97"
282 | integrity sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==
283 | dependencies:
284 | "@typescript-eslint/types" "5.22.0"
285 | "@typescript-eslint/visitor-keys" "5.22.0"
286 | debug "^4.3.2"
287 | globby "^11.0.4"
288 | is-glob "^4.0.3"
289 | semver "^7.3.5"
290 | tsutils "^3.21.0"
291 |
292 | "@typescript-eslint/utils@5.22.0":
293 | version "5.22.0"
294 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.22.0.tgz#1f2c4897e2cf7e44443c848a13c60407861babd8"
295 | integrity sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==
296 | dependencies:
297 | "@types/json-schema" "^7.0.9"
298 | "@typescript-eslint/scope-manager" "5.22.0"
299 | "@typescript-eslint/types" "5.22.0"
300 | "@typescript-eslint/typescript-estree" "5.22.0"
301 | eslint-scope "^5.1.1"
302 | eslint-utils "^3.0.0"
303 |
304 | "@typescript-eslint/visitor-keys@5.10.1":
305 | version "5.10.1"
306 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz#29102de692f59d7d34ecc457ed59ab5fc558010b"
307 | integrity sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==
308 | dependencies:
309 | "@typescript-eslint/types" "5.10.1"
310 | eslint-visitor-keys "^3.0.0"
311 |
312 | "@typescript-eslint/visitor-keys@5.22.0":
313 | version "5.22.0"
314 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz#f49c0ce406944ffa331a1cfabeed451ea4d0909c"
315 | integrity sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==
316 | dependencies:
317 | "@typescript-eslint/types" "5.22.0"
318 | eslint-visitor-keys "^3.0.0"
319 |
320 | "@yfs/react@^0.0.15":
321 | version "0.0.15"
322 | resolved "https://registry.yarnpkg.com/@yfs/react/-/react-0.0.15.tgz#061564cce2cca3b8e6d83019e69f25e9f5922dc6"
323 | integrity sha512-P/SwdJtvRIrNevoT9Fzpkh9xWTZ6azI9Z+VXWOmM72K+xtr0wSR5XGbtGj5EHAQlLk/csQjmfzqAq2I3K+T17w==
324 | dependencies:
325 | diff "^5.0.0"
326 | idb-keyval "^6.1.0"
327 | react "18.1.0"
328 | yjs "^13.5.35"
329 |
330 | acorn-jsx@^5.3.1:
331 | version "5.3.2"
332 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
333 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
334 |
335 | acorn@^8.7.0:
336 | version "8.7.1"
337 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
338 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
339 |
340 | ajv@^6.10.0, ajv@^6.12.4:
341 | version "6.12.6"
342 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
343 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
344 | dependencies:
345 | fast-deep-equal "^3.1.1"
346 | fast-json-stable-stringify "^2.0.0"
347 | json-schema-traverse "^0.4.1"
348 | uri-js "^4.2.2"
349 |
350 | ansi-regex@^5.0.1:
351 | version "5.0.1"
352 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
353 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
354 |
355 | ansi-styles@^4.1.0:
356 | version "4.3.0"
357 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
358 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
359 | dependencies:
360 | color-convert "^2.0.1"
361 |
362 | argparse@^2.0.1:
363 | version "2.0.1"
364 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
365 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
366 |
367 | aria-query@^4.2.2:
368 | version "4.2.2"
369 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
370 | integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
371 | dependencies:
372 | "@babel/runtime" "^7.10.2"
373 | "@babel/runtime-corejs3" "^7.10.2"
374 |
375 | array-includes@^3.1.4:
376 | version "3.1.4"
377 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
378 | integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
379 | dependencies:
380 | call-bind "^1.0.2"
381 | define-properties "^1.1.3"
382 | es-abstract "^1.19.1"
383 | get-intrinsic "^1.1.1"
384 | is-string "^1.0.7"
385 |
386 | array-union@^2.1.0:
387 | version "2.1.0"
388 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
389 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
390 |
391 | array.prototype.flat@^1.2.5:
392 | version "1.3.0"
393 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
394 | integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
395 | dependencies:
396 | call-bind "^1.0.2"
397 | define-properties "^1.1.3"
398 | es-abstract "^1.19.2"
399 | es-shim-unscopables "^1.0.0"
400 |
401 | array.prototype.flatmap@^1.2.5:
402 | version "1.3.0"
403 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
404 | integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
405 | dependencies:
406 | call-bind "^1.0.2"
407 | define-properties "^1.1.3"
408 | es-abstract "^1.19.2"
409 | es-shim-unscopables "^1.0.0"
410 |
411 | ast-types-flow@^0.0.7:
412 | version "0.0.7"
413 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
414 | integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
415 |
416 | axe-core@^4.3.5:
417 | version "4.4.1"
418 | resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413"
419 | integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==
420 |
421 | axobject-query@^2.2.0:
422 | version "2.2.0"
423 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
424 | integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
425 |
426 | balanced-match@^1.0.0:
427 | version "1.0.2"
428 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
429 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
430 |
431 | base64-js@^1.3.1:
432 | version "1.5.1"
433 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
434 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
435 |
436 | brace-expansion@^1.1.7:
437 | version "1.1.11"
438 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
439 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
440 | dependencies:
441 | balanced-match "^1.0.0"
442 | concat-map "0.0.1"
443 |
444 | braces@^3.0.2:
445 | version "3.0.2"
446 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
447 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
448 | dependencies:
449 | fill-range "^7.0.1"
450 |
451 | buffer@^6.0.3:
452 | version "6.0.3"
453 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
454 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
455 | dependencies:
456 | base64-js "^1.3.1"
457 | ieee754 "^1.2.1"
458 |
459 | call-bind@^1.0.0, call-bind@^1.0.2:
460 | version "1.0.2"
461 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
462 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
463 | dependencies:
464 | function-bind "^1.1.1"
465 | get-intrinsic "^1.0.2"
466 |
467 | callsites@^3.0.0:
468 | version "3.1.0"
469 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
470 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
471 |
472 | caniuse-lite@^1.0.30001283:
473 | version "1.0.30001334"
474 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz#892e9965b35285033fc2b8a8eff499fe02f13d8b"
475 | integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==
476 |
477 | chalk@^4.0.0:
478 | version "4.1.2"
479 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
480 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
481 | dependencies:
482 | ansi-styles "^4.1.0"
483 | supports-color "^7.1.0"
484 |
485 | color-convert@^2.0.1:
486 | version "2.0.1"
487 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
488 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
489 | dependencies:
490 | color-name "~1.1.4"
491 |
492 | color-name@~1.1.4:
493 | version "1.1.4"
494 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
495 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
496 |
497 | concat-map@0.0.1:
498 | version "0.0.1"
499 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
500 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
501 |
502 | core-js-pure@^3.20.2:
503 | version "3.22.3"
504 | resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.3.tgz#181d1b6321fb29fe99c16a1f28beb840ab84ad36"
505 | integrity sha512-oN88zz7nmKROMy8GOjs+LN+0LedIvbMdnB5XsTlhcOg1WGARt9l0LFg0zohdoFmCsEZ1h2ZbSQ6azj3M+vhzwQ==
506 |
507 | cross-spawn@^7.0.2:
508 | version "7.0.3"
509 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
510 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
511 | dependencies:
512 | path-key "^3.1.0"
513 | shebang-command "^2.0.0"
514 | which "^2.0.1"
515 |
516 | csstype@^3.0.2:
517 | version "3.0.11"
518 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
519 | integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
520 |
521 | damerau-levenshtein@^1.0.7:
522 | version "1.0.8"
523 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
524 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
525 |
526 | debug@^2.6.9:
527 | version "2.6.9"
528 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
529 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
530 | dependencies:
531 | ms "2.0.0"
532 |
533 | debug@^3.2.7:
534 | version "3.2.7"
535 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
536 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
537 | dependencies:
538 | ms "^2.1.1"
539 |
540 | debug@^4.1.1, debug@^4.3.2:
541 | version "4.3.4"
542 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
543 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
544 | dependencies:
545 | ms "2.1.2"
546 |
547 | deep-is@^0.1.3:
548 | version "0.1.4"
549 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
550 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
551 |
552 | define-properties@^1.1.3:
553 | version "1.1.4"
554 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
555 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
556 | dependencies:
557 | has-property-descriptors "^1.0.0"
558 | object-keys "^1.1.1"
559 |
560 | diff@^5.0.0:
561 | version "5.0.0"
562 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
563 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
564 |
565 | dir-glob@^3.0.1:
566 | version "3.0.1"
567 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
568 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
569 | dependencies:
570 | path-type "^4.0.0"
571 |
572 | doctrine@^2.1.0:
573 | version "2.1.0"
574 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
575 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
576 | dependencies:
577 | esutils "^2.0.2"
578 |
579 | doctrine@^3.0.0:
580 | version "3.0.0"
581 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
582 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
583 | dependencies:
584 | esutils "^2.0.2"
585 |
586 | emoji-regex@^9.2.2:
587 | version "9.2.2"
588 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
589 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
590 |
591 | err-code@^3.0.1:
592 | version "3.0.1"
593 | resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920"
594 | integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==
595 |
596 | es-abstract@^1.19.1, es-abstract@^1.19.2:
597 | version "1.19.5"
598 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.5.tgz#a2cb01eb87f724e815b278b0dd0d00f36ca9a7f1"
599 | integrity sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==
600 | dependencies:
601 | call-bind "^1.0.2"
602 | es-to-primitive "^1.2.1"
603 | function-bind "^1.1.1"
604 | get-intrinsic "^1.1.1"
605 | get-symbol-description "^1.0.0"
606 | has "^1.0.3"
607 | has-symbols "^1.0.3"
608 | internal-slot "^1.0.3"
609 | is-callable "^1.2.4"
610 | is-negative-zero "^2.0.2"
611 | is-regex "^1.1.4"
612 | is-shared-array-buffer "^1.0.2"
613 | is-string "^1.0.7"
614 | is-weakref "^1.0.2"
615 | object-inspect "^1.12.0"
616 | object-keys "^1.1.1"
617 | object.assign "^4.1.2"
618 | string.prototype.trimend "^1.0.4"
619 | string.prototype.trimstart "^1.0.4"
620 | unbox-primitive "^1.0.1"
621 |
622 | es-shim-unscopables@^1.0.0:
623 | version "1.0.0"
624 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
625 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
626 | dependencies:
627 | has "^1.0.3"
628 |
629 | es-to-primitive@^1.2.1:
630 | version "1.2.1"
631 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
632 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
633 | dependencies:
634 | is-callable "^1.1.4"
635 | is-date-object "^1.0.1"
636 | is-symbol "^1.0.2"
637 |
638 | escape-string-regexp@^4.0.0:
639 | version "4.0.0"
640 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
641 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
642 |
643 | eslint-config-next@12.1.5:
644 | version "12.1.5"
645 | resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.5.tgz#658cc61194a32dfd917a3db199351396ea5db1d1"
646 | integrity sha512-P+DCt5ti63KhC0qNLzrAmPcwRGq8pYqgcf/NNr1E+WjCrMkWdCAXkIANTquo+kcO1adR2k1lTo5GCrNUtKy4hQ==
647 | dependencies:
648 | "@next/eslint-plugin-next" "12.1.5"
649 | "@rushstack/eslint-patch" "1.0.8"
650 | "@typescript-eslint/parser" "5.10.1"
651 | eslint-import-resolver-node "0.3.4"
652 | eslint-import-resolver-typescript "2.4.0"
653 | eslint-plugin-import "2.25.2"
654 | eslint-plugin-jsx-a11y "6.5.1"
655 | eslint-plugin-react "7.29.1"
656 | eslint-plugin-react-hooks "4.3.0"
657 |
658 | eslint-import-resolver-node@0.3.4:
659 | version "0.3.4"
660 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
661 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
662 | dependencies:
663 | debug "^2.6.9"
664 | resolve "^1.13.1"
665 |
666 | eslint-import-resolver-node@^0.3.6:
667 | version "0.3.6"
668 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
669 | integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
670 | dependencies:
671 | debug "^3.2.7"
672 | resolve "^1.20.0"
673 |
674 | eslint-import-resolver-typescript@2.4.0:
675 | version "2.4.0"
676 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1"
677 | integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==
678 | dependencies:
679 | debug "^4.1.1"
680 | glob "^7.1.6"
681 | is-glob "^4.0.1"
682 | resolve "^1.17.0"
683 | tsconfig-paths "^3.9.0"
684 |
685 | eslint-module-utils@^2.7.0:
686 | version "2.7.3"
687 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
688 | integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
689 | dependencies:
690 | debug "^3.2.7"
691 | find-up "^2.1.0"
692 |
693 | eslint-plugin-import@2.25.2:
694 | version "2.25.2"
695 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz#b3b9160efddb702fc1636659e71ba1d10adbe9e9"
696 | integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==
697 | dependencies:
698 | array-includes "^3.1.4"
699 | array.prototype.flat "^1.2.5"
700 | debug "^2.6.9"
701 | doctrine "^2.1.0"
702 | eslint-import-resolver-node "^0.3.6"
703 | eslint-module-utils "^2.7.0"
704 | has "^1.0.3"
705 | is-core-module "^2.7.0"
706 | is-glob "^4.0.3"
707 | minimatch "^3.0.4"
708 | object.values "^1.1.5"
709 | resolve "^1.20.0"
710 | tsconfig-paths "^3.11.0"
711 |
712 | eslint-plugin-jsx-a11y@6.5.1:
713 | version "6.5.1"
714 | resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8"
715 | integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
716 | dependencies:
717 | "@babel/runtime" "^7.16.3"
718 | aria-query "^4.2.2"
719 | array-includes "^3.1.4"
720 | ast-types-flow "^0.0.7"
721 | axe-core "^4.3.5"
722 | axobject-query "^2.2.0"
723 | damerau-levenshtein "^1.0.7"
724 | emoji-regex "^9.2.2"
725 | has "^1.0.3"
726 | jsx-ast-utils "^3.2.1"
727 | language-tags "^1.0.5"
728 | minimatch "^3.0.4"
729 |
730 | eslint-plugin-react-hooks@4.3.0:
731 | version "4.3.0"
732 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172"
733 | integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==
734 |
735 | eslint-plugin-react@7.29.1:
736 | version "7.29.1"
737 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.1.tgz#6c40bc83142bb63d132a1b3565e2ea655411f800"
738 | integrity sha512-WtzRpHMhsOX05ZrkyaaqmLl2uXGqmYooCfBxftJKlkYdsltiufGgfU7uuoHwR2lBam2Kh/EIVID4aU9e3kbCMA==
739 | dependencies:
740 | array-includes "^3.1.4"
741 | array.prototype.flatmap "^1.2.5"
742 | doctrine "^2.1.0"
743 | estraverse "^5.3.0"
744 | jsx-ast-utils "^2.4.1 || ^3.0.0"
745 | minimatch "^3.1.2"
746 | object.entries "^1.1.5"
747 | object.fromentries "^2.0.5"
748 | object.hasown "^1.1.0"
749 | object.values "^1.1.5"
750 | prop-types "^15.8.1"
751 | resolve "^2.0.0-next.3"
752 | semver "^6.3.0"
753 | string.prototype.matchall "^4.0.6"
754 |
755 | eslint-scope@^5.1.1:
756 | version "5.1.1"
757 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
758 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
759 | dependencies:
760 | esrecurse "^4.3.0"
761 | estraverse "^4.1.1"
762 |
763 | eslint-scope@^7.1.1:
764 | version "7.1.1"
765 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
766 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
767 | dependencies:
768 | esrecurse "^4.3.0"
769 | estraverse "^5.2.0"
770 |
771 | eslint-utils@^3.0.0:
772 | version "3.0.0"
773 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
774 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
775 | dependencies:
776 | eslint-visitor-keys "^2.0.0"
777 |
778 | eslint-visitor-keys@^2.0.0:
779 | version "2.1.0"
780 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
781 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
782 |
783 | eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0:
784 | version "3.3.0"
785 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
786 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
787 |
788 | eslint@8.14.0:
789 | version "8.14.0"
790 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239"
791 | integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==
792 | dependencies:
793 | "@eslint/eslintrc" "^1.2.2"
794 | "@humanwhocodes/config-array" "^0.9.2"
795 | ajv "^6.10.0"
796 | chalk "^4.0.0"
797 | cross-spawn "^7.0.2"
798 | debug "^4.3.2"
799 | doctrine "^3.0.0"
800 | escape-string-regexp "^4.0.0"
801 | eslint-scope "^7.1.1"
802 | eslint-utils "^3.0.0"
803 | eslint-visitor-keys "^3.3.0"
804 | espree "^9.3.1"
805 | esquery "^1.4.0"
806 | esutils "^2.0.2"
807 | fast-deep-equal "^3.1.3"
808 | file-entry-cache "^6.0.1"
809 | functional-red-black-tree "^1.0.1"
810 | glob-parent "^6.0.1"
811 | globals "^13.6.0"
812 | ignore "^5.2.0"
813 | import-fresh "^3.0.0"
814 | imurmurhash "^0.1.4"
815 | is-glob "^4.0.0"
816 | js-yaml "^4.1.0"
817 | json-stable-stringify-without-jsonify "^1.0.1"
818 | levn "^0.4.1"
819 | lodash.merge "^4.6.2"
820 | minimatch "^3.0.4"
821 | natural-compare "^1.4.0"
822 | optionator "^0.9.1"
823 | regexpp "^3.2.0"
824 | strip-ansi "^6.0.1"
825 | strip-json-comments "^3.1.0"
826 | text-table "^0.2.0"
827 | v8-compile-cache "^2.0.3"
828 |
829 | espree@^9.3.1:
830 | version "9.3.1"
831 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd"
832 | integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==
833 | dependencies:
834 | acorn "^8.7.0"
835 | acorn-jsx "^5.3.1"
836 | eslint-visitor-keys "^3.3.0"
837 |
838 | esquery@^1.4.0:
839 | version "1.4.0"
840 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
841 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
842 | dependencies:
843 | estraverse "^5.1.0"
844 |
845 | esrecurse@^4.3.0:
846 | version "4.3.0"
847 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
848 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
849 | dependencies:
850 | estraverse "^5.2.0"
851 |
852 | estraverse@^4.1.1:
853 | version "4.3.0"
854 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
855 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
856 |
857 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
858 | version "5.3.0"
859 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
860 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
861 |
862 | esutils@^2.0.2:
863 | version "2.0.3"
864 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
865 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
866 |
867 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
868 | version "3.1.3"
869 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
870 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
871 |
872 | fast-glob@^3.2.9:
873 | version "3.2.11"
874 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
875 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
876 | dependencies:
877 | "@nodelib/fs.stat" "^2.0.2"
878 | "@nodelib/fs.walk" "^1.2.3"
879 | glob-parent "^5.1.2"
880 | merge2 "^1.3.0"
881 | micromatch "^4.0.4"
882 |
883 | fast-json-stable-stringify@^2.0.0:
884 | version "2.1.0"
885 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
886 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
887 |
888 | fast-levenshtein@^2.0.6:
889 | version "2.0.6"
890 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
891 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
892 |
893 | fastq@^1.6.0:
894 | version "1.13.0"
895 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
896 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
897 | dependencies:
898 | reusify "^1.0.4"
899 |
900 | file-entry-cache@^6.0.1:
901 | version "6.0.1"
902 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
903 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
904 | dependencies:
905 | flat-cache "^3.0.4"
906 |
907 | fill-range@^7.0.1:
908 | version "7.0.1"
909 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
910 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
911 | dependencies:
912 | to-regex-range "^5.0.1"
913 |
914 | find-up@^2.1.0:
915 | version "2.1.0"
916 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
917 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
918 | dependencies:
919 | locate-path "^2.0.0"
920 |
921 | flat-cache@^3.0.4:
922 | version "3.0.4"
923 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
924 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
925 | dependencies:
926 | flatted "^3.1.0"
927 | rimraf "^3.0.2"
928 |
929 | flatted@^3.1.0:
930 | version "3.2.5"
931 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
932 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
933 |
934 | fs.realpath@^1.0.0:
935 | version "1.0.0"
936 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
937 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
938 |
939 | function-bind@^1.1.1:
940 | version "1.1.1"
941 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
942 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
943 |
944 | functional-red-black-tree@^1.0.1:
945 | version "1.0.1"
946 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
947 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
948 |
949 | functions-have-names@^1.2.2:
950 | version "1.2.3"
951 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
952 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
953 |
954 | get-browser-rtc@^1.1.0:
955 | version "1.1.0"
956 | resolved "https://registry.yarnpkg.com/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz#d1494e299b00f33fc8e9d6d3343ba4ba99711a2c"
957 | integrity sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==
958 |
959 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
960 | version "1.1.1"
961 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
962 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
963 | dependencies:
964 | function-bind "^1.1.1"
965 | has "^1.0.3"
966 | has-symbols "^1.0.1"
967 |
968 | get-symbol-description@^1.0.0:
969 | version "1.0.0"
970 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
971 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
972 | dependencies:
973 | call-bind "^1.0.2"
974 | get-intrinsic "^1.1.1"
975 |
976 | glob-parent@^5.1.2:
977 | version "5.1.2"
978 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
979 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
980 | dependencies:
981 | is-glob "^4.0.1"
982 |
983 | glob-parent@^6.0.1:
984 | version "6.0.2"
985 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
986 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
987 | dependencies:
988 | is-glob "^4.0.3"
989 |
990 | glob@7.1.7:
991 | version "7.1.7"
992 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
993 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
994 | dependencies:
995 | fs.realpath "^1.0.0"
996 | inflight "^1.0.4"
997 | inherits "2"
998 | minimatch "^3.0.4"
999 | once "^1.3.0"
1000 | path-is-absolute "^1.0.0"
1001 |
1002 | glob@^7.1.3, glob@^7.1.6:
1003 | version "7.2.0"
1004 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
1005 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
1006 | dependencies:
1007 | fs.realpath "^1.0.0"
1008 | inflight "^1.0.4"
1009 | inherits "2"
1010 | minimatch "^3.0.4"
1011 | once "^1.3.0"
1012 | path-is-absolute "^1.0.0"
1013 |
1014 | globals@^13.6.0, globals@^13.9.0:
1015 | version "13.13.0"
1016 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b"
1017 | integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==
1018 | dependencies:
1019 | type-fest "^0.20.2"
1020 |
1021 | globby@^11.0.4:
1022 | version "11.1.0"
1023 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1024 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1025 | dependencies:
1026 | array-union "^2.1.0"
1027 | dir-glob "^3.0.1"
1028 | fast-glob "^3.2.9"
1029 | ignore "^5.2.0"
1030 | merge2 "^1.4.1"
1031 | slash "^3.0.0"
1032 |
1033 | has-bigints@^1.0.1, has-bigints@^1.0.2:
1034 | version "1.0.2"
1035 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
1036 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
1037 |
1038 | has-flag@^4.0.0:
1039 | version "4.0.0"
1040 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1041 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1042 |
1043 | has-property-descriptors@^1.0.0:
1044 | version "1.0.0"
1045 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
1046 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
1047 | dependencies:
1048 | get-intrinsic "^1.1.1"
1049 |
1050 | has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
1051 | version "1.0.3"
1052 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
1053 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
1054 |
1055 | has-tostringtag@^1.0.0:
1056 | version "1.0.0"
1057 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
1058 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
1059 | dependencies:
1060 | has-symbols "^1.0.2"
1061 |
1062 | has@^1.0.3:
1063 | version "1.0.3"
1064 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1065 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1066 | dependencies:
1067 | function-bind "^1.1.1"
1068 |
1069 | idb-keyval@^6.1.0:
1070 | version "6.1.0"
1071 | resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.1.0.tgz#e659cff41188e6097d7fadd69926f6adbbe70041"
1072 | integrity sha512-u/qHZ75rlD3gH+Zah8dAJVJcGW/RfCnfNrFkElC5RpRCnpsCXXhqjVk+6MoVKJ3WhmNbRYdI6IIVP88e+5sxGw==
1073 | dependencies:
1074 | safari-14-idb-fix "^3.0.0"
1075 |
1076 | ieee754@^1.2.1:
1077 | version "1.2.1"
1078 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
1079 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
1080 |
1081 | ignore@^5.1.8, ignore@^5.2.0:
1082 | version "5.2.0"
1083 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
1084 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
1085 |
1086 | import-fresh@^3.0.0, import-fresh@^3.2.1:
1087 | version "3.3.0"
1088 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1089 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1090 | dependencies:
1091 | parent-module "^1.0.0"
1092 | resolve-from "^4.0.0"
1093 |
1094 | imurmurhash@^0.1.4:
1095 | version "0.1.4"
1096 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1097 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1098 |
1099 | inflight@^1.0.4:
1100 | version "1.0.6"
1101 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1102 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1103 | dependencies:
1104 | once "^1.3.0"
1105 | wrappy "1"
1106 |
1107 | inherits@2, inherits@^2.0.3:
1108 | version "2.0.4"
1109 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1110 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1111 |
1112 | internal-slot@^1.0.3:
1113 | version "1.0.3"
1114 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
1115 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
1116 | dependencies:
1117 | get-intrinsic "^1.1.0"
1118 | has "^1.0.3"
1119 | side-channel "^1.0.4"
1120 |
1121 | is-bigint@^1.0.1:
1122 | version "1.0.4"
1123 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
1124 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
1125 | dependencies:
1126 | has-bigints "^1.0.1"
1127 |
1128 | is-boolean-object@^1.1.0:
1129 | version "1.1.2"
1130 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
1131 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
1132 | dependencies:
1133 | call-bind "^1.0.2"
1134 | has-tostringtag "^1.0.0"
1135 |
1136 | is-callable@^1.1.4, is-callable@^1.2.4:
1137 | version "1.2.4"
1138 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
1139 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
1140 |
1141 | is-core-module@^2.2.0, is-core-module@^2.7.0, is-core-module@^2.8.1:
1142 | version "2.9.0"
1143 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
1144 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
1145 | dependencies:
1146 | has "^1.0.3"
1147 |
1148 | is-date-object@^1.0.1:
1149 | version "1.0.5"
1150 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
1151 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
1152 | dependencies:
1153 | has-tostringtag "^1.0.0"
1154 |
1155 | is-extglob@^2.1.1:
1156 | version "2.1.1"
1157 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1158 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1159 |
1160 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
1161 | version "4.0.3"
1162 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1163 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1164 | dependencies:
1165 | is-extglob "^2.1.1"
1166 |
1167 | is-negative-zero@^2.0.2:
1168 | version "2.0.2"
1169 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
1170 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
1171 |
1172 | is-number-object@^1.0.4:
1173 | version "1.0.7"
1174 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
1175 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
1176 | dependencies:
1177 | has-tostringtag "^1.0.0"
1178 |
1179 | is-number@^7.0.0:
1180 | version "7.0.0"
1181 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1182 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1183 |
1184 | is-regex@^1.1.4:
1185 | version "1.1.4"
1186 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
1187 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
1188 | dependencies:
1189 | call-bind "^1.0.2"
1190 | has-tostringtag "^1.0.0"
1191 |
1192 | is-shared-array-buffer@^1.0.2:
1193 | version "1.0.2"
1194 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
1195 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
1196 | dependencies:
1197 | call-bind "^1.0.2"
1198 |
1199 | is-string@^1.0.5, is-string@^1.0.7:
1200 | version "1.0.7"
1201 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
1202 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
1203 | dependencies:
1204 | has-tostringtag "^1.0.0"
1205 |
1206 | is-symbol@^1.0.2, is-symbol@^1.0.3:
1207 | version "1.0.4"
1208 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1209 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1210 | dependencies:
1211 | has-symbols "^1.0.2"
1212 |
1213 | is-weakref@^1.0.2:
1214 | version "1.0.2"
1215 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1216 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1217 | dependencies:
1218 | call-bind "^1.0.2"
1219 |
1220 | isexe@^2.0.0:
1221 | version "2.0.0"
1222 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1223 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1224 |
1225 | isomorphic.js@^0.2.4:
1226 | version "0.2.5"
1227 | resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88"
1228 | integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==
1229 |
1230 | "js-tokens@^3.0.0 || ^4.0.0":
1231 | version "4.0.0"
1232 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1233 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1234 |
1235 | js-yaml@^4.1.0:
1236 | version "4.1.0"
1237 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1238 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1239 | dependencies:
1240 | argparse "^2.0.1"
1241 |
1242 | json-schema-traverse@^0.4.1:
1243 | version "0.4.1"
1244 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1245 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1246 |
1247 | json-stable-stringify-without-jsonify@^1.0.1:
1248 | version "1.0.1"
1249 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1250 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1251 |
1252 | json5@^1.0.1:
1253 | version "1.0.1"
1254 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
1255 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
1256 | dependencies:
1257 | minimist "^1.2.0"
1258 |
1259 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
1260 | version "3.3.0"
1261 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb"
1262 | integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==
1263 | dependencies:
1264 | array-includes "^3.1.4"
1265 | object.assign "^4.1.2"
1266 |
1267 | language-subtag-registry@~0.3.2:
1268 | version "0.3.21"
1269 | resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
1270 | integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
1271 |
1272 | language-tags@^1.0.5:
1273 | version "1.0.5"
1274 | resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
1275 | integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=
1276 | dependencies:
1277 | language-subtag-registry "~0.3.2"
1278 |
1279 | levn@^0.4.1:
1280 | version "0.4.1"
1281 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1282 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1283 | dependencies:
1284 | prelude-ls "^1.2.1"
1285 | type-check "~0.4.0"
1286 |
1287 | lib0@^0.2.35, lib0@^0.2.42, lib0@^0.2.49, lib0@^0.2.51:
1288 | version "0.2.51"
1289 | resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.51.tgz#23b1271a26f39120a4d0f86b9dfb44577f5ce98c"
1290 | integrity sha512-05Erb3465CxJa38LQlMz4EbetNvRna1S3BzqEjC0/pmp5cQuQSfNNmeS0722Wev1dRlMUp2Cql0gQ55krSXf2Q==
1291 | dependencies:
1292 | isomorphic.js "^0.2.4"
1293 |
1294 | locate-path@^2.0.0:
1295 | version "2.0.0"
1296 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1297 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
1298 | dependencies:
1299 | p-locate "^2.0.0"
1300 | path-exists "^3.0.0"
1301 |
1302 | lodash.merge@^4.6.2:
1303 | version "4.6.2"
1304 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1305 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1306 |
1307 | loose-envify@^1.1.0, loose-envify@^1.4.0:
1308 | version "1.4.0"
1309 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1310 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1311 | dependencies:
1312 | js-tokens "^3.0.0 || ^4.0.0"
1313 |
1314 | lru-cache@^6.0.0:
1315 | version "6.0.0"
1316 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1317 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1318 | dependencies:
1319 | yallist "^4.0.0"
1320 |
1321 | merge2@^1.3.0, merge2@^1.4.1:
1322 | version "1.4.1"
1323 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1324 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1325 |
1326 | micromatch@^4.0.4:
1327 | version "4.0.5"
1328 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1329 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1330 | dependencies:
1331 | braces "^3.0.2"
1332 | picomatch "^2.3.1"
1333 |
1334 | minimatch@^3.0.4, minimatch@^3.1.2:
1335 | version "3.1.2"
1336 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1337 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1338 | dependencies:
1339 | brace-expansion "^1.1.7"
1340 |
1341 | minimist@^1.2.0, minimist@^1.2.6:
1342 | version "1.2.6"
1343 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
1344 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
1345 |
1346 | ms@2.0.0:
1347 | version "2.0.0"
1348 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1349 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1350 |
1351 | ms@2.1.2:
1352 | version "2.1.2"
1353 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1354 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1355 |
1356 | ms@^2.1.1:
1357 | version "2.1.3"
1358 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1359 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1360 |
1361 | nanoid@^3.1.30:
1362 | version "3.3.3"
1363 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
1364 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
1365 |
1366 | natural-compare@^1.4.0:
1367 | version "1.4.0"
1368 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1369 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1370 |
1371 | next@12.1.5:
1372 | version "12.1.5"
1373 | resolved "https://registry.yarnpkg.com/next/-/next-12.1.5.tgz#7a07687579ddce61ee519493e1c178d83abac063"
1374 | integrity sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==
1375 | dependencies:
1376 | "@next/env" "12.1.5"
1377 | caniuse-lite "^1.0.30001283"
1378 | postcss "8.4.5"
1379 | styled-jsx "5.0.1"
1380 | optionalDependencies:
1381 | "@next/swc-android-arm-eabi" "12.1.5"
1382 | "@next/swc-android-arm64" "12.1.5"
1383 | "@next/swc-darwin-arm64" "12.1.5"
1384 | "@next/swc-darwin-x64" "12.1.5"
1385 | "@next/swc-linux-arm-gnueabihf" "12.1.5"
1386 | "@next/swc-linux-arm64-gnu" "12.1.5"
1387 | "@next/swc-linux-arm64-musl" "12.1.5"
1388 | "@next/swc-linux-x64-gnu" "12.1.5"
1389 | "@next/swc-linux-x64-musl" "12.1.5"
1390 | "@next/swc-win32-arm64-msvc" "12.1.5"
1391 | "@next/swc-win32-ia32-msvc" "12.1.5"
1392 | "@next/swc-win32-x64-msvc" "12.1.5"
1393 |
1394 | object-assign@^4.1.1:
1395 | version "4.1.1"
1396 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1397 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1398 |
1399 | object-inspect@^1.12.0, object-inspect@^1.9.0:
1400 | version "1.12.0"
1401 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
1402 | integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
1403 |
1404 | object-keys@^1.1.1:
1405 | version "1.1.1"
1406 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1407 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1408 |
1409 | object.assign@^4.1.2:
1410 | version "4.1.2"
1411 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1412 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1413 | dependencies:
1414 | call-bind "^1.0.0"
1415 | define-properties "^1.1.3"
1416 | has-symbols "^1.0.1"
1417 | object-keys "^1.1.1"
1418 |
1419 | object.entries@^1.1.5:
1420 | version "1.1.5"
1421 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
1422 | integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
1423 | dependencies:
1424 | call-bind "^1.0.2"
1425 | define-properties "^1.1.3"
1426 | es-abstract "^1.19.1"
1427 |
1428 | object.fromentries@^2.0.5:
1429 | version "2.0.5"
1430 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
1431 | integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
1432 | dependencies:
1433 | call-bind "^1.0.2"
1434 | define-properties "^1.1.3"
1435 | es-abstract "^1.19.1"
1436 |
1437 | object.hasown@^1.1.0:
1438 | version "1.1.0"
1439 | resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5"
1440 | integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==
1441 | dependencies:
1442 | define-properties "^1.1.3"
1443 | es-abstract "^1.19.1"
1444 |
1445 | object.values@^1.1.5:
1446 | version "1.1.5"
1447 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
1448 | integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
1449 | dependencies:
1450 | call-bind "^1.0.2"
1451 | define-properties "^1.1.3"
1452 | es-abstract "^1.19.1"
1453 |
1454 | once@^1.3.0:
1455 | version "1.4.0"
1456 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1457 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1458 | dependencies:
1459 | wrappy "1"
1460 |
1461 | optionator@^0.9.1:
1462 | version "0.9.1"
1463 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1464 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1465 | dependencies:
1466 | deep-is "^0.1.3"
1467 | fast-levenshtein "^2.0.6"
1468 | levn "^0.4.1"
1469 | prelude-ls "^1.2.1"
1470 | type-check "^0.4.0"
1471 | word-wrap "^1.2.3"
1472 |
1473 | p-limit@^1.1.0:
1474 | version "1.3.0"
1475 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1476 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
1477 | dependencies:
1478 | p-try "^1.0.0"
1479 |
1480 | p-locate@^2.0.0:
1481 | version "2.0.0"
1482 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1483 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
1484 | dependencies:
1485 | p-limit "^1.1.0"
1486 |
1487 | p-try@^1.0.0:
1488 | version "1.0.0"
1489 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1490 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
1491 |
1492 | parent-module@^1.0.0:
1493 | version "1.0.1"
1494 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1495 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1496 | dependencies:
1497 | callsites "^3.0.0"
1498 |
1499 | path-exists@^3.0.0:
1500 | version "3.0.0"
1501 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1502 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1503 |
1504 | path-is-absolute@^1.0.0:
1505 | version "1.0.1"
1506 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1507 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1508 |
1509 | path-key@^3.1.0:
1510 | version "3.1.1"
1511 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1512 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1513 |
1514 | path-parse@^1.0.6, path-parse@^1.0.7:
1515 | version "1.0.7"
1516 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1517 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1518 |
1519 | path-type@^4.0.0:
1520 | version "4.0.0"
1521 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1522 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1523 |
1524 | picocolors@^1.0.0:
1525 | version "1.0.0"
1526 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1527 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1528 |
1529 | picomatch@^2.3.1:
1530 | version "2.3.1"
1531 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1532 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1533 |
1534 | postcss@8.4.5:
1535 | version "8.4.5"
1536 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
1537 | integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
1538 | dependencies:
1539 | nanoid "^3.1.30"
1540 | picocolors "^1.0.0"
1541 | source-map-js "^1.0.1"
1542 |
1543 | prelude-ls@^1.2.1:
1544 | version "1.2.1"
1545 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1546 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1547 |
1548 | prop-types@^15.7.2, prop-types@^15.8.1:
1549 | version "15.8.1"
1550 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
1551 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
1552 | dependencies:
1553 | loose-envify "^1.4.0"
1554 | object-assign "^4.1.1"
1555 | react-is "^16.13.1"
1556 |
1557 | punycode@^2.1.0:
1558 | version "2.1.1"
1559 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1560 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1561 |
1562 | queue-microtask@^1.2.2, queue-microtask@^1.2.3:
1563 | version "1.2.3"
1564 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1565 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1566 |
1567 | randombytes@^2.1.0:
1568 | version "2.1.0"
1569 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1570 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1571 | dependencies:
1572 | safe-buffer "^5.1.0"
1573 |
1574 | react-dom@18.1.0:
1575 | version "18.1.0"
1576 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f"
1577 | integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
1578 | dependencies:
1579 | loose-envify "^1.1.0"
1580 | scheduler "^0.22.0"
1581 |
1582 | react-is@^16.13.1:
1583 | version "16.13.1"
1584 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1585 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1586 |
1587 | react@18.1.0:
1588 | version "18.1.0"
1589 | resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
1590 | integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
1591 | dependencies:
1592 | loose-envify "^1.1.0"
1593 |
1594 | readable-stream@^3.6.0:
1595 | version "3.6.0"
1596 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
1597 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1598 | dependencies:
1599 | inherits "^2.0.3"
1600 | string_decoder "^1.1.1"
1601 | util-deprecate "^1.0.1"
1602 |
1603 | regenerator-runtime@^0.13.4:
1604 | version "0.13.9"
1605 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
1606 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
1607 |
1608 | regexp.prototype.flags@^1.4.1:
1609 | version "1.4.3"
1610 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
1611 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
1612 | dependencies:
1613 | call-bind "^1.0.2"
1614 | define-properties "^1.1.3"
1615 | functions-have-names "^1.2.2"
1616 |
1617 | regexpp@^3.2.0:
1618 | version "3.2.0"
1619 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
1620 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
1621 |
1622 | resolve-from@^4.0.0:
1623 | version "4.0.0"
1624 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1625 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1626 |
1627 | resolve@^1.13.1, resolve@^1.17.0, resolve@^1.20.0:
1628 | version "1.22.0"
1629 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
1630 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
1631 | dependencies:
1632 | is-core-module "^2.8.1"
1633 | path-parse "^1.0.7"
1634 | supports-preserve-symlinks-flag "^1.0.0"
1635 |
1636 | resolve@^2.0.0-next.3:
1637 | version "2.0.0-next.3"
1638 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
1639 | integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
1640 | dependencies:
1641 | is-core-module "^2.2.0"
1642 | path-parse "^1.0.6"
1643 |
1644 | reusify@^1.0.4:
1645 | version "1.0.4"
1646 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
1647 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
1648 |
1649 | rimraf@^3.0.2:
1650 | version "3.0.2"
1651 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1652 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1653 | dependencies:
1654 | glob "^7.1.3"
1655 |
1656 | run-parallel@^1.1.9:
1657 | version "1.2.0"
1658 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1659 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1660 | dependencies:
1661 | queue-microtask "^1.2.2"
1662 |
1663 | safari-14-idb-fix@^3.0.0:
1664 | version "3.0.0"
1665 | resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
1666 | integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
1667 |
1668 | safe-buffer@^5.1.0, safe-buffer@~5.2.0:
1669 | version "5.2.1"
1670 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1671 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1672 |
1673 | scheduler@^0.22.0:
1674 | version "0.22.0"
1675 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8"
1676 | integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==
1677 | dependencies:
1678 | loose-envify "^1.1.0"
1679 |
1680 | semver@^6.3.0:
1681 | version "6.3.0"
1682 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1683 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1684 |
1685 | semver@^7.3.5:
1686 | version "7.3.7"
1687 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
1688 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
1689 | dependencies:
1690 | lru-cache "^6.0.0"
1691 |
1692 | shebang-command@^2.0.0:
1693 | version "2.0.0"
1694 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1695 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1696 | dependencies:
1697 | shebang-regex "^3.0.0"
1698 |
1699 | shebang-regex@^3.0.0:
1700 | version "3.0.0"
1701 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1702 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1703 |
1704 | side-channel@^1.0.4:
1705 | version "1.0.4"
1706 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1707 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1708 | dependencies:
1709 | call-bind "^1.0.0"
1710 | get-intrinsic "^1.0.2"
1711 | object-inspect "^1.9.0"
1712 |
1713 | simple-peer@^9.11.0:
1714 | version "9.11.1"
1715 | resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.11.1.tgz#9814d5723f821b778b7fb011bdefcbd1e788e6cc"
1716 | integrity sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==
1717 | dependencies:
1718 | buffer "^6.0.3"
1719 | debug "^4.3.2"
1720 | err-code "^3.0.1"
1721 | get-browser-rtc "^1.1.0"
1722 | queue-microtask "^1.2.3"
1723 | randombytes "^2.1.0"
1724 | readable-stream "^3.6.0"
1725 |
1726 | slash@^3.0.0:
1727 | version "3.0.0"
1728 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1729 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1730 |
1731 | source-map-js@^1.0.1:
1732 | version "1.0.2"
1733 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
1734 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1735 |
1736 | state-local@^1.0.6:
1737 | version "1.0.7"
1738 | resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5"
1739 | integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==
1740 |
1741 | string.prototype.matchall@^4.0.6:
1742 | version "4.0.7"
1743 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
1744 | integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
1745 | dependencies:
1746 | call-bind "^1.0.2"
1747 | define-properties "^1.1.3"
1748 | es-abstract "^1.19.1"
1749 | get-intrinsic "^1.1.1"
1750 | has-symbols "^1.0.3"
1751 | internal-slot "^1.0.3"
1752 | regexp.prototype.flags "^1.4.1"
1753 | side-channel "^1.0.4"
1754 |
1755 | string.prototype.trimend@^1.0.4:
1756 | version "1.0.4"
1757 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
1758 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
1759 | dependencies:
1760 | call-bind "^1.0.2"
1761 | define-properties "^1.1.3"
1762 |
1763 | string.prototype.trimstart@^1.0.4:
1764 | version "1.0.4"
1765 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
1766 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
1767 | dependencies:
1768 | call-bind "^1.0.2"
1769 | define-properties "^1.1.3"
1770 |
1771 | string_decoder@^1.1.1:
1772 | version "1.3.0"
1773 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1774 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1775 | dependencies:
1776 | safe-buffer "~5.2.0"
1777 |
1778 | strip-ansi@^6.0.1:
1779 | version "6.0.1"
1780 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1781 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1782 | dependencies:
1783 | ansi-regex "^5.0.1"
1784 |
1785 | strip-bom@^3.0.0:
1786 | version "3.0.0"
1787 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1788 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1789 |
1790 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
1791 | version "3.1.1"
1792 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1793 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1794 |
1795 | styled-jsx@5.0.1:
1796 | version "5.0.1"
1797 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.1.tgz#78fecbbad2bf95ce6cd981a08918ce4696f5fc80"
1798 | integrity sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==
1799 |
1800 | supports-color@^7.1.0:
1801 | version "7.2.0"
1802 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1803 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1804 | dependencies:
1805 | has-flag "^4.0.0"
1806 |
1807 | supports-preserve-symlinks-flag@^1.0.0:
1808 | version "1.0.0"
1809 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1810 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1811 |
1812 | text-table@^0.2.0:
1813 | version "0.2.0"
1814 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1815 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1816 |
1817 | to-regex-range@^5.0.1:
1818 | version "5.0.1"
1819 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1820 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1821 | dependencies:
1822 | is-number "^7.0.0"
1823 |
1824 | tsconfig-paths@^3.11.0, tsconfig-paths@^3.9.0:
1825 | version "3.14.1"
1826 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
1827 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
1828 | dependencies:
1829 | "@types/json5" "^0.0.29"
1830 | json5 "^1.0.1"
1831 | minimist "^1.2.6"
1832 | strip-bom "^3.0.0"
1833 |
1834 | tslib@^1.8.1:
1835 | version "1.14.1"
1836 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
1837 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
1838 |
1839 | tsutils@^3.21.0:
1840 | version "3.21.0"
1841 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
1842 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
1843 | dependencies:
1844 | tslib "^1.8.1"
1845 |
1846 | type-check@^0.4.0, type-check@~0.4.0:
1847 | version "0.4.0"
1848 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1849 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1850 | dependencies:
1851 | prelude-ls "^1.2.1"
1852 |
1853 | type-fest@^0.20.2:
1854 | version "0.20.2"
1855 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1856 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1857 |
1858 | typescript@^4.6.4:
1859 | version "4.6.4"
1860 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
1861 | integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
1862 |
1863 | unbox-primitive@^1.0.1:
1864 | version "1.0.2"
1865 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
1866 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
1867 | dependencies:
1868 | call-bind "^1.0.2"
1869 | has-bigints "^1.0.2"
1870 | has-symbols "^1.0.3"
1871 | which-boxed-primitive "^1.0.2"
1872 |
1873 | uri-js@^4.2.2:
1874 | version "4.4.1"
1875 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1876 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1877 | dependencies:
1878 | punycode "^2.1.0"
1879 |
1880 | util-deprecate@^1.0.1:
1881 | version "1.0.2"
1882 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1883 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1884 |
1885 | v8-compile-cache@^2.0.3:
1886 | version "2.3.0"
1887 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
1888 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
1889 |
1890 | which-boxed-primitive@^1.0.2:
1891 | version "1.0.2"
1892 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
1893 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
1894 | dependencies:
1895 | is-bigint "^1.0.1"
1896 | is-boolean-object "^1.1.0"
1897 | is-number-object "^1.0.4"
1898 | is-string "^1.0.5"
1899 | is-symbol "^1.0.3"
1900 |
1901 | which@^2.0.1:
1902 | version "2.0.2"
1903 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1904 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1905 | dependencies:
1906 | isexe "^2.0.0"
1907 |
1908 | word-wrap@^1.2.3:
1909 | version "1.2.3"
1910 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1911 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1912 |
1913 | wrappy@1:
1914 | version "1.0.2"
1915 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1916 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1917 |
1918 | ws@^7.2.0:
1919 | version "7.5.7"
1920 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
1921 | integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
1922 |
1923 | y-indexeddb@^9.0.7:
1924 | version "9.0.7"
1925 | resolved "https://registry.yarnpkg.com/y-indexeddb/-/y-indexeddb-9.0.7.tgz#516f6a9dc2ca68a0cc280030141faecaae699ea9"
1926 | integrity sha512-58rDlwtRgXucgR9Kxc49AepAR6uGNGfcvPPAMrmMfSvRBQ/tPnx6NoHNyrRkhbALEAjV9tPEAIP0a/KkVqAIyA==
1927 | dependencies:
1928 | lib0 "^0.2.35"
1929 |
1930 | y-protocols@^1.0.5:
1931 | version "1.0.5"
1932 | resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.5.tgz#91d574250060b29fcac8f8eb5e276fbad594245e"
1933 | integrity sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==
1934 | dependencies:
1935 | lib0 "^0.2.42"
1936 |
1937 | y-webrtc@^10.2.3:
1938 | version "10.2.3"
1939 | resolved "https://registry.yarnpkg.com/y-webrtc/-/y-webrtc-10.2.3.tgz#cb0d3194c18c999ac45a78a182042a305528dd41"
1940 | integrity sha512-X7a6c56/jWhEI8LHLmT3LgzwbPA4r8h46pdVvV+55EQJhi+K6RfmisWgj7h6/2gkB0yveq7iDxlmyrYGnAKW/Q==
1941 | dependencies:
1942 | lib0 "^0.2.42"
1943 | simple-peer "^9.11.0"
1944 | y-protocols "^1.0.5"
1945 | optionalDependencies:
1946 | ws "^7.2.0"
1947 |
1948 | yallist@^4.0.0:
1949 | version "4.0.0"
1950 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1951 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1952 |
1953 | yjs@^13.5.35:
1954 | version "13.5.35"
1955 | resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.35.tgz#9af7981da3005821304bf87aa949cedea1b69294"
1956 | integrity sha512-vsqGmvZLiVwFcI4RlIZJeX59lGXDLXw37QrrbKVWXQJGbhMKgwAhZI4ZUVANUO54waoE1jta/NWb6gLSqNZ82Q==
1957 | dependencies:
1958 | lib0 "^0.2.49"
1959 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@yfs/react",
3 | "version": "0.1.0",
4 | "description": "Synchronize text files between the browser and the file system",
5 | "license": "MIT",
6 | "repository": "git@github.com:motifland/yfs.git",
7 | "author": {
8 | "name": "Michael Fester",
9 | "email": "michael.fester@gmail.com",
10 | "url": "https://motif.land"
11 | },
12 | "sideEffects": false,
13 | "type": "module",
14 | "module": "./dist/index.js",
15 | "types": "./dist/index.d.ts",
16 | "files": ["dist"],
17 | "scripts": {
18 | "build": "rimraf ./dist && tsc",
19 | "prepublish": "npm run tsc",
20 | "clean": "rimraf ./dist"
21 | },
22 | "dependencies": {
23 | "diff": "^5.0.0",
24 | "idb-keyval": "^6.1.0",
25 | "react": "18.1.0",
26 | "yjs": "^13.5.35"
27 | },
28 | "devDependencies": {
29 | "@types/diff": "^5.0.2",
30 | "@types/node": "^17.0.30",
31 | "@types/react": "^18.0.8",
32 | "typescript": "^4.6.4"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/cache.ts:
--------------------------------------------------------------------------------
1 | import { set as idbSet, get as idbGet } from 'idb-keyval'
2 | import { STORE_KEY_CACHED_FS_FILE } from './constants'
3 |
4 | type LastWriteCacheData = {
5 | name: string
6 | content: string
7 | lastModified: number
8 | }
9 |
10 | const getLastWriteCacheKey = (name: string) => {
11 | return `${STORE_KEY_CACHED_FS_FILE}-${name}`
12 | }
13 |
14 | export const setLastWriteCacheData = async (
15 | name: string,
16 | content: string,
17 | lastModified: number
18 | ) => {
19 | await idbSet(
20 | getLastWriteCacheKey(name),
21 | JSON.stringify({
22 | name,
23 | content,
24 | lastModified
25 | })
26 | )
27 | }
28 |
29 | export const getLastWriteCacheData = async (
30 | name: string
31 | ): Promise => {
32 | const jsonFile = await idbGet(getLastWriteCacheKey(name))
33 | if (jsonFile) {
34 | return JSON.parse(jsonFile)
35 | }
36 | return undefined
37 | }
38 |
--------------------------------------------------------------------------------
/src/constants.ts:
--------------------------------------------------------------------------------
1 | export const STORE_KEY_DIRECTORY_HANDLE = 'STORE_KEY_DIRECTORY_HANDLE'
2 | export const STORE_KEY_CACHED_FS_FILE = 'STORE_KEY_CACHED_FS_FILE'
3 |
--------------------------------------------------------------------------------
/src/helpers.ts:
--------------------------------------------------------------------------------
1 | export type HandleWithPath = {
2 | handle: FileSystemHandle
3 | path: string[]
4 | type: 'file' | 'directory'
5 | }
6 |
7 | const readWriteOptions = { mode: 'readwrite' }
8 |
9 | export const isReadWritePermissionGranted = async (
10 | handle: FileSystemFileHandle | FileSystemDirectoryHandle
11 | ) => {
12 | return (await (handle as any).queryPermission(readWriteOptions)) === 'granted'
13 | }
14 |
15 | export const askReadWritePermissionsIfNeeded = async (
16 | handle: FileSystemFileHandle | FileSystemDirectoryHandle
17 | ) => {
18 | if (await isReadWritePermissionGranted(handle)) {
19 | return true
20 | }
21 |
22 | const permission = await (handle as any).requestPermission(readWriteOptions)
23 | return permission === 'granted'
24 | }
25 |
26 | const createEmptyFileInFolder = async (
27 | parentDirectoryHandle: FileSystemDirectoryHandle,
28 | name: string
29 | ): Promise => {
30 | return await parentDirectoryHandle.getFileHandle(name, { create: true })
31 | }
32 |
33 | export const createFolderInFolder = async (
34 | parentDirectoryHandle: FileSystemDirectoryHandle,
35 | name: string
36 | ): Promise => {
37 | return await parentDirectoryHandle.getDirectoryHandle(name, { create: true })
38 | }
39 |
40 | const writeContentToFile = async (
41 | fileHandle: FileSystemFileHandle,
42 | content: string
43 | ) => {
44 | const writable = await (fileHandle as any).createWritable()
45 | await writable.write(content)
46 | await writable.close()
47 | }
48 |
49 | export const writeContentToFileIfChanged = async (
50 | fsFile: globalThis.File,
51 | fileHandle: FileSystemFileHandle,
52 | content: string
53 | ) => {
54 | const fsFileContent = await fsFile.text()
55 | if (fsFileContent === content) {
56 | return
57 | }
58 | await writeContentToFile(fileHandle, content)
59 | }
60 |
61 | export const renameFile = async (
62 | fsFile: globalThis.File,
63 | parentDirectoryHandle: FileSystemDirectoryHandle,
64 | name: string
65 | ) => {
66 | // Move and rename is not currently supported by the FileSystem
67 | // Access API so we need to do this they manual way by creating
68 | // a new file and deleting the old one.
69 | const content = await fsFile.text()
70 | await createFile(parentDirectoryHandle, name, content)
71 | await deleteFile(parentDirectoryHandle, fsFile.name)
72 | }
73 |
74 | export const moveFile = async (
75 | fsFile: globalThis.File,
76 | sourceDirectoryHandle: FileSystemDirectoryHandle,
77 | destinationDirectoryHandle: FileSystemDirectoryHandle
78 | ) => {
79 | // Same comment as renameFile
80 | const content = await fsFile.text()
81 | await createFile(destinationDirectoryHandle, fsFile.name, content)
82 | await deleteFile(sourceDirectoryHandle, fsFile.name)
83 | }
84 |
85 | export const moveFolderContent = async (
86 | sourceFolderHandle: FileSystemDirectoryHandle,
87 | destinationFolderHandle: FileSystemDirectoryHandle
88 | ) => {
89 | for await (const handle of (sourceFolderHandle as any).values()) {
90 | if (handle.kind === 'file') {
91 | const fsFile = await (handle as FileSystemFileHandle).getFile()
92 | await moveFile(fsFile, sourceFolderHandle, destinationFolderHandle)
93 | } else if (handle.kind === 'directory') {
94 | await moveFolder(handle, sourceFolderHandle, destinationFolderHandle)
95 | }
96 | }
97 | }
98 |
99 | export const moveFolder = async (
100 | folderHandle: FileSystemDirectoryHandle,
101 | parentDirectoryHandle: FileSystemDirectoryHandle,
102 | destinationFolderHandle: FileSystemDirectoryHandle
103 | ) => {
104 | const newFolderHandle = await createFolderInFolder(
105 | destinationFolderHandle,
106 | folderHandle.name
107 | )
108 | await moveFolderContent(folderHandle, newFolderHandle)
109 | await deleteFolder(folderHandle.name, parentDirectoryHandle)
110 | }
111 |
112 | export const renameFolder = async (
113 | folderHandle: FileSystemDirectoryHandle,
114 | parentDirectoryHandle: FileSystemDirectoryHandle,
115 | newName: string
116 | ) => {
117 | const newFolderHandle = await createFolderInFolder(
118 | parentDirectoryHandle,
119 | newName
120 | )
121 | try {
122 | await moveFolderContent(folderHandle, newFolderHandle)
123 | await deleteFolder(folderHandle.name, parentDirectoryHandle)
124 | } catch {
125 | // Do nothing
126 | }
127 | }
128 |
129 | export const createFile = async (
130 | parentDirectoryHandle: FileSystemDirectoryHandle,
131 | name: string,
132 | content: string
133 | ): Promise => {
134 | const newFileHandle = await createEmptyFileInFolder(
135 | parentDirectoryHandle,
136 | name
137 | )
138 | await writeContentToFile(newFileHandle, content)
139 | return newFileHandle
140 | }
141 |
142 | export const deleteFile = async (
143 | parentDirectoryHandle: FileSystemDirectoryHandle,
144 | name: string
145 | ) => {
146 | await parentDirectoryHandle.removeEntry(name)
147 | }
148 |
149 | export const deleteFolder = async (
150 | name: string,
151 | parentDirectoryHandle: FileSystemDirectoryHandle
152 | ) => {
153 | await parentDirectoryHandle.removeEntry(name, {
154 | recursive: true
155 | })
156 | }
157 |
158 | export const getFSFileHandle = async (
159 | name: string,
160 | directoryHandle: FileSystemDirectoryHandle
161 | ): Promise => {
162 | for await (const handle of (directoryHandle as any).values()) {
163 | const relativePath = (await directoryHandle.resolve(handle)) || []
164 | if (relativePath?.length === 1 && relativePath[0] === name) {
165 | return handle
166 | }
167 | }
168 | return undefined
169 | }
170 |
171 | export const isHandlesEqual = async (
172 | handle: FileSystemHandle | undefined,
173 | otherHandle: FileSystemHandle | undefined
174 | ) => {
175 | if (!handle && !otherHandle) {
176 | return true
177 | }
178 |
179 | if (handle && otherHandle) {
180 | return await (handle as any)?.isSameEntry(otherHandle)
181 | }
182 |
183 | return false
184 | }
185 |
186 | export const isIgnoredPath = (path: string[]): boolean => {
187 | // Return true if the file at the given path should be ignored for
188 | // syncing. This is the case currently if the path contains a component
189 | // that starts with a period, e.g. ".git" or ".DS_Store".
190 | return !!path.find(p => p.startsWith('.') || p.endsWith('.crswap'))
191 | }
192 |
193 | export const isTextMimeType = (file: globalThis.File) => {
194 | // Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
195 | return file.type.startsWith('text/') || !file.type
196 | }
197 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { useCallback, useEffect, useMemo, useState } from 'react'
2 | import { set as idbSet, get as idbGet, del as idbDel } from 'idb-keyval'
3 | import * as Y from 'yjs'
4 | import { STORE_KEY_DIRECTORY_HANDLE } from './constants'
5 | import {
6 | askReadWritePermissionsIfNeeded,
7 | createFile,
8 | getFSFileHandle,
9 | writeContentToFileIfChanged
10 | } from './helpers'
11 | import { getLastWriteCacheData, setLastWriteCacheData } from './cache'
12 | import { getDeltaOperations } from './yjs'
13 |
14 | const useFileSync = () => {
15 | const [isSupported, setSupported] = useState(false)
16 | const [isWritePermissionGranted, setWritePermissionGranted] = useState(false)
17 | const [directoryHandle, setDirectoryHandle] = useState<
18 | FileSystemDirectoryHandle | undefined
19 | >(undefined)
20 |
21 | useEffect(() => {
22 | setSupported(typeof (window as any).showDirectoryPicker === 'function')
23 | }, [])
24 |
25 | useEffect(() => {
26 | const loadHandle = async () => {
27 | const handle = await idbGet(STORE_KEY_DIRECTORY_HANDLE)
28 | if (handle) {
29 | setDirectoryHandle(handle)
30 | }
31 | }
32 | loadHandle()
33 | }, [])
34 |
35 | useEffect(() => {
36 | if (directoryHandle) {
37 | idbSet(STORE_KEY_DIRECTORY_HANDLE, directoryHandle)
38 | }
39 | }, [directoryHandle])
40 |
41 | const grantWritePermission = useCallback(async () => {
42 | if (!isSupported || !directoryHandle) {
43 | return
44 | }
45 | try {
46 | const granted = await askReadWritePermissionsIfNeeded(directoryHandle)
47 | setWritePermissionGranted(granted)
48 | } catch {}
49 | }, [isSupported, directoryHandle])
50 |
51 | const setRootDirectory = useCallback(
52 | async (withWritePermission: boolean) => {
53 | if (!isSupported) {
54 | return
55 | }
56 | try {
57 | const handle = await (window as any).showDirectoryPicker()
58 | if (handle) {
59 | setDirectoryHandle(handle)
60 | if (withWritePermission) {
61 | const granted = await askReadWritePermissionsIfNeeded(handle)
62 | setWritePermissionGranted(granted)
63 | }
64 | }
65 | } catch {}
66 | },
67 | [isSupported, grantWritePermission]
68 | )
69 |
70 | const unsetRootDirectory = useCallback(async () => {
71 | setDirectoryHandle(undefined)
72 | idbDel(STORE_KEY_DIRECTORY_HANDLE)
73 | }, [])
74 |
75 | const syncDoc = useCallback(
76 | async (name: string, doc: Y.Doc) => {
77 | if (!directoryHandle) {
78 | return
79 | }
80 |
81 | const updateFileContent = async (
82 | file: globalThis.File,
83 | fileHandle: FileSystemFileHandle,
84 | newContent: string
85 | ) => {
86 | // When we write to the file system, we also save a version
87 | // in cache in order to be able to watch for subsequent changes
88 | // to the file.
89 | await writeContentToFileIfChanged(file, fileHandle, newContent)
90 | await setLastWriteCacheData(name, newContent, file.lastModified)
91 | }
92 |
93 | let fileHandle = await getFSFileHandle(name, directoryHandle)
94 | const docContent = doc.getText().toString()
95 |
96 | if (!fileHandle) {
97 | // File is not present in the file system, so create it.
98 | const newFileHandle = await createFile(directoryHandle, name, '')
99 | const newFile = await newFileHandle.getFile()
100 | await updateFileContent(newFile, newFileHandle, docContent)
101 | return
102 | }
103 |
104 | const file = await fileHandle.getFile()
105 |
106 | // File exists, so compare it with the last-write-cache.
107 | const lastWriteCacheData = await getLastWriteCacheData(name)
108 |
109 | if (!lastWriteCacheData) {
110 | // Cached version does not exist. This should never happen. Indeed,
111 | // even if the user clears the app data, the directory handle will
112 | // be cleared as well, so the user will be asked to select a directory
113 | // again, in which case a hard overwrite will happen, and the
114 | // last-write-cache will be populated. So in case `lastWriteCacheData`
115 | // does not exist, we can consider this situation as similar to the
116 | // initial file dump situation and simply overwrite the FS file.
117 | await updateFileContent(file, fileHandle, docContent)
118 | return
119 | }
120 |
121 | // Cached version exists. This allows us to see the changes in the
122 | // local file, and compute the diff which in turn gives us as
123 | // state update vector for our CRDT. We can then apply it
124 | // to the app file for a seamless merging of the two versions.
125 |
126 | if (file.lastModified === lastWriteCacheData.lastModified) {
127 | // File has not changed in the file system. Since the FS file cache
128 | // is only set when a project file is synced, this means that the
129 | // only option is that the app file has changed, in which
130 | // case it should be written to the FS file.
131 | await updateFileContent(file, fileHandle, docContent)
132 | return
133 | }
134 |
135 | // File has changed in the file system.
136 |
137 | const fileContent = await file.text()
138 | const lastWriteFileContent = lastWriteCacheData.content
139 | const deltas = getDeltaOperations(lastWriteFileContent, fileContent)
140 |
141 | if (deltas.length === 0) {
142 | // Same comment as above: no difference between FS file and
143 | // and last-write-cache, so just write the app file to FS.
144 | await updateFileContent(file, fileHandle, docContent)
145 | return
146 | }
147 |
148 | // A change has happened in the file, since it differs
149 | // from the cached version. So we merge it with the app doc.
150 | doc.getText().applyDelta(deltas)
151 |
152 | const mergedContent = doc.getText().toString()
153 | await updateFileContent(file, fileHandle, mergedContent)
154 | },
155 | [directoryHandle]
156 | )
157 |
158 | const directoryName = useMemo(() => {
159 | return directoryHandle?.name
160 | }, [directoryHandle])
161 |
162 | return {
163 | isSupported,
164 | setRootDirectory,
165 | unsetRootDirectory,
166 | grantWritePermission,
167 | isWritePermissionGranted,
168 | directoryName,
169 | syncDoc
170 | }
171 | }
172 |
173 | export default useFileSync
174 |
--------------------------------------------------------------------------------
/src/yjs.ts:
--------------------------------------------------------------------------------
1 | import * as Diff from 'diff'
2 |
3 | type YDelta = { retain: number } | { delete: number } | { insert: string }
4 |
5 | // Compute the set of Yjs delta operations (that is, `insert` and
6 | // `delete`) required to go from initialText to finalText.
7 | // Based on https://github.com/kpdecker/jsdiff.
8 | export const getDeltaOperations = (
9 | initialText: string,
10 | finalText: string
11 | ): YDelta[] => {
12 | if (initialText === finalText) {
13 | return []
14 | }
15 |
16 | const edits = Diff.diffChars(initialText, finalText)
17 | let prevOffset = 0
18 | let deltas: YDelta[] = []
19 |
20 | for (const edit of edits) {
21 | if (edit.removed && edit.value) {
22 | deltas = [
23 | ...deltas,
24 | ...[
25 | ...(prevOffset > 0 ? [{ retain: prevOffset }] : []),
26 | { delete: edit.value.length }
27 | ]
28 | ]
29 | prevOffset = 0
30 | } else if (edit.added && edit.value) {
31 | deltas = [...deltas, ...[{ retain: prevOffset }, { insert: edit.value }]]
32 | prevOffset = edit.value.length
33 | } else {
34 | prevOffset = edit.value.length
35 | }
36 | }
37 | return deltas
38 | }
39 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "esModuleInterop": true,
5 | "forceConsistentCasingInFileNames": true,
6 | "module": "ES2020",
7 | "moduleResolution": "node",
8 | "outDir": "./dist",
9 | "strict": true,
10 | "target": "ES2020"
11 | },
12 | "include": ["./src"]
13 | }
14 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/diff@^5.0.2":
6 | version "5.0.2"
7 | resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.2.tgz#dd565e0086ccf8bc6522c6ebafd8a3125c91c12b"
8 | integrity sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg==
9 |
10 | "@types/node@^17.0.30":
11 | version "17.0.31"
12 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
13 | integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==
14 |
15 | "@types/prop-types@*":
16 | version "15.7.5"
17 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
18 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
19 |
20 | "@types/react@^18.0.8":
21 | version "18.0.8"
22 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87"
23 | integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw==
24 | dependencies:
25 | "@types/prop-types" "*"
26 | "@types/scheduler" "*"
27 | csstype "^3.0.2"
28 |
29 | "@types/scheduler@*":
30 | version "0.16.2"
31 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
32 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
33 |
34 | csstype@^3.0.2:
35 | version "3.0.11"
36 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
37 | integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
38 |
39 | diff@^5.0.0:
40 | version "5.0.0"
41 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
42 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
43 |
44 | idb-keyval@^6.1.0:
45 | version "6.1.0"
46 | resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.1.0.tgz#e659cff41188e6097d7fadd69926f6adbbe70041"
47 | integrity sha512-u/qHZ75rlD3gH+Zah8dAJVJcGW/RfCnfNrFkElC5RpRCnpsCXXhqjVk+6MoVKJ3WhmNbRYdI6IIVP88e+5sxGw==
48 | dependencies:
49 | safari-14-idb-fix "^3.0.0"
50 |
51 | isomorphic.js@^0.2.4:
52 | version "0.2.5"
53 | resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88"
54 | integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==
55 |
56 | "js-tokens@^3.0.0 || ^4.0.0":
57 | version "4.0.0"
58 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
59 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
60 |
61 | lib0@^0.2.49:
62 | version "0.2.51"
63 | resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.51.tgz#23b1271a26f39120a4d0f86b9dfb44577f5ce98c"
64 | integrity sha512-05Erb3465CxJa38LQlMz4EbetNvRna1S3BzqEjC0/pmp5cQuQSfNNmeS0722Wev1dRlMUp2Cql0gQ55krSXf2Q==
65 | dependencies:
66 | isomorphic.js "^0.2.4"
67 |
68 | loose-envify@^1.1.0:
69 | version "1.4.0"
70 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
71 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
72 | dependencies:
73 | js-tokens "^3.0.0 || ^4.0.0"
74 |
75 | react@18.1.0:
76 | version "18.1.0"
77 | resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
78 | integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
79 | dependencies:
80 | loose-envify "^1.1.0"
81 |
82 | safari-14-idb-fix@^3.0.0:
83 | version "3.0.0"
84 | resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
85 | integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
86 |
87 | typescript@^4.6.4:
88 | version "4.6.4"
89 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
90 | integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
91 |
92 | yjs@^13.5.35:
93 | version "13.5.35"
94 | resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.35.tgz#9af7981da3005821304bf87aa949cedea1b69294"
95 | integrity sha512-vsqGmvZLiVwFcI4RlIZJeX59lGXDLXw37QrrbKVWXQJGbhMKgwAhZI4ZUVANUO54waoE1jta/NWb6gLSqNZ82Q==
96 | dependencies:
97 | lib0 "^0.2.49"
98 |
--------------------------------------------------------------------------------