diff --git a/README.md b/README.md index e37f3c5..1f14880 100644 --- a/README.md +++ b/README.md @@ -59,11 +59,36 @@ const MyCounter = defineComponent( render(, el) ``` +You can also merge the `render` function into `setup` function like this: + +```tsx +const MyCounter = defineComponent( + // setup function in Vue, returns a render function + (props: Props) => { + const counter = ref(props.value) + const doubled = computed(() => counter.value * 2) + const inc = () => counter.value += 1 + + onUnmounted(() => console.log('Goodbye World')) + + // render function + return () => { + return ( +
+
{counter.value} x 2 = {doubled.value}
+ +
+ ) + } + } +) +``` + ### Hooks -You can use it as a hook as well. +You can use it as a React hook as well. -> The `defineComponent` factory is actually a sugar to and equivalent to the following code. +> Please prefer `defineComponent` over `useSetup` because it has better performance, less re-rendering (because it collects reactivity dependencies). ```tsx diff --git a/examples/react-ts-vite/package.json b/examples/react-ts-vite/package.json index ff4ebd3..8a1febb 100644 --- a/examples/react-ts-vite/package.json +++ b/examples/react-ts-vite/package.json @@ -12,19 +12,19 @@ "@vueuse/head": "^0.5.1", "autoprefixer": "^10.2.5", "graphql": "^15.4.0", - "pinia": "^2.0.0-alpha.8", - "postcss": "^8.2.8", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "pinia": "^2.1.7", + "postcss": "^8.4.38", + "react": "^18.3.1", + "react-dom": "^18.3.0", "reactivue": "^0", "tailwindcss": "^2.0.4", - "villus": "^1.0.0-rc.15" + "villus": "^3.5.0" }, "devDependencies": { - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-refresh": "1.3.1", - "@vue/composition-api": "^1.0.0-rc.6", + "@vue/composition-api": "^1.7.2", "typescript": "^4.2.3", "vite": "^2.1.4" } diff --git a/examples/react-ts-vite/src/index.tsx b/examples/react-ts-vite/src/index.tsx index 3e8dd1a..07637de 100644 --- a/examples/react-ts-vite/src/index.tsx +++ b/examples/react-ts-vite/src/index.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' import './main.css' -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import { createApp } from 'reactivue' import { createClient } from 'villus' import { createPinia } from 'pinia' @@ -67,4 +67,4 @@ function App(Props: { name: string }) { ) } -render(, document.getElementById('app')) +createRoot(document.getElementById('app')!).render() diff --git a/packages/reactivue/package.json b/packages/reactivue/package.json index ad47fd1..639b494 100644 --- a/packages/reactivue/package.json +++ b/packages/reactivue/package.json @@ -58,33 +58,42 @@ "@babel/preset-env": "^7.13.12", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-replace": "^2.4.2", - "@testing-library/jest-dom": "^5.11.10", - "@testing-library/react": "^11.2.6", + "@testing-library/dom": "^10.1.0", + "@testing-library/jest-dom": "^6.4.5", + "@testing-library/react": "^16.0.0", "@types/jest": "^26.0.22", - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", "babel-jest": "^26.6.3", "cac": "^6.7.2", "jest": "^26.6.3", "preact": "^10.5.13", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.0", "rollup": "^2.44.0", "rollup-plugin-dts": "^3.0.1", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", + "rollup-plugin-typescript2": "^0.31.0", "ts-jest": "^26.5.4", "ts-node": "^9.1.1", "tslib": "^2.1.0", "typescript": "^4.2.3" }, "peerDependencies": { - "preact": "^10.5.9", + "preact": ">=10", "react": ">=16" }, "dependencies": { - "@vue/reactivity": "^3.0.9", - "@vue/runtime-core": "^3.0.9", - "@vue/shared": "^3.0.9" + "@vue/reactivity": "^3.4.27", + "@vue/runtime-core": "^3.4.27", + "@vue/shared": "^3.4.27" + }, + "peerDependenciesMeta": { + "preact": { + "optional": true + }, + "react": { + "optional": true + } } } diff --git a/packages/reactivue/setupTests.ts b/packages/reactivue/setupTests.ts index 264828a..c44951a 100644 --- a/packages/reactivue/setupTests.ts +++ b/packages/reactivue/setupTests.ts @@ -1 +1 @@ -import '@testing-library/jest-dom/extend-expect' +import '@testing-library/jest-dom' diff --git a/packages/reactivue/src/component.ts b/packages/reactivue/src/component.ts index 1807db9..8adb762 100644 --- a/packages/reactivue/src/component.ts +++ b/packages/reactivue/src/component.ts @@ -1,8 +1,7 @@ /* eslint-disable import/no-mutable-exports */ -import { Ref, ReactiveEffect, ref, stop } from '@vue/reactivity' -import * as vueReactivity from '@vue/reactivity' +import { Ref, ReactiveEffect, ref, effectScope } from '@vue/reactivity' import { invokeLifeCycle } from './lifecycle' -import { InstanceStateMap, InternalInstanceState, LifecycleHooks, EffectScope } from './types' +import { InstanceStateMap, InternalInstanceState, LifecycleHooks } from './types' /** * When `reactivue` dependency gets updated during development @@ -22,9 +21,6 @@ const _vueState: InstanceStateMap = (__DEV__ && __BROWSER__ && window.__reactivu if (__DEV__ && __BROWSER__) window.__reactivue_state = _vueState -const effectScope: (detached?: boolean) => EffectScope = (vueReactivity as any)['effectScope'] -export const usingEffectScope = typeof effectScope === 'function' - export let currentInstance: InternalInstanceState | null = null export let currentInstanceId: number | null = null @@ -60,7 +56,7 @@ export const createNewInstanceWithId = (id: number, props: any, data: Ref = hooks: {}, initialState: {}, provides: __BROWSER__ ? { ...window.__reactivue_context?.provides } : {}, - scope: usingEffectScope ? effectScope() : null, + scope: effectScope(), } _vueState[id] = instance @@ -70,10 +66,7 @@ export const createNewInstanceWithId = (id: number, props: any, data: Ref = export const useInstanceScope = (id: number, cb: (instance: InternalInstanceState | null) => void) => { const prev = currentInstanceId const instance = setCurrentInstanceId(id) - if (usingEffectScope) { - if (!instance?.isUnmounted) instance?.scope?.run(() => cb(instance)) - } - else cb(instance) + if (!instance?.isUnmounted) instance?.scope.run(() => cb(instance)) setCurrentInstanceId(prev) } @@ -82,10 +75,10 @@ const unmount = (id: number) => { // unregister all the computed/watch effects for (const effect of _vueState[id].effects || []) - stop(effect) + effect.stop() invokeLifeCycle(LifecycleHooks.UNMOUNTED, _vueState[id]) - if (usingEffectScope) _vueState[id].scope!.stop() + _vueState[id].scope.stop() _vueState[id].isUnmounted = true // release the ref diff --git a/packages/reactivue/src/computed.ts b/packages/reactivue/src/computed.ts index a877887..e6b0f4f 100644 --- a/packages/reactivue/src/computed.ts +++ b/packages/reactivue/src/computed.ts @@ -5,7 +5,7 @@ import { WritableComputedRef, ComputedGetter, } from '@vue/reactivity' -import { recordInstanceBoundEffect, usingEffectScope } from './component' +import { recordInstanceBoundEffect } from './component' export function computed(getter: ComputedGetter): ComputedRef export function computed( @@ -15,6 +15,6 @@ export function computed( getterOrOptions: ComputedGetter | WritableComputedOptions, ) { const c = _computed(getterOrOptions as any) - if (!usingEffectScope) recordInstanceBoundEffect(c.effect) + recordInstanceBoundEffect(c.effect) return c } diff --git a/packages/reactivue/src/defineComponent.ts b/packages/reactivue/src/defineComponent.ts index 2966a9a..8812558 100644 --- a/packages/reactivue/src/defineComponent.ts +++ b/packages/reactivue/src/defineComponent.ts @@ -1,12 +1,35 @@ -import { UnwrapRef } from '@vue/reactivity' -import { useSetup } from './useSetup' +import { useReducer } from 'react' +import { UnwrapRef, computed, markRaw, ref, toValue } from '@vue/reactivity' +import { USE_SETUP_NO_UPDATE, useSetup } from './useSetup' +import { watch } from './watch' +export function defineComponent( + setupAndRenderFunction: (props: PropsType) => ((() => JSX.Element) | JSX.Element), +): (props: PropsType) => JSX.Element export function defineComponent( setupFunction: (props: PropsType) => State, renderFunction: (state: UnwrapRef) => JSX.Element, -): (props: PropsType) => JSX.Element { - return (props: PropsType) => { - const state = useSetup(setupFunction, props) - return renderFunction(state) +): (props: PropsType) => JSX.Element +export function defineComponent( + setupFunction: (props: any) => any, + renderFunction?: (state: any) => JSX.Element, +): (props: any) => JSX.Element { + return (props) => { + const forceUpdate = useReducer(v => (v + 1) % 0xFFFFFFFF, 0)[1] as () => void + const state = useSetup((props) => { + const setupReturns = ref(setupFunction(props)) + + const jsxElement + = typeof renderFunction === 'function' + ? computed(() => markRaw(renderFunction(setupReturns.value))) + : computed(() => markRaw(toValue(setupReturns.value))) + + watch(jsxElement, () => { + if (jsxElement.effect.dirty) forceUpdate() // force update only when new jsxElement is not taken by React + }, { flush: 'post' }) + return { jsxElement } + }, props, USE_SETUP_NO_UPDATE) + + return state.jsxElement } } diff --git a/packages/reactivue/src/index.ts b/packages/reactivue/src/index.ts index 7120909..4f7ff5d 100644 --- a/packages/reactivue/src/index.ts +++ b/packages/reactivue/src/index.ts @@ -26,13 +26,16 @@ export { DebuggerEvent, DeepReadonly, effect, + effectScope, enableTracking, + getCurrentScope, isProxy, isReactive, isReadonly, isRef, ITERATE_KEY, markRaw, + onScopeDispose, pauseTracking, reactive, ReactiveEffect, @@ -51,6 +54,7 @@ export { toRef, toRefs, ToRefs, + toValue, track, TrackOpTypes, trigger, diff --git a/packages/reactivue/src/mock.ts b/packages/reactivue/src/mock.ts index 081d4b6..f1442c4 100644 --- a/packages/reactivue/src/mock.ts +++ b/packages/reactivue/src/mock.ts @@ -57,7 +57,7 @@ export function createApp() { const installedPlugins = new Set() const app = (context.app = { - version: '3.0.0', + version: '3.4.0', get config() { return context.config @@ -169,3 +169,6 @@ export function inject( warn('inject() can only be used inside setup() or functional components.') } } +export function hasInjectionContext() { + return !!getCurrentInstance() +} diff --git a/packages/reactivue/src/types.ts b/packages/reactivue/src/types.ts index 6b3967b..106d612 100644 --- a/packages/reactivue/src/types.ts +++ b/packages/reactivue/src/types.ts @@ -2,7 +2,7 @@ import { ReactiveEffect, Ref } from '@vue/reactivity' // from https://unpkg.com/@vue/reactivity@3.2.47/dist/reactivity.d.ts#L75-L89 export declare class EffectScope { - detached: boolean; + detached: boolean /* Excluded from this release type: _active */ /* Excluded from this release type: effects */ /* Excluded from this release type: cleanups */ @@ -39,7 +39,7 @@ export interface InternalInstanceState { hooks: Record initialState: Record provides: Record - scope: EffectScope | null + scope: EffectScope } export type InstanceStateMap = Record diff --git a/packages/reactivue/src/useSetup.ts b/packages/reactivue/src/useSetup.ts index 4b39ae7..4b6b23b 100644 --- a/packages/reactivue/src/useSetup.ts +++ b/packages/reactivue/src/useSetup.ts @@ -1,24 +1,27 @@ -import { UnwrapRef, reactive, ref, readonly, unref } from '@vue/reactivity' -import { useState, useEffect } from 'react' +import { UnwrapRef, ref, readonly, unref, shallowReactive } from '@vue/reactivity' +import { useState, useEffect, useReducer } from 'react' import { getNewInstanceId, createNewInstanceWithId, useInstanceScope, unmountInstance } from './component' import { watch } from './watch' import { invokeLifeCycle } from './lifecycle' import { LifecycleHooks } from './types' -export function useSetup, Props = {}>( +export const USE_SETUP_NO_UPDATE = 1 + +export function useSetup( setupFunction: (props: Props) => State, ReactProps?: Props, + flags = 0, ): UnwrapRef { const id = useState(getNewInstanceId)[0] - const setTick = useState(0)[1] + const forceUpdate = useReducer(v => (v + 1) & 0xFFFFFFFF, 0)[1] as () => void const createState = () => { - const props = reactive({ ...(ReactProps || {}) }) as any + const props = shallowReactive({ ...(ReactProps || {}) }) as any const instance = createNewInstanceWithId(id, props) useInstanceScope(id, () => { - const setupState = setupFunction(readonly(props)) ?? {} + const setupState: Record = setupFunction(readonly(props)) ?? {} const data = ref(setupState) invokeLifeCycle(LifecycleHooks.BEFORE_MOUNT) @@ -37,18 +40,24 @@ export function useSetup, Props = {}>( // run setup function const [state, setState] = useState(createState) - // sync props changes - useEffect(() => { - if (!ReactProps) return - + // sync props changes, in each rendering + if (ReactProps) { useInstanceScope(id, (instance) => { if (!instance) return const { props } = instance - for (const key of Object.keys(ReactProps)) + const oldKeys = Object.keys(props) + for (const key of Object.keys(ReactProps)) { props[key] = (ReactProps as any)[key] + + const oldIndex = oldKeys.indexOf(key) + if (oldIndex !== -1) + oldKeys.splice(oldIndex, 1) + } + for (const key of oldKeys) + delete props[key] }) - }, [ReactProps]) + } // trigger React re-render on data changes useEffect(() => { @@ -66,7 +75,7 @@ export function useSetup, Props = {}>( return const props = Object.assign({}, (ReactProps || {})) as any - const setup = setupFunction(readonly(props)) + const setup = setupFunction(readonly(props)) as Record for (const key of Object.keys(setup)) { if (isChanged) @@ -88,7 +97,7 @@ export function useSetup, Props = {}>( useInstanceScope(id, (instance) => { if (!instance) return - + // Avoid repeated execution of onMounted and watch after hmr updates in development mode if (instance.isMounted) return @@ -98,25 +107,27 @@ export function useSetup, Props = {}>( invokeLifeCycle(LifecycleHooks.MOUNTED) const { data } = instance - watch( - data, - () => { - /** - * Prevent triggering rerender when component - * is about to unmount or really unmounted - */ - if (instance.isUnmounting) - return - - useInstanceScope(id, () => { - invokeLifeCycle(LifecycleHooks.BEFORE_UPDATE, instance) - // trigger React update - setTick(+new Date()) - invokeLifeCycle(LifecycleHooks.UPDATED, instance) - }) - }, - { deep: true, flush: 'post' }, - ) + if (!(USE_SETUP_NO_UPDATE & flags)) { + watch( + data, + () => { + /** + * Prevent triggering rerender when component + * is about to unmount or really unmounted + */ + if (instance.isUnmounting) + return + + useInstanceScope(id, () => { + invokeLifeCycle(LifecycleHooks.BEFORE_UPDATE, instance) + // trigger React update + forceUpdate() + invokeLifeCycle(LifecycleHooks.UPDATED, instance) + }) + }, + { deep: true, flush: 'post' }, + ) + } }) return () => { diff --git a/packages/reactivue/src/watch.ts b/packages/reactivue/src/watch.ts index 4425421..bd3356c 100644 --- a/packages/reactivue/src/watch.ts +++ b/packages/reactivue/src/watch.ts @@ -1,288 +1,6 @@ -// ported from https://github.com/vuejs/vue-next/blob/master/packages/runtime-core/src/apiWatch.ts +export { watch, watchEffect } from '@vue/runtime-core' -/* eslint-disable array-callback-return */ -import { effect, Ref, ComputedRef, ReactiveEffectOptions, isRef, isReactive, stop } from '@vue/reactivity' -import { isFunction, isArray, NOOP, isObject, remove, hasChanged } from '@vue/shared' -import { watch as _watch, watchEffect as _watchEffect } from '@vue/runtime-core' -import { currentInstance, recordInstanceBoundEffect, usingEffectScope } from './component' -import { warn, callWithErrorHandling, callWithAsyncErrorHandling } from './errorHandling' - -export type WatchEffect = (onInvalidate: InvalidateCbRegistrator) => void - -export type WatchSource = Ref | ComputedRef | (() => T) - -export type WatchCallback = ( - value: V, - oldValue: OV, - onInvalidate: InvalidateCbRegistrator -) => any - -export type WatchStopHandle = () => void - -type MapSources = { - [K in keyof T]: T[K] extends WatchSource - ? V - : T[K] extends object ? T[K] : never -} - -type MapOldSources = { - [K in keyof T]: T[K] extends WatchSource - ? Immediate extends true ? (V | undefined) : V - : T[K] extends object - ? Immediate extends true ? (T[K] | undefined) : T[K] - : never -} - -type InvalidateCbRegistrator = (cb: () => void) => void -const INITIAL_WATCHER_VALUE = {} - -export interface WatchOptionsBase { - flush?: 'pre' | 'post' | 'sync' - onTrack?: ReactiveEffectOptions['onTrack'] - onTrigger?: ReactiveEffectOptions['onTrigger'] -} - -export interface WatchOptions extends WatchOptionsBase { - immediate?: Immediate - deep?: boolean -} - -// Simple effect. -export function watchEffect( - effect: WatchEffect, - options?: WatchOptionsBase, -): WatchStopHandle { - if (usingEffectScope) return _watchEffect(effect, options) - return doWatch(effect, null, options) -} - -// overload #1: array of multiple sources + cb -// Readonly constraint helps the callback to correctly infer value types based -// on position in the source array. Otherwise the values will get a union type -// of all possible value types. -export function watch< - T extends Readonly | object>>, - Immediate extends Readonly = false ->( - sources: T, - cb: WatchCallback, MapOldSources>, - options?: WatchOptions -): WatchStopHandle - -// overload #2: single source + cb -export function watch = false>( - source: WatchSource, - cb: WatchCallback, - options?: WatchOptions -): WatchStopHandle - -// overload #3: watching reactive object w/ cb -export function watch< - T extends object, - Immediate extends Readonly = false ->( - source: T, - cb: WatchCallback, - options?: WatchOptions -): WatchStopHandle - -// implementation -export function watch( - source: WatchSource | WatchSource[], - cb: WatchCallback, - options?: WatchOptions, -): WatchStopHandle { - if (usingEffectScope) return _watch(source, cb as any, options) - return doWatch(source, cb, options) -} - -function doWatch( - source: WatchSource | WatchSource[] | WatchEffect, - cb: WatchCallback | null, - { immediate, deep, flush, onTrack, onTrigger }: WatchOptions = {}, -): WatchStopHandle { - const instance = currentInstance - - let getter: () => any - let forceTrigger = false - let isMultiSource = false - if (isRef(source)) { - getter = () => (source as Ref).value - // @ts-expect-error - forceTrigger = !!(source as Ref)._shallow - } - else if (isReactive(source)) { - getter = () => source - deep = true - } - else if (isArray(source)) { - isMultiSource = true - forceTrigger = source.some(isReactive) - getter = () => - source.map((s) => { - if (isRef(s)) - return s.value - else if (isReactive(s)) - return traverse(s) - else if (isFunction(s)) - return callWithErrorHandling(s, instance, 'watch getter') - else - __DEV__ && warn('invalid source') - }) - } - else if (isFunction(source)) { - if (cb) { - // getter with cb - getter = () => - callWithErrorHandling(source, instance, 'watch getter') - } - else { - // no cb -> simple effect - getter = () => { - if (instance && instance.isUnmounted) - return - - if (cleanup) - cleanup() - - return callWithErrorHandling( - source, - instance, - 'watch callback', - [onInvalidate], - ) - } - } - } - else { - getter = NOOP - } - - if (cb && deep) { - const baseGetter = getter - getter = () => traverse(baseGetter()) - } - - let cleanup: () => void - const onInvalidate: InvalidateCbRegistrator = (fn: () => void) => { - cleanup = runner.options.onStop = () => { - callWithErrorHandling(fn, instance, 'watch cleanup') - } - } - - let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE - const job = () => { - if (!runner.active) - return - - if (cb) { - // watch(source, cb) - const newValue = runner() - if ( - deep - || forceTrigger - || (isMultiSource - ? (newValue as any[]).some((v, i) => - hasChanged(v, (oldValue as any[])[i]), - ) - : hasChanged(newValue, oldValue)) - ) { - // cleanup before running cb again - if (cleanup) - cleanup() - - callWithAsyncErrorHandling(cb, instance, 'watch callback', [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, - onInvalidate, - ]) - oldValue = newValue - } - } - else { - // watchEffect - runner() - } - } - - // important: mark the job as a watcher callback so that scheduler knows - // it is allowed to self-trigger (#1727) - job.allowRecurse = !!cb - - let scheduler: ReactiveEffectOptions['scheduler'] - if (flush === 'sync') { - scheduler = job - } - else if (flush === 'post') { - scheduler = () => job() - // TODO: scheduler = () => queuePostRenderEffect(job, instance && instance.suspense) - } - else { - // default: 'pre' - scheduler = () => { - if (!instance) { - // TODO: queuePreFlushCb(job) - job() - } - else { - // with 'pre' option, the first call must happen before - // the component is mounted so it is called synchronously. - job() - } - } - } - - const runner = effect(getter, { - lazy: true, - onTrack, - onTrigger, - scheduler, - }) - - recordInstanceBoundEffect(runner) - - // initial run - if (cb) { - if (immediate) - job() - else - oldValue = runner() - } - else { - runner() - } - - return () => { - stop(runner) - if (instance) - remove(instance.effects!, runner) - } -} - -function traverse(value: unknown, seen: Set = new Set()) { - if (!isObject(value) || seen.has(value)) - return value - - seen.add(value) - if (isArray(value)) { - for (let i = 0; i < value.length; i++) - traverse(value[i], seen) - } - else if (value instanceof Map) { - value.forEach((_, key) => { - // to register mutation dep for existing keys - traverse(value.get(key), seen) - }) - } - else if (value instanceof Set) { - value.forEach((v) => { - traverse(v, seen) - }) - } - else { - for (const key of Object.keys(value)) - traverse(value[key], seen) - } - return value -} +export type { + WatchEffect, WatchSource, WatchCallback, WatchStopHandle, + WatchOptions, WatchOptionsBase, +} from '@vue/runtime-core' diff --git a/packages/reactivue/tests/defineComponent.spec.tsx b/packages/reactivue/tests/defineComponent.spec.tsx index b17faf9..87aa998 100644 --- a/packages/reactivue/tests/defineComponent.spec.tsx +++ b/packages/reactivue/tests/defineComponent.spec.tsx @@ -1,7 +1,7 @@ -import React from 'react' +import React, { act, useReducer } from 'react' import { render } from '@testing-library/react' import { screen, waitFor } from '@testing-library/dom' -import { defineComponent, ref } from '../src' +import { computed, defineComponent, ref } from '../src' const DefineTest = defineComponent(() => { const msg = ref('Hello, world!') @@ -14,10 +14,56 @@ const DefineTest = defineComponent(() => { }) it('should render basic defineComponent component', async() => { - render() + render() await waitFor(() => { const el = screen.getByText('Hello, world!') expect(el).toBeInTheDocument() }) }) + +it('defineComponent should accept single function', async() => { + let defineTest2RenderTimes = 0 + + const DefineTestV2 = defineComponent((props: { goodbye: boolean }) => { + const msg = computed(() => props.goodbye ? 'Goodbye, world!' : 'Hello, world!') + // eslint-disable-next-line react/display-name + return () => { + defineTest2RenderTimes++ + return

{msg.value}

+ } + }) + + function MockApp() { + const [counter, update] = useReducer(x => x + 1, 0) + return
+

Counter: {counter}

+

+ = 2} /> +
+ } + + act(() => { + render() + }) + + // first render + + expect(screen.getByText('Hello, world!')).toBeInTheDocument() + expect(defineTest2RenderTimes).toBe(1) + expect(screen.getByText('Counter: 0')).toBeInTheDocument() + + // 2nd render, DefineTestV2 not re-rendered + + act(() => screen.getByText('update counter').click()) + expect(screen.getByText('Hello, world!')).toBeInTheDocument() + expect(defineTest2RenderTimes).toBe(1) // not re-rendered + expect(screen.getByText('Counter: 1')).toBeInTheDocument() + + // 3rd render, DefineTestV2 re-rendered + + act(() => screen.getByText('update counter').click()) + expect(screen.getByText('Goodbye, world!')).toBeInTheDocument() // <-- ! + expect(defineTest2RenderTimes).toBe(2) // <-- ! + expect(screen.getByText('Counter: 2')).toBeInTheDocument() +}) diff --git a/yarn.lock b/yarn.lock index 4bba6ff..a721c92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.3.2": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" + integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== + "@antfu/eslint-config-basic@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@antfu/eslint-config-basic/-/eslint-config-basic-0.6.2.tgz#87e2d19b62ec9149ef7da071c4acd32f505f68b6" @@ -862,15 +867,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime-corejs3@^7.10.2": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz#14c3f4c85de22ba88e8e86685d13e8861a82fe86" - integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== @@ -1194,10 +1191,10 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" - integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== dependencies: estree-walker "^2.0.1" picomatch "^2.2.2" @@ -1216,46 +1213,45 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.28.1": - version "7.30.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.2.tgz#a63ae7078235ec6248a8a522b04e696ab49896cc" - integrity sha512-NJzHILb5De0J0varzT0W00qDTLcbF86etfAyx5ty7iJhpR6eCs+JR99Ls7AMSUG2bWRYIG0u4KTPH6PMcZhlWQ== +"@testing-library/dom@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.1.0.tgz#2d073e49771ad614da999ca48f199919e5176fb6" + integrity sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" chalk "^4.1.0" - dom-accessibility-api "^0.5.4" - lz-string "^1.4.4" - pretty-format "^26.6.2" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" -"@testing-library/jest-dom@^5.11.10": - version "5.11.10" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz#1cd90715023e1627f5ed26ab3b38e6f22d77046c" - integrity sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ== +"@testing-library/jest-dom@^6.4.5": + version "6.4.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz#badb40296477149136dabef32b572ddd3b56adf1" + integrity sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A== dependencies: + "@adobe/css-tools" "^4.3.2" "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^4.2.2" + aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" - lodash "^4.17.15" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" redent "^3.0.0" -"@testing-library/react@^11.2.6": - version "11.2.6" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.6.tgz#586a23adc63615985d85be0c903f374dab19200b" - integrity sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ== +"@testing-library/react@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.0.0.tgz#0a1e0c7a3de25841c3591b8cb7fb0cf0c0a27321" + integrity sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^7.28.1" -"@types/aria-query@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" - integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.14" @@ -1329,7 +1325,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@^26.0.22": +"@types/jest@^26.0.22": version "26.0.22" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.22.tgz#8308a1debdf1b807aa47be2838acdcd91e88fbe6" integrity sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw== @@ -1377,20 +1373,19 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react-dom@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.3.tgz#7fdf37b8af9d6d40127137865bb3fff8871d7ee1" - integrity sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w== +"@types/react-dom@^18.3.0": + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" - integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== +"@types/react@*", "@types/react@^18.3.3": + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -1400,23 +1395,11 @@ dependencies: "@types/node" "*" -"@types/scheduler@*": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== - "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/testing-library__jest-dom@^5.9.1": - version "5.9.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" - integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== - dependencies: - "@types/jest" "*" - "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" @@ -1509,32 +1492,35 @@ "@babel/plugin-transform-react-jsx-source" "^7.12.13" react-refresh "^0.9.0" -"@vue/composition-api@^1.0.0-rc.6": - version "1.0.0-rc.6" - resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.0.0-rc.6.tgz#21ce2c169dd4ff17a5bf60c6e98863dff1a36540" - integrity sha512-M3jsyDBozQFqAPYdM4GCoVZEljIHsTVdcq5fZx9axpKz9ChIlQngxNf1ziLVaJvWX7T+MO1rVTEx6Xjgg/gUcQ== - dependencies: - tslib "^2.1.0" +"@vue/composition-api@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.7.2.tgz#0b656f3ec39fefc2cf40aaa8c12426bcfeae1b44" + integrity sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw== + +"@vue/devtools-api@^6.5.0": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.3.tgz#b23a588154cba8986bba82b6e1d0248bde3fd1a0" + integrity sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw== -"@vue/reactivity@3.0.9", "@vue/reactivity@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.9.tgz#875f241b8c10262560b190ccdeff2d0ab7053e11" - integrity sha512-W1AbGhzphVjY+TL32lQDwLDNvLzZKOcUgaIaLOoALWMtjzN4ExOUJzrR1FC3ynlpMHIEfcUo8GPgfnNmvMGdgQ== +"@vue/reactivity@3.4.27", "@vue/reactivity@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.27.tgz#6ece72331bf719953f5eaa95ec60b2b8d49e3791" + integrity sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA== dependencies: - "@vue/shared" "3.0.9" + "@vue/shared" "3.4.27" -"@vue/runtime-core@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.9.tgz#9665f149468355a524a304cb8f260147a4d294e6" - integrity sha512-j94xZ/wRZTVhqpoUgmxBTlojnPFu6TTXNw1Vw8oQkW1ZTGD0IwiJe3ycsKd1bpleXEMVt55GzGlCopI33/Gdmg== +"@vue/runtime-core@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.27.tgz#1b6e1d71e4604ba7442dd25ed22e4a1fc6adbbda" + integrity sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA== dependencies: - "@vue/reactivity" "3.0.9" - "@vue/shared" "3.0.9" + "@vue/reactivity" "3.4.27" + "@vue/shared" "3.4.27" -"@vue/shared@3.0.9", "@vue/shared@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.9.tgz#09882d745ded52b07e4481d036659d733edd2a9a" - integrity sha512-lv20q1O5dybwro+V+vnxHCmSIxi9mvTORSgAbGrANGYK8zF4K1S9TOankIvdkcvfZ88IR95O2pTI2Pb3c3BaNg== +"@vue/shared@3.4.27", "@vue/shared@^3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.27.tgz#f05e3cd107d157354bb4ae7a7b5fc9cf73c63b50" + integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== "@vueuse/core@^4.6.2": version "4.6.2" @@ -1556,6 +1542,15 @@ dependencies: vue-demi latest +"@yarn-tool/resolve-package@^1.0.40": + version "1.0.47" + resolved "https://registry.yarnpkg.com/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz#8ec25f291a316280a281632331e88926a66fdf19" + integrity sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA== + dependencies: + pkg-dir "< 6 >= 5" + tslib "^2" + upath2 "^3.1.13" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -1643,10 +1638,10 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" @@ -1662,6 +1657,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1690,13 +1690,12 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== +aria-query@5.3.0, aria-query@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" + dequal "^2.0.3" arr-diff@^4.0.0: version "4.0.0" @@ -2297,11 +2296,6 @@ core-js-compat@^3.8.1, core-js-compat@^3.9.0: browserslist "^4.16.3" semver "7.0.0" -core-js-pure@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2375,15 +2369,6 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -2513,6 +2498,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -2578,10 +2568,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" - integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-serializer@^1.0.1: version "1.2.0" @@ -3184,10 +3179,10 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" @@ -3208,6 +3203,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -3252,14 +3255,14 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-extra@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-extra@^9.1.0: version "9.1.0" @@ -3623,7 +3626,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4425,13 +4428,6 @@ jsonc-eslint-parser@^1.0.0, jsonc-eslint-parser@^1.0.1: eslint-visitor-keys "^2.0.0" espree "^6.0.0 || ^7.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -4544,6 +4540,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -4588,10 +4591,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.25.7: version "0.25.7" @@ -4771,10 +4774,10 @@ multimap@^1.1.0: resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8" integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw== -nanoid@^3.1.20: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== nanomatch@^1.2.9: version "1.2.13" @@ -5059,6 +5062,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -5073,6 +5083,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -5156,6 +5173,13 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-network-drive@^1.0.20: + version "1.0.20" + resolved "https://registry.yarnpkg.com/path-is-network-drive/-/path-is-network-drive-1.0.20.tgz#9c264db2e0fce5e9bc2ef9177fcab3f996d1a1b5" + integrity sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw== + dependencies: + tslib "^2" + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -5171,6 +5195,13 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-strip-sep@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/path-strip-sep/-/path-strip-sep-1.0.17.tgz#3b7dd4f461cf73a9277333f50289ce9b00cffba3" + integrity sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA== + dependencies: + tslib "^2" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -5195,6 +5226,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -5215,10 +5251,13 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinia@^2.0.0-alpha.8: - version "2.0.0-alpha.8" - resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.0-alpha.8.tgz#c0d7440332d78934be12c10b1131a2651273d9fc" - integrity sha512-TQvr5eLqyHtDktLP2xgbAMTgKjqcBVBWHSTweaEKU9Mql0976yklRjOxJ4dPp4gbQzFlndkaZZHMo9YkT2BuQg== +pinia@^2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.1.7.tgz#4cf5420d9324ca00b7b4984d3fbf693222115bbc" + integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ== + dependencies: + "@vue/devtools-api" "^6.5.0" + vue-demi ">=0.14.5" pirates@^4.0.1: version "4.0.1" @@ -5227,6 +5266,13 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +"pkg-dir@< 6 >= 5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -5305,14 +5351,14 @@ postcss@^6.0.9: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.8: - version "8.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" - integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== +postcss@^8.1.6, postcss@^8.2.1, postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: - colorette "^1.2.2" - nanoid "^3.1.20" - source-map "^0.6.1" + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" preact@^10.5.13: version "10.5.13" @@ -5339,6 +5385,15 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -5416,14 +5471,13 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.3.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.2" react-is@^16.8.1: version "16.13.1" @@ -5440,13 +5494,12 @@ react-refresh@^0.9.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg-up@^2.0.0: version "2.0.0" @@ -5673,7 +5726,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.20.0, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -5725,16 +5778,17 @@ rollup-plugin-terser@^7.0.2: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup-plugin-typescript2@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz#1cc99ac2309bf4b9d0a3ebdbc2002aecd56083d3" - integrity sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ== +rollup-plugin-typescript2@^0.31.0: + version "0.31.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz#463aa713a7e2bf85b92860094b9f7fb274c5a4d8" + integrity sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q== dependencies: - "@rollup/pluginutils" "^4.1.0" - find-cache-dir "^3.3.1" - fs-extra "8.1.0" - resolve "1.20.0" - tslib "2.1.0" + "@rollup/pluginutils" "^4.1.2" + "@yarn-tool/resolve-package" "^1.0.40" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + resolve "^1.20.0" + tslib "^2.3.1" rollup@^2.38.5, rollup@^2.44.0: version "2.44.0" @@ -5806,13 +5860,12 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" @@ -5962,6 +6015,11 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -5973,14 +6031,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -6385,16 +6435,16 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@2.1.0, tslib@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2, tslib@^2.1.0, tslib@^2.3.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tsutils@^3.17.1: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -6518,7 +6568,7 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -6536,6 +6586,16 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath2@^3.1.13: + version "3.1.19" + resolved "https://registry.yarnpkg.com/upath2/-/upath2-3.1.19.tgz#d987d34a62b2daad1c54a692fd5a720a30c9a786" + integrity sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ== + dependencies: + "@types/node" "*" + path-is-network-drive "^1.0.20" + path-strip-sep "^1.0.17" + tslib "^2" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -6599,12 +6659,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -villus@^1.0.0-rc.15: - version "1.0.0-rc.15" - resolved "https://registry.yarnpkg.com/villus/-/villus-1.0.0-rc.15.tgz#05f0ae13a304864a74b9577871697a464ad00137" - integrity sha512-fd3kjqLCkdu+kqnTqtKOMnMk4q9GdDNpioQmT2zlMwg21ToNPEyDwGcmDJjyWRXQnN4NDp0aDWWGkfaANq1/RQ== - dependencies: - vue-demi "^0.7.0" +villus@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/villus/-/villus-3.5.0.tgz#44c22a70f61ab860586c178c87bb7164d169049c" + integrity sha512-6DJAPCAo/HHZ14Wd/NbtIWSDRe59L0lm8qGYzVgwIaCdZOGhCGgtzuolQsb0nWS8wx+IDDWbKkMgvqbJzeeVJA== vite@^2.1.4: version "2.1.4" @@ -6618,7 +6676,12 @@ vite@^2.1.4: optionalDependencies: fsevents "~2.3.1" -vue-demi@^0.7.0, vue-demi@latest: +vue-demi@>=0.14.5: + version "0.14.8" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.8.tgz#00335e9317b45e4a68d3528aaf58e0cec3d5640a" + integrity sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q== + +vue-demi@latest: version "0.7.4" resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.7.4.tgz#4c6be525788e1f6b3fd5d4f5f9f2148cf6645979" integrity sha512-PT0qzI9Rp8R8eUAsTPXADC+KAZdrMufmbZqEMMqvaiesWyjCpgyuuvS5Su8cvBjK9RevLT/YfFiKWxc8YB9/8g== @@ -6821,3 +6884,8 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==