[improvement] Multiplayer + cursors (#457)
* bump versions, improve cursors * Spline cursors
This commit is contained in:
parent
3b220f0afe
commit
7c2777966f
39 changed files with 467 additions and 459 deletions
|
@ -5,6 +5,8 @@ import { createRequire } from 'module'
|
|||
|
||||
const pkg = createRequire(import.meta.url)('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -30,10 +32,10 @@ async function main() {
|
|||
},
|
||||
})
|
||||
|
||||
console.log(`✔ ${pkg.name}: Build completed.`)
|
||||
jslog(`✔ ${pkg.name}: Build completed.`)
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ import dotenv from 'dotenv'
|
|||
|
||||
dotenv.config()
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -28,7 +30,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const fs = require('fs')
|
||||
const esbuild = require('esbuild')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -25,10 +27,10 @@ async function main() {
|
|||
tsconfig: './tsconfig.json',
|
||||
external: ['vscode'],
|
||||
})
|
||||
console.log(`Built package.`)
|
||||
jslog(`Built package.`)
|
||||
} catch (e) {
|
||||
console.log(`× Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const fs = require('fs')
|
||||
const esbuild = require('esbuild')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -28,15 +30,15 @@ async function main() {
|
|||
incremental: true,
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? console.error('❌ Failed') : console.log('✅ Updated')
|
||||
err ? console.error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
console.log(`Built package.`)
|
||||
jslog(`Built package.`)
|
||||
} catch (e) {
|
||||
console.log(`× Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ const fs = require('fs')
|
|||
const pkg = require('../package.json')
|
||||
const { exec } = require('child_process')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./editor')) {
|
||||
fs.rmSync('./editor', { recursive: true }, (e) => {
|
||||
|
@ -35,8 +37,8 @@ async function main() {
|
|||
}
|
||||
)
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import * as React from 'react'
|
||||
import { signIn, signOut } from 'next-auth/client'
|
||||
import { signIn, signOut } from 'next-auth/react'
|
||||
|
||||
export function useAccountHandlers() {
|
||||
const onSignIn = React.useCallback(() => {
|
||||
|
|
|
@ -5,7 +5,6 @@ const withTM = require('next-transpile-modules')(['@tldraw/tldraw', '@tldraw/cor
|
|||
|
||||
const {
|
||||
GITHUB_ID,
|
||||
GITHUB_SECRET,
|
||||
GITHUB_API_SECRET,
|
||||
NEXT_PUBLIC_SENTRY_DSN: SENTRY_DSN,
|
||||
SENTRY_ORG,
|
||||
|
@ -34,7 +33,6 @@ module.exports = withPWA(
|
|||
NEXT_PUBLIC_COMMIT_SHA: VERCEL_GIT_COMMIT_SHA,
|
||||
GA_MEASUREMENT_ID,
|
||||
GITHUB_ID,
|
||||
GITHUB_SECRET,
|
||||
GITHUB_API_SECRET,
|
||||
},
|
||||
webpack: (config, options) => {
|
||||
|
|
|
@ -18,19 +18,19 @@
|
|||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@liveblocks/client": "^0.13.0-beta.1",
|
||||
"@liveblocks/react": "^0.13.0-beta.1",
|
||||
"@liveblocks/client": "^0.13.1",
|
||||
"@liveblocks/react": "^0.13.1",
|
||||
"@sentry/integrations": "^6.13.2",
|
||||
"@sentry/node": "^6.13.2",
|
||||
"@sentry/react": "^6.13.2",
|
||||
"@sentry/tracing": "^6.13.2",
|
||||
"@stitches/react": "^1.2.5",
|
||||
"@tldraw/core": "^1.2.8",
|
||||
"@tldraw/tldraw": "^1.2.8",
|
||||
"@tldraw/core": "*",
|
||||
"@tldraw/tldraw": "*",
|
||||
"@types/next-auth": "^3.15.0",
|
||||
"next": "^12.0.1",
|
||||
"next-auth": "^3.29.0",
|
||||
"next-pwa": "^5.4.0",
|
||||
"next": "^12.0.7",
|
||||
"next-auth": "^4.0.5",
|
||||
"next-pwa": "^5.4.4",
|
||||
"next-themes": "^0.0.15",
|
||||
"next-transpile-modules": "^9.0.0",
|
||||
"react": "17.0.2",
|
||||
|
|
|
@ -1,34 +1,38 @@
|
|||
import { isSponsoringMe } from 'utils/isSponsoringMe'
|
||||
import { isSignedInUserSponsoringMe } from 'utils/github'
|
||||
import type { NextApiHandler, NextApiRequest, NextApiResponse } from 'next'
|
||||
import NextAuth from 'next-auth'
|
||||
import Providers from 'next-auth/providers'
|
||||
import GithubProvider from 'next-auth/providers/github'
|
||||
|
||||
export default function Auth(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse
|
||||
): ReturnType<NextApiHandler> {
|
||||
return NextAuth(req, res, {
|
||||
theme: {
|
||||
colorScheme: 'light',
|
||||
},
|
||||
providers: [
|
||||
Providers.GitHub({
|
||||
GithubProvider({
|
||||
clientId: process.env.GITHUB_ID,
|
||||
clientSecret: process.env.GITHUB_SECRET,
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
scope: 'read:user',
|
||||
}),
|
||||
],
|
||||
secret: process.env.NEXTAUTH_SECRET,
|
||||
callbacks: {
|
||||
async redirect(url, baseUrl) {
|
||||
async redirect({ baseUrl }) {
|
||||
return baseUrl
|
||||
},
|
||||
async signIn(user, account, profile: { login?: string }) {
|
||||
if (profile?.login) {
|
||||
const canLogin = await isSponsoringMe(profile.login)
|
||||
|
||||
if (canLogin) {
|
||||
return canLogin
|
||||
}
|
||||
async signIn() {
|
||||
return true
|
||||
},
|
||||
async session({ session, token, user }) {
|
||||
if (token) {
|
||||
session.isSponsor = await isSignedInUserSponsoringMe()
|
||||
}
|
||||
|
||||
return '/'
|
||||
return session
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -19,7 +19,7 @@ export default async function GetSponsors(_req: NextApiRequest, res: NextApiResp
|
|||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: 'bearer ' + process.env.GITHUB_API_SECRET,
|
||||
Authorization: 'bearer ' + process.env.GITHUB_SECRET,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: `{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import dynamic from 'next/dynamic'
|
||||
import type { GetServerSideProps } from 'next'
|
||||
import { getSession } from 'next-auth/client'
|
||||
import { getSession } from 'next-auth/react'
|
||||
import Head from 'next/head'
|
||||
|
||||
const Editor = dynamic(() => import('components/Editor'), { ssr: false })
|
||||
|
@ -27,7 +27,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
|
|||
return {
|
||||
props: {
|
||||
isUser: session?.user ? true : false,
|
||||
isSponsor: session?.user ? true : false,
|
||||
isSponsor: session?.isSponsor,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import * as React from 'react'
|
||||
import type { GetServerSideProps } from 'next'
|
||||
import { getSession } from 'next-auth/client'
|
||||
import { getSession } from 'next-auth/react'
|
||||
import dynamic from 'next/dynamic'
|
||||
const MultiplayerEditor = dynamic(() => import('components/MultiplayerEditor'), { ssr: false })
|
||||
|
||||
|
@ -16,14 +16,12 @@ export default function Room({ id, isUser, isSponsor }: RoomProps): JSX.Element
|
|||
|
||||
export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||
const session = await getSession(context)
|
||||
|
||||
const id = context.query.id?.toString()
|
||||
|
||||
return {
|
||||
props: {
|
||||
id,
|
||||
isUser: session?.user ? true : false,
|
||||
isSponsor: session?.user ? true : false,
|
||||
isSponsor: session.isSponsor,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { styled } from 'styles'
|
||||
import { getSession, signin, signout, useSession } from 'next-auth/client'
|
||||
import { getSession, signIn, signOut, useSession } from 'next-auth/react'
|
||||
import type { GetServerSideProps } from 'next'
|
||||
import Link from 'next/link'
|
||||
import React from 'react'
|
||||
import Head from 'next/head'
|
||||
|
||||
export default function Sponsorware(): JSX.Element {
|
||||
const [session, loading] = useSession()
|
||||
const { data, status } = useSession()
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -51,14 +51,14 @@ export default function Sponsorware(): JSX.Element {
|
|||
(at any level) and sign in below.
|
||||
</p>
|
||||
<StyledButtonGroup>
|
||||
{session ? (
|
||||
{data ? (
|
||||
<>
|
||||
<StyledButton variant="secondary" onClick={() => signout()}>
|
||||
<StyledButton variant="secondary" onClick={() => signOut()}>
|
||||
Sign Out
|
||||
</StyledButton>
|
||||
<StyledDetail>
|
||||
Signed in as {session?.user?.name} ({session?.user?.email}), but it looks like
|
||||
you're not yet a sponsor.
|
||||
Signed in as {data.user?.name} ({data.user?.email}), but it looks like you're
|
||||
not yet a sponsor.
|
||||
<br />
|
||||
Something wrong? Try <Link href="/">reloading the page</Link> or DM me on{' '}
|
||||
<a
|
||||
|
@ -73,8 +73,8 @@ export default function Sponsorware(): JSX.Element {
|
|||
</>
|
||||
) : (
|
||||
<>
|
||||
<StyledButton variant="primary" onClick={() => signin('github')}>
|
||||
{loading ? 'Loading...' : 'Sign in with GitHub'}
|
||||
<StyledButton variant="primary" onClick={() => signIn('github')}>
|
||||
{status === 'loading' ? 'Loading...' : 'Sign in with GitHub'}
|
||||
</StyledButton>
|
||||
<StyledDetail>Already a sponsor? Just sign in to visit the app.</StyledDetail>
|
||||
</>
|
||||
|
|
|
@ -19,7 +19,9 @@
|
|||
"rootDir": ".",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": ["./*"]
|
||||
"*": ["./*"],
|
||||
"@tldraw/core": ["../../packages/core"],
|
||||
"@tldraw/tldraw": ["../../packages/tldraw"]
|
||||
}
|
||||
},
|
||||
"references": [
|
||||
|
|
53
apps/www/utils/github.ts
Normal file
53
apps/www/utils/github.ts
Normal file
|
@ -0,0 +1,53 @@
|
|||
/**
|
||||
* Send a GraphQL query to the Github API
|
||||
*/
|
||||
async function queryGithubApi(query: string) {
|
||||
const res = await fetch('https://api.github.com/graphql', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: 'bearer ' + process.env.GITHUB_API_SECRET,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query,
|
||||
}),
|
||||
})
|
||||
return await res.json()
|
||||
}
|
||||
|
||||
/**
|
||||
* What is the signed in user's login name?
|
||||
*/
|
||||
async function getSignedInUser(): Promise<{ login: 'steveruizok ' }> {
|
||||
const res = await queryGithubApi(`
|
||||
query {
|
||||
viewer {
|
||||
login
|
||||
}
|
||||
}`)
|
||||
return res?.data?.viewer
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user with the login A sponsoring the user with the login B?
|
||||
*/
|
||||
async function isASponsoringB(loginA: string, loginB: string) {
|
||||
const res = await queryGithubApi(`
|
||||
query {
|
||||
user(login: "${loginB}") {
|
||||
isSponsoredBy(accountLogin: "${loginA}")
|
||||
}
|
||||
}`)
|
||||
return res?.data?.user?.isSponsoredBy
|
||||
}
|
||||
|
||||
const whitelist = ['steveruizok']
|
||||
|
||||
/**
|
||||
* Is the current user sponsoring me?
|
||||
*/
|
||||
export async function isSignedInUserSponsoringMe() {
|
||||
const user = await getSignedInUser()
|
||||
if (whitelist.includes(user.login)) return true
|
||||
return isASponsoringB('steveruizok', user.login)
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
const whitelist = ['steveruizok']
|
||||
|
||||
export async function isSponsoringMe(login: string) {
|
||||
if (whitelist.includes(login)) return true
|
||||
|
||||
const res = await fetch('https://api.github.com/graphql', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: 'bearer ' + process.env.GITHUB_API_SECRET,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: `
|
||||
query {
|
||||
user(login: "steveruizok") {
|
||||
isSponsoredBy(accountLogin: "${login}")
|
||||
}
|
||||
}
|
||||
`,
|
||||
}),
|
||||
}).then((res) => res.json())
|
||||
|
||||
return res?.data?.user?.isSponsoredBy
|
||||
}
|
|
@ -5,6 +5,8 @@ import { createRequire } from 'module'
|
|||
|
||||
const pkg = createRequire(import.meta.url)('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -36,10 +38,10 @@ async function main() {
|
|||
if (err) throw err
|
||||
})
|
||||
|
||||
console.log(`✔ ${pkg.name}: Build completed.`)
|
||||
jslog(`✔ ${pkg.name}: Build completed.`)
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
import fs from 'fs'
|
||||
import esbuildServe from 'esbuild-serve'
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (!fs.existsSync('./dist')) {
|
||||
fs.mkdirSync('./dist')
|
||||
|
@ -26,7 +28,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -188,8 +188,6 @@ export default function App({ onMount }: AppProps): JSX.Element {
|
|||
|
||||
const hideBounds = appState.isInAny('transformingSelection', 'translating', 'creating')
|
||||
|
||||
// const hideBounds = appState.isInAny('transformingSelection', 'translating', 'creating')
|
||||
|
||||
const firstShapeId = appState.data.pageState.selectedIds[0]
|
||||
const firstShape = firstShapeId ? appState.data.page.shapes[firstShapeId] : null
|
||||
const hideResizeHandles = firstShape
|
||||
|
|
|
@ -5,6 +5,8 @@ import { createRequire } from 'module'
|
|||
|
||||
const pkg = createRequire(import.meta.url)('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -36,10 +38,10 @@ async function main() {
|
|||
if (err) throw err
|
||||
})
|
||||
|
||||
console.log(`✔ ${pkg.name}: Build completed.`)
|
||||
jslog(`✔ ${pkg.name}: Build completed.`)
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
import fs from 'fs'
|
||||
import esbuildServe from 'esbuild-serve'
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (!fs.existsSync('./dist')) {
|
||||
fs.mkdirSync('./dist')
|
||||
|
@ -26,7 +28,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -6,6 +6,8 @@ import { createRequire } from 'module'
|
|||
|
||||
const pkg = createRequire(import.meta.url)('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
esbuild.buildSync({
|
||||
|
@ -31,10 +33,10 @@ async function main() {
|
|||
if (err) throw err
|
||||
})
|
||||
)
|
||||
console.log(`✔ ${pkg.name}: Build completed.`)
|
||||
jslog(`✔ ${pkg.name}: Build completed.`)
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ import dotenv from 'dotenv'
|
|||
|
||||
dotenv.config()
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -40,7 +42,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -9,10 +9,14 @@
|
|||
"emitDeclarationOnly": false,
|
||||
"paths": {
|
||||
"~*": ["./src/*"],
|
||||
"@tldraw/core": ["../../packages/core"],
|
||||
"@tldraw/tldraw": ["../../packages/tldraw"]
|
||||
}
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
"path": "../../packages/core"
|
||||
},
|
||||
{
|
||||
"path": "../../packages/tldraw"
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ const esbuild = require('esbuild')
|
|||
const { gzip } = require('zlib')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -51,7 +53,7 @@ async function main() {
|
|||
|
||||
fs.readFile('./dist/esm/index.js', (_err, data) => {
|
||||
gzip(data, (_err, result) => {
|
||||
console.log(
|
||||
jslog(
|
||||
`✔ ${pkg.name}: Built package. ${(esmSize / 1000).toFixed(2)}kb (${(
|
||||
result.length / 1000
|
||||
).toFixed(2)}kb minified)`
|
||||
|
@ -59,8 +61,8 @@ async function main() {
|
|||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const esbuild = require('esbuild')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
esbuild.build({
|
||||
entryPoints: ['./src/index.ts'],
|
||||
|
@ -19,10 +21,10 @@ async function main() {
|
|||
watch: {
|
||||
onRebuild(error) {
|
||||
if (error) {
|
||||
console.log(`× ${pkg.name}: An error in prevented the rebuild.`)
|
||||
jslog(`× ${pkg.name}: An error in prevented the rebuild.`)
|
||||
return
|
||||
}
|
||||
console.log(`✔ ${pkg.name}: Rebuilt.`)
|
||||
jslog(`✔ ${pkg.name}: Rebuilt.`)
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
/* eslint-disable no-inner-declarations */
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
import Vec from '@tldraw/vec'
|
||||
import * as React from 'react'
|
||||
import { useCursorAnimation } from '~hooks'
|
||||
import type { TLShape, TLUser } from '~types'
|
||||
|
||||
interface UserProps {
|
||||
|
@ -6,15 +10,15 @@ interface UserProps {
|
|||
}
|
||||
|
||||
export function User({ user }: UserProps) {
|
||||
const rUser = React.useRef<HTMLDivElement>(null)
|
||||
|
||||
const rCursor = React.useRef<HTMLDivElement>(null)
|
||||
useCursorAnimation(rCursor, user.point)
|
||||
return (
|
||||
<div
|
||||
ref={rUser}
|
||||
ref={rCursor}
|
||||
className="tl-absolute tl-user"
|
||||
style={{
|
||||
backgroundColor: user.color,
|
||||
transform: `translate(${user.point[0]}px, ${user.point[1]}px)`,
|
||||
willChange: 'transform',
|
||||
}}
|
||||
/>
|
||||
)
|
||||
|
|
|
@ -15,3 +15,4 @@ export * from './usePreventNavigation'
|
|||
export * from './useBoundsEvents'
|
||||
export * from './usePosition'
|
||||
export * from './useKeyEvents'
|
||||
export * from './useCursorAnimation'
|
||||
|
|
139
packages/core/src/hooks/useCursorAnimation.ts
Normal file
139
packages/core/src/hooks/useCursorAnimation.ts
Normal file
|
@ -0,0 +1,139 @@
|
|||
import Vec from '@tldraw/vec'
|
||||
import * as React from 'react'
|
||||
|
||||
type AnimationState = 'stopped' | 'idle' | 'animating'
|
||||
|
||||
type Animation = {
|
||||
curve: boolean
|
||||
from: number[]
|
||||
to: number[]
|
||||
start: number
|
||||
distance: number
|
||||
timeStamp: number
|
||||
duration: number
|
||||
}
|
||||
|
||||
export function useCursorAnimation(ref: any, point: number[]) {
|
||||
const rState = React.useRef<AnimationState>('idle')
|
||||
const rPrevPoint = React.useRef(point)
|
||||
const rQueue = React.useRef<Animation[]>([])
|
||||
const rTimestamp = React.useRef(performance.now())
|
||||
const rLastRequestId = React.useRef<any>(0)
|
||||
const rTimeoutId = React.useRef<any>(0)
|
||||
const rSpline = React.useRef(new Spline())
|
||||
|
||||
// Animate an animation
|
||||
const animateNext = React.useCallback((animation: Animation) => {
|
||||
const start = performance.now()
|
||||
function loop() {
|
||||
const t = (performance.now() - start) / animation.duration
|
||||
if (t <= 1) {
|
||||
const elm = ref.current
|
||||
if (!elm) return
|
||||
const point = animation.curve
|
||||
? rSpline.current.getSplinePoint(t + animation.start)
|
||||
: Vec.lrp(animation.from, animation.to, t)
|
||||
elm.style.setProperty('transform', `translate(${point[0]}px, ${point[1]}px)`)
|
||||
rLastRequestId.current = requestAnimationFrame(loop)
|
||||
return
|
||||
}
|
||||
const next = rQueue.current.shift()
|
||||
if (next) {
|
||||
rState.current = 'animating'
|
||||
animateNext(next)
|
||||
} else {
|
||||
rState.current = 'idle'
|
||||
rTimeoutId.current = setTimeout(() => {
|
||||
rState.current = 'stopped'
|
||||
}, 250)
|
||||
}
|
||||
}
|
||||
loop()
|
||||
}, [])
|
||||
|
||||
// When the point changes, add a new animation
|
||||
React.useLayoutEffect(() => {
|
||||
const now = performance.now()
|
||||
const spline = rSpline.current
|
||||
if (rState.current === 'stopped') {
|
||||
rTimestamp.current = now
|
||||
spline.clear()
|
||||
}
|
||||
spline.addPoint(point)
|
||||
const animation: Animation = {
|
||||
distance: spline.totalLength,
|
||||
curve: spline.points.length > 3,
|
||||
start: spline.points.length - 3,
|
||||
from: rPrevPoint.current,
|
||||
to: point,
|
||||
timeStamp: now,
|
||||
duration: Math.min(now - rTimestamp.current, 500),
|
||||
}
|
||||
rPrevPoint.current = point
|
||||
rTimestamp.current = now
|
||||
switch (rState.current) {
|
||||
case 'stopped': {
|
||||
rPrevPoint.current = point
|
||||
rState.current = 'idle'
|
||||
break
|
||||
}
|
||||
case 'idle': {
|
||||
rState.current = 'animating'
|
||||
animateNext(animation)
|
||||
break
|
||||
}
|
||||
case 'animating': {
|
||||
rQueue.current.push(animation)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return () => {
|
||||
clearTimeout(rTimeoutId.current)
|
||||
}
|
||||
}, [point])
|
||||
}
|
||||
|
||||
class Spline {
|
||||
points: number[][] = []
|
||||
lengths: number[] = []
|
||||
totalLength = 0
|
||||
|
||||
private prev?: number[]
|
||||
|
||||
addPoint(point: number[]) {
|
||||
if (this.prev) {
|
||||
const length = Vec.dist(this.prev, point)
|
||||
this.lengths.push(length)
|
||||
this.totalLength += length
|
||||
this.points.push(point)
|
||||
}
|
||||
this.prev = point
|
||||
}
|
||||
|
||||
getSplinePoint(t: number): number[] {
|
||||
const { points } = this
|
||||
const l = points.length - 1
|
||||
const d = Math.trunc(t)
|
||||
const p1 = Math.min(d + 1, l)
|
||||
const p2 = Math.min(p1 + 1, l)
|
||||
const p3 = Math.min(p2 + 1, l)
|
||||
const p0 = p1 - 1
|
||||
t = t - d
|
||||
const tt = t * t,
|
||||
ttt = tt * t,
|
||||
q1 = -ttt + 2 * tt - t,
|
||||
q2 = 3 * ttt - 5 * tt + 2,
|
||||
q3 = -3 * ttt + 4 * tt + t,
|
||||
q4 = ttt - tt
|
||||
return [
|
||||
0.5 * (points[p0][0] * q1 + points[p1][0] * q2 + points[p2][0] * q3 + points[p3][0] * q4),
|
||||
0.5 * (points[p0][1] * q1 + points[p1][1] * q2 + points[p2][1] * q3 + points[p3][1] * q4),
|
||||
]
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.points = []
|
||||
this.totalLength = 0
|
||||
}
|
||||
}
|
|
@ -4,6 +4,8 @@ const esbuild = require('esbuild')
|
|||
const { gzip } = require('zlib')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -45,7 +47,7 @@ async function main() {
|
|||
|
||||
fs.readFile('./dist/esm/index.js', (_err, data) => {
|
||||
gzip(data, (_err, result) => {
|
||||
console.log(
|
||||
jslog(
|
||||
`✔ ${pkg.name}: Built package. ${(esmSize / 1000).toFixed(2)}kb (${(
|
||||
result.length / 1000
|
||||
).toFixed(2)}kb minified)`
|
||||
|
@ -53,8 +55,8 @@ async function main() {
|
|||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const esbuild = require('esbuild')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
await esbuild.build({
|
||||
|
@ -17,7 +19,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -82,63 +82,6 @@ export function getTLBezierCurveSegments(
|
|||
return results
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a point along a curve segment, via pomax.
|
||||
* @param t
|
||||
* @param points [cpx1, cpy1, cpx2, cpy2, px, py][]
|
||||
*/
|
||||
export function computePointOnCurve(t: number, points: number[][]): number[] {
|
||||
// shortcuts
|
||||
if (t === 0) {
|
||||
return points[0]
|
||||
}
|
||||
|
||||
const order = points.length - 1
|
||||
|
||||
if (t === 1) {
|
||||
return points[order]
|
||||
}
|
||||
|
||||
const mt = 1 - t
|
||||
let p = points // constant?
|
||||
|
||||
if (order === 0) {
|
||||
return points[0]
|
||||
} // linear?
|
||||
|
||||
if (order === 1) {
|
||||
return [mt * p[0][0] + t * p[1][0], mt * p[0][1] + t * p[1][1]]
|
||||
} // quadratic/cubic curve?
|
||||
|
||||
// if (order < 4) {
|
||||
const mt2 = mt * mt
|
||||
const t2 = t * t
|
||||
|
||||
let a: number
|
||||
let b: number
|
||||
let c: number
|
||||
let d = 0
|
||||
|
||||
if (order === 2) {
|
||||
p = [p[0], p[1], p[2], [0, 0]]
|
||||
a = mt2
|
||||
b = mt * t * 2
|
||||
c = t2
|
||||
// } else if (order === 3) {
|
||||
} else {
|
||||
a = mt2 * mt
|
||||
b = mt2 * t * 3
|
||||
c = mt * t2 * 3
|
||||
d = t * t2
|
||||
}
|
||||
|
||||
return [
|
||||
a * p[0][0] + b * p[1][0] + c * p[2][0] + d * p[3][0],
|
||||
a * p[0][1] + b * p[1][1] + c * p[2][1] + d * p[3][1],
|
||||
]
|
||||
// } // higher order curves: use de Casteljau's computation
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluate a 2d cubic bezier at a point t on the x axis.
|
||||
* @param tx
|
||||
|
@ -197,28 +140,11 @@ export function cubicBezier(tx: number, x1: number, y1: number, x2: number, y2:
|
|||
* @param points An array of points formatted as [x, y]
|
||||
* @param k Tension
|
||||
*/
|
||||
export function getSpline(
|
||||
pts: number[][],
|
||||
k = 0.5
|
||||
): {
|
||||
cp1x: number
|
||||
cp1y: number
|
||||
cp2x: number
|
||||
cp2y: number
|
||||
px: number
|
||||
py: number
|
||||
}[] {
|
||||
export function getSpline(pts: number[][], k = 0.5): number[][] {
|
||||
let p0: number[]
|
||||
let [p1, p2, p3] = pts
|
||||
|
||||
const results: {
|
||||
cp1x: number
|
||||
cp1y: number
|
||||
cp2x: number
|
||||
cp2y: number
|
||||
px: number
|
||||
py: number
|
||||
}[] = []
|
||||
const results: number[][] = []
|
||||
|
||||
for (let i = 1, len = pts.length; i < len; i++) {
|
||||
p0 = p1
|
||||
|
@ -226,19 +152,76 @@ export function getSpline(
|
|||
p2 = p3
|
||||
p3 = pts[i + 2] ? pts[i + 2] : p2
|
||||
|
||||
results.push({
|
||||
cp1x: p1[0] + ((p2[0] - p0[0]) / 6) * k,
|
||||
cp1y: p1[1] + ((p2[1] - p0[1]) / 6) * k,
|
||||
cp2x: p2[0] - ((p3[0] - p1[0]) / 6) * k,
|
||||
cp2y: p2[1] - ((p3[1] - p1[1]) / 6) * k,
|
||||
px: pts[i][0],
|
||||
py: pts[i][1],
|
||||
})
|
||||
results.push([
|
||||
p1[0] + ((p2[0] - p0[0]) / 6) * k,
|
||||
p1[1] + ((p2[1] - p0[1]) / 6) * k,
|
||||
p2[0] - ((p3[0] - p1[0]) / 6) * k,
|
||||
p2[1] - ((p3[1] - p1[1]) / 6) * k,
|
||||
pts[i][0],
|
||||
pts[i][1],
|
||||
])
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a point along a curve segment, via pomax.
|
||||
* @param t
|
||||
* @param points [cpx1, cpy1, cpx2, cpy2, px, py][]
|
||||
*/
|
||||
export function computePointOnSpline(t: number, points: number[][]): number[] {
|
||||
// shortcuts
|
||||
if (t === 0) {
|
||||
return points[0]
|
||||
}
|
||||
|
||||
const order = points.length - 1
|
||||
|
||||
if (t === 1) {
|
||||
return points[order]
|
||||
}
|
||||
|
||||
const mt = 1 - t
|
||||
let p = points // constant?
|
||||
|
||||
if (order === 0) {
|
||||
return points[0]
|
||||
} // linear?
|
||||
|
||||
if (order === 1) {
|
||||
return [mt * p[0][0] + t * p[1][0], mt * p[0][1] + t * p[1][1]]
|
||||
} // quadratic/cubic curve?
|
||||
|
||||
// if (order < 4) {
|
||||
const mt2 = mt * mt
|
||||
const t2 = t * t
|
||||
|
||||
let a: number
|
||||
let b: number
|
||||
let c: number
|
||||
let d = 0
|
||||
|
||||
if (order === 2) {
|
||||
p = [p[0], p[1], p[2], [0, 0]]
|
||||
a = mt2
|
||||
b = mt * t * 2
|
||||
c = t2
|
||||
// } else if (order === 3) {
|
||||
} else {
|
||||
a = mt2 * mt
|
||||
b = mt2 * t * 3
|
||||
c = mt * t2 * 3
|
||||
d = t * t2
|
||||
}
|
||||
|
||||
return [
|
||||
a * p[0][0] + b * p[1][0] + c * p[2][0] + d * p[3][0],
|
||||
a * p[0][1] + b * p[1][1] + c * p[2][1] + d * p[3][1],
|
||||
]
|
||||
// } // higher order curves: use de Casteljau's computation
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a bezier curve data for a spline that fits an array of points.
|
||||
* @param pts
|
||||
|
@ -271,7 +254,7 @@ export function getCurvePoints(
|
|||
// The algorithm require a previous and next point to the actual point array.
|
||||
// Check if we will draw closed or open curve.
|
||||
// If closed, copy end points to beginning and first points to end
|
||||
// If open, duplicate first points to befinning, end points to end
|
||||
// If open, duplicate first points to beginning, end points to end
|
||||
if (isClosed) {
|
||||
_pts.unshift(_pts[len - 1])
|
||||
_pts.push(_pts[0])
|
||||
|
|
|
@ -4,6 +4,8 @@ const esbuild = require('esbuild')
|
|||
const { gzip } = require('zlib')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -47,7 +49,7 @@ async function main() {
|
|||
|
||||
fs.readFile('./dist/esm/index.js', (_err, data) => {
|
||||
gzip(data, (_err, result) => {
|
||||
console.log(
|
||||
jslog(
|
||||
`✔ ${pkg.name}: Built package. ${(esmSize / 1000).toFixed(2)}kb (${(
|
||||
result.length / 1000
|
||||
).toFixed(2)}kb minified)`
|
||||
|
@ -55,8 +57,8 @@ async function main() {
|
|||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const esbuild = require('esbuild')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
await esbuild.build({
|
||||
|
@ -17,7 +19,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -4,6 +4,8 @@ const esbuild = require('esbuild')
|
|||
const { gzip } = require('zlib')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -49,7 +51,7 @@ async function main() {
|
|||
|
||||
fs.readFile('./dist/esm/index.js', (_err, data) => {
|
||||
gzip(data, (_err, result) => {
|
||||
console.log(
|
||||
jslog(
|
||||
`✔ ${pkg.name}: Built pkg. ${(esmSize / 1000).toFixed(2)}kb (${(
|
||||
result.length / 1000
|
||||
).toFixed(2)}kb minified)`
|
||||
|
@ -57,8 +59,8 @@ async function main() {
|
|||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const esbuild = require('esbuild')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
esbuild.build({
|
||||
entryPoints: ['./src/index.ts'],
|
||||
|
@ -19,10 +21,10 @@ async function main() {
|
|||
watch: {
|
||||
onRebuild(error) {
|
||||
if (error) {
|
||||
console.log(`× ${pkg.name}: An error in prevented the rebuild.`)
|
||||
jslog(`× ${pkg.name}: An error in prevented the rebuild.`)
|
||||
return
|
||||
}
|
||||
console.log(`✔ ${pkg.name}: Rebuilt.`)
|
||||
jslog(`✔ ${pkg.name}: Rebuilt.`)
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -4,6 +4,8 @@ const esbuild = require('esbuild')
|
|||
const { gzip } = require('zlib')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
if (fs.existsSync('./dist')) {
|
||||
fs.rmSync('./dist', { recursive: true }, (e) => {
|
||||
|
@ -45,7 +47,7 @@ async function main() {
|
|||
|
||||
fs.readFile('./dist/esm/index.js', (_err, data) => {
|
||||
gzip(data, (_err, result) => {
|
||||
console.log(
|
||||
jslog(
|
||||
`✔ ${pkg.name}: Built package. ${(esmSize / 1000).toFixed(2)}kb (${(
|
||||
result.length / 1000
|
||||
).toFixed(2)}kb minified)`
|
||||
|
@ -53,8 +55,8 @@ async function main() {
|
|||
})
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(`× ${pkg.name}: Build failed due to an error.`)
|
||||
console.log(e)
|
||||
jslog(`× ${pkg.name}: Build failed due to an error.`)
|
||||
jslog(e)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const esbuild = require('esbuild')
|
||||
const pkg = require('../package.json')
|
||||
|
||||
const { log: jslog } = console
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
await esbuild.build({
|
||||
|
@ -17,7 +19,7 @@ async function main() {
|
|||
},
|
||||
watch: {
|
||||
onRebuild(err) {
|
||||
err ? error('❌ Failed') : log('✅ Updated')
|
||||
err ? error('❌ Failed') : jslog('✅ Updated')
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
322
yarn.lock
322
yarn.lock
|
@ -901,7 +901,7 @@
|
|||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
|
||||
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
|
||||
version "7.16.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
|
||||
integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
|
||||
|
@ -2004,11 +2004,21 @@
|
|||
resolved "https://registry.yarnpkg.com/@liveblocks/client/-/client-0.13.0-beta.1.tgz#baee31dbefb7c40c954ab61b8c421562a85f729e"
|
||||
integrity sha512-LW1CygndCQeITYFsnaEZgbe2qqIZKo4iVH/qGYEXVLptc/1PP0nzEi8Hr2lfw4JOUw003FTeQ+BSI/raP22mgg==
|
||||
|
||||
"@liveblocks/react@0.13.0-beta.1", "@liveblocks/react@^0.13.0-beta.1":
|
||||
"@liveblocks/client@^0.13.1":
|
||||
version "0.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@liveblocks/client/-/client-0.13.1.tgz#601b7f077abb0220307ff57cae39887f17d582f7"
|
||||
integrity sha512-0yOjcy3qx+qGJxTIJnsPYLzwdgZoJ53CrAKrjxAp1gKdg7T0Ub3LwDrUCw+ukgn1O2aE96FL71GQEscsvjD7TA==
|
||||
|
||||
"@liveblocks/react@0.13.0-beta.1":
|
||||
version "0.13.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/@liveblocks/react/-/react-0.13.0-beta.1.tgz#e71bc47511480967c2a11042aa920399674b5c3d"
|
||||
integrity sha512-odOO5WCVfV3B70Yy8k/11XFY/5dVSBpIPKnx+ZDxZkw/yzrA39NqS+GH7go/RvVAGSeHbg9phknOtg4X9gziAQ==
|
||||
|
||||
"@liveblocks/react@^0.13.1":
|
||||
version "0.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@liveblocks/react/-/react-0.13.1.tgz#e134305575f38901f03a7db84596a9610a5467f0"
|
||||
integrity sha512-//XYlFQZnhSrguRdfuGUu5G1sMl/rSBwHDB/pUHGoDCiS94zwVhweao5wKJpph3TklxVHEV2gR3n3+EYo7D91w==
|
||||
|
||||
"@malept/cross-spawn-promise@^1.1.0":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
|
||||
|
@ -2044,22 +2054,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.1.0.tgz#88c35b72e79a20b79bb4c9b3e2817241a1c9f4f9"
|
||||
integrity sha512-XQr74QaLeMiqhStEhLn1im9EOMnkypp7MZOwQhGzqp2Weu5eQJbpPxWxixxlYRKWPOmJjsk6qYfYH9kq43yc2w==
|
||||
|
||||
"@next-auth/prisma-legacy-adapter@0.1.2":
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@next-auth/prisma-legacy-adapter/-/prisma-legacy-adapter-0.1.2.tgz#d19b65696bf16bda5dbc88f85da98aee6f30e2f3"
|
||||
integrity sha512-QpGcRvrnFERkvVFroqS89qDbnskw9AjhvWxO095u3xl/8QVI++Y+doluQdZWuV6PewjrV7xY+uVUEnRhnGM8yQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.0"
|
||||
|
||||
"@next-auth/typeorm-legacy-adapter@0.1.4":
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@next-auth/typeorm-legacy-adapter/-/typeorm-legacy-adapter-0.1.4.tgz#a250498613669b736d76b36a2a46f7eafc9e6ed5"
|
||||
integrity sha512-UDnctrPiUU0yaPNeFhD6uw0FAuWGvx6IUVwUYTEzZm26RCEe/BBjkpGLYk43M3rcnkBPfkiljomAs/O7Uzh12w==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.0"
|
||||
require_optional "^1.0.1"
|
||||
typeorm "^0.2.30"
|
||||
|
||||
"@next/env@12.0.7":
|
||||
version "12.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.0.7.tgz#316f7bd1b6b69f554d2676cfc91a16bc7e32ee79"
|
||||
|
@ -2379,11 +2373,6 @@
|
|||
dependencies:
|
||||
"@octokit/openapi-types" "^11.2.0"
|
||||
|
||||
"@panva/asn1.js@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
|
||||
integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==
|
||||
|
||||
"@panva/hkdf@^1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.1.tgz#ed0da773bd5f794d0603f5a5b5cee6d2354e5660"
|
||||
|
@ -2971,11 +2960,6 @@
|
|||
dependencies:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
"@sqltools/formatter@^1.2.2":
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20"
|
||||
integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==
|
||||
|
||||
"@state-designer/core@latest":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@state-designer/core/-/core-3.0.0.tgz#c716d99f8862dd0e58fe48250c4cf875ecc76570"
|
||||
|
@ -3443,11 +3427,6 @@
|
|||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/zen-observable@0.8.3":
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
|
||||
integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^4.19.0", "@typescript-eslint/eslint-plugin@^4.31.1":
|
||||
version "4.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
|
||||
|
@ -3804,11 +3783,6 @@ app-module-path@^2.2.0:
|
|||
resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5"
|
||||
integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU=
|
||||
|
||||
app-root-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad"
|
||||
integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==
|
||||
|
||||
aproba@^1.0.3, aproba@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
|
@ -4468,11 +4442,6 @@ buffer-crc32@~0.2.3:
|
|||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||
|
||||
buffer-equal@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
|
||||
|
@ -4509,14 +4478,6 @@ buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0:
|
|||
base64-js "^1.3.1"
|
||||
ieee754 "^1.1.13"
|
||||
|
||||
buffer@^6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
|
||||
integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
|
||||
dependencies:
|
||||
base64-js "^1.3.1"
|
||||
ieee754 "^1.2.1"
|
||||
|
||||
builder-util-runtime@8.9.1:
|
||||
version "8.9.1"
|
||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz#25f066b3fbc20b3e6236a9b956b1ebb0e33ff66a"
|
||||
|
@ -4907,18 +4868,6 @@ cli-cursor@^3.1.0:
|
|||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-highlight@^2.1.11:
|
||||
version "2.1.11"
|
||||
resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
|
||||
integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
highlight.js "^10.7.1"
|
||||
mz "^2.4.0"
|
||||
parse5 "^5.1.1"
|
||||
parse5-htmlparser2-tree-adapter "^6.0.0"
|
||||
yargs "^16.0.0"
|
||||
|
||||
cli-truncate@2.1.0, cli-truncate@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
|
||||
|
@ -6164,11 +6113,6 @@ dotenv@^10.0.0:
|
|||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
|
||||
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
|
||||
|
||||
dotenv@^8.2.0:
|
||||
version "8.6.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
|
||||
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
|
||||
|
||||
dotenv@^9.0.2:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05"
|
||||
|
@ -6202,13 +6146,6 @@ ecc-jsbn@~0.1.1:
|
|||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
|
@ -7360,6 +7297,13 @@ fragment-cache@^0.2.1:
|
|||
dependencies:
|
||||
map-cache "^0.2.2"
|
||||
|
||||
framesync@6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20"
|
||||
integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==
|
||||
dependencies:
|
||||
tslib "^2.1.0"
|
||||
|
||||
fresh@~0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
|
@ -7443,11 +7387,6 @@ functional-red-black-tree@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
|
||||
|
||||
futoin-hkdf@^1.3.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz#fd534e848e0e50339b8bfbd81250b09cbff10ba3"
|
||||
integrity sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
|
@ -7952,10 +7891,10 @@ he@1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||
|
||||
highlight.js@^10.7.1:
|
||||
version "10.7.3"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
|
||||
integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
|
||||
hey-listen@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68"
|
||||
integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==
|
||||
|
||||
history@^4.9.0:
|
||||
version "4.10.1"
|
||||
|
@ -8186,7 +8125,7 @@ idb@^6.1.4:
|
|||
resolved "https://registry.yarnpkg.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b"
|
||||
integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==
|
||||
|
||||
ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1:
|
||||
ieee754@^1.1.13, ieee754@^1.1.4:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||
|
@ -9354,13 +9293,6 @@ joi@^17.4.2:
|
|||
"@sideway/formula" "^3.0.0"
|
||||
"@sideway/pinpoint" "^2.0.0"
|
||||
|
||||
jose@^1.27.2:
|
||||
version "1.28.1"
|
||||
resolved "https://registry.yarnpkg.com/jose/-/jose-1.28.1.tgz#34a0f851a534be59ffab82a6e8845f6874e8c128"
|
||||
integrity sha512-6JK28rFu5ENp/yxMwM+iN7YeaInnY9B9Bggjkz5fuwLiJhbVrl2O4SJr65bdNBPl9y27fdC3Mymh+FVCvozLIg==
|
||||
dependencies:
|
||||
"@panva/asn1.js" "^1.0.0"
|
||||
|
||||
jose@^4.1.2, jose@^4.1.4:
|
||||
version "4.3.7"
|
||||
resolved "https://registry.yarnpkg.com/jose/-/jose-4.3.7.tgz#5000e4a2d41ae411a5abdd11e6baf63fc2973a69"
|
||||
|
@ -9376,7 +9308,7 @@ jpeg-js@^0.4.2:
|
|||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0:
|
||||
js-yaml@4.1.0, js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
|
@ -9524,22 +9456,6 @@ jsonpointer@^5.0.0:
|
|||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072"
|
||||
integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==
|
||||
|
||||
jsonwebtoken@^8.5.1:
|
||||
version "8.5.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
|
||||
integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
|
||||
dependencies:
|
||||
jws "^3.2.2"
|
||||
lodash.includes "^4.3.0"
|
||||
lodash.isboolean "^3.0.3"
|
||||
lodash.isinteger "^4.0.4"
|
||||
lodash.isnumber "^3.0.3"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.isstring "^4.0.1"
|
||||
lodash.once "^4.0.0"
|
||||
ms "^2.1.1"
|
||||
semver "^5.6.0"
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
|
||||
|
@ -9558,23 +9474,6 @@ jsprim@^1.2.2:
|
|||
array-includes "^3.1.3"
|
||||
object.assign "^4.1.2"
|
||||
|
||||
jwa@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
|
||||
integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
|
||||
dependencies:
|
||||
buffer-equal-constant-time "1.0.1"
|
||||
ecdsa-sig-formatter "1.0.11"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
jws@^3.2.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
|
||||
integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
|
||||
dependencies:
|
||||
jwa "^1.4.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
keygrip@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
|
||||
|
@ -9944,51 +9843,16 @@ lodash.get@^4.4.2:
|
|||
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
|
||||
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
|
||||
|
||||
lodash.includes@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||
integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
|
||||
|
||||
lodash.isboolean@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
|
||||
integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
|
||||
|
||||
lodash.isinteger@^4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
|
||||
integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
|
||||
|
||||
lodash.ismatch@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
|
||||
integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
|
||||
|
||||
lodash.isnumber@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
|
||||
integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
|
||||
|
||||
lodash.isplainobject@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
|
||||
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
|
||||
|
||||
lodash.isstring@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
|
||||
integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
|
||||
|
||||
lodash.merge@^4.6.2:
|
||||
version "4.6.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||
|
||||
lodash.once@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
||||
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
|
||||
|
||||
lodash.set@^4.3.2:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
|
||||
|
@ -10494,7 +10358,7 @@ mkdirp-promise@^5.0.1:
|
|||
dependencies:
|
||||
mkdirp "*"
|
||||
|
||||
mkdirp@*, mkdirp@^1.0.4:
|
||||
mkdirp@*:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
@ -10644,7 +10508,7 @@ mute-stream@~0.0.4:
|
|||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
mz@^2.4.0, mz@^2.5.0:
|
||||
mz@^2.5.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
|
||||
|
@ -10720,25 +10584,22 @@ next-auth@*:
|
|||
preact-render-to-string "^5.1.19"
|
||||
uuid "^8.3.2"
|
||||
|
||||
next-auth@^3.29.0:
|
||||
version "3.29.0"
|
||||
resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-3.29.0.tgz#60ddbfc7ed8ae7d43ebb02c16dc58eebf5dcb337"
|
||||
integrity sha512-B//4QTv/1Of0D+roZ82URmI6L2JSbkKgeaKI7Mdrioq8lAzp9ff8NdmouvZL/7zwrPe2cUyM6MLYlasfuI3ZIQ==
|
||||
next-auth@^4.0.5:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.0.5.tgz#a41cdbe41f8a8dad42f4b3fb510ef1fb7035667e"
|
||||
integrity sha512-POrV6c29Uu3+kVhOe8h3go2ytjeB2jPdW4GJwudUbK6OB++dkpT6yialmm8whM7hyoW4Xy3FbsoldGn8bVHhYg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.0"
|
||||
"@next-auth/prisma-legacy-adapter" "0.1.2"
|
||||
"@next-auth/typeorm-legacy-adapter" "0.1.4"
|
||||
futoin-hkdf "^1.3.2"
|
||||
jose "^1.27.2"
|
||||
jsonwebtoken "^8.5.1"
|
||||
nodemailer "^6.4.16"
|
||||
"@babel/runtime" "^7.15.4"
|
||||
"@panva/hkdf" "^1.0.0"
|
||||
cookie "^0.4.1"
|
||||
jose "^4.1.2"
|
||||
oauth "^0.9.15"
|
||||
pkce-challenge "^2.1.0"
|
||||
preact "^10.4.1"
|
||||
preact-render-to-string "^5.1.14"
|
||||
querystring "^0.2.0"
|
||||
openid-client "^5.0.2"
|
||||
preact "^10.5.14"
|
||||
preact-render-to-string "^5.1.19"
|
||||
uuid "^8.3.2"
|
||||
|
||||
next-pwa@^5.4.0:
|
||||
next-pwa@^5.4.4:
|
||||
version "5.4.4"
|
||||
resolved "https://registry.yarnpkg.com/next-pwa/-/next-pwa-5.4.4.tgz#00f1678091f05662e54c25106664e79c26c337ef"
|
||||
integrity sha512-Wo7DctXO9ZZzMCuRK/q2U3x5k49LBRv7p31woJIUfiR6tJChSMoojHUvvgeCY72gSo4mtovS5KRm6iHIs/kxeg==
|
||||
|
@ -10763,7 +10624,7 @@ next-transpile-modules@^9.0.0:
|
|||
enhanced-resolve "^5.7.0"
|
||||
escalade "^3.1.1"
|
||||
|
||||
next@^12.0.1:
|
||||
next@^12.0.7:
|
||||
version "12.0.7"
|
||||
resolved "https://registry.yarnpkg.com/next/-/next-12.0.7.tgz#33ebf229b81b06e583ab5ae7613cffe1ca2103fc"
|
||||
integrity sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==
|
||||
|
@ -10924,11 +10785,6 @@ node-source-walk@^4.0.0, node-source-walk@^4.2.0:
|
|||
dependencies:
|
||||
"@babel/parser" "^7.0.0"
|
||||
|
||||
nodemailer@^6.4.16:
|
||||
version "6.7.2"
|
||||
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.7.2.tgz#44b2ad5f7ed71b7067f7a21c4fedabaec62b85e0"
|
||||
integrity sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q==
|
||||
|
||||
nopt@^4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
|
||||
|
@ -11528,7 +11384,7 @@ parse-url@^6.0.0:
|
|||
parse-path "^4.0.0"
|
||||
protocols "^1.4.0"
|
||||
|
||||
parse5-htmlparser2-tree-adapter@^6.0.0, parse5-htmlparser2-tree-adapter@^6.0.1:
|
||||
parse5-htmlparser2-tree-adapter@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
|
||||
integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
|
||||
|
@ -11540,11 +11396,6 @@ parse5@6.0.1, parse5@^6.0.1:
|
|||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
|
||||
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
|
||||
|
||||
parse5@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
|
||||
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
|
||||
|
||||
parseurl@^1.3.2, parseurl@~1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||
|
@ -11710,11 +11561,6 @@ pirates@^4.0.1:
|
|||
dependencies:
|
||||
node-modules-regexp "^1.0.0"
|
||||
|
||||
pkce-challenge@^2.1.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-2.2.0.tgz#02622e0498b82aab248c8c7dbf6507e8bbe20abf"
|
||||
integrity sha512-Ly0Y0OwhtG2N1ynk5ruqoyJxkrWhAPmvdRk0teiLh9Dp2+J4URKpv1JSKWD0j1Sd+QCeiwO9lTl0EjmrB2jWeA==
|
||||
|
||||
pkg-dir@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||
|
@ -11790,6 +11636,16 @@ pngjs@^5.0.0:
|
|||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
|
||||
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
|
||||
|
||||
popmotion@^11.0.3:
|
||||
version "11.0.3"
|
||||
resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9"
|
||||
integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==
|
||||
dependencies:
|
||||
framesync "6.0.1"
|
||||
hey-listen "^1.0.8"
|
||||
style-value-types "5.0.0"
|
||||
tslib "^2.1.0"
|
||||
|
||||
posix-character-classes@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||
|
@ -11822,14 +11678,14 @@ postcss@^8.1.7:
|
|||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.1"
|
||||
|
||||
preact-render-to-string@^5.1.14, preact-render-to-string@^5.1.19:
|
||||
preact-render-to-string@^5.1.19:
|
||||
version "5.1.19"
|
||||
resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.1.19.tgz#ffae7c3bd1680be5ecf5991d41fe3023b3051e0e"
|
||||
integrity sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==
|
||||
dependencies:
|
||||
pretty-format "^3.8.0"
|
||||
|
||||
preact@^10.4.1, preact@^10.5.14:
|
||||
preact@^10.5.14:
|
||||
version "10.6.2"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-10.6.2.tgz#c849f91df9ad36bfa64d1a5d5880977f767c69e5"
|
||||
integrity sha512-ppDjurt75nSxyikpyali+uKwRl8CK9N6ntOPovGIEGQagjMLVzEgVqFEsUUyUrqyE9Ch90KE0jmFc9q2QcPLBA==
|
||||
|
@ -12093,11 +11949,6 @@ querystring-es3@0.2.1:
|
|||
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
||||
integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
|
||||
|
||||
querystring@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
|
||||
integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
|
||||
|
||||
queue-microtask@^1.2.2:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||
|
@ -12445,11 +12296,6 @@ redent@^3.0.0:
|
|||
indent-string "^4.0.0"
|
||||
strip-indent "^3.0.0"
|
||||
|
||||
reflect-metadata@^0.1.13:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
||||
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
|
||||
|
||||
regenerate-unicode-properties@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
|
||||
|
@ -12596,14 +12442,6 @@ require-main-filename@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
|
||||
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
|
||||
|
||||
require_optional@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e"
|
||||
integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==
|
||||
dependencies:
|
||||
resolve-from "^2.0.0"
|
||||
semver "^5.1.0"
|
||||
|
||||
requirejs-config-file@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc"
|
||||
|
@ -12646,11 +12484,6 @@ resolve-dependency-path@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz#11700e340717b865d216c66cabeb4a2a3c696736"
|
||||
integrity sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==
|
||||
|
||||
resolve-from@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
|
||||
integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
|
||||
|
||||
resolve-from@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
|
||||
|
@ -13013,7 +12846,7 @@ setprototypeof@1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||
|
||||
sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8:
|
||||
sha.js@^2.4.0, sha.js@^2.4.8:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
||||
|
@ -13658,6 +13491,14 @@ strong-log-transformer@^2.0.0:
|
|||
minimist "^1.2.0"
|
||||
through "^2.3.4"
|
||||
|
||||
style-value-types@5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad"
|
||||
integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==
|
||||
dependencies:
|
||||
hey-listen "^1.0.8"
|
||||
tslib "^2.1.0"
|
||||
|
||||
styled-jsx@5.0.0-beta.3:
|
||||
version "5.0.0-beta.3"
|
||||
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz#400d16179b5dff10d5954ab8be27a9a1b7780dd2"
|
||||
|
@ -14273,28 +14114,6 @@ typedoc@^0.22.3:
|
|||
minimatch "^3.0.4"
|
||||
shiki "^0.9.12"
|
||||
|
||||
typeorm@^0.2.30:
|
||||
version "0.2.41"
|
||||
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.41.tgz#88758101ac158dc0a0a903d70eaacea2974281cc"
|
||||
integrity sha512-/d8CLJJxKPgsnrZWiMyPI0rz2MFZnBQrnQ5XP3Vu3mswv2WPexb58QM6BEtmRmlTMYN5KFWUz8SKluze+wS9xw==
|
||||
dependencies:
|
||||
"@sqltools/formatter" "^1.2.2"
|
||||
app-root-path "^3.0.0"
|
||||
buffer "^6.0.3"
|
||||
chalk "^4.1.0"
|
||||
cli-highlight "^2.1.11"
|
||||
debug "^4.3.1"
|
||||
dotenv "^8.2.0"
|
||||
glob "^7.1.6"
|
||||
js-yaml "^4.0.0"
|
||||
mkdirp "^1.0.4"
|
||||
reflect-metadata "^0.1.13"
|
||||
sha.js "^2.4.11"
|
||||
tslib "^2.1.0"
|
||||
xml2js "^0.4.23"
|
||||
yargs "^17.0.1"
|
||||
zen-observable-ts "^1.0.0"
|
||||
|
||||
typescript@4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3"
|
||||
|
@ -15222,7 +15041,7 @@ yargs-unparser@2.0.0:
|
|||
flat "^5.0.2"
|
||||
is-plain-obj "^2.1.0"
|
||||
|
||||
yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0:
|
||||
yargs@16.2.0, yargs@^16.2.0:
|
||||
version "16.2.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
|
||||
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
|
||||
|
@ -15290,19 +15109,6 @@ yocto-queue@^0.1.0:
|
|||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
||||
zen-observable-ts@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"
|
||||
integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==
|
||||
dependencies:
|
||||
"@types/zen-observable" "0.8.3"
|
||||
zen-observable "0.8.15"
|
||||
|
||||
zen-observable@0.8.15:
|
||||
version "0.8.15"
|
||||
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
|
||||
integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
|
||||
|
||||
zustand@^3.6.5:
|
||||
version "3.6.6"
|
||||
resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.6.6.tgz#3b7473a15813f7af9784233abd052c3b4560bbcc"
|
||||
|
|
Loading…
Reference in a new issue