fix vite HMR issue (#2279)

This is an attempt at #1989. The big issue there is when `shapeUtils`
change when you're relying on tldraw to provide you with the store
instead of providing your own. Our `useTLStore` component had a bug
where it would rely on effects & a ref to detect when its options had
changed whilst still scheduling updates. Fresh opts would come in, but
they'd be different from the ones in the ref, so we'd schedule an
update, so the opts would come in again, but they'd still be different
as we hadn't run effects yet, and we'd schedule an update again (and so
on).

This diff fixes that by storing the previous opts in state instead of a
ref, so they're updating in lockstep with the store itself. this
prevents the update loop.

There are still situations where we can get into loops if the developer
is passing in custom tools, shapeUtils, or components but not memoising
them or defining them outside of react. As a DX improvement, we do some
auto-memoisation of these values using shallow equality to help with
this issue.

### Change Type

- [x] `patch` — Bug fix


### Test Plan

- [x] Unit Tests

### Release Notes

- Fixes a bug that could cause crashes due to a re-render loop with HMR
#1989
This commit is contained in:
alex 2023-12-01 16:48:30 +00:00 committed by GitHub
parent 39a65b9c96
commit 390c45c7eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 432 additions and 438 deletions

View file

@ -46,6 +46,7 @@
"vite": "^4.3.4"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.2.0",
"dotenv": "^16.0.3"
}
}

View file

@ -1,7 +1,9 @@
import react from '@vitejs/plugin-react'
import path from 'path'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [react()],
root: path.join(__dirname, 'src'),
publicDir: path.join(__dirname, 'public'),
build: {

View file

@ -2806,6 +2806,12 @@ export function useSelectionEvents(handle: TLSelectionHandle): {
onPointerUp: PointerEventHandler<Element>;
};
// @internal (undocumented)
export function useShallowArrayIdentity<T>(arr: readonly T[]): readonly T[];
// @internal (undocumented)
export function useShallowObjectIdentity<T extends Record<string, unknown>>(arr: T): T;
// @public (undocumented)
export function useTLStore(opts: TLStoreOptions & {
snapshot?: StoreSnapshot<TLRecord>;

View file

@ -247,6 +247,7 @@ export { useContainer } from './lib/hooks/useContainer'
export { getCursor } from './lib/hooks/useCursor'
export { useEditor } from './lib/hooks/useEditor'
export type { TLEditorComponents } from './lib/hooks/useEditorComponents'
export { useShallowArrayIdentity, useShallowObjectIdentity } from './lib/hooks/useIdentity'
export { useIsCropping } from './lib/hooks/useIsCropping'
export { useIsDarkMode } from './lib/hooks/useIsDarkMode'
export { useIsEditing } from './lib/hooks/useIsEditing'

View file

@ -144,7 +144,7 @@ export const TldrawEditor = memo(function TldrawEditor({
user: _user,
...rest
}: TldrawEditorProps) {
const [container, rContainer] = React.useState<HTMLDivElement | null>(null)
const [container, setContainer] = React.useState<HTMLDivElement | null>(null)
const user = useMemo(() => _user ?? createTLUser(), [_user])
const ErrorFallback =
@ -162,7 +162,7 @@ export const TldrawEditor = memo(function TldrawEditor({
return (
<div
ref={rContainer}
ref={setContainer}
draggable={false}
className={classNames('tl-container tl-theme__light', className)}
onPointerDown={stopEventPropagation}

View file

@ -0,0 +1,21 @@
import { areArraysShallowEqual, areObjectsShallowEqual } from '@tldraw/utils'
import { useRef } from 'react'
function useIdentity<T>(value: T, isEqual: (a: T, b: T) => boolean): T {
const ref = useRef(value)
if (isEqual(value, ref.current)) {
return ref.current
}
ref.current = value
return value
}
/** @internal */
export function useShallowArrayIdentity<T>(arr: readonly T[]): readonly T[] {
return useIdentity(arr, areArraysShallowEqual)
}
/** @internal */
export function useShallowObjectIdentity<T extends Record<string, unknown>>(arr: T): T {
return useIdentity(arr, areObjectsShallowEqual)
}

View file

@ -1,33 +1,31 @@
import { StoreSnapshot } from '@tldraw/store'
import { TLRecord } from '@tldraw/tlschema'
import { useEffect, useRef, useState } from 'react'
import { areObjectsShallowEqual } from '@tldraw/utils'
import { useState } from 'react'
import { TLStoreOptions, createTLStore } from '../config/createTLStore'
/** @public */
export function useTLStore(opts: TLStoreOptions & { snapshot?: StoreSnapshot<TLRecord> }) {
const [store, setStore] = useState(() => {
type UseTLStoreOptions = TLStoreOptions & {
snapshot?: StoreSnapshot<TLRecord>
}
function createStore(opts: UseTLStoreOptions) {
const store = createTLStore(opts)
if (opts.snapshot) {
store.loadSnapshot(opts.snapshot)
}
return store
})
// prev
const ref = useRef(opts)
useEffect(() => void (ref.current = opts))
return { store, opts }
}
if (
// shallow equality check
(Object.keys(ref.current) as (keyof TLStoreOptions)[]).some(
(key) => ref.current[key] !== opts[key]
)
) {
const newStore = createTLStore(opts)
if (opts.snapshot) {
newStore.loadSnapshot(opts.snapshot)
/** @public */
export function useTLStore(opts: TLStoreOptions & { snapshot?: StoreSnapshot<TLRecord> }) {
const [current, setCurrent] = useState(() => createStore(opts))
if (!areObjectsShallowEqual(current.opts, opts)) {
const next = createStore(opts)
setCurrent(next)
return next.store
}
setStore(newStore)
return newStore
}
return store
return current.store
}

View file

@ -15576,7 +15576,7 @@
"text": "export interface TLUiContextMenuProps "
}
],
"fileUrlPath": "packages/tldraw/.tsbuild-api/lib/ui/components/ContextMenu.d.ts",
"fileUrlPath": "packages/tldraw/src/lib/ui/components/ContextMenu.tsx",
"releaseTag": "Public",
"name": "TLUiContextMenuProps",
"preserveMemberOrder": false,
@ -15599,7 +15599,6 @@
"text": ";"
}
],
"fileUrlPath": "packages/tldraw/src/lib/ui/components/ContextMenu.tsx",
"isReadonly": false,
"isOptional": false,
"releaseTag": "Public",

View file

@ -33,3 +33,22 @@ Object.defineProperty(global.URL, 'createObjectURL', {
writable: true,
value: jest.fn(),
})
window.fetch = async (input, init) => {
if (input === 'https://unpkg.com/@tldraw/assets@2.0.0-alpha.12/translations/en.json') {
const json = await import('@tldraw/assets/translations/main.json')
return {
ok: true,
json: async () => json.default,
}
}
if (input === '/icons/icon/icon-names.json') {
return {
ok: true,
json: async () => [],
}
}
throw new Error(`Unhandled request: ${input}`)
}

View file

@ -1,28 +1,78 @@
import { act } from '@testing-library/react'
import { act, render, screen } from '@testing-library/react'
import { BaseBoxShapeUtil, Editor } from '@tldraw/editor'
import { useState } from 'react'
import { Tldraw } from './Tldraw'
let originalFetch: typeof window.fetch
beforeEach(() => {
window.fetch = jest.fn().mockImplementation((...args: Parameters<typeof fetch>) => {
if (args[0] === '/icons/icon/icon-names.json') {
return Promise.resolve({ json: () => Promise.resolve([]) } as Response)
}
return originalFetch(...args)
})
})
afterEach(() => {
jest.restoreAllMocks()
window.fetch = originalFetch
})
describe('<Tldraw />', () => {
it('Renders without crashing', async () => {
await act(async () => (
await act(async () =>
render(
<Tldraw>
<div data-testid="canvas-1" />
</Tldraw>
))
)
)
await screen.findByTestId('canvas-1')
})
it('Doesnt cause re-render loops with unstable shape utils + tools', async () => {
function TestComponent() {
const [_, setEditor] = useState<Editor | null>(null)
return (
<Tldraw onMount={setEditor} shapeUtils={[]} tools={[]}>
<div data-testid="canvas-1" />
</Tldraw>
)
}
await act(async () => render(<TestComponent />))
await screen.findByTestId('canvas-1')
})
it('Doesnt cause re-render loops when shape utils change', async () => {
class FakeShapeUtil1 extends BaseBoxShapeUtil<any> {
static override type = 'fake' as const
override getDefaultProps() {
throw new Error('Method not implemented.')
}
override component(_: any) {
throw new Error('Method not implemented.')
}
override indicator(_: any) {
throw new Error('Method not implemented.')
}
}
class FakeShapeUtil2 extends BaseBoxShapeUtil<any> {
static override type = 'fake' as const
override getDefaultProps() {
throw new Error('Method not implemented.')
}
override component(_: any) {
throw new Error('Method not implemented.')
}
override indicator(_: any) {
throw new Error('Method not implemented.')
}
}
const rendered = await act(async () =>
render(
<Tldraw shapeUtils={[FakeShapeUtil1]}>
<div data-testid="canvas-1" />
</Tldraw>
)
)
await screen.findByTestId('canvas-1')
await act(async () => {
rendered.rerender(
<Tldraw shapeUtils={[FakeShapeUtil2]}>
<div data-testid="canvas-2" />
</Tldraw>
)
})
await screen.findByTestId('canvas-2')
})
})

View file

@ -13,6 +13,8 @@ import {
TldrawEditorProps,
assert,
useEditor,
useShallowArrayIdentity,
useShallowObjectIdentity,
} from '@tldraw/editor'
import { useCallback, useDebugValue, useLayoutEffect, useMemo, useRef } from 'react'
import { TldrawHandles } from './canvas/TldrawHandles'
@ -65,6 +67,10 @@ export function Tldraw(props: TldrawProps) {
...rest
} = props
const components = useShallowObjectIdentity(rest.components ?? {})
const shapeUtils = useShallowArrayIdentity(rest.shapeUtils ?? [])
const tools = useShallowArrayIdentity(rest.tools ?? [])
const withDefaults: TldrawEditorProps = {
initialState: 'select',
...rest,
@ -76,18 +82,12 @@ export function Tldraw(props: TldrawProps) {
SelectionBackground: TldrawSelectionBackground,
Handles: TldrawHandles,
HoveredShapeIndicator: TldrawHoveredShapeIndicator,
...rest.components,
...components,
}),
[rest.components]
),
shapeUtils: useMemo(
() => [...defaultShapeUtils, ...(rest.shapeUtils ?? [])],
[rest.shapeUtils]
),
tools: useMemo(
() => [...defaultTools, ...defaultShapeTools, ...(rest.tools ?? [])],
[rest.tools]
[components]
),
shapeUtils: useMemo(() => [...defaultShapeUtils, ...shapeUtils], [shapeUtils]),
tools: useMemo(() => [...defaultTools, ...defaultShapeTools, ...tools], [tools]),
}
const assets = useDefaultEditorAssetsWithOverrides(rest.assetUrls)

View file

@ -14,21 +14,6 @@ import {
import { defaultTools } from '../lib/defaultTools'
import { GeoShapeUtil } from '../lib/shapes/geo/GeoShapeUtil'
let originalFetch: typeof window.fetch
beforeEach(() => {
window.fetch = jest.fn().mockImplementation((...args: Parameters<typeof fetch>) => {
if (args[0] === '/icons/icon/icon-names.json') {
return Promise.resolve({ json: () => Promise.resolve([]) } as Response)
}
return originalFetch(...args)
})
})
afterEach(() => {
jest.restoreAllMocks()
window.fetch = originalFetch
})
function checkAllShapes(editor: Editor, shapes: string[]) {
expect(Object.keys(editor!.store.schema.types.shape.migrations.subTypeMigrations!)).toStrictEqual(
shapes

View file

@ -7,6 +7,12 @@
// @internal
export function annotateError(error: unknown, annotations: Partial<ErrorAnnotations>): void;
// @internal (undocumented)
export function areArraysShallowEqual<T>(arr1: readonly T[], arr2: readonly T[]): boolean;
// @internal (undocumented)
export function areObjectsShallowEqual<T extends Record<string, unknown>>(obj1: T, obj2: T): boolean;
// @internal (undocumented)
export const assert: (value: unknown, message?: string) => asserts value;

View file

@ -1,4 +1,12 @@
export { compact, dedupe, last, minBy, partition, rotateArray } from './lib/array'
export {
areArraysShallowEqual,
compact,
dedupe,
last,
minBy,
partition,
rotateArray,
} from './lib/array'
export {
Result,
assert,
@ -18,6 +26,7 @@ export type { JsonArray, JsonObject, JsonPrimitive, JsonValue } from './lib/json
export { MediaHelpers } from './lib/media'
export { lerp, modulate, rng } from './lib/number'
export {
areObjectsShallowEqual,
deepCopy,
filterEntries,
getOwnProperty,

View file

@ -71,3 +71,15 @@ export function partition<T>(arr: T[], predicate: (item: T) => boolean): [T[], T
}
return [satisfies, doesNotSatisfy]
}
/** @internal */
export function areArraysShallowEqual<T>(arr1: readonly T[], arr2: readonly T[]): boolean {
if (arr1 === arr2) return true
if (arr1.length !== arr2.length) return false
for (let i = 0; i < arr1.length; i++) {
if (!Object.is(arr1[i], arr2[i])) {
return false
}
}
return true
}

View file

@ -137,3 +137,19 @@ export function mapObjectMapValues<Key extends string, ValueBefore, ValueAfter>(
}
return result
}
/** @internal */
export function areObjectsShallowEqual<T extends Record<string, unknown>>(
obj1: T,
obj2: T
): boolean {
if (obj1 === obj2) return true
const keys1 = new Set(Object.keys(obj1))
const keys2 = new Set(Object.keys(obj2))
if (keys1.size !== keys2.size) return false
for (const key of keys1) {
if (!keys2.has(key)) return false
if (!Object.is(obj1[key], obj2[key])) return false
}
return true
}

View file

@ -22,13 +22,6 @@ __metadata:
languageName: node
linkType: hard
"@auto-it/bot-list@npm:10.45.0":
version: 10.45.0
resolution: "@auto-it/bot-list@npm:10.45.0"
checksum: 60f51c22ab9663d5465ace7f20b87f23246e40a39f6e6ab9ef4805cde7f0f681200627948d6055c58201386ff9f21f8720343639602517b3d2c4f39da6a023a3
languageName: node
linkType: hard
"@auto-it/bot-list@npm:10.46.0":
version: 10.46.0
resolution: "@auto-it/bot-list@npm:10.46.0"
@ -36,7 +29,7 @@ __metadata:
languageName: node
linkType: hard
"@auto-it/core@npm:10.46.0":
"@auto-it/core@npm:10.46.0, @auto-it/core@npm:^10.45.0":
version: 10.46.0
resolution: "@auto-it/core@npm:10.46.0"
dependencies:
@ -89,57 +82,6 @@ __metadata:
languageName: node
linkType: hard
"@auto-it/core@npm:^10.45.0":
version: 10.45.0
resolution: "@auto-it/core@npm:10.45.0"
dependencies:
"@auto-it/bot-list": 10.45.0
"@endemolshinegroup/cosmiconfig-typescript-loader": ^3.0.2
"@octokit/core": ^3.5.1
"@octokit/plugin-enterprise-compatibility": 1.3.0
"@octokit/plugin-retry": ^3.0.9
"@octokit/plugin-throttling": ^3.6.2
"@octokit/rest": ^18.12.0
await-to-js: ^3.0.0
chalk: ^4.0.0
cosmiconfig: 7.0.0
deepmerge: ^4.0.0
dotenv: ^8.0.0
endent: ^2.1.0
enquirer: ^2.3.4
env-ci: ^5.0.1
fast-glob: ^3.1.1
fp-ts: ^2.5.3
fromentries: ^1.2.0
gitlog: ^4.0.3
https-proxy-agent: ^5.0.0
import-cwd: ^3.0.0
import-from: ^3.0.0
io-ts: ^2.1.2
lodash.chunk: ^4.2.0
log-symbols: ^4.0.0
node-fetch: 2.6.7
parse-author: ^2.0.0
parse-github-url: 1.0.2
pretty-ms: ^7.0.0
requireg: ^0.2.2
semver: ^7.0.0
signale: ^1.4.0
tapable: ^2.2.0
terminal-link: ^2.1.1
tinycolor2: ^1.4.1
ts-node: ^10.9.1
tslib: 2.1.0
type-fest: ^0.21.1
typescript-memoize: ^1.0.0-alpha.3
url-join: ^4.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: e1bf3c3ca26ac754949309cb3f4bcbbb49ac10e62596cb8296eea014e1b989c50214c2d77edf8c86e9af866b0b2d1eaa8e898bee837c6d95fe4ebbb530966040
languageName: node
linkType: hard
"@auto-it/npm@npm:10.46.0":
version: 10.46.0
resolution: "@auto-it/npm@npm:10.46.0"
@ -199,54 +141,55 @@ __metadata:
languageName: node
linkType: hard
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.21.4":
version: 7.21.4
resolution: "@babel/code-frame@npm:7.21.4"
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5":
version: 7.23.5
resolution: "@babel/code-frame@npm:7.23.5"
dependencies:
"@babel/highlight": ^7.18.6
checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c
"@babel/highlight": ^7.23.4
chalk: ^2.4.2
checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a
languageName: node
linkType: hard
"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4":
version: 7.21.4
resolution: "@babel/compat-data@npm:7.21.4"
checksum: 5f8b98c66f2ffba9f3c3a82c0cf354c52a0ec5ad4797b370dc32bdcd6e136ac4febe5e93d76ce76e175632e2dbf6ce9f46319aa689fcfafa41b6e49834fa4b66
"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4, @babel/compat-data@npm:^7.22.9":
version: 7.23.5
resolution: "@babel/compat-data@npm:7.23.5"
checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744
languageName: node
linkType: hard
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.6, @babel/core@npm:^7.20.7":
version: 7.21.4
resolution: "@babel/core@npm:7.21.4"
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.6, @babel/core@npm:^7.20.7, @babel/core@npm:^7.23.3":
version: 7.23.5
resolution: "@babel/core@npm:7.23.5"
dependencies:
"@ampproject/remapping": ^2.2.0
"@babel/code-frame": ^7.21.4
"@babel/generator": ^7.21.4
"@babel/helper-compilation-targets": ^7.21.4
"@babel/helper-module-transforms": ^7.21.2
"@babel/helpers": ^7.21.0
"@babel/parser": ^7.21.4
"@babel/template": ^7.20.7
"@babel/traverse": ^7.21.4
"@babel/types": ^7.21.4
convert-source-map: ^1.7.0
"@babel/code-frame": ^7.23.5
"@babel/generator": ^7.23.5
"@babel/helper-compilation-targets": ^7.22.15
"@babel/helper-module-transforms": ^7.23.3
"@babel/helpers": ^7.23.5
"@babel/parser": ^7.23.5
"@babel/template": ^7.22.15
"@babel/traverse": ^7.23.5
"@babel/types": ^7.23.5
convert-source-map: ^2.0.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.2
semver: ^6.3.0
checksum: a3beebb2cc79908a02f27a07dc381bcb34e8ecc58fa99f568ad0934c49e12111fc977ee9c5b51eb7ea2da66f63155d37c4dd96b6472eaeecfc35843ccb56bf3d
json5: ^2.2.3
semver: ^6.3.1
checksum: 5e5dfb1e61f298676f1fca18c646dbf6fb164ca1056b0169b8d42b7f5c35e026d81823582ccb2358e93a61b035e22b3ad37e2abaae4bf43f1ffb93b6ce19466e
languageName: node
linkType: hard
"@babel/generator@npm:^7.18.6, @babel/generator@npm:^7.21.4, @babel/generator@npm:^7.7.2":
version: 7.21.4
resolution: "@babel/generator@npm:7.21.4"
"@babel/generator@npm:^7.18.6, @babel/generator@npm:^7.23.5, @babel/generator@npm:^7.7.2":
version: 7.23.5
resolution: "@babel/generator@npm:7.23.5"
dependencies:
"@babel/types": ^7.21.4
"@babel/types": ^7.23.5
"@jridgewell/gen-mapping": ^0.3.2
"@jridgewell/trace-mapping": ^0.3.17
jsesc: ^2.5.1
checksum: 9ffbb526a53bb8469b5402f7b5feac93809b09b2a9f82fcbfcdc5916268a65dae746a1f2479e03ba4fb0776facd7c892191f63baa61ab69b2cfdb24f7b92424d
checksum: 845ddda7cf38a3edf4be221cc8a439dee9ea6031355146a1a74047aa8007bc030305b27d8c68ec9e311722c910610bde38c0e13a9ce55225251e7cb7e7f3edc8
languageName: node
linkType: hard
@ -269,18 +212,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.4":
version: 7.21.4
resolution: "@babel/helper-compilation-targets@npm:7.21.4"
"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.4, @babel/helper-compilation-targets@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/helper-compilation-targets@npm:7.22.15"
dependencies:
"@babel/compat-data": ^7.21.4
"@babel/helper-validator-option": ^7.21.0
browserslist: ^4.21.3
"@babel/compat-data": ^7.22.9
"@babel/helper-validator-option": ^7.22.15
browserslist: ^4.21.9
lru-cache: ^5.1.1
semver: ^6.3.0
peerDependencies:
"@babel/core": ^7.0.0
checksum: bf9c7d3e7e6adff9222c05d898724cd4ee91d7eb9d52222c7ad2a22955620c2872cc2d9bdf0e047df8efdb79f4e3af2a06b53f509286145feccc4d10ddc318be
semver: ^6.3.1
checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980
languageName: node
linkType: hard
@ -330,10 +271,10 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-environment-visitor@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/helper-environment-visitor@npm:7.18.9"
checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420
"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.20":
version: 7.22.20
resolution: "@babel/helper-environment-visitor@npm:7.22.20"
checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69
languageName: node
linkType: hard
@ -346,22 +287,22 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0":
version: 7.21.0
resolution: "@babel/helper-function-name@npm:7.21.0"
"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0, @babel/helper-function-name@npm:^7.23.0":
version: 7.23.0
resolution: "@babel/helper-function-name@npm:7.23.0"
dependencies:
"@babel/template": ^7.20.7
"@babel/types": ^7.21.0
checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e
"@babel/template": ^7.22.15
"@babel/types": ^7.23.0
checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10
languageName: node
linkType: hard
"@babel/helper-hoist-variables@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-hoist-variables@npm:7.18.6"
"@babel/helper-hoist-variables@npm:^7.18.6, @babel/helper-hoist-variables@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-hoist-variables@npm:7.22.5"
dependencies:
"@babel/types": ^7.18.6
checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f
"@babel/types": ^7.22.5
checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc
languageName: node
linkType: hard
@ -374,28 +315,27 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-imports@npm:^7.18.6":
version: 7.21.4
resolution: "@babel/helper-module-imports@npm:7.21.4"
"@babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/helper-module-imports@npm:7.22.15"
dependencies:
"@babel/types": ^7.21.4
checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6
"@babel/types": ^7.22.15
checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2":
version: 7.21.2
resolution: "@babel/helper-module-transforms@npm:7.21.2"
"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2, @babel/helper-module-transforms@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/helper-module-transforms@npm:7.23.3"
dependencies:
"@babel/helper-environment-visitor": ^7.18.9
"@babel/helper-module-imports": ^7.18.6
"@babel/helper-simple-access": ^7.20.2
"@babel/helper-split-export-declaration": ^7.18.6
"@babel/helper-validator-identifier": ^7.19.1
"@babel/template": ^7.20.7
"@babel/traverse": ^7.21.2
"@babel/types": ^7.21.2
checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1
"@babel/helper-environment-visitor": ^7.22.20
"@babel/helper-module-imports": ^7.22.15
"@babel/helper-simple-access": ^7.22.5
"@babel/helper-split-export-declaration": ^7.22.6
"@babel/helper-validator-identifier": ^7.22.20
peerDependencies:
"@babel/core": ^7.0.0
checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71
languageName: node
linkType: hard
@ -408,10 +348,10 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.20.2
resolution: "@babel/helper-plugin-utils@npm:7.20.2"
checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b
"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.22.5
resolution: "@babel/helper-plugin-utils@npm:7.22.5"
checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5
languageName: node
linkType: hard
@ -443,12 +383,12 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-simple-access@npm:^7.20.2":
version: 7.20.2
resolution: "@babel/helper-simple-access@npm:7.20.2"
"@babel/helper-simple-access@npm:^7.20.2, @babel/helper-simple-access@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-simple-access@npm:7.22.5"
dependencies:
"@babel/types": ^7.20.2
checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1
"@babel/types": ^7.22.5
checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2
languageName: node
linkType: hard
@ -461,33 +401,33 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-split-export-declaration@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-split-export-declaration@npm:7.18.6"
"@babel/helper-split-export-declaration@npm:^7.18.6, @babel/helper-split-export-declaration@npm:^7.22.6":
version: 7.22.6
resolution: "@babel/helper-split-export-declaration@npm:7.22.6"
dependencies:
"@babel/types": ^7.18.6
checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b
"@babel/types": ^7.22.5
checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921
languageName: node
linkType: hard
"@babel/helper-string-parser@npm:^7.19.4":
version: 7.19.4
resolution: "@babel/helper-string-parser@npm:7.19.4"
checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943
"@babel/helper-string-parser@npm:^7.23.4":
version: 7.23.4
resolution: "@babel/helper-string-parser@npm:7.23.4"
checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90
languageName: node
linkType: hard
"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1":
version: 7.19.1
resolution: "@babel/helper-validator-identifier@npm:7.19.1"
checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a
"@babel/helper-validator-identifier@npm:^7.19.1, @babel/helper-validator-identifier@npm:^7.22.20":
version: 7.22.20
resolution: "@babel/helper-validator-identifier@npm:7.22.20"
checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc
languageName: node
linkType: hard
"@babel/helper-validator-option@npm:^7.21.0":
version: 7.21.0
resolution: "@babel/helper-validator-option@npm:7.21.0"
checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07
"@babel/helper-validator-option@npm:^7.21.0, @babel/helper-validator-option@npm:^7.22.15":
version: 7.23.5
resolution: "@babel/helper-validator-option@npm:7.23.5"
checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e
languageName: node
linkType: hard
@ -503,34 +443,34 @@ __metadata:
languageName: node
linkType: hard
"@babel/helpers@npm:^7.21.0":
version: 7.21.0
resolution: "@babel/helpers@npm:7.21.0"
"@babel/helpers@npm:^7.23.5":
version: 7.23.5
resolution: "@babel/helpers@npm:7.23.5"
dependencies:
"@babel/template": ^7.20.7
"@babel/traverse": ^7.21.0
"@babel/types": ^7.21.0
checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54
"@babel/template": ^7.22.15
"@babel/traverse": ^7.23.5
"@babel/types": ^7.23.5
checksum: c16dc8a3bb3d0e02c7ee1222d9d0865ed4b92de44fb8db43ff5afd37a0fc9ea5e2906efa31542c95b30c1a3a9540d66314663c9a23b5bb9b5ec76e8ebc896064
languageName: node
linkType: hard
"@babel/highlight@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/highlight@npm:7.18.6"
"@babel/highlight@npm:^7.23.4":
version: 7.23.4
resolution: "@babel/highlight@npm:7.23.4"
dependencies:
"@babel/helper-validator-identifier": ^7.18.6
chalk: ^2.0.0
"@babel/helper-validator-identifier": ^7.22.20
chalk: ^2.4.2
js-tokens: ^4.0.0
checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789
checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89
languageName: node
linkType: hard
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.6, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4":
version: 7.21.4
resolution: "@babel/parser@npm:7.21.4"
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.6, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.5":
version: 7.23.5
resolution: "@babel/parser@npm:7.23.5"
bin:
parser: ./bin/babel-parser.js
checksum: de610ecd1bff331766d0c058023ca11a4f242bfafefc42caf926becccfb6756637d167c001987ca830dd4b34b93c629a4cef63f8c8c864a8564cdfde1989ac77
checksum: ea763629310f71580c4a3ea9d3705195b7ba994ada2cc98f9a584ebfdacf54e92b2735d351672824c2c2b03c7f19206899f4d95650d85ce514a822b19a8734c7
languageName: node
linkType: hard
@ -1259,6 +1199,28 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-transform-react-jsx-self@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 882bf56bc932d015c2d83214133939ddcf342e5bcafa21f1a93b19f2e052145115e1e0351730897fd66e5f67cad7875b8a8d81ceb12b6e2a886ad0102cb4eb1f
languageName: node
linkType: hard
"@babel/plugin-transform-react-jsx-source@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 92287fb797e522d99bdc77eaa573ce79ff0ad9f1cf4e7df374645e28e51dce0adad129f6f075430b129b5bac8dad843f65021970e12e992d6d6671f0d65bb1e0
languageName: node
linkType: hard
"@babel/plugin-transform-regenerator@npm:^7.20.5":
version: 7.20.5
resolution: "@babel/plugin-transform-regenerator@npm:7.20.5"
@ -1506,16 +1468,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2":
version: 7.21.0
resolution: "@babel/runtime@npm:7.21.0"
dependencies:
regenerator-runtime: ^0.13.11
checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab
languageName: node
linkType: hard
"@babel/runtime@npm:^7.13.10":
"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2":
version: 7.22.6
resolution: "@babel/runtime@npm:7.22.6"
dependencies:
@ -1524,43 +1477,43 @@ __metadata:
languageName: node
linkType: hard
"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3":
version: 7.20.7
resolution: "@babel/template@npm:7.20.7"
"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3":
version: 7.22.15
resolution: "@babel/template@npm:7.22.15"
dependencies:
"@babel/code-frame": ^7.18.6
"@babel/parser": ^7.20.7
"@babel/types": ^7.20.7
checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e
"@babel/code-frame": ^7.22.13
"@babel/parser": ^7.22.15
"@babel/types": ^7.22.15
checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd
languageName: node
linkType: hard
"@babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.4, @babel/traverse@npm:^7.7.2":
version: 7.21.4
resolution: "@babel/traverse@npm:7.21.4"
"@babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.23.5, @babel/traverse@npm:^7.7.2":
version: 7.23.5
resolution: "@babel/traverse@npm:7.23.5"
dependencies:
"@babel/code-frame": ^7.21.4
"@babel/generator": ^7.21.4
"@babel/helper-environment-visitor": ^7.18.9
"@babel/helper-function-name": ^7.21.0
"@babel/helper-hoist-variables": ^7.18.6
"@babel/helper-split-export-declaration": ^7.18.6
"@babel/parser": ^7.21.4
"@babel/types": ^7.21.4
"@babel/code-frame": ^7.23.5
"@babel/generator": ^7.23.5
"@babel/helper-environment-visitor": ^7.22.20
"@babel/helper-function-name": ^7.23.0
"@babel/helper-hoist-variables": ^7.22.5
"@babel/helper-split-export-declaration": ^7.22.6
"@babel/parser": ^7.23.5
"@babel/types": ^7.23.5
debug: ^4.1.0
globals: ^11.1.0
checksum: f22f067c2d9b6497abf3d4e53ea71f3aa82a21f2ed434dd69b8c5767f11f2a4c24c8d2f517d2312c9e5248e5c69395fdca1c95a2b3286122c75f5783ddb6f53c
checksum: 0558b05360850c3ad6384e85bd55092126a8d5f93e29a8e227dd58fa1f9e1a4c25fd337c07c7ae509f0983e7a2b1e761ffdcfaa77a1e1bedbc867058e1de5a7d
languageName: node
linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.4, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
version: 7.21.4
resolution: "@babel/types@npm:7.21.4"
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
version: 7.23.5
resolution: "@babel/types@npm:7.23.5"
dependencies:
"@babel/helper-string-parser": ^7.19.4
"@babel/helper-validator-identifier": ^7.19.1
"@babel/helper-string-parser": ^7.23.4
"@babel/helper-validator-identifier": ^7.22.20
to-fast-properties: ^2.0.0
checksum: 587bc55a91ce003b0f8aa10d70070f8006560d7dc0360dc0406d306a2cb2a10154e2f9080b9c37abec76907a90b330a536406cb75e6bdc905484f37b75c73219
checksum: 3d21774480a459ef13b41c2e32700d927af649e04b70c5d164814d8e04ab584af66a93330602c2925e1a6925c2b829cc153418a613a4e7d79d011be1f29ad4b2
languageName: node
linkType: hard
@ -4765,16 +4718,16 @@ __metadata:
languageName: node
linkType: hard
"@types/babel__core@npm:^7.1.14":
version: 7.20.0
resolution: "@types/babel__core@npm:7.20.0"
"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.4":
version: 7.20.5
resolution: "@types/babel__core@npm:7.20.5"
dependencies:
"@babel/parser": ^7.20.7
"@babel/types": ^7.20.7
"@types/babel__generator": "*"
"@types/babel__template": "*"
"@types/babel__traverse": "*"
checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df
checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845
languageName: node
linkType: hard
@ -5048,20 +5001,13 @@ __metadata:
languageName: node
linkType: hard
"@types/json-schema@npm:^7.0.12":
"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9":
version: 7.0.15
resolution: "@types/json-schema@npm:7.0.15"
checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98
languageName: node
linkType: hard
"@types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9":
version: 7.0.11
resolution: "@types/json-schema@npm:7.0.11"
checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d
languageName: node
linkType: hard
"@types/json5@npm:^0.0.29":
version: 0.0.29
resolution: "@types/json5@npm:0.0.29"
@ -5114,14 +5060,7 @@ __metadata:
languageName: node
linkType: hard
"@types/lodash@npm:*":
version: 4.14.194
resolution: "@types/lodash@npm:4.14.194"
checksum: 113f34831c461469d91feca2dde737f88487732898b4d25e9eb23b087bb193985f864d1e1e0f3b777edc5022e460443588b6000a3b2348c966f72d17eedc35ea
languageName: node
linkType: hard
"@types/lodash@npm:^4.14.188":
"@types/lodash@npm:*, @types/lodash@npm:^4.14.188":
version: 4.14.195
resolution: "@types/lodash@npm:4.14.195"
checksum: 39b75ca635b3fa943d17d3d3aabc750babe4c8212485a4df166fe0516e39288e14b0c60afc6e21913cc0e5a84734633c71e617e2bd14eaa1cf51b8d7799c432e
@ -5297,14 +5236,7 @@ __metadata:
languageName: node
linkType: hard
"@types/semver@npm:^7.3.12":
version: 7.3.13
resolution: "@types/semver@npm:7.3.13"
checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0
languageName: node
linkType: hard
"@types/semver@npm:^7.5.0":
"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0":
version: 7.5.5
resolution: "@types/semver@npm:7.5.5"
checksum: 533e6c93d1262d65f449423d94a445f7f3db0672e7429f21b6a1636d6051dbab3a2989ddcda9b79c69bb37830931d09fc958a65305a891357f5cea3257c297f5
@ -5850,6 +5782,21 @@ __metadata:
languageName: node
linkType: hard
"@vitejs/plugin-react@npm:^4.2.0":
version: 4.2.0
resolution: "@vitejs/plugin-react@npm:4.2.0"
dependencies:
"@babel/core": ^7.23.3
"@babel/plugin-transform-react-jsx-self": ^7.23.3
"@babel/plugin-transform-react-jsx-source": ^7.23.3
"@types/babel__core": ^7.20.4
react-refresh: ^0.14.0
peerDependencies:
vite: ^4.2.0 || ^5.0.0
checksum: 515dc270dc433d9d80806501221d152f627aabc342916e9dc0d1d840fec76bc00daf3e41738f9aad286de89ee9325fd423372298bd04a3bfd618601ae62d515d
languageName: node
linkType: hard
"@web3-storage/multipart-parser@npm:^1.0.0":
version: 1.0.0
resolution: "@web3-storage/multipart-parser@npm:1.0.0"
@ -6691,17 +6638,17 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.21.3, browserslist@npm:^4.21.5":
version: 4.21.5
resolution: "browserslist@npm:4.21.5"
"browserslist@npm:^4.21.5, browserslist@npm:^4.21.9":
version: 4.22.1
resolution: "browserslist@npm:4.22.1"
dependencies:
caniuse-lite: ^1.0.30001449
electron-to-chromium: ^1.4.284
node-releases: ^2.0.8
update-browserslist-db: ^1.0.10
caniuse-lite: ^1.0.30001541
electron-to-chromium: ^1.4.535
node-releases: ^2.0.13
update-browserslist-db: ^1.0.13
bin:
browserslist: cli.js
checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706
checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862
languageName: node
linkType: hard
@ -6857,10 +6804,10 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001449":
version: 1.0.30001480
resolution: "caniuse-lite@npm:1.0.30001480"
checksum: c0b40f02f45ee99c73f732a3118028b2ab1544962d473d84f2afcb898a5e3099bd4c45f316ebc466fb1dbda904e86b72695578ca531a0bfa9d6337e7aad1ee2a
"caniuse-lite@npm:^1.0.30001541":
version: 1.0.30001565
resolution: "caniuse-lite@npm:1.0.30001565"
checksum: 7621f358d0e1158557430a111ca5506008ae0b2c796039ef53aeebf4e2ba15e5241cb89def21ea3a633b6a609273085835b44a522165d871fa44067cdf29cccd
languageName: node
linkType: hard
@ -6878,7 +6825,7 @@ __metadata:
languageName: node
linkType: hard
"chalk@npm:^2.0.0, chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
"chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
dependencies:
@ -7372,13 +7319,20 @@ __metadata:
languageName: node
linkType: hard
"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0":
"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0":
version: 1.9.0
resolution: "convert-source-map@npm:1.9.0"
checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8
languageName: node
linkType: hard
"convert-source-map@npm:^2.0.0":
version: 2.0.0
resolution: "convert-source-map@npm:2.0.0"
checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035
languageName: node
linkType: hard
"cookie-signature@npm:1.0.6":
version: 1.0.6
resolution: "cookie-signature@npm:1.0.6"
@ -8074,10 +8028,10 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.4.284":
version: 1.4.368
resolution: "electron-to-chromium@npm:1.4.368"
checksum: b8ec4128a81c86c287cb2d677504c64d50f30c3c1d6dd9700a93797c6311f9f94b1c49a3e5112f5cfb3987a9bbade0133f9ec9898dae592db981059d5c2abdbb
"electron-to-chromium@npm:^1.4.535":
version: 1.4.600
resolution: "electron-to-chromium@npm:1.4.600"
checksum: 9f2f9d6da82c57ea263be5e79d7eb6503fe1c2be656c745d591007bdf673ff594476a843beadfd4c2f2d4e4fdd39c25747db3120490353a1db5d321ec1fd89f8
languageName: node
linkType: hard
@ -9080,14 +9034,7 @@ __metadata:
languageName: node
linkType: hard
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0":
version: 3.4.0
resolution: "eslint-visitor-keys@npm:3.4.0"
checksum: 33159169462d3989321a1ec1e9aaaf6a24cc403d5d347e9886d1b5bfe18ffa1be73bdc6203143a28a606b142b1af49787f33cff0d6d0813eb5f2e8d2e1a6043c
languageName: node
linkType: hard
"eslint-visitor-keys@npm:^3.4.1":
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0, eslint-visitor-keys@npm:^3.4.1":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60
@ -9312,6 +9259,7 @@ __metadata:
"@tldraw/assets": "workspace:*"
"@tldraw/tldraw": "workspace:*"
"@vercel/analytics": ^1.0.1
"@vitejs/plugin-react": ^4.2.0
dotenv: ^16.0.3
lazyrepo: 0.0.0-alpha.27
react: ^18.2.0
@ -11291,17 +11239,7 @@ __metadata:
languageName: node
linkType: hard
"jest-canvas-mock@npm:^2.5.1":
version: 2.5.1
resolution: "jest-canvas-mock@npm:2.5.1"
dependencies:
cssfontparser: ^1.2.1
moo-color: ^1.0.2
checksum: b8ff56c1b7b7feb6d33b7914dbfac21f19a5a33db0bc092f0426e500e80e67df1286bf817eb780e378b648c9130d7b8ca20cd46e45520657996273a948a7c198
languageName: node
linkType: hard
"jest-canvas-mock@npm:^2.5.2":
"jest-canvas-mock@npm:^2.5.1, jest-canvas-mock@npm:^2.5.2":
version: 2.5.2
resolution: "jest-canvas-mock@npm:2.5.2"
dependencies:
@ -13629,10 +13567,10 @@ __metadata:
languageName: node
linkType: hard
"node-releases@npm:^2.0.8":
version: 2.0.10
resolution: "node-releases@npm:2.0.10"
checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc
"node-releases@npm:^2.0.13":
version: 2.0.14
resolution: "node-releases@npm:2.0.14"
checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41
languageName: node
linkType: hard
@ -14510,7 +14448,7 @@ __metadata:
languageName: node
linkType: hard
"postcss@npm:^8.4.19, postcss@npm:^8.4.21, postcss@npm:^8.4.23":
"postcss@npm:^8.4.19, postcss@npm:^8.4.23":
version: 8.4.23
resolution: "postcss@npm:8.4.23"
dependencies:
@ -15569,20 +15507,6 @@ __metadata:
languageName: node
linkType: hard
"rollup@npm:^3.20.2":
version: 3.20.6
resolution: "rollup@npm:3.20.6"
dependencies:
fsevents: ~2.3.2
dependenciesMeta:
fsevents:
optional: true
bin:
rollup: dist/bin/rollup
checksum: fa30f1e1d214b8c62e631d3c181a75d61bc9c20fca38220d6f938bb3bf734a874e407cd641c90f550dc2b127df5029dfb3108be08934a654f1f40b50f368b0c2
languageName: node
linkType: hard
"rollup@npm:^3.21.0":
version: 3.21.4
resolution: "rollup@npm:3.21.4"
@ -15745,27 +15669,16 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
bin:
semver: ./bin/semver.js
checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9
languageName: node
linkType: hard
"semver@npm:^7.0.0, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8":
version: 7.5.0
resolution: "semver@npm:7.5.0"
dependencies:
lru-cache: ^6.0.0
"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0, semver@npm:^6.3.1":
version: 6.3.1
resolution: "semver@npm:6.3.1"
bin:
semver: bin/semver.js
checksum: 2d266937756689a76f124ffb4c1ea3e1bbb2b263219f90ada8a11aebebe1280b13bb76cca2ca96bdee3dbc554cbc0b24752eb895b2a51577aa644427e9229f2b
checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
languageName: node
linkType: hard
"semver@npm:^7.5.4":
"semver@npm:^7.0.0, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4":
version: 7.5.4
resolution: "semver@npm:7.5.4"
dependencies:
@ -16898,14 +16811,7 @@ __metadata:
languageName: node
linkType: hard
"tslib@npm:^2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0":
version: 2.5.0
resolution: "tslib@npm:2.5.0"
checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1
languageName: node
linkType: hard
"tslib@npm:^2.3.1":
"tslib@npm:^2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0":
version: 2.6.2
resolution: "tslib@npm:2.6.2"
checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad
@ -17359,9 +17265,9 @@ __metadata:
languageName: node
linkType: hard
"update-browserslist-db@npm:^1.0.10":
version: 1.0.11
resolution: "update-browserslist-db@npm:1.0.11"
"update-browserslist-db@npm:^1.0.13":
version: 1.0.13
resolution: "update-browserslist-db@npm:1.0.13"
dependencies:
escalade: ^3.1.1
picocolors: ^1.0.0
@ -17369,7 +17275,7 @@ __metadata:
browserslist: ">= 4.21.0"
bin:
update-browserslist-db: cli.js
checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231
checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322
languageName: node
linkType: hard
@ -17583,44 +17489,7 @@ __metadata:
languageName: node
linkType: hard
"vite@npm:^3.0.0 || ^4.0.0, vite@npm:^4.1.4":
version: 4.3.0
resolution: "vite@npm:4.3.0"
dependencies:
esbuild: ^0.17.5
fsevents: ~2.3.2
postcss: ^8.4.21
rollup: ^3.20.2
peerDependencies:
"@types/node": ">= 14"
less: "*"
sass: "*"
stylus: "*"
sugarss: "*"
terser: ^5.4.0
dependenciesMeta:
fsevents:
optional: true
peerDependenciesMeta:
"@types/node":
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
bin:
vite: bin/vite.js
checksum: 9b6084c92e234e74c47514d864477abb7ad40cf53aa904f84b0a87c1b1238d64ea13ecc7595cf06df4aab1649bda8fa86671f40731a8fc00f4bca3b2c6d76f93
languageName: node
linkType: hard
"vite@npm:^4.3.4":
"vite@npm:^3.0.0 || ^4.0.0, vite@npm:^4.1.4, vite@npm:^4.3.4":
version: 4.3.4
resolution: "vite@npm:4.3.4"
dependencies: