diff --git a/.changeset/bright-mayflies-cross.md b/.changeset/bright-mayflies-cross.md new file mode 100644 index 00000000..de28703f --- /dev/null +++ b/.changeset/bright-mayflies-cross.md @@ -0,0 +1,5 @@ +--- +'@solid-devtools/transform': minor +--- + +Remove `wrapStores` transform — tracking stores is handled by the debugger. diff --git a/.changeset/empty-carrots-attack.md b/.changeset/empty-carrots-attack.md new file mode 100644 index 00000000..9ad39f76 --- /dev/null +++ b/.changeset/empty-carrots-attack.md @@ -0,0 +1,6 @@ +--- +'@solid-devtools/debugger': minor +'@solid-devtools/shared': minor +--- + +Move value serialization logic to debugger diff --git a/.changeset/real-dolphins-smash.md b/.changeset/real-dolphins-smash.md new file mode 100644 index 00000000..b8f40f5e --- /dev/null +++ b/.changeset/real-dolphins-smash.md @@ -0,0 +1,7 @@ +--- +'@solid-devtools/debugger': patch +'@solid-devtools/logger': patch +'@solid-devtools/shared': patch +--- + +Move some debugger related types from @solid-devtools/shared to @solid-devtools/debugger diff --git a/.changeset/wet-camels-confess.md b/.changeset/wet-camels-confess.md new file mode 100644 index 00000000..2bbec23c --- /dev/null +++ b/.changeset/wet-camels-confess.md @@ -0,0 +1,11 @@ +--- +'@solid-devtools/debugger': minor +'solid-devtools': minor +'solid-devtools-extension': minor +'@solid-devtools/frontend': minor +'@solid-devtools/logger': minor +'@solid-devtools/overlay': minor +'@solid-devtools/shared': minor +--- + +Move graph types from `@solid-devtools/shared` to `@solid-devtools/debugger` diff --git a/.changeset/witty-rockets-juggle.md b/.changeset/witty-rockets-juggle.md new file mode 100644 index 00000000..54d02920 --- /dev/null +++ b/.changeset/witty-rockets-juggle.md @@ -0,0 +1,6 @@ +--- +'@solid-devtools/debugger': minor +'@solid-devtools/frontend': minor +--- + +Track and show fine-grain updates to stores in inspected values. diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..03242497 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,12 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint", "no-only-tests"], + "ignorePatterns": ["node_modules", "dist", "scripts", "examples"], + "rules": { + "no-console": "warn", + "no-debugger": "warn", + "@typescript-eslint/no-unused-vars": "warn", + "no-only-tests/no-only-tests": "warn" + } +} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e8a37f11..45ecc832 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -27,6 +27,9 @@ jobs: - name: Install dependencies run: pnpm install --no-frozen-lockfile + - name: Lint + run: pnpm lint + - name: Run Build and Tests run: pnpm run build-test env: diff --git a/.npmrc b/.npmrc index 4c2f52b3..8556057e 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,3 @@ auto-install-peers=true strict-peer-dependencies=false +link-workspace-packages=deep diff --git a/configs/tsconfig.base.json b/configs/tsconfig.base.json index 76e61a19..cabc6576 100644 --- a/configs/tsconfig.base.json +++ b/configs/tsconfig.base.json @@ -9,7 +9,6 @@ "esModuleInterop": true, "noEmit": true, "skipLibCheck": true, - "noUnusedLocals": true, "forceConsistentCasingInFileNames": true } } diff --git a/configs/tsup.config.ts b/configs/tsup.config.ts index a3da7560..c6ab5920 100644 --- a/configs/tsup.config.ts +++ b/configs/tsup.config.ts @@ -28,6 +28,7 @@ export default ({ return defineConfig(config => { const options: Options = { clean: config.watch ? false : true, + minify: config.watch ? false : true, dts: { entry: [entry, ...mappedAdditionalEntries], }, diff --git a/examples/clock/package.json b/examples/clock/package.json index ef505cdd..4fae3e7d 100644 --- a/examples/clock/package.json +++ b/examples/clock/package.json @@ -17,6 +17,6 @@ }, "dependencies": { "solid-devtools": "workspace:^0.20.1", - "solid-js": "^1.6.0" + "solid-js": "^1.6.2" } } diff --git a/examples/sandbox/package.json b/examples/sandbox/package.json index 5d4085cf..1a0af2cd 100644 --- a/examples/sandbox/package.json +++ b/examples/sandbox/package.json @@ -15,6 +15,7 @@ "@babel/plugin-syntax-typescript": "^7.18.6", "@solid-devtools/transform": "workspace:^0.7.5", "typescript": "^4.8.4", + "unocss": "^0.46.3", "vite": "^3.1.8", "vite-plugin-solid": "^2.3.10" }, @@ -24,6 +25,6 @@ "@solid-devtools/overlay": "workspace:^0.0.7", "@solid-primitives/timer": "^1.3.4", "solid-devtools": "workspace:^0.20.1", - "solid-js": "^1.6.0" + "solid-js": "^1.6.2" } } diff --git a/examples/sandbox/src/App.tsx b/examples/sandbox/src/App.tsx index c5536342..176a5975 100644 --- a/examples/sandbox/src/App.tsx +++ b/examples/sandbox/src/App.tsx @@ -15,6 +15,8 @@ import { import Todos from './Todos' import { disposeApp } from '.' import { ThemeExample } from './Theme' +import { createMutable } from 'solid-js/store' +import Recursive from './Recursive' const doMediumCalc = () => { Array.from({ length: 1000000 }, (_, i) => i).sort(() => Math.random() - 5) @@ -62,24 +64,51 @@ const PassChildren: ParentComponent = props => { } const Article: Component = () => { + const state = createMutable({ + count: 0, + other: { name: 'article' }, + content: { + title: 'A cool headline for testing :)', + body: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorem odio culpa vel vitae? Quis deleniti soluta rem velit necessitatibus? ', + }, + }) + return (
-

A cool headline for testing :)

+

{state.content.title}

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorem odio culpa vel vitae? Quis - deleniti soluta rem velit necessitatibus?{' '} + {state.content.body} Saepe nulla omnis nobis minima perferendis odio doloremque deleniti dolore corrupti.

+ {/*

Count: {state.count}

*/} +

+ +

) } -const obj = { - comp: () =>
This is an object property component
, +const DynamicSpreadParent = () => { + const [props, setProps] = createSignal({ + a: 1, + b: 2, + c: 3, + style: { width: '160px', height: '30px', background: '#fcb', color: 'black' }, + textContent: 'Before Change', + onclick: () => + setProps({ + style: { width: '160px', height: '30px', background: '#eba', color: 'black' }, + textContent: 'After Change', + d: 4, + e: 5, + }), + }) + const DynamicSpreadChild = (props: any) =>
+ return } const App: Component = () => { @@ -145,7 +174,7 @@ const App: Component = () => {
*/} - +
@@ -156,6 +185,7 @@ const App: Component = () => {
+ ) } diff --git a/examples/sandbox/src/Recursive.tsx b/examples/sandbox/src/Recursive.tsx new file mode 100644 index 00000000..31a1f8f8 --- /dev/null +++ b/examples/sandbox/src/Recursive.tsx @@ -0,0 +1,101 @@ +import { Component, For, splitProps, mergeProps, createContext, useContext } from 'solid-js' +import { createStore } from 'solid-js/store' + +type NodeType = { + id: number + children?: Array + parents?: Array +} + +let id: number = 3 + +interface genNodePathInterface { + nodeId: number + parentsPath?: Array + accessKey?: string +} +function genNodePath({ nodeId, parentsPath = [], accessKey = 'children' }: genNodePathInterface) { + let path = parentsPath.concat(nodeId) + let nodePath: Array = [] + path.forEach(id => { + nodePath.push(...[(child: NodeType) => child.id === id, accessKey]) + }) + return nodePath +} + +// Printed url path +function genNodeUrl(nodeProps: any) { + let urlFormat = `${nodeProps.id}` + let url = nodeProps?.url ? [...nodeProps.url, urlFormat] : [urlFormat] + return url +} + +// Recursive component +const Node: Component = props => { + let [childrenProps, nodeProps] = splitProps(props, ['children']) + // To store local component signals + type nodeSignalsType = { + parents: Array + url: Array + } + const [nodeSignals, setNodeSignals] = createStore({ + parents: nodeProps?.parents ? nodeProps?.parents : [], + url: genNodeUrl(nodeProps), + }) + + const addNode = useContext(RecursiveContext) + + return ( +
+

{nodeSignals.url.join(' > ')}

+ + {node => { + const childProps = mergeProps( + { + parents: [...nodeSignals.parents, nodeProps.id], + url: nodeSignals.url, + }, + node, + ) + return + }} + + +
+ ) +} + +const RecursiveContext = createContext<(nodeId: number, parentsPath: number[]) => void>(() => {}) + +const Recursive: Component = props => { + const [data, setData] = createStore([ + { + id: 0, + children: [ + { id: 1, children: [{ id: 2, children: [] }] }, + { id: 3, children: [] }, + ], + }, + ]) + + const addNode = (nodeId: number, parentsPath: number[]) => { + setData( + // @ts-ignore + ...genNodePath({ nodeId, parentsPath }), + (children: any) => [...children, { id: ++id, children: [] }], + ) + } + + return ( + + {page => } + + ) +} + +export default Recursive diff --git a/examples/sandbox/src/Theme.tsx b/examples/sandbox/src/Theme.tsx index 295f4177..3d91e6e5 100644 --- a/examples/sandbox/src/Theme.tsx +++ b/examples/sandbox/src/Theme.tsx @@ -30,23 +30,16 @@ export const ThemeProvider: ParentComponent<{ color?: string title?: string }> = props => { - const [color, setColor] = createSignal(props.color ?? defaultState.color) - const [title, setTitle] = createSignal(props.title ?? defaultState.title) + const [theme, setTheme] = createStore({ + color: props.color || defaultState.color, + title: props.title || defaultState.title, + }) - const changeColor = (color: string) => setColor(color) - const changeTitle = (title: string) => setTitle(title) - - const state = { - get color() { - return color() - }, - get title() { - return title() - }, - } + const changeColor = (color: string) => setTheme('color', color) + const changeTitle = (title: string) => setTheme('title', title) return ( - + {props.children} ) diff --git a/examples/sandbox/src/Todos.tsx b/examples/sandbox/src/Todos.tsx index d5aa8391..bc1d6e18 100644 --- a/examples/sandbox/src/Todos.tsx +++ b/examples/sandbox/src/Todos.tsx @@ -1,13 +1,13 @@ -import { createEffect, createSignal, batch, For, Component, getOwner } from 'solid-js' -import { createStore, Store, SetStoreFunction } from 'solid-js/store' -// import { isSolidMemo } from "@solid-devtools/debugger" +import { createSignal, batch, For, Component, createMemo, createEffect } from 'solid-js' +import { createStore, Store, SetStoreFunction, produce, unwrap } from 'solid-js/store' export function createLocalStore( name: string, init: T, ): [Store, SetStoreFunction] { const localState = localStorage.getItem(name) - const [state, setState] = createStore(localState ? JSON.parse(localState) : init) + // const localState = undefined + const [state, setState] = createStore(localState ? JSON.parse(localState) : init, { name }) createEffect(() => localStorage.setItem(name, JSON.stringify(state))) return [state, setState] } @@ -25,10 +25,6 @@ const Todo: Component<{ onUpdate: (value: string) => void onRemove: VoidFunction }> = props => { - // console.log(isSolidMemo(getOwner()!.owner)) - - // debugProps(props) - return (
{ const [newTitle, setTitle] = createSignal('') - const [todos, setTodos] = createLocalStore('todos', []) + const [todos, setTodos] = createLocalStore('todos-2', { + values: [] as TodoItem[], + other: { + name: 'todos', + get newTitle() { + return { value: newTitle() } + }, + countOuter: { + countInner: { + count: 0, + }, + }, + }, + }) - // makeStoreObserver(todos, console.log) + const valuesInASignal = createMemo(() => ({ values: todos.values })) - // debugStore(todos) + // @ts-ignore + setTodos('other', 'else', unwrap(todos.values)) const addTodo = (e: SubmitEvent) => { e.preventDefault() batch(() => { - setTodos(todos.length, { + setTodos('values', todos.values.length, { title: newTitle(), done: false, }) @@ -66,14 +76,15 @@ const Todos: Component = () => { } // setTimeout(() => { - // setTodos( - // 0, - // reconcile({ - // title: "Learn Solid-JS", - // done: false, - // [Math.random() + ""]: "hello", - // }), - // ) + // setTodos( + // 'values', + // 0, + // reconcile({ + // title: 'Learn Solid-JS', + // done: false, + // [Math.random() + '']: 'hello', + // }), + // ) // }, 1000) return ( @@ -88,13 +99,18 @@ const Todos: Component = () => { /> - + {(todo, i) => ( setTodos(i(), 'done', v)} - onUpdate={v => setTodos(i(), 'title', v)} - onRemove={() => setTodos(t => removeIndex(t, i()))} + onCheck={v => setTodos('values', i(), 'done', v)} + onUpdate={v => setTodos('values', i(), 'title', v)} + onRemove={() => + setTodos( + 'values', + produce(t => t.splice(i(), 1)), + ) + } /> )} diff --git a/examples/sandbox/src/index.tsx b/examples/sandbox/src/index.tsx index 632dd110..49f70c8b 100644 --- a/examples/sandbox/src/index.tsx +++ b/examples/sandbox/src/index.tsx @@ -7,6 +7,8 @@ import App from './App' import { ThemeProvider } from './Theme' import './locator' +import 'uno.css' + export const disposeApp = render( () => ( <> diff --git a/examples/sandbox/vite.config.ts b/examples/sandbox/vite.config.ts index 5db9d30f..d663f90a 100644 --- a/examples/sandbox/vite.config.ts +++ b/examples/sandbox/vite.config.ts @@ -1,15 +1,17 @@ import { defineConfig } from 'vite' import solidPlugin from 'vite-plugin-solid' import devtoolsPlugin from '@solid-devtools/transform' +import Unocss from 'unocss/vite' export default defineConfig({ plugins: [ devtoolsPlugin({ // wrapStores: true, - jsxLocation: true, + // jsxLocation: true, name: true, }), solidPlugin({ hot: false, dev: true }), + Unocss(), ], resolve: { conditions: ['browser', 'development'], @@ -17,5 +19,9 @@ export default defineConfig({ mode: 'development', build: { target: 'esnext', + minify: false, + }, + optimizeDeps: { + exclude: ['solid-js/store', '@solid-devtools/debugger'], }, }) diff --git a/examples/start/package.json b/examples/start/package.json index 53b04f9d..493fafe6 100644 --- a/examples/start/package.json +++ b/examples/start/package.json @@ -17,7 +17,7 @@ "@solidjs/meta": "^0.28.0", "@solidjs/router": "^0.4.3", "solid-devtools": "workspace:^0.20.1", - "solid-js": "^1.6.0", + "solid-js": "^1.6.2", "solid-start": "^0.1.8", "undici": "^5.11.0" }, diff --git a/examples/todomvc/package.json b/examples/todomvc/package.json index de660d19..c971f075 100644 --- a/examples/todomvc/package.json +++ b/examples/todomvc/package.json @@ -33,7 +33,7 @@ "npm": ">=7.20.1" }, "dependencies": { - "solid-js": "^1.6.0", + "solid-js": "^1.6.2", "todomvc-app-css": "^2.4.2", "todomvc-common": "^1.0.5" }, diff --git a/package.json b/package.json index be95ab79..e83571d2 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "test": "turbo run test --filter=!./examples/*", "typecheck": "turbo run typecheck --filter=!./examples/*", "build-test": "turbo run build test typecheck --filter=!./examples/*", - "format": "prettier -w \"packages/**/*.{js,ts,json,css,tsx,jsx}\" \"examples/**/*.{js,ts,json,css,tsx,jsx}\"", + "format": "prettier -w packages/**/*.{js,ts,json,css,tsx,jsx} examples/**/*.{js,ts,json,css,tsx,jsx}", + "lint": "eslint --ignore-path .gitignore --max-warnings 0 packages/**/*.{js,ts,tsx,jsx}", "changeset": "changeset", "release": "pnpm run build-test && changeset publish", "version-packages": "changeset version && pnpm i", @@ -27,20 +28,29 @@ "devDependencies": { "@changesets/cli": "^2.25.0", "@types/node": "^18.11.3", + "@typescript-eslint/eslint-plugin": "^5.42.0", + "@typescript-eslint/parser": "^5.42.0", "babel-preset-solid": "^1.6.0", "concurrently": "^7.4.0", + "cross-env": "^7.0.3", "esbuild": "^0.15.12", "esbuild-plugin-solid": "^0.4.2", + "eslint": "^8.26.0", + "eslint-plugin-no-only-tests": "^3.1.0", "prettier": "2.7.1", - "solid-js": "^1.6.0", - "tsup": "^6.3.0", + "tsup": "^6.4.0", "turbo": "^1.5.6", "typescript": "^4.8.4", "vite-plugin-solid": "^2.3.10", - "vitest": "^0.23.4" + "vitest": "^0.23.4", + "vite": "^3.2.3", + "jsdom": "^20.0.2" }, "packageManager": "pnpm@7.13.0", "engines": { "node": ">=16" + }, + "dependencies": { + "solid-js": "^1.6.2" } } diff --git a/packages/debugger/package.json b/packages/debugger/package.json index 4a2f7382..1eb95f8a 100644 --- a/packages/debugger/package.json +++ b/packages/debugger/package.json @@ -32,27 +32,37 @@ "module": "./dist/server.js", "types": "./dist/index.d.ts", "exports": { - "browser": { - "development": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" + ".": { + "browser": { + "development": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "import": "./dist/server.js", + "require": "./dist/server.cjs" }, "import": "./dist/server.js", - "require": "./dist/server.cjs" + "require": "./dist/server.cjs", + "types": "./dist/index.d.ts" }, - "import": "./dist/server.js", - "require": "./dist/server.cjs" + "./types": { + "import": "./dist/types.js", + "require": "./dist/types.cjs", + "types": "./dist/types.d.ts" + } + }, + "typesVersions": { + "*": { + "types": [ + "./dist/types.d.ts" + ] + } }, "scripts": { "dev": "tsup --watch", "build": "tsup", "test": "vitest", - "typecheck": "tsc --noEmit" - }, - "devDependencies": { - "solid-js": "^1.6.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4" + "typecheck": "tsc --noEmit --paths null" }, "dependencies": { "@solid-devtools/shared": "workspace:^0.9.2", @@ -62,13 +72,12 @@ "@solid-primitives/event-listener": "^2.2.3", "@solid-primitives/keyboard": "^1.0.3", "@solid-primitives/platform": "^0.0.102", - "@solid-primitives/scheduled": "^1.1.0", + "@solid-primitives/scheduled": "^1.2.0", "@solid-primitives/utils": "^3.1.0", - "object-observer": "^5.1.6", - "type-fest": "^3.1.0" + "type-fest": "^3.2.0" }, "peerDependencies": { - "solid-js": "^1.5.5" + "solid-js": "^1.6.2" }, "optionalDependencies": { "@solid-devtools/transform": "workspace:^0.7.5" diff --git a/packages/debugger/src/index.ts b/packages/debugger/src/index.ts index 16484542..c35d7dcb 100644 --- a/packages/debugger/src/index.ts +++ b/packages/debugger/src/index.ts @@ -1,31 +1,31 @@ import { ParentComponent } from 'solid-js' -import { attachDebugger } from './roots' +import { attachDebugger } from './main/roots' export const Debugger: ParentComponent = props => { attachDebugger() return props.children } -import plugin from './plugin' +import plugin from './main/plugin' export const useDebugger = plugin.useDebugger export const useLocator = plugin.useLocator -export type { BatchComputationUpdatesHandler } from './plugin' +export type { BatchComputationUpdatesHandler } from './main/plugin' -export { attachDebugger, enableRootsAutoattach } from './roots' +export { attachDebugger, enableRootsAutoattach } from './main/roots' export { makeSolidUpdateListener, makeCreateRootListener, - makeStoreObserver, observeComputationUpdate, observeValueUpdate, interceptComputationRerun, makeValueUpdateListener, removeValueUpdateObserver, -} from './update' -export type { AfterCrateRoot, ObjectObserver } from './update' +} from './main/update' +export type { AfterCrateRoot } from './main/update' export { + getOwner, getOwnerType, getNodeType, getNodeName, @@ -34,11 +34,28 @@ export { isSolidMemo, isSolidOwner, isSolidRoot, + isSolidStore, onOwnerCleanup, onParentCleanup, getFunctionSources, createUnownedRoot, createInternalRoot, -} from './utils' +} from './main/utils' -export type { LocatorOptions, TargetIDE, TargetURLFunction } from './locator' +export type { + LocatorOptions, + TargetIDE, + TargetURLFunction, + HighlightElementPayload, +} from './locator' + +export type { + InspectorUpdate, + SetInspectedNodeData, + ToggleInspectedValueData, + ProxyPropsUpdate, + StoreNodeUpdate, + ValueNodeUpdate, +} from './inspector' + +export * from './types' diff --git a/packages/debugger/src/inspect.ts b/packages/debugger/src/inspect.ts deleted file mode 100644 index be65366e..00000000 --- a/packages/debugger/src/inspect.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Mapped, NodeID, Solid, NodeType, ValueUpdateListener } from '@solid-devtools/shared/graph' -import { ElementMap, encodeValue, ValueType } from '@solid-devtools/shared/serialize' -import { $PROXY } from 'solid-js' -import { observeValueUpdate, removeValueUpdateObserver } from './update' -import { - getComponentRefreshNode, - getNodeName, - getNodeType, - isSolidComponent, - isSolidComputation, - isSolidMemo, - markNodeID, - markNodesID, - markOwnerName, - markOwnerType, -} from './utils' - -export type SignalUpdateHandler = (nodeId: NodeID, value: unknown) => void - -// Globals set before collecting the owner details -let $elementMap!: ElementMap -let $signalMap!: Record - -const INSPECTOR = Symbol('inspector') - -function mapSignalNode(node: Solid.Signal, handler: SignalUpdateHandler): Mapped.Signal { - const id = markNodeID(node) - $signalMap[id] = node - observeValueUpdate(node, value => handler(id, value), INSPECTOR) - return { - type: getNodeType(node) as NodeType.Memo | NodeType.Signal, - name: getNodeName(node), - id, - observers: markNodesID(node.observers), - value: encodeValue(node.value, false, $elementMap), - } -} - -export function clearOwnerObservers(owner: Solid.Owner): void { - if (isSolidComputation(owner)) { - removeValueUpdateObserver(owner, INSPECTOR) - } - if (owner.sourceMap) { - for (const node of Object.values(owner.sourceMap)) removeValueUpdateObserver(node, INSPECTOR) - } - if (owner.owned) { - for (const node of owner.owned) removeValueUpdateObserver(node, INSPECTOR) - } -} - -export function encodeComponentProps( - owner: Solid.Owner, - config: { inspectedProps?: Set; elementMap: ElementMap }, -): Mapped.Props | null { - if (!isSolidComponent(owner)) return null - const { elementMap, inspectedProps } = config - const { props } = owner - const proxy = !!(props as any)[$PROXY] - const record = Object.entries(Object.getOwnPropertyDescriptors(props)).reduce( - (record, [key, descriptor]) => { - record[key] = - 'get' in descriptor - ? { type: ValueType.Getter, value: key } - : encodeValue( - descriptor.value, - inspectedProps ? inspectedProps.has(key) : false, - elementMap, - ) - return record - }, - {} as Mapped.Props['record'], - ) - return { proxy, record } -} - -export function collectOwnerDetails( - owner: Solid.Owner, - config: { - onSignalUpdate: SignalUpdateHandler - onValueUpdate: ValueUpdateListener - }, -): { - details: Mapped.OwnerDetails - signalMap: Record - elementMap: ElementMap - getOwnerValue: () => unknown -} { - const { onSignalUpdate, onValueUpdate } = config - - // Set globals - $elementMap = new ElementMap() - $signalMap = {} - - const type = markOwnerType(owner) - let { sourceMap, owned } = owner - let getValue = () => owner.value - - // handle context node specially - if (type === NodeType.Context) { - sourceMap = undefined - owned = null - const symbols = Object.getOwnPropertySymbols(owner.context) - if (symbols.length !== 1) { - console.warn('Context field has more than one symbol. This is not expected.') - getValue = () => undefined - } else { - const contextValue = owner.context[symbols[0]] - getValue = () => contextValue - } - } - - // marge component with refresh memo - let refresh: Solid.Memo | null - if (isSolidComponent(owner) && (refresh = getComponentRefreshNode(owner))) { - sourceMap = refresh.sourceMap - owned = refresh.owned - getValue = () => refresh!.value - } - - // map signals - let signals: Mapped.Signal[] - if (sourceMap) { - const signalNodes = Object.values(sourceMap) - signals = Array(signalNodes.length) - for (let i = 0; i < signalNodes.length; i++) { - signals[i] = mapSignalNode(signalNodes[i], onSignalUpdate) - } - } else signals = [] - - // map memos - if (owned) { - for (const node of owned) { - if (isSolidMemo(node)) signals.push(mapSignalNode(node, onSignalUpdate)) - } - } - - const details: Mapped.OwnerDetails = { - id: markNodeID(owner), - name: markOwnerName(owner), - type: markOwnerType(owner), - signals, - } - - if (isSolidComputation(owner)) { - details.value = encodeValue(getValue(), false, $elementMap) - observeValueUpdate(owner, onValueUpdate, INSPECTOR) - details.sources = markNodesID(owner.sources) - if (isSolidMemo(owner)) { - details.observers = markNodesID(owner.observers) - } - // map component props - const props = encodeComponentProps(owner, { elementMap: $elementMap }) - if (props) details.props = props - } - - return { details, signalMap: $signalMap, elementMap: $elementMap, getOwnerValue: getValue } -} diff --git a/packages/debugger/src/inspector/index.ts b/packages/debugger/src/inspector/index.ts new file mode 100644 index 00000000..12c9546e --- /dev/null +++ b/packages/debugger/src/inspector/index.ts @@ -0,0 +1,193 @@ +import { Accessor, createEffect, onCleanup, untrack } from 'solid-js' +import { throttle, scheduleIdle } from '@solid-primitives/scheduled' +import { warn } from '@solid-devtools/shared/utils' +import { DebuggerEventHub } from '../main/plugin' +import { walkSolidRoot } from '../main/roots' +import { Core, EncodedValue, NodeID, Solid, ValueItemID } from '../main/types' +import { makeSolidUpdateListener } from '../main/update' +import { NodeIDMap, encodeValue } from './serialize' +import { observeStoreNode, StoreUpdateData } from './store' +import { clearOwnerObservers, collectOwnerDetails, ValueNode, ValueNodeMap } from './inspector' + +export type ValueNodeUpdate = { id: ValueItemID; value: EncodedValue } + +export type StoreNodeUpdate = { + valueNodeId: ValueItemID + storeId: NodeID + path: readonly (string | number)[] + property: string | number + /** + * `undefined` - property deleted; + * `EncodedValue` - property updated; + * `number` - array length updated; + */ + value: EncodedValue | undefined | number +} +/** List of new keys — all of the values are getters, so they won't change */ +export type ProxyPropsUpdate = { added: string[]; removed: string[] } +export type InspectorUpdate = + | [type: 'value', update: ValueNodeUpdate] + | [type: 'store', update: StoreNodeUpdate] + | [type: 'props', update: ProxyPropsUpdate] + +export type SetInspectedNodeData = null | { rootId: NodeID; nodeId: NodeID } +export type ToggleInspectedValueData = { id: ValueItemID; selected: boolean } + +/** + * Plugin module + */ +export function createInspector( + debuggerEnabled: Accessor, + { eventHub }: { eventHub: DebuggerEventHub }, +) { + let inspectedOwner: Solid.Owner | null = null + let nodeIdMap = new NodeIDMap() + let valueMap = new ValueNodeMap() + let checkProxyProps: (() => { added: string[]; removed: string[] } | undefined) | undefined + + // Batch and dedupe inspector updates + // these will include updates to signals, stores, props, and node value + const { pushStoreUpdate, pushValueUpdate, triggerPropsCheck, clearUpdates } = (() => { + let valueUpdates = new Set() + let storeUpdates: [valueNodeId: ValueItemID, storeId: NodeID, data: StoreUpdateData][] = [] + let checkProps = false + + const flush = scheduleIdle(() => { + const batchedUpdates: InspectorUpdate[] = [] + + // Value Nodes (signals, props, and node value) + for (const id of valueUpdates) { + const node = valueMap.get(id) + if (!node || !node.getValue) continue + const selected = node.isSelected() + const encoded = encodeValue( + node.getValue(), + selected, + nodeIdMap, + selected && handleStoreNode.bind(null, id, node), + ) + batchedUpdates.push(['value', { id, value: encoded }]) + } + valueUpdates.clear() + + // Stores + for (const [valueNodeId, storeId, data] of storeUpdates) + batchedUpdates.push([ + 'store', + { + valueNodeId, + storeId, + value: + 'length' in data + ? data.length + : data.value === undefined + ? undefined + : encodeValue(data.value, true, nodeIdMap, undefined, true), + path: data.path, + property: data.property, + }, + ]) + storeUpdates = [] + + // Props (top-level key check of proxy props object) + if (checkProps && checkProxyProps) { + const keys = checkProxyProps() + if (keys) batchedUpdates.push(['props', { added: keys.added, removed: keys.removed }]) + checkProps = false + } + + // Emit updates + batchedUpdates.length && eventHub.emit('InspectorUpdate', batchedUpdates) + }) + + const flushPropsCheck = throttle(flush, 200) + + return { + pushValueUpdate(id: ValueItemID) { + valueUpdates.add(id) + flush() + }, + pushStoreUpdate(valueNodeId: ValueItemID, storeId: NodeID, data: StoreUpdateData) { + storeUpdates.push([valueNodeId, storeId, data]) + flush() + }, + triggerPropsCheck() { + checkProps = true + flushPropsCheck() + }, + // since the updates are emitten on timeout, we need to make sure that + // switching off the debugger or unselecting the owner will clear the updates + clearUpdates() { + valueUpdates.clear() + storeUpdates = [] + checkProps = false + flush.clear() + flushPropsCheck.clear() + }, + } + })() + + function handleStoreNode( + valueId: ValueItemID, + valueNode: ValueNode, + storeNodeId: NodeID, + storeNode: Core.Store.StoreNode, + ) { + valueNode.addStoreObserver( + observeStoreNode(storeNode, data => pushStoreUpdate(valueId, storeNodeId, data)), + ) + } + + function setInspectedDetails(owner: Solid.Owner | null) { + inspectedOwner && clearOwnerObservers(inspectedOwner) + inspectedOwner = owner + checkProxyProps = undefined + valueMap.reset() + clearUpdates() + if (!owner) return + + untrack(() => { + const result = collectOwnerDetails(owner, { + onSignalUpdate: id => pushValueUpdate(`signal:${id}`), + onValueUpdate: () => pushValueUpdate('value'), + }) + eventHub.emit('InspectedNodeDetails', result.details) + valueMap = result.valueMap + nodeIdMap = result.nodeIdMap + checkProxyProps = result.checkProxyProps + }) + } + + createEffect(() => { + if (!debuggerEnabled()) return + + // Clear the inspected owner when the debugger is disabled + onCleanup(() => setInspectedDetails(null)) + + makeSolidUpdateListener(() => { + if (checkProxyProps) triggerPropsCheck() + }) + }) + + return { + setInspectedNode(data: { rootId: NodeID; nodeId: NodeID } | null) { + if (!data) return setInspectedDetails(null) + const { rootId, nodeId } = data + + const walkResult = walkSolidRoot(rootId, nodeId) + if (!walkResult || !walkResult.inspectedOwner) return setInspectedDetails(null) + + setInspectedDetails(walkResult.inspectedOwner) + }, + toggleValueNode({ id, selected }: ToggleInspectedValueData): void { + const node = valueMap.get(id) + if (!node) return warn('Could not find value node:', id) + node.setSelected(selected) + pushValueUpdate(id) + }, + getElementById(id: NodeID): HTMLElement | undefined { + const el = nodeIdMap.get(id) + if (el instanceof HTMLElement) return el + }, + } +} diff --git a/packages/debugger/src/inspector/inspector.ts b/packages/debugger/src/inspector/inspector.ts new file mode 100644 index 00000000..ee7aa20f --- /dev/null +++ b/packages/debugger/src/inspector/inspector.ts @@ -0,0 +1,217 @@ +import { $PROXY } from 'solid-js' +import { NodeType, ValueType } from '../types' +import type { Core, Mapped, NodeID, Solid, ValueItemID, ValueUpdateListener } from '../types' +import { observeValueUpdate, removeValueUpdateObserver } from '../main/update' +import { + getComponentRefreshNode, + getDisplayName, + getNodeName, + getNodeType, + getStoreNodeName, + isSolidComponent, + isSolidComputation, + isSolidMemo, + isSolidStore, + markNodeID, + markNodesID, + markOwnerName, + markOwnerType, +} from '../main/utils' +import { NodeIDMap, encodeValue } from './serialize' + +export class ValueNode { + private trackedStores: VoidFunction[] = [] + private selected = false + constructor(public getValue: (() => unknown) | undefined) {} + addStoreObserver(unsub: VoidFunction) { + this.trackedStores.push(unsub) + } + private unsubscribe() { + for (const unsub of this.trackedStores) unsub() + this.trackedStores = [] + } + reset() { + this.unsubscribe() + this.selected = false + } + isSelected() { + return this.selected + } + setSelected(selected: boolean) { + this.selected = selected + if (!selected) this.unsubscribe() + } +} + +export class ValueNodeMap { + private record = {} as Record + get(id: ValueItemID): ValueNode | undefined { + return this.record[id] + } + add(id: ValueItemID, getValue: (() => unknown) | undefined) { + this.record[id] = new ValueNode(getValue) + } + reset() { + for (const signal of Object.values(this.record)) signal.reset() + } +} + +// Globals set before collecting the owner details +let $nodeIdMap!: NodeIDMap +let $valueMap!: ValueNodeMap + +const INSPECTOR = Symbol('inspector') + +function mapSignalNode( + node: Solid.Signal | Solid.Store, + handler: (nodeId: NodeID, value: unknown) => void, +): Mapped.Signal { + const { value } = node + const id = markNodeID(node) + let name: string + $valueMap.add(`signal:${id}`, () => node.value) + + if (isSolidStore(node)) { + name = getDisplayName(getStoreNodeName(value as Core.Store.StoreNode)) + } else { + name = getNodeName(node) + observeValueUpdate(node, v => handler(id, v), INSPECTOR) + } + + return { + type: getNodeType(node) as NodeType.Memo | NodeType.Signal | NodeType.Store, + name, + id, + value: encodeValue(value, false, $nodeIdMap), + } +} + +export function clearOwnerObservers(owner: Solid.Owner): void { + if (isSolidComputation(owner)) { + removeValueUpdateObserver(owner, INSPECTOR) + } + if (owner.sourceMap) { + for (const node of Object.values(owner.sourceMap)) removeValueUpdateObserver(node, INSPECTOR) + } + if (owner.owned) { + for (const node of owner.owned) removeValueUpdateObserver(node, INSPECTOR) + } +} + +export function collectOwnerDetails( + owner: Solid.Owner, + config: { + onSignalUpdate: (nodeId: NodeID, value: unknown) => void + onValueUpdate: ValueUpdateListener + }, +) { + const { onSignalUpdate, onValueUpdate } = config + + // Set globals + $nodeIdMap = new NodeIDMap() + $valueMap = new ValueNodeMap() + + const type = markOwnerType(owner) + let { sourceMap, owned } = owner + let getValue = () => owner.value + + // handle context node specially + if (type === NodeType.Context) { + sourceMap = undefined + owned = null + const symbols = Object.getOwnPropertySymbols(owner.context) + if (symbols.length !== 1) { + throw new Error('Context field has more than one symbol. This is not expected.') + } else { + const contextValue = owner.context[symbols[0]] + getValue = () => contextValue + } + } + + // marge component with refresh memo + let refresh: Solid.Memo | null + if (isSolidComponent(owner) && (refresh = getComponentRefreshNode(owner))) { + sourceMap = refresh.sourceMap + owned = refresh.owned + getValue = () => refresh!.value + } + + // map signals + let signals: Mapped.Signal[] + if (sourceMap) { + const signalNodes = Object.values(sourceMap) + signals = Array(signalNodes.length) + for (let i = 0; i < signalNodes.length; i++) { + signals[i] = mapSignalNode(signalNodes[i], onSignalUpdate) + } + } else signals = [] + + // map memos + if (owned) { + for (const node of owned) { + if (isSolidMemo(node)) signals.push(mapSignalNode(node, onSignalUpdate)) + } + } + + const details: Mapped.OwnerDetails = { + id: markNodeID(owner), + name: markOwnerName(owner), + type: markOwnerType(owner), + signals, + } + + let checkProxyProps: (() => { added: string[]; removed: string[] } | undefined) | undefined + + if (isSolidComputation(owner)) { + details.value = encodeValue(getValue(), false, $nodeIdMap) + observeValueUpdate(owner, onValueUpdate, INSPECTOR) + details.sources = markNodesID(owner.sources) + + // Component Props + if (isSolidComponent(owner)) { + const { props } = owner + // proxy props need to be checked for changes + const proxy = !!(props as any)[$PROXY] + const record: Mapped.Props['record'] = {} + for (const [key, desc] of Object.entries(Object.getOwnPropertyDescriptors(props))) { + if (desc.get) { + record[key] = { type: ValueType.Getter, value: key } + } else { + record[key] = encodeValue(desc.value, false, $nodeIdMap) + // non-object props cannot be inspected (won't ever change and aren't deep) + desc.value instanceof Object && $valueMap.add(`prop:${key}`, () => desc.value) + } + } + details.props = { proxy, record } + + if (proxy) { + let oldKeys: readonly string[] = Object.keys(record) + checkProxyProps = () => { + const newKeys = Object.keys(props) + const added = new Set(newKeys) + const removed: string[] = [] + let changed = false + for (const key of oldKeys) { + if (added.has(key)) added.delete(key) + else { + changed = true + removed.push(key) + } + } + if (!changed && !added.size) return + oldKeys = newKeys + return { added: Array.from(added), removed } + } + } + } + } + + $valueMap.add('value', getValue) + + return { + details, + valueMap: $valueMap, + nodeIdMap: $nodeIdMap, + checkProxyProps, + } +} diff --git a/packages/debugger/src/inspector/serialize.ts b/packages/debugger/src/inspector/serialize.ts new file mode 100644 index 00000000..62f46889 --- /dev/null +++ b/packages/debugger/src/inspector/serialize.ts @@ -0,0 +1,121 @@ +import { unwrap } from 'solid-js/store' +import { + Core, + EncodedValue, + EncodedValueOf, + NodeID, + INFINITY, + NAN, + NEGATIVE_INFINITY, + ValueType, +} from '../types' +import { isStoreNode } from '../main/utils' + +/** + * Encodes any value to a JSON-serializable object. + * @param value + * @param deep shallow, or deep encoding + * @param nodeMap for HTML elements and store nodes, to assign a unique ID to each element + * @param handleStore handle encountered store nodes + * @returns encoded value + */ +export function encodeValue( + value: unknown, + deep: Deep, + nodeMap: NodeIDMap, + handleStore?: + | false + | undefined + | ((storeNodeId: NodeID, storeNode: Core.Store.StoreNode) => void), + inStore = false, +): EncodedValue { + if (typeof value === 'number') { + if (value === Infinity) return { type: ValueType.Number, value: INFINITY } + if (value === -Infinity) return { type: ValueType.Number, value: NEGATIVE_INFINITY } + if (Number.isNaN(value)) return { type: ValueType.Number, value: NAN } + return { type: ValueType.Number, value } + } + if (typeof value === 'boolean') return { type: ValueType.Boolean, value } + if (typeof value === 'string') return { type: ValueType.String, value } + if (value === null) return { type: ValueType.Null } + if (value === undefined) return { type: ValueType.Undefined } + if (typeof value === 'symbol') return { type: ValueType.Symbol, value: value.description ?? '' } + if (typeof value === 'function') return { type: ValueType.Function, value: value.name } + + if (value instanceof HTMLElement) + return { + type: ValueType.Element, + value: { name: value.tagName, id: nodeMap.set(value) }, + } + + if (!inStore && isStoreNode(value)) { + // might still pass in a proxy + const node = unwrap(value) + const id = nodeMap.set(node) + handleStore && handleStore(id, node) + return { + type: ValueType.Store, + value: { + value: encodeValue(node, deep, nodeMap, undefined, true) as EncodedValue, + id, + }, + } + } + + if (Array.isArray(value)) { + const payload = { + type: ValueType.Array, + value: value.length, + } as EncodedValueOf + if (deep) + (payload as EncodedValueOf).children = value.map(item => + encodeValue(item, true, nodeMap, handleStore, inStore), + ) + return payload + } + + const s = Object.prototype.toString.call(value) + const name = s.slice(8, -1) + if (name === 'Object') { + const obj = value as Record + const payload: EncodedValueOf = { + type: ValueType.Object, + value: Object.keys(obj).length, + } + if (deep) { + const children = ((payload as unknown as EncodedValueOf).children = + {} as Record>) + for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) { + children[key] = descriptor.get + ? { type: ValueType.Getter, value: key } + : encodeValue(descriptor.value, true, nodeMap, handleStore, inStore) + } + } + return payload + } + + return { type: ValueType.Instance, value: name } +} + +let lastId = 0 + +export class NodeIDMap { + private obj: Record = {} + private map: WeakMap = new WeakMap() + + get(id: NodeID): T | undefined { + return this.obj[id] + } + getId(element: T): NodeID | undefined { + return this.map.get(element) + } + + set(element: T): NodeID { + let id = this.map.get(element) + if (id !== undefined) return id + id = (lastId++).toString(36) + this.obj[id] = element + this.map.set(element, id) + return id + } +} diff --git a/packages/debugger/src/inspector/store.ts b/packages/debugger/src/inspector/store.ts new file mode 100644 index 00000000..ec7364a2 --- /dev/null +++ b/packages/debugger/src/inspector/store.ts @@ -0,0 +1,108 @@ +import { untrack } from 'solid-js' +import { DEV as STORE_DEV, unwrap } from 'solid-js/store' +import type { Core, Solid } from '../types' + +// +// GLOBALS +// + +const DEV = STORE_DEV! + +const $listeners = new WeakMap() + +// path solid global dev hook +globalThis._$onStoreNodeUpdate = (node, property, value, prev) => { + const listeners = $listeners.get(node) + if (listeners) for (const fn of listeners) fn(node, property, value, prev) +} + +// +// + +export type StoreUpdateData = { path: readonly (string | number)[]; property: string | number } & ( + | { value: unknown } + | { length: number } +) +export type StoreUpdateHandler = (data: StoreUpdateData) => void + +function forEachStoreProp( + node: Core.Store.StoreNode, + fn: (key: string, node: Core.Store.StoreNode) => void, +): void { + if (Array.isArray(node)) { + for (let i = 0; i < node.length; i++) { + const child = node[i] + DEV.isWrappable(child) && fn(i.toString(), child) + } + } else { + for (const key in node) { + const { value, get } = Object.getOwnPropertyDescriptor(node, key)! + if (!get && DEV.isWrappable(value)) fn(key, value) + } + } +} + +function matchHandler( + { storePath, storeSymbol }: Solid.OnStoreNodeUpdate, + symbol: symbol, + path: readonly (string | number)[], +) { + if (storeSymbol !== symbol || storePath.length !== path.length) return false + if (storePath == path) return true + for (let i = 0; i < storePath.length; i++) { + // loose equality is intentional — we want to match numbers and strings as they access the same property + if (storePath[i] != path[i]) return false + } + return true +} + +export function observeStoreNode( + rootNode: Core.Store.StoreNode, + onUpdate: StoreUpdateHandler, +): VoidFunction { + // might still pass in a proxy + rootNode = unwrap(rootNode) + + const symbol = Symbol('inspect-store') + + return untrack(() => { + trackStore(rootNode, []) + return () => untrackStore(rootNode, []) + }) + + function trackStore(node: Core.Store.StoreNode, path: readonly (string | number)[]): void { + const handlers = $listeners.get(node) + if (handlers && handlers.some(fn => matchHandler(fn, symbol, path))) return + + const handler: Solid.OnStoreNodeUpdate = ((_, property, value, prev) => { + if (typeof property === 'symbol') return + const propertyPath = [...path, property] as const + untrack(() => { + if (property === 'length' && typeof value === 'number' && Array.isArray(node)) { + // Update array length + onUpdate({ path, property, length: value }) + } else { + if (DEV.isWrappable(prev)) untrackStore(prev as Core.Store.StoreNode, propertyPath) + if (DEV.isWrappable(value)) trackStore(value as Core.Store.StoreNode, propertyPath) + onUpdate({ path, property, value }) + } + }) + }) as Solid.OnStoreNodeUpdate + handler.storePath = path + handler.storeSymbol = symbol + handlers ? handlers.push(handler) : $listeners.set(node, [handler]) + forEachStoreProp(node, (property, child) => trackStore(child, [...path, property])) + } + + function untrackStore(node: Core.Store.StoreNode, path: readonly (string | number)[]) { + const handlers = $listeners.get(node) + if (!handlers) return + const r = handlers.splice( + handlers.findIndex(h => matchHandler(h, symbol, path)), + 1, + ) + if (handlers.length === 0) $listeners.delete(node) + if (r.length) + forEachStoreProp(node, (property, child) => untrackStore(child, [...path, property])) + } +} diff --git a/packages/debugger/test/inspect.test.tsx b/packages/debugger/src/inspector/test/index.test.tsx similarity index 62% rename from packages/debugger/test/inspect.test.tsx rename to packages/debugger/src/inspector/test/index.test.tsx index 7284d6b3..e98e1385 100644 --- a/packages/debugger/test/inspect.test.tsx +++ b/packages/debugger/src/inspector/test/index.test.tsx @@ -1,6 +1,4 @@ import { describe, beforeEach, vi, it, expect } from 'vitest' -import { getOwner, NodeType, Solid } from '@solid-devtools/shared/graph' -import { ValueType } from '@solid-devtools/shared/serialize' import { createComputed, createMemo, @@ -9,10 +7,10 @@ import { createSignal, JSX, } from 'solid-js' -import type * as API from '../src/inspect' +import { NodeType, Solid, ValueType } from '../../types' +import { getOwner } from '../../main/utils' -const getModule = async (): Promise => - (await import('../src/inspect')).collectOwnerDetails +const getInspectModule = async () => await import('../inspector') describe('collectOwnerDetails', () => { beforeEach(() => { @@ -21,7 +19,7 @@ describe('collectOwnerDetails', () => { }) it('collects focused owner details', async () => { - const collectOwnerDetails = await getModule() + const { collectOwnerDetails } = await getInspectModule() createRoot(dispose => { const [s] = createSignal(0, { name: 'source' }) @@ -50,7 +48,7 @@ describe('collectOwnerDetails', () => { { name: 'WRAPPER' }, ) - const { details, signalMap, elementMap } = collectOwnerDetails(owner, { + const { details, valueMap, nodeIdMap } = collectOwnerDetails(owner, { onSignalUpdate: () => {}, onValueUpdate: () => {}, }) @@ -60,39 +58,34 @@ describe('collectOwnerDetails', () => { name: 'focused', type: NodeType.Memo, value: { type: ValueType.String, value: 'value' }, - sources: ['3'], - observers: ['4'], + sources: ['2'], signals: [ { type: NodeType.Signal, id: '0', name: 'element', - observers: [], value: { type: ValueType.Element, value: { name: 'DIV', id: '0' } }, }, { type: NodeType.Memo, id: '1', name: 'memo', - observers: ['2'], value: { type: ValueType.Number, value: 0 }, }, ], }) - expect(signalMap).toHaveProperty('0') - expect(signalMap).toHaveProperty('1') - expect(signalMap['0'].sdtId).toBe('0') - expect(signalMap['1'].sdtId).toBe('1') + expect(valueMap.get('signal:0')).toBeTruthy() + expect(valueMap.get('signal:1')).toBeTruthy() - expect(elementMap.get('0')).toBe(div) + expect(nodeIdMap.get('0')).toBe(div) dispose() }) }) it('component props', async () => { - const collectOwnerDetails = await getModule() + const { collectOwnerDetails } = await getInspectModule() createRoot(dispose => { let owner!: Solid.Owner @@ -110,7 +103,7 @@ describe('collectOwnerDetails', () => { )) - const { details, elementMap } = collectOwnerDetails(owner, { + const { details, nodeIdMap } = collectOwnerDetails(owner, { onSignalUpdate: () => {}, onValueUpdate: () => {}, }) @@ -123,7 +116,7 @@ describe('collectOwnerDetails', () => { type: NodeType.Component, signals: [], sources: [], - value: { type: ValueType.Element, value: { id: '1', name: 'DIV' } }, + value: { type: ValueType.Element, value: { id: '0', name: 'DIV' } }, props: { proxy: false, record: { @@ -134,12 +127,12 @@ describe('collectOwnerDetails', () => { }, }) - expect(elementMap.get('1')).toBeInstanceOf(HTMLDivElement) + expect(nodeIdMap.get('0')).toBeInstanceOf(HTMLDivElement) }) }) it('dynamic component props', async () => { - const collectOwnerDetails = await getModule() + const { collectOwnerDetails } = await getInspectModule() createRoot(dispose => { let owner!: Solid.Owner @@ -152,7 +145,7 @@ describe('collectOwnerDetails', () => { return - // - // )) - - // const { details, elementMap } = collectOwnerDetails(owner, { - // elementMap, - // inspectedProps: new Set(["nested"]), - // onSignalUpdate: () => {}, - // }) - - // dispose() - - // expect(details).toEqual({ - // id: "0", - // name: "TestComponent", - // type: NodeType.Component, - // signals: [], - // sources: [], - // value: { type: ValueType.Element, value: { id: "0", name: "DIV" } }, - // props: { - // proxy: false, - // record: { - // count: { type: ValueType.Number, value: 123 }, - // children: { type: ValueType.Getter, value: "children" }, - // nested: { - // type: ValueType.Object, - // value: 2, - // children: { - // foo: { type: ValueType.Number, value: 1 }, - // bar: { type: ValueType.String, value: "2" }, - // }, - // }, - // }, - // }, - // }) - - // expect(elementMap.get("0")).toBeInstanceOf(HTMLDivElement) - // }) - // }) - it('listens to value updates', async () => { - const collectOwnerDetails = await getModule() + const { collectOwnerDetails } = await getInspectModule() createRoot(dispose => { let owner!: Solid.Owner @@ -273,7 +208,7 @@ describe('collectOwnerDetails', () => { }) it('listens to signal updates', async () => { - const collectOwnerDetails = await getModule() + const { collectOwnerDetails } = await getInspectModule() createRoot(dispose => { let owner = getOwner()! diff --git a/packages/shared/test/serialise.test.ts b/packages/debugger/src/inspector/test/serialise.test.ts similarity index 86% rename from packages/shared/test/serialise.test.ts rename to packages/debugger/src/inspector/test/serialise.test.ts index 82a3ca0d..9637babe 100644 --- a/packages/shared/test/serialise.test.ts +++ b/packages/debugger/src/inspector/test/serialise.test.ts @@ -1,13 +1,7 @@ -import { describe, test, expect } from 'vitest' -import { - ValueType, - INFINITY, - NEGATIVE_INFINITY, - NAN, - encodeValue, - EncodedValue, - ElementMap, -} from '../src/serialize' +import { describe, test, expect, vi } from 'vitest' +import { EncodedValue, INFINITY, NAN, NEGATIVE_INFINITY, ValueType } from '../../types' + +const getModule = async () => await import('../serialize') const _testFunction = () => {} @@ -29,9 +23,13 @@ const encodePreviewExpectations: [string, unknown, EncodedValue][] = [ [ 'Element div', document.createElement('div'), - { type: ValueType.Element, value: { name: 'DIV' } }, + { type: ValueType.Element, value: { name: 'DIV', id: '0' } }, + ], + [ + 'Element a', + document.createElement('a'), + { type: ValueType.Element, value: { name: 'A', id: '1' } }, ], - ['Element a', document.createElement('a'), { type: ValueType.Element, value: { name: 'A' } }], ['Array empty', [], { type: ValueType.Array, value: 0 }], ['Array', [1, 2, 3], { type: ValueType.Array, value: 3 }], ['Object empty', {}, { type: ValueType.Object, value: 0 }], @@ -43,10 +41,13 @@ const encodePreviewExpectations: [string, unknown, EncodedValue][] = [ ['Set', new Set(), { type: ValueType.Instance, value: 'Set' }], ] -describe('encodeValue Preview', () => { +describe('encodeValue Preview', async () => { + vi.resetModules() + const { encodeValue, NodeIDMap } = await getModule() + for (const [testName, value, expectation] of encodePreviewExpectations) { test(testName, () => { - const s = encodeValue(value, false) + const s = encodeValue(value, false, new NodeIDMap()) expect(s).toEqual(expectation) expect(JSON.parse(JSON.stringify(s))).toEqual(s) }) @@ -157,17 +158,23 @@ const encodeDeepExpectations: [string, unknown, EncodedValue][] = [ ], ] -describe('encodeValue Deep', () => { +describe('encodeValue Deep', async () => { + vi.resetModules() + const { encodeValue, NodeIDMap } = await getModule() + for (const [testName, value, expectation] of encodeDeepExpectations) { test(testName, () => { - const s = encodeValue(value, true) + const s = encodeValue(value, true, new NodeIDMap()) expect(s).toEqual(expectation) expect(JSON.parse(JSON.stringify(s))).toEqual(s) }) } }) -describe('save elements to a map', () => { +describe('save elements to a map', async () => { + vi.resetModules() + const { encodeValue, NodeIDMap } = await getModule() + const div1 = document.createElement('div') const a1 = document.createElement('a') const div2 = document.createElement('div') @@ -186,7 +193,7 @@ describe('save elements to a map', () => { ], ] - const map = new ElementMap() + const map = new NodeIDMap() for (const [testName, value, expectation] of elMapExpectations) { test(testName, () => { const s = encodeValue(value, true, map) diff --git a/packages/debugger/src/inspector/test/store.test.ts b/packages/debugger/src/inspector/test/store.test.ts new file mode 100644 index 00000000..628b9710 --- /dev/null +++ b/packages/debugger/src/inspector/test/store.test.ts @@ -0,0 +1,262 @@ +import { describe, vi, it, expect } from 'vitest' +import { createRoot } from 'solid-js' +import { + createMutable, + createStore, + produce, + reconcile, + unwrap, + modifyMutable, +} from 'solid-js/store' +import { Solid } from '../../types' +import { observeStoreNode, StoreUpdateHandler } from '../store' +import { getOwner, isSolidStore } from '../../main/utils' + +const getOwnerStore = () => + (Object.values(getOwner()!.sourceMap!).find(s => isSolidStore(s))! as Solid.Store).value + +describe('observeStoreNode', () => { + it('listens to simple store updates', () => { + createRoot(dispose => { + const [state, setState] = createStore({ count: 0 }) + const store = getOwnerStore() + const cb = vi.fn, void>() + const unsub = observeStoreNode(store, cb) + expect(cb).not.toBeCalled() + + setState({ count: 1 }) + expect(cb).toBeCalledTimes(1) + let args: Parameters[0] = { + path: [], + property: 'count', + value: 1, + } + expect(cb).toBeCalledWith(args) + + setState('count', 2) + expect(cb).toBeCalledTimes(2) + args = { + path: [], + property: 'count', + value: 2, + } + expect(cb).toBeCalledWith(args) + + setState(reconcile({})) + expect(cb).toBeCalledTimes(3) + args = { + path: [], + property: 'count', + value: undefined, + } + expect(cb).toBeCalledWith(args) + + setState({ a: { foo: 123, bar: [1, 2, 3] }, b: 'hello' }) + expect(cb).toBeCalledTimes(5) + args = { + path: [], + property: 'a', + value: unwrap(state.a), + } + expect(cb).toHaveBeenNthCalledWith(4, args) + args = { + path: [], + property: 'b', + value: 'hello', + } + expect(cb).toHaveBeenNthCalledWith(5, args) + + setState(produce((proxy: any) => delete proxy.a.foo)) + expect(cb).toBeCalledTimes(6) + args = { + path: ['a'], + property: 'foo', + value: undefined, + } + expect(cb).toBeCalledWith(args) + + setState(produce((proxy: any) => proxy.a.bar.push(4))) + expect(cb).toBeCalledTimes(7) + args = { + path: ['a', 'bar'], + property: '3', + value: 4, + } + expect(cb).toBeCalledWith(args) + + unsub() + setState({ count: 3 }) + expect(cb).toBeCalledTimes(7) + + dispose() + }) + }) + + it('listens to mutable', () => { + createRoot(dispose => { + const state = createMutable({ count: 0 }) + const store = getOwnerStore() + const cb = vi.fn, void>() + const unsub = observeStoreNode(store, cb) + expect(cb).not.toBeCalled() + + state.count = 1 + expect(cb).toBeCalledTimes(1) + let args: Parameters[0] = { + path: [], + property: 'count', + value: 1, + } + expect(cb).toBeCalledWith(args) + + modifyMutable(state, reconcile({})) + expect(cb).toBeCalledTimes(2) + args = { + path: [], + property: 'count', + value: undefined, + } + expect(cb).toBeCalledWith(args) + + state.a = { foo: 123, bar: [1, 2, 3] } + expect(cb).toBeCalledTimes(3) + args = { + path: [], + property: 'a', + value: unwrap(state.a), + } + expect(cb).toBeCalledWith(args) + + delete state.a.foo + expect(cb).toBeCalledTimes(4) + args = { + path: ['a'], + property: 'foo', + value: undefined, + } + expect(cb).toBeCalledWith(args) + + state.a.bar.push(4) + expect(cb).toBeCalledTimes(5) + args = { + path: ['a', 'bar'], + property: '3', + value: 4, + } + expect(cb).toBeCalledWith(args) + + unsub() + state.count = 3 + expect(cb).toBeCalledTimes(5) + + dispose() + }) + }) + + it('ignores updates to removed object', () => { + createRoot(dispose => { + const state = createMutable({ a: { foo: 123, bar: [1, 2, 3] } }) + const store = getOwnerStore() + const cb = vi.fn, void>() + const unsub = observeStoreNode(store, cb) + + const detached = state.a.bar + + const a1 = (state.a = { other: 'hello' }) + let args: Parameters[0] = { + path: [], + property: 'a', + value: a1, + } + expect(cb).toBeCalledTimes(1) + expect(cb).toBeCalledWith(args) + + detached.push(4) + expect(cb).toBeCalledTimes(1) + + state.a.bar = detached + args = { + path: ['a'], + property: 'bar', + value: detached, + } + expect(cb).toBeCalledTimes(2) + expect(cb).toBeCalledWith(args) + + delete state.a.bar + args = { + path: ['a'], + property: 'bar', + value: undefined, + } + expect(cb).toBeCalledTimes(3) + expect(cb).toBeCalledWith(args) + + detached.push(5) + expect(cb).toBeCalledTimes(3) + + unsub() + state.a.baz = "I'm back!" + expect(cb).toBeCalledTimes(3) + + dispose() + }) + }) + + it('handles multiple inspected nodes', () => { + createRoot(dispose => { + const state = createMutable({ a: { foo: 123, bar: [1, 2, 3] } }) + const rootCb = vi.fn() + const unsubRoot = observeStoreNode(getOwnerStore(), rootCb) + + const cb = vi.fn() + const unsubBranch = observeStoreNode(unwrap(state.a.bar), cb) + + state.a.bar.push(4) + let args: Parameters[0] = { + path: ['a', 'bar'], + property: '3', + value: 4, + } + expect(rootCb).toBeCalledTimes(1) + expect(rootCb).toBeCalledWith(args) + args = { + path: [], + property: '3', + value: 4, + } + expect(cb).toBeCalledTimes(1) + expect(cb).toBeCalledWith(args) + + const arr = state.a.bar + delete state.a.bar + args = { + path: ['a'], + property: 'bar', + value: undefined, + } + expect(rootCb).toBeCalledTimes(2) + expect(rootCb).toBeCalledWith(args) + expect(cb).toBeCalledTimes(1) + + arr.push(5) + expect(rootCb).toBeCalledTimes(2) + args = { + path: [], + property: '4', + value: 5, + } + expect(cb).toBeCalledTimes(2) + expect(cb).toBeCalledWith(args) + + unsubBranch() + arr.push(6) + unsubRoot() + state.baz = 'hello' + expect(rootCb).toBeCalledTimes(2) + expect(cb).toBeCalledTimes(2) + + dispose() + }) + }) +}) diff --git a/packages/debugger/src/locator/findComponent.ts b/packages/debugger/src/locator/findComponent.ts index 4534cf9f..bae5295b 100644 --- a/packages/debugger/src/locator/findComponent.ts +++ b/packages/debugger/src/locator/findComponent.ts @@ -1,6 +1,6 @@ -import { Mapped, NodeID } from '@solid-devtools/shared/graph' import { LOCATION_ATTRIBUTE_NAME } from '@solid-devtools/shared/variables' import { isWindows } from '@solid-primitives/platform' +import { Mapped, NodeID } from '../types' import { ElementLocation } from './goToSource' export type LocatorComponent = { diff --git a/packages/debugger/src/locator/index.ts b/packages/debugger/src/locator/index.ts index fcb291dc..199bd7f7 100644 --- a/packages/debugger/src/locator/index.ts +++ b/packages/debugger/src/locator/index.ts @@ -4,7 +4,7 @@ import { createKeyHold, KbdKey } from '@solid-primitives/keyboard' import { onRootCleanup } from '@solid-primitives/utils' import { createSimpleEmitter } from '@solid-primitives/event-bus' import { atom, defer, makeHoverElementListener } from '@solid-devtools/shared/primitives' -import { Mapped, NodeID } from '@solid-devtools/shared/graph' +import { warn } from '@solid-devtools/shared/utils' import { findLocatorComponent, getLocationFromElement, LocatorComponent } from './findComponent' import { getFullSourceCodeData, @@ -13,9 +13,10 @@ import { TargetIDE, TargetURLFunction, } from './goToSource' -import { createInternalRoot } from '../utils' -import { enableRootsAutoattach } from '../roots' +import { createInternalRoot } from '../main/utils' +import { enableRootsAutoattach } from '../main/roots' import { attachElementOverlay } from './ElementOverlay' +import { Mapped, NodeID } from '../types' export type { TargetIDE, TargetURLFunction } from './goToSource' export type { LocatorComponent } from './findComponent' @@ -27,6 +28,11 @@ export type LocatorOptions = { key?: KbdKey } +export type HighlightElementPayload = + | { rootId: NodeID; nodeId: NodeID } + | { elementId: string } + | null + export type ClickMiddleware = ( e: MouseEvent, component: LocatorComponent, @@ -105,21 +111,19 @@ export function createLocator({ return comp?.id }) - function setPluginHighlightTarget( - data: { elementId: NodeID } | { rootId: NodeID; nodeId: NodeID } | null | undefined, - ) { + function setPluginHighlightTarget(data: HighlightElementPayload) { if (!data) return pluginTarget(null) // highlight component if ('nodeId' in data) { const { rootId, nodeId } = data const component = findComponent(rootId, nodeId) - if (!component) return console.warn('No component found', nodeId) + if (!component) return warn('No component found', nodeId) pluginTarget({ ...component, rootId }) } // highlight element else { const element = getElementById(data.elementId) - if (!element) return console.warn('No element found', data) + if (!element) return warn('No element found', data) pluginTarget(element) } } @@ -185,7 +189,7 @@ export function createLocator({ function useLocator(options: LocatorOptions): void { runWithOwner(owner, () => { enableRootsAutoattach() - if (locatorUsed) return console.warn('useLocator can be used called once.') + if (locatorUsed) return warn('useLocator can be used called once.') locatorUsed = true if (options.targetIDE) targetIDE = options.targetIDE const isHoldingKey = createKeyHold(options.key ?? 'Alt', { preventDefault: true }) diff --git a/packages/debugger/test/locator.test.ts b/packages/debugger/src/locator/test/index.test.ts similarity index 89% rename from packages/debugger/test/locator.test.ts rename to packages/debugger/src/locator/test/index.test.ts index 4ebb9238..0bbf9e85 100644 --- a/packages/debugger/test/locator.test.ts +++ b/packages/debugger/src/locator/test/index.test.ts @@ -8,8 +8,7 @@ vi.mock('@solid-primitives/platform', () => ({ }, })) -const fetchFunction = async () => - (await import('../src/locator/findComponent')).getLocationFromAttribute +const fetchFunction = async () => (await import('../findComponent')).getLocationFromAttribute describe('locator attribute pasting', () => { beforeEach(() => { diff --git a/packages/debugger/src/main/constants.ts b/packages/debugger/src/main/constants.ts new file mode 100644 index 00000000..27424003 --- /dev/null +++ b/packages/debugger/src/main/constants.ts @@ -0,0 +1,32 @@ +export const INFINITY = '__$sdt-Infinity__' +export const NEGATIVE_INFINITY = '__$sdt-NegativeInfinity__' +export const NAN = '__$sdt-NaN__' + +export enum NodeType { + Root, + Component, + Effect, + Render, + Memo, + Computation, + Refresh, + Context, + Signal, + Store, +} + +export enum ValueType { + Number, + Boolean, + String, + Null, + Undefined, + Symbol, + Array, + Object, + Function, + Getter, + Element, + Instance, + Store, +} diff --git a/packages/debugger/src/main/plugin.ts b/packages/debugger/src/main/plugin.ts new file mode 100644 index 00000000..568f6f1b --- /dev/null +++ b/packages/debugger/src/main/plugin.ts @@ -0,0 +1,178 @@ +import { Accessor, batch, createMemo, createSignal } from 'solid-js' +import { + createEventHub, + createSimpleEmitter, + EventBus, + EventHub, +} from '@solid-primitives/event-bus' +import { throttle } from '@solid-primitives/scheduled' +import { atom } from '@solid-devtools/shared/primitives' +import { createBatchedUpdateEmitter, createInternalRoot } from './utils' +import { ComputationUpdateHandler } from './walker' +import { createLocator } from '../locator' +import { createInspector, InspectorUpdate } from '../inspector' +import { ComputationUpdate, Mapped, NodeID, RootsUpdates } from './types' + +export type BatchComputationUpdatesHandler = (payload: ComputationUpdate[]) => void + +type DebuggerEventHubMessages = { + ComputationUpdates: ComputationUpdate[] + StructureUpdates: RootsUpdates + InspectorUpdate: InspectorUpdate[] + InspectedNodeDetails: Mapped.OwnerDetails +} +export type DebuggerEventHub = EventHub<{ + [K in keyof DebuggerEventHubMessages]: EventBus +}> + +export default createInternalRoot(() => { + /** throttled global update */ + const [onUpdate, triggerUpdate] = createSimpleEmitter() + /** forced — immediate global update */ + const [onForceUpdate, forceTriggerUpdate] = createSimpleEmitter() + + const eventHub: DebuggerEventHub = createEventHub(bus => ({ + ComputationUpdates: bus(), + StructureUpdates: bus(), + InspectorUpdate: bus(), + InspectedNodeDetails: bus(), + })) + + // + // Debugger Enabled + // + const [debuggerEnabled, toggleDebugger, addLocatorModeEnabledSignal] = (() => { + const locatorModeEnabledSignal = atom>() + const debuggerEnabled = atom(false) + const combinedEnabled = createMemo(() => debuggerEnabled() || !!locatorModeEnabledSignal()?.()) + + function toggleDebugger(state?: boolean) { + batch(() => { + const newState = debuggerEnabled(p => state ?? !p) + if (!newState) { + setComponents({}) + locator.togglePluginLocatorMode(false) + } + }) + } + + function addLocatorModeEnabledSignal(signal: Accessor) { + locatorModeEnabledSignal(() => signal) + } + + return [combinedEnabled, toggleDebugger, addLocatorModeEnabledSignal] + })() + + // + // Components: + // + const [components, setComponents] = createSignal>({}) + + function findComponent(rootId: NodeID, nodeId: NodeID) { + const componentsList = components()[rootId] as Mapped.ResolvedComponent[] | undefined + if (!componentsList) return + for (const c of componentsList) { + if (c.id === nodeId) return c + } + } + + function removeRoot(rootId: NodeID) { + setComponents(prev => { + const copy = Object.assign({}, prev) + delete copy[rootId] + return copy + }) + pushStructureUpdate({ removed: rootId }) + } + function updateRoot(newRoot: Mapped.Root, newComponents: Mapped.ResolvedComponent[]): void { + setComponents(prev => Object.assign(prev, { [newRoot.id]: newComponents })) + pushStructureUpdate({ updated: newRoot }) + } + + // + // Structure updates: + // + const pushStructureUpdate = (() => { + const updates: Mapped.Root[] = [] + const removedIds = new Set() + const trigger = throttle(() => { + const updated: Record = {} + for (let i = updates.length - 1; i >= 0; i--) { + const update = updates[i] + const { id } = update + if (!removedIds.has(id) && !updated[id]) updated[id] = update + } + eventHub.emit('StructureUpdates', { updated, removed: [...removedIds] }) + updates.length = 0 + removedIds.clear() + }, 50) + const pushStructureUpdate = (update: { removed: NodeID } | { updated: Mapped.Root }) => { + if ('removed' in update) removedIds.add(update.removed) + else if (removedIds.has(update.updated.id)) return + else updates.push(update.updated) + trigger() + } + return pushStructureUpdate + })() + + // + // Computation updates: + // + const _pushComputationUpdate = createBatchedUpdateEmitter(updates => { + eventHub.emit('ComputationUpdates', updates) + }) + const pushComputationUpdate: ComputationUpdateHandler = (rootId, id) => { + _pushComputationUpdate({ rootId, id }) + } + + // + // Inspected Owner details: + // + const inspector = createInspector(debuggerEnabled, { eventHub }) + + // + // Locator + // + const locator = createLocator({ + components, + debuggerEnabled, + findComponent, + getElementById: inspector.getElementById, + addLocatorModeEnabledSignal, + }) + + /** + * Used for connecting debugger to devtools + */ + function useDebugger() { + return { + listenTo: eventHub.on, + enabled: debuggerEnabled, + toggleEnabled: toggleDebugger, + triggerUpdate, + forceTriggerUpdate, + inspector: { + setInspectedNode: inspector.setInspectedNode, + toggleValueNode: inspector.toggleValueNode, + }, + locator: { + toggleEnabled: locator.togglePluginLocatorMode, + enabledByDebugger: locator.enabledByDebugger, + addClickInterceptor: locator.addClickInterceptor, + setHighlightTarget: locator.setPluginHighlightTarget, + onHoveredComponent: locator.onDebuggerHoveredComponentChange, + }, + } + } + + return { + onUpdate, + onForceUpdate, + enabled: debuggerEnabled, + useDebugger, + updateRoot, + removeRoot, + pushComputationUpdate, + useLocator: locator.useLocator, + } +}) diff --git a/packages/debugger/src/roots.ts b/packages/debugger/src/main/roots.ts similarity index 97% rename from packages/debugger/src/roots.ts rename to packages/debugger/src/main/roots.ts index f4ad326f..824285d7 100644 --- a/packages/debugger/src/roots.ts +++ b/packages/debugger/src/main/roots.ts @@ -1,14 +1,5 @@ import { createEffect, onCleanup, untrack } from 'solid-js' import { throttle } from '@solid-primitives/scheduled' -import { - DebuggerContext, - getOwner, - NodeID, - NodeType, - Solid, - Core, -} from '@solid-devtools/shared/graph' -import { INTERNAL } from '@solid-devtools/shared/variables' import { untrackedCallback } from '@solid-devtools/shared/primitives' import { warn } from '@solid-devtools/shared/utils' import { ComputationUpdateHandler, WalkerResult, walkSolidTree } from './walker' @@ -22,8 +13,12 @@ import { onOwnerCleanup, removeDebuggerContext, setDebuggerContext, + getOwner, + INTERNAL, } from './utils' import { makeCreateRootListener } from './update' +import { Core, DebuggerContext, NodeID, Solid } from './types' +import { NodeType } from './constants' const RootMap: Record WalkerResult | null> = {} export const walkSolidRoot = (rootId: NodeID, inspectedId?: NodeID): WalkerResult | null => { diff --git a/packages/debugger/test/update.test.ts b/packages/debugger/src/main/test/update.test.ts similarity index 95% rename from packages/debugger/test/update.test.ts rename to packages/debugger/src/main/test/update.test.ts index eae3da8c..78a2ea6f 100644 --- a/packages/debugger/test/update.test.ts +++ b/packages/debugger/src/main/test/update.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect } from 'vitest' -import { getOwner, Solid } from '@solid-devtools/shared/graph' import { createComputed, createRoot, createSignal } from 'solid-js' import { interceptComputationRerun, @@ -7,8 +6,9 @@ import { makeCreateRootListener, observeValueUpdate, removeValueUpdateObserver, -} from '../src/update' -import { createInternalRoot } from '../src/utils' +} from '../update' +import { createInternalRoot, getOwner } from '../utils' +import { Solid } from '../../types' describe('makeSolidUpdateListener', () => { it('listens to solid updates', () => diff --git a/packages/debugger/test/utils.test.ts b/packages/debugger/src/main/test/utils.test.ts similarity index 93% rename from packages/debugger/test/utils.test.ts rename to packages/debugger/src/main/test/utils.test.ts index e300da9e..f65d9fa7 100644 --- a/packages/debugger/test/utils.test.ts +++ b/packages/debugger/src/main/test/utils.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect } from 'vitest' -import { Solid, getOwner, NodeType } from '@solid-devtools/shared/graph' import { createComponent, createComputed, @@ -9,7 +8,9 @@ import { createRoot, createSignal, } from 'solid-js' -import { getFunctionSources, getOwnerType, onDispose } from '../src/utils' +import { getFunctionSources, getOwner, getOwnerType, onDispose } from '../utils' +import { Solid } from '../types' +import { NodeType } from '../constants' describe('getOwnerType', () => { it('identifies Component', () => { diff --git a/packages/debugger/test/walker.test.tsx b/packages/debugger/src/main/test/walker.test.tsx similarity index 95% rename from packages/debugger/test/walker.test.tsx rename to packages/debugger/src/main/test/walker.test.tsx index 847402c8..48babdb6 100644 --- a/packages/debugger/test/walker.test.tsx +++ b/packages/debugger/src/main/test/walker.test.tsx @@ -1,5 +1,4 @@ import { describe, beforeEach, vi, it, expect } from 'vitest' -import { getOwner, Mapped, NodeType, Solid } from '@solid-devtools/shared/graph' import { createComputed, createEffect, @@ -8,10 +7,11 @@ import { createRoot, createSignal, } from 'solid-js' -import type * as API from '../src/walker' +import { getOwner } from '../utils' +import { Solid, Mapped } from '../types' +import { NodeType } from '../constants' -const getModule = async (): Promise => - (await import('../src/walker')).walkSolidTree +const getModule = async () => (await import('../walker')).walkSolidTree const mockTree = () => { const [s] = createSignal('foo', { name: 's0' }) diff --git a/packages/shared/src/graph.ts b/packages/debugger/src/main/types.ts similarity index 58% rename from packages/shared/src/graph.ts rename to packages/debugger/src/main/types.ts index de22ace6..4bd70686 100644 --- a/packages/shared/src/graph.ts +++ b/packages/debugger/src/main/types.ts @@ -1,31 +1,79 @@ -import { getOwner as _getOwner } from 'solid-js' -import { Many } from '@solid-primitives/utils' -import { INTERNAL } from './variables' -import { EncodedValue } from './serialize' - -export enum NodeType { - Root, - Component, - Effect, - Render, - Memo, - Computation, - Refresh, - Context, - Signal, -} +import type { Many } from '@solid-primitives/utils' +import { INFINITY, NAN, NEGATIVE_INFINITY, NodeType, ValueType } from './constants' +import type { INTERNAL } from './utils' export type NodeID = string & {} +export type ValueItemID = `signal:${NodeID}` | `prop:${string}` | `value` +export type ValueItemType = 'signal' | 'prop' | 'value' + +export const getValueItemId = ( + type: T, + id: T extends 'value' ? undefined : NodeID | string, +): ValueItemID => { + if (type === 'value') return 'value' + return `${type}:${id}` as ValueItemID +} + +export type EncodedPreviewPayloadMap = { + [ValueType.Array]: number + [ValueType.Object]: number + [ValueType.Number]: number | typeof INFINITY | typeof NEGATIVE_INFINITY | typeof NAN + [ValueType.Boolean]: boolean + [ValueType.String]: string + [ValueType.Symbol]: string + [ValueType.Function]: string + [ValueType.Getter]: string + [ValueType.Element]: { name: string; id: NodeID } + [ValueType.Instance]: string + [ValueType.Store]: { value: EncodedValue; id: NodeID } +} + +export type EncodedPreviewChildrenMap = { + [ValueType.Array]: EncodedValue[] + [ValueType.Object]: Record> +} + +export type EncodedValueOf = { + type: K +} & (K extends keyof EncodedPreviewPayloadMap + ? { value: EncodedPreviewPayloadMap[K] } + : { value?: undefined }) & + (Deep extends true + ? K extends keyof EncodedPreviewChildrenMap + ? { children: EncodedPreviewChildrenMap[K] } + : { children?: undefined } + : { children?: undefined }) + +export type EncodedValue = { + [K in ValueType]: EncodedValueOf +}[ValueType] + +export type ValueUpdateListener = (newValue: unknown, oldValue: unknown) => void + +export type DebuggerContext = + | { + rootId: NodeID + triggerRootUpdate: VoidFunction + forceRootUpdate: VoidFunction + } + | typeof INTERNAL + export namespace Core { export type Owner = import('solid-js/types/reactive/signal').Owner export type SignalState = import('solid-js/types/reactive/signal').SignalState export type Computation = import('solid-js/types/reactive/signal').Computation export type RootFunction = import('solid-js/types/reactive/signal').RootFunction export type EffectFunction = import('solid-js/types/reactive/signal').EffectFunction + export namespace Store { + export type StoreNode = import('solid-js/store').StoreNode + export type NotWrappable = import('solid-js/store/types/store').NotWrappable + export type OnStoreNodeUpdate = import('solid-js/store/types/store').OnStoreNodeUpdate + } } declare module 'solid-js/types/reactive/signal' { + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface SignalState { sdtId?: NodeID sdtName?: string @@ -35,6 +83,7 @@ declare module 'solid-js/types/reactive/signal' { sdtName?: string sdtType?: NodeType } + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface Computation { sdtId?: NodeID sdtType?: NodeType @@ -59,10 +108,20 @@ export namespace Solid { observers: Computation[] | null } + export type OnStoreNodeUpdate = Core.Store.OnStoreNodeUpdate & { + storePath: readonly (string | number)[] + storeSymbol: symbol + } + + export interface Store { + value: Core.Store.StoreNode + sdtId?: NodeID + } + export interface Root extends Core.Owner { owned: Computation[] | null owner: Owner | null - sourceMap?: Record + sourceMap?: Record // Used by the debugger isDisposed?: boolean sdtAttached?: Owner | null @@ -97,33 +156,14 @@ export namespace Solid { export interface Component extends Memo { props: Record + componentName: string } export type Owner = Computation | Root } -export const getOwner = _getOwner as () => Solid.Owner | null - -export type DebuggerContext = - | { - rootId: NodeID - triggerRootUpdate: VoidFunction - forceRootUpdate: VoidFunction - } - | typeof INTERNAL - -export type ComputationUpdate = { rootId: NodeID; id: NodeID } - -export type RootsUpdates = { - removed: NodeID[] - updated: Record -} - -export type ValueUpdateListener = (newValue: unknown, oldValue: unknown) => void - // -// "Mapped___" — owner/signal/etc. objects created by the solid-devtools-debugger runtime library -// They should be JSON serialisable — to be able to send them with chrome.runtime.sendMessage +// "Mapped___" should be JSON serialisable — to be able to send them with chrome.runtime.sendMessage // export namespace Mapped { @@ -146,10 +186,9 @@ export namespace Mapped { } export interface Signal { - type: NodeType.Signal | NodeType.Memo + type: NodeType.Signal | NodeType.Memo | NodeType.Store name: string id: NodeID - observers: NodeID[] value: EncodedValue } @@ -177,7 +216,12 @@ export namespace Mapped { value?: EncodedValue /** for computations */ sources?: NodeID[] - /** for memos */ - observers?: NodeID[] } } + +export type ComputationUpdate = { rootId: NodeID; id: NodeID } + +export type RootsUpdates = { + removed: NodeID[] + updated: Record +} diff --git a/packages/debugger/src/update.ts b/packages/debugger/src/main/update.ts similarity index 82% rename from packages/debugger/src/update.ts rename to packages/debugger/src/main/update.ts index bae7ba03..f7e1c086 100644 --- a/packages/debugger/src/update.ts +++ b/packages/debugger/src/main/update.ts @@ -1,8 +1,6 @@ import { untrack } from 'solid-js' -import { Observable, Observer as ObjectObserver } from 'object-observer' -import { Solid, Core, ValueUpdateListener } from '@solid-devtools/shared/graph' -import { WINDOW_WRAP_STORE_PROPERTY } from '@solid-devtools/shared/variables' import { skipInternalRoot, tryOnCleanup } from './utils' +import { Core, Solid, ValueUpdateListener } from './types' // // AFTER UPDATE @@ -61,34 +59,6 @@ export function makeCreateRootListener(onUpdate: AfterCrateRoot): VoidFunction { return tryOnCleanup(() => CreateRootListeners.delete(onUpdate)) } -// -// WRAP STORES -// - -export type { ObjectObserver } - -declare global { - interface Window { - [WINDOW_WRAP_STORE_PROPERTY]?: (init: T) => T - } -} - -// window[WINDOW_WRAP_STORE_PROPERTY] is internal — no need to worry about other users -window[WINDOW_WRAP_STORE_PROPERTY] = init => { - return Observable.from(init) -} - -export function makeStoreObserver(state: object, onUpdate: ObjectObserver): VoidFunction { - if (!Observable.isObservable(state)) { - console.warn(`Object ${state} is not wrapped`) - return () => { - /* noop */ - } - } - Observable.observe(state, onUpdate) - return tryOnCleanup(() => Observable.unobserve(state, onUpdate)) -} - // // OBSERVE NODES // diff --git a/packages/debugger/src/utils.ts b/packages/debugger/src/main/utils.ts similarity index 82% rename from packages/debugger/src/utils.ts rename to packages/debugger/src/main/utils.ts index f96b9e08..f73e549c 100644 --- a/packages/debugger/src/utils.ts +++ b/packages/debugger/src/main/utils.ts @@ -1,30 +1,41 @@ -import { createComputed, createRoot, onCleanup, runWithOwner } from 'solid-js' +import { + createComputed, + createRoot, + onCleanup, + runWithOwner, + getOwner as _getOwner, +} from 'solid-js' import { Emit } from '@solid-primitives/event-bus' import { throttle } from '@solid-primitives/scheduled' -import { - DebuggerContext, - NodeType, - Solid, - Core, - getOwner, - NodeID, -} from '@solid-devtools/shared/graph' -import { INTERNAL, UNNAMED } from '@solid-devtools/shared/variables' import { trimString } from '@solid-devtools/shared/utils' +import { DEV as _STORE_DEV } from 'solid-js/store' +import { Core, DebuggerContext, NodeID, Solid } from './types' +import { NodeType } from './constants' + +const STORE_DEV = _STORE_DEV! + +export const getOwner = _getOwner as () => Solid.Owner | null export const isSolidComputation = (o: Readonly): o is Solid.Computation => 'fn' in o export const isSolidMemo = (o: Readonly): o is Solid.Memo => 'sdtType' in o ? o.sdtType === NodeType.Memo : isSolidComputation(o) && _isMemo(o) -export const isSolidOwner = (o: Readonly | Solid.Signal): o is Solid.Owner => - 'owned' in o +export const isSolidOwner = ( + o: Readonly, +): o is Solid.Owner => 'owned' in o export const isSolidRoot = (o: Readonly): o is Solid.Root => o.sdtType === NodeType.Root || !isSolidComputation(o) export const isSolidComponent = (o: Readonly): o is Solid.Component => 'props' in o +export const isStoreNode = (o: object): o is Core.Store.StoreNode => STORE_DEV.$NAME in o + +export const isSolidStore = (o: Readonly): o is Solid.Store => { + return !('observers' in o) && STORE_DEV.$NAME in o.value +} + const _isMemo = (o: Readonly): boolean => 'value' in o && 'comparator' in o && o.pure === true @@ -32,20 +43,31 @@ export function getOwnerName(owner: Readonly): string { const { name, componentName: component } = owner if (component && typeof component === 'string') return component.startsWith('_Hot$$') ? component.slice(6) : component - return name || UNNAMED + return name || '(unnamed)' } export function getSignalName(signal: Readonly): string { - return signal.name || UNNAMED + return signal.name || '(unnamed)' } -export function getNodeName(o: Readonly): string { - const name = isSolidOwner(o) ? getOwnerName(o) : getSignalName(o) +export const getStoreNodeName = (node: Core.Store.StoreNode): string => + node[STORE_DEV.$NAME] || '(unnamed)' + +export function getNodeName(o: Readonly): string { + const name = isSolidOwner(o) + ? getOwnerName(o) + : isSolidStore(o) + ? getStoreNodeName(o) + : getSignalName(o) + return getDisplayName(name) +} + +export function getDisplayName(name: string): string { return trimString(name, 16) } -export function getNodeType(o: Readonly): NodeType { +export function getNodeType(o: Readonly): NodeType { if (isSolidOwner(o)) return getOwnerType(o) - return NodeType.Signal + return isSolidStore(o) ? NodeType.Store : NodeType.Signal } export const getOwnerType = (o: Readonly): NodeType => { @@ -72,6 +94,26 @@ export const getOwnerType = (o: Readonly): NodeType => { return NodeType.Computation } +let LAST_ID = 0 +export const getNewSdtId = (): NodeID => (LAST_ID++).toString(36) + +export function markOwnerName(o: Solid.Owner): string { + if (o.sdtName !== undefined) return o.sdtName + return (o.sdtName = getNodeName(o)) +} +export function markOwnerType(o: Solid.Owner, type?: NodeType): NodeType { + if (o.sdtType !== undefined) return o.sdtType + return (o.sdtType = type ?? getOwnerType(o)) +} +export function markNodeID(o: { sdtId?: NodeID }): NodeID { + if (o.sdtId !== undefined) return o.sdtId + return (o.sdtId = getNewSdtId()) +} +export function markNodesID(nodes?: { sdtId?: NodeID }[] | null): NodeID[] { + if (!nodes || !nodes.length) return [] + return nodes.map(markNodeID) +} + export function getComponentRefreshNode(owner: Readonly): Solid.Memo | null { const { owned } = owner let refresh: Solid.Owner @@ -175,6 +217,8 @@ export function onParentCleanup( } } +// TODO: move onDispose to solid-primitives + const DISPOSE_ID = Symbol('Dispose ID') export function onDispose( fn: () => T, @@ -182,6 +226,7 @@ export function onDispose( ): () => T { const owner = getOwner() if (!owner) { + // eslint-disable-next-line no-console console.warn('onDispose called outside of a reactive owner') return fn } @@ -219,28 +264,10 @@ export function getFunctionSources(fn: () => unknown): Solid.Signal[] { return nodes ?? [] } -let LAST_ID = 0 -export const getNewSdtId = (): NodeID => (LAST_ID++).toString(36) - -export function markOwnerName(o: Solid.Owner): string { - if (o.sdtName !== undefined) return o.sdtName - return (o.sdtName = getNodeName(o)) -} -export function markOwnerType(o: Solid.Owner, type?: NodeType): NodeType { - if (o.sdtType !== undefined) return o.sdtType - return (o.sdtType = type ?? getOwnerType(o)) -} -export function markNodeID(o: { sdtId?: NodeID }): NodeID { - if (o.sdtId !== undefined) return o.sdtId - return (o.sdtId = getNewSdtId()) -} -export function markNodesID(nodes?: { sdtId?: NodeID }[] | null): NodeID[] { - if (!nodes || !nodes.length) return [] - return nodes.map(markNodeID) -} - let SkipInternalRoot: Core.RootFunction | null = null +export const INTERNAL = Symbol('internal') + /** * Sold's `createRoot` primitive that won't be tracked by the debugger. */ @@ -260,6 +287,18 @@ export const skipInternalRoot = () => { return skip } +export function dedupeArrayById(input: T[]): T[] { + const ids = new Set() + const deduped: T[] = [] + for (let i = input.length - 1; i >= 0; i--) { + const update = input[i] + if (ids.has(update.id)) continue + ids.add(update.id) + deduped.push(update) + } + return deduped +} + /** * Batches series of updates to a single array of updates. * @@ -271,15 +310,7 @@ export function createBatchedUpdateEmitter( const updates: T[] = [] const triggerUpdateEmit = throttle(() => { - // dedupe updates - const ids = new Set() - const deduped: T[] = [] - for (let i = updates.length - 1; i >= 0; i--) { - const update = updates[i] - if (ids.has(update.id)) continue - ids.add(update.id) - deduped.push(update) - } + const deduped = dedupeArrayById(updates) updates.length = 0 emit(deduped) }) diff --git a/packages/debugger/src/walker.ts b/packages/debugger/src/main/walker.ts similarity index 97% rename from packages/debugger/src/walker.ts rename to packages/debugger/src/main/walker.ts index ab554437..05945341 100644 --- a/packages/debugger/src/walker.ts +++ b/packages/debugger/src/main/walker.ts @@ -1,4 +1,3 @@ -import { NodeType, NodeID, Solid, Mapped } from '@solid-devtools/shared/graph' import { getComponentRefreshNode, markNodeID, @@ -7,6 +6,8 @@ import { resolveElements, } from './utils' import { observeComputationUpdate } from './update' +import { Mapped, NodeID, Solid } from './types' +import { NodeType } from './constants' export type ComputationUpdateHandler = (rootId: NodeID, nodeId: NodeID) => void diff --git a/packages/debugger/src/plugin.ts b/packages/debugger/src/plugin.ts deleted file mode 100644 index b9f347e3..00000000 --- a/packages/debugger/src/plugin.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { Accessor, batch, createEffect, createMemo, createSignal, untrack } from 'solid-js' -import { createEventHub, createSimpleEmitter } from '@solid-primitives/event-bus' -import { throttle } from '@solid-primitives/scheduled' -import { - Mapped, - Solid, - RootsUpdates, - NodeID, - ComputationUpdate, -} from '@solid-devtools/shared/graph' -import { EncodedValue, encodeValue, ElementMap } from '@solid-devtools/shared/serialize' -import { atom, untrackedCallback } from '@solid-devtools/shared/primitives' -import { createBatchedUpdateEmitter, createInternalRoot } from './utils' -import { ComputationUpdateHandler } from './walker' -import { walkSolidRoot } from './roots' -import { - clearOwnerObservers, - collectOwnerDetails, - encodeComponentProps, - SignalUpdateHandler, -} from './inspect' -import { makeSolidUpdateListener } from './update' -import { createLocator } from './locator' - -/* -DETAILS: - -- type of the node -- path -- signals declared in it (memos too) - - their observers and sources -- stores -- their observers and sources as well (this may be too complicated to do for now) -- current and previous value (only if the node is a computation) -- sources (only if the node is a computation) -- observers (only if the node is a memo) -- rendered HTML element if node is a component -- component props -*/ - -export type BatchComputationUpdatesHandler = (payload: ComputationUpdate[]) => void - -type RootUpdate = { removed: NodeID } | { updated: Mapped.Root } - -export default createInternalRoot(() => { - /** throttled global update */ - const [onUpdate, triggerUpdate] = createSimpleEmitter() - /** forced — immediate global update */ - const [onForceUpdate, forceTriggerUpdate] = createSimpleEmitter() - - const eventHub = createEventHub(bus => ({ - ComputationUpdates: bus(), - SignalUpdates: bus<{ id: NodeID; value: EncodedValue }[]>(), - PropsUpdate: bus(), - ValueUpdate: bus<{ value: EncodedValue; update: boolean }>(), - StructureUpdates: bus(), - InspectedNodeDetails: bus(), - })) - - // - // Debugger Enabled - // - const [debuggerEnabled, toggleDebugger, addLocatorModeEnabledSignal] = (() => { - const locatorModeEnabledSignal = atom>() - const debuggerEnabled = atom(false) - const combinedEnabled = createMemo(() => debuggerEnabled() || !!locatorModeEnabledSignal()?.()) - - function toggleDebugger(state?: boolean) { - batch(() => { - const newState = debuggerEnabled(p => state ?? !p) - if (!newState) { - setComponents({}) - locator.togglePluginLocatorMode(false) - } - }) - } - - function addLocatorModeEnabledSignal(signal: Accessor) { - locatorModeEnabledSignal(() => signal) - } - - return [combinedEnabled, toggleDebugger, addLocatorModeEnabledSignal] - })() - - // - // Components: - // - const [components, setComponents] = createSignal>({}) - - function findComponent(rootId: NodeID, nodeId: NodeID) { - const componentsList = components()[rootId] as Mapped.ResolvedComponent[] | undefined - if (!componentsList) return - for (const c of componentsList) { - if (c.id === nodeId) return c - } - } - - function removeRoot(rootId: NodeID) { - setComponents(prev => { - const copy = Object.assign({}, prev) - delete copy[rootId] - return copy - }) - pushStructureUpdate({ removed: rootId }) - } - function updateRoot(newRoot: Mapped.Root, newComponents: Mapped.ResolvedComponent[]): void { - setComponents(prev => Object.assign(prev, { [newRoot.id]: newComponents })) - pushStructureUpdate({ updated: newRoot }) - } - - // - // Structure updates: - // - const pushStructureUpdate = (() => { - const updates: Mapped.Root[] = [] - const removedIds = new Set() - const trigger = throttle(() => { - const updated: Record = {} - for (let i = updates.length - 1; i >= 0; i--) { - const update = updates[i] - const { id } = update - if (!removedIds.has(id) && !updated[id]) updated[id] = update - } - eventHub.emit('StructureUpdates', { updated, removed: [...removedIds] }) - updates.length = 0 - removedIds.clear() - }, 50) - const pushStructureUpdate = (update: RootUpdate) => { - if ('removed' in update) removedIds.add(update.removed) - else if (removedIds.has(update.updated.id)) return - else updates.push(update.updated) - trigger() - } - return pushStructureUpdate - })() - - // - // Inspected Owner details: - // - const inspected = { - elementMap: new ElementMap(), - signalMap: {} as Record, - owner: null as Solid.Owner | null, - signals: new Set(), - props: new Set(), - value: false, - getValue: () => null as unknown, - } - - const getElementById = (id: NodeID): HTMLElement | undefined => inspected.elementMap.get(id) - - const pushSignalUpdate = createBatchedUpdateEmitter<{ - id: NodeID - value: EncodedValue - }>(updates => eventHub.emit('SignalUpdates', updates)) - const onSignalUpdate: SignalUpdateHandler = untrackedCallback((id, value) => { - if (!debuggerEnabled() || !inspected.owner) return - const isSelected = inspected.signals.has(id) - pushSignalUpdate({ id, value: encodeValue(value, isSelected, inspected.elementMap) }) - }) - - const triggerValueUpdate = (() => { - let updateNext = false - const forceValueUpdate = () => { - if (!debuggerEnabled() || !inspected.owner) return (updateNext = false) - eventHub.emit('ValueUpdate', { - value: encodeValue(inspected.getValue(), inspected.value, inspected.elementMap), - update: updateNext, - }) - updateNext = false - } - const triggerValueUpdate = throttle(forceValueUpdate) - function handleValueUpdate(update: boolean, force = false) { - if (update) updateNext = true - if (force) forceValueUpdate() - else triggerValueUpdate() - } - return handleValueUpdate - })() - - const setInspectedDetails = untrackedCallback((owner: Solid.Owner) => { - inspected.owner && clearOwnerObservers(inspected.owner) - inspected.props.clear() - inspected.signals.clear() - inspected.owner = owner - inspected.value = false - const result = collectOwnerDetails(owner, { - onSignalUpdate, - onValueUpdate: () => triggerValueUpdate(true), - }) - eventHub.emit('InspectedNodeDetails', result.details) - inspected.signalMap = result.signalMap - inspected.elementMap = result.elementMap - inspected.getValue = result.getOwnerValue - }) - const clearInspectedDetails = () => { - inspected.owner && clearOwnerObservers(inspected.owner) - inspected.owner = null - inspected.signals.clear() - inspected.props.clear() - inspected.value = false - } - - function updateInspectedProps() { - if (!inspected.owner) return - const props = encodeComponentProps(inspected.owner, { - inspectedProps: inspected.props, - elementMap: inspected.elementMap, - }) - props && eventHub.emit('PropsUpdate', props) - } - - createEffect(() => { - // make sure we clear the owner observers when the plugin is disabled - if (!debuggerEnabled()) inspected.owner && clearOwnerObservers(inspected.owner) - // re-observe the owner when the plugin is enabled - else inspected.owner && setInspectedDetails(inspected.owner) - - // update the owner details whenever there is a change in solid's internals - makeSolidUpdateListener( - throttle(() => { - updateInspectedProps() - triggerValueUpdate(false) - }, 150), - ) - }) - - function setInspectedNode(data: { rootId: NodeID; nodeId: NodeID } | null) { - if (!data) return clearInspectedDetails() - const { rootId, nodeId } = data - - const walkResult = walkSolidRoot(rootId, nodeId) - if (!walkResult || !walkResult.inspectedOwner) return clearInspectedDetails() - - setInspectedDetails(walkResult.inspectedOwner) - } - - function setInspectedSignal(id: NodeID, selected: boolean): EncodedValue | null { - const signal = inspected.signalMap[id] as Solid.Signal | undefined - if (!signal) return null - if (selected) inspected.signals.add(id) - else inspected.signals.delete(id) - return untrack(() => encodeValue(signal.value, selected, inspected.elementMap)) - } - function setInspectedProp(key: NodeID, selected: boolean) { - if (selected) inspected.props.add(key) - else inspected.props.delete(key) - updateInspectedProps() - } - function setInspectedValue(selected: boolean) { - if (!inspected.owner) return null - inspected.value = selected - triggerValueUpdate(false, true) - } - - // - // Computation updates: - // - const _pushComputationUpdate = createBatchedUpdateEmitter(updates => - eventHub.emit('ComputationUpdates', updates), - ) - const pushComputationUpdate: ComputationUpdateHandler = (rootId, id) => { - _pushComputationUpdate({ rootId, id }) - } - - // - // Locator - // - const locator = createLocator({ - components, - debuggerEnabled, - findComponent, - getElementById, - addLocatorModeEnabledSignal, - }) - - function useDebugger() { - return { - listenTo: eventHub.on, - enabled: debuggerEnabled, - toggleEnabled: toggleDebugger, - triggerUpdate, - forceTriggerUpdate, - setInspectedNode, - setInspectedSignal, - setInspectedProp, - setInspectedValue, - locator: { - toggleEnabled: locator.togglePluginLocatorMode, - enabledByDebugger: locator.enabledByDebugger, - addClickInterceptor: locator.addClickInterceptor, - setHighlightTarget: locator.setPluginHighlightTarget, - onHoveredComponent: locator.onDebuggerHoveredComponentChange, - }, - } - } - - return { - onUpdate, - onForceUpdate, - enabled: debuggerEnabled, - useDebugger, - updateRoot, - removeRoot, - pushComputationUpdate, - useLocator: locator.useLocator, - } -}) diff --git a/packages/debugger/src/server.ts b/packages/debugger/src/server.ts index 4e0b442e..ea5ff4db 100644 --- a/packages/debugger/src/server.ts +++ b/packages/debugger/src/server.ts @@ -1,7 +1,9 @@ -import { NodeType, Solid } from '@solid-devtools/shared/graph' -import { UNNAMED } from '@solid-devtools/shared/variables' -import * as API from './index' +import type * as API from './index' import { createRoot } from 'solid-js' +import type { Solid } from './main/types' +import { NodeType } from './main/constants' + +export * from './types' export { createUnownedRoot } from './index' @@ -21,6 +23,10 @@ export const useDebugger: typeof API.useDebugger = () => ({ setInspectedValue: () => null, enabled: () => false, toggleEnabled: () => {}, + inspector: { + setInspectedNode: () => {}, + toggleValueNode: () => {}, + }, locator: { toggleEnabled: () => {}, addClickInterceptor: () => {}, @@ -36,7 +42,6 @@ export const useLocator: typeof API.useLocator = () => {} // update export const makeSolidUpdateListener: typeof API.makeSolidUpdateListener = () => () => {} export const makeCreateRootListener: typeof API.makeCreateRootListener = () => () => {} -export const makeStoreObserver: typeof API.makeStoreObserver = () => () => {} export const observeComputationUpdate: typeof API.observeComputationUpdate = () => {} export const interceptComputationRerun: typeof API.interceptComputationRerun = () => {} export const observeValueUpdate: typeof API.observeValueUpdate = () => {} @@ -44,14 +49,16 @@ export const makeValueUpdateListener: typeof API.makeValueUpdateListener = () => export const removeValueUpdateObserver: typeof API.removeValueUpdateObserver = () => {} // utils +export const getOwner: typeof API.getOwner = () => null export const getOwnerType: typeof API.getOwnerType = () => NodeType.Computation export const getNodeType: typeof API.getNodeType = () => NodeType.Computation -export const getNodeName: typeof API.getNodeName = () => UNNAMED +export const getNodeName: typeof API.getNodeName = () => '(unnamed)' export const isSolidComputation: typeof API.isSolidComputation = (o): o is Solid.Computation => false export const isSolidMemo: typeof API.isSolidMemo = (o): o is Solid.Memo => false export const isSolidOwner: typeof API.isSolidOwner = (o): o is Solid.Owner => false export const isSolidRoot: typeof API.isSolidRoot = (o): o is Solid.Root => false +export const isSolidStore: typeof API.isSolidStore = (o): o is Solid.Store => false export const onOwnerCleanup: typeof API.onOwnerCleanup = () => () => {} export const onParentCleanup: typeof API.onParentCleanup = () => () => {} export const getFunctionSources: typeof API.getFunctionSources = () => [] diff --git a/packages/debugger/src/types.ts b/packages/debugger/src/types.ts new file mode 100644 index 00000000..75a908ae --- /dev/null +++ b/packages/debugger/src/types.ts @@ -0,0 +1,11 @@ +export * from './main/types' +export * from './main/constants' +export type { + InspectorUpdate, + SetInspectedNodeData, + ToggleInspectedValueData, + ProxyPropsUpdate, + StoreNodeUpdate, + ValueNodeUpdate, + HighlightElementPayload, +} from '.' diff --git a/packages/debugger/tsup.config.ts b/packages/debugger/tsup.config.ts index bfcbd275..b0a26e96 100644 --- a/packages/debugger/tsup.config.ts +++ b/packages/debugger/tsup.config.ts @@ -1,3 +1,8 @@ import defineConfig from '../../configs/tsup.config' -export default defineConfig({ extension: 'ts', server: true, jsx: true }) +export default defineConfig({ + extension: 'ts', + server: true, + jsx: true, + additionalEntries: ['types'], +}) diff --git a/packages/ext-client/package.json b/packages/ext-client/package.json index 63aabdc5..b6290a83 100644 --- a/packages/ext-client/package.json +++ b/packages/ext-client/package.json @@ -50,12 +50,20 @@ "import": "./dist/vite.js", "require": "./dist/vite.cjs", "types": "./dist/vite.d.ts" + }, + "./bridge": { + "import": "./dist/bridge.js", + "require": "./dist/bridge.cjs", + "types": "./dist/bridge.d.ts" } }, "typesVersions": { "*": { "vite": [ "./dist/vite.d.ts" + ], + "bridge": [ + "./dist/bridge.d.ts" ] } }, @@ -63,23 +71,17 @@ "dev": "tsup --watch", "build": "tsup", "test": "vitest", - "typecheck": "tsc --noEmit" - }, - "devDependencies": { - "solid-js": "^1.6.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.23.4" + "typecheck": "tsc --noEmit --paths null" }, "dependencies": { "@solid-devtools/debugger": "workspace:^0.13.1", "@solid-devtools/shared": "workspace:^0.9.2", "@solid-devtools/transform": "workspace:^0.7.5", "@solid-primitives/utils": "^3.1.0", - "type-fest": "^3.1.0" + "type-fest": "^3.2.0" }, "peerDependencies": { - "solid-js": "^1.5.5" + "solid-js": "^1.6.2" }, "packageManager": "pnpm@7.13.0" } diff --git a/packages/shared/src/bridge.ts b/packages/ext-client/src/bridge.ts similarity index 78% rename from packages/shared/src/bridge.ts rename to packages/ext-client/src/bridge.ts index f36f4326..053de3e8 100644 --- a/packages/shared/src/bridge.ts +++ b/packages/ext-client/src/bridge.ts @@ -1,6 +1,14 @@ -import { ComputationUpdate, Mapped, NodeID, RootsUpdates } from './graph' -import { EncodedValue } from './serialize' -import { log } from './utils' +import type { + InspectorUpdate, + SetInspectedNodeData, + ToggleInspectedValueData, + Mapped, + NodeID, + ComputationUpdate, + RootsUpdates, + HighlightElementPayload, +} from '@solid-devtools/debugger/types' +import { log } from '@solid-devtools/shared/utils' export const LOG_MESSAGES = false @@ -19,12 +27,8 @@ export interface Messages { ResetPanel: {} StructureUpdate: RootsUpdates ComputationUpdates: ComputationUpdate[] - /** client -> devtools: signal deep value */ - SignalUpdates: { signals: { id: NodeID; value: EncodedValue }[]; update: boolean } - /** client -> devtools: encoded props object */ - PropsUpdate: Mapped.Props - /** client -> devtools: inspected node value update */ - ValueUpdate: { value: EncodedValue; update: boolean } + /** client -> devtools: updates from the inspector */ + InspectorUpdate: InspectorUpdate[] /** devtools -> client: force the debugger to walk the whole tree and send it */ ForceUpdate: {} /** client -> devtools: send component clicked with the locator to the extension */ @@ -32,12 +36,10 @@ export interface Messages { /** client -> devtools: send updates to the owner details */ SetInspectedDetails: Mapped.OwnerDetails /** devtools -> client: request for node/signal/prop details — subscribe or unsubscribe */ - ToggleInspected: - | { type: 'node'; data: null | { rootId: NodeID; nodeId: NodeID } } - | { type: 'signal' | 'prop'; data: { id: NodeID; selected: boolean } } - | { type: 'value'; data: boolean } + ToggleInspectedValue: ToggleInspectedValueData + SetInspectedNode: SetInspectedNodeData /** devtools -> client: user hovered over component/element signal in devtools panel */ - HighlightElement: { rootId: NodeID; nodeId: NodeID } | { elementId: string } | null + HighlightElement: HighlightElementPayload /** client -> devtools: send hovered (by the locator) owner to the extension */ ClientHoveredComponent: { nodeId: NodeID; state: boolean } /** devtools -> client: user is selecting component from the page */ diff --git a/packages/ext-client/src/client.ts b/packages/ext-client/src/client.ts index 7ff5a9b4..3a58de5f 100644 --- a/packages/ext-client/src/client.ts +++ b/packages/ext-client/src/client.ts @@ -1,10 +1,6 @@ import { batch, createEffect, onCleanup } from 'solid-js' import { createInternalRoot, useDebugger } from '@solid-devtools/debugger' -import { - onWindowMessage, - postWindowMessage, - startListeningWindowMessages, -} from '@solid-devtools/shared/bridge' +import { onWindowMessage, postWindowMessage, startListeningWindowMessages } from './bridge' import { defer } from '@solid-devtools/shared/primitives' startListeningWindowMessages() @@ -26,7 +22,7 @@ createInternalRoot(() => { onWindowMessage('PanelClosed', () => { batch(() => { debug.toggleEnabled(false) - debug.setInspectedNode(null) + debug.inspector.setInspectedNode(null) }) }) @@ -38,35 +34,16 @@ createInternalRoot(() => { onCleanup(onWindowMessage('ForceUpdate', () => debug.forceTriggerUpdate())) - onCleanup( - onWindowMessage('ToggleInspected', payload => { - if (payload.type === 'node') debug.setInspectedNode(payload.data) - else if (payload.type === 'value') debug.setInspectedValue(payload.data) - else if (payload.type === 'prop') - debug.setInspectedProp(payload.data.id, payload.data.selected) - else if (payload.type === 'signal') { - const { id, selected } = payload.data - const value = debug.setInspectedSignal(id, selected) - if (value) postWindowMessage('SignalUpdates', { signals: [{ id, value }], update: false }) - } - }), - ) + onCleanup(onWindowMessage('ToggleInspectedValue', debug.inspector.toggleValueNode)) + onCleanup(onWindowMessage('SetInspectedNode', debug.inspector.setInspectedNode)) debug.listenTo('StructureUpdates', updates => postWindowMessage('StructureUpdate', updates)) - debug.listenTo('ComputationUpdates', updates => - postWindowMessage('ComputationUpdates', updates), - ) - - debug.listenTo('SignalUpdates', updates => { - postWindowMessage('SignalUpdates', { signals: updates, update: true }) + debug.listenTo('ComputationUpdates', updates => { + postWindowMessage('ComputationUpdates', updates) }) - debug.listenTo('PropsUpdate', updates => postWindowMessage('PropsUpdate', updates)) - - debug.listenTo('ValueUpdate', ({ value, update }) => { - postWindowMessage('ValueUpdate', { value, update }) - }) + debug.listenTo('InspectorUpdate', update => postWindowMessage('InspectorUpdate', update)) // send the focused owner details debug.listenTo('InspectedNodeDetails', details => { diff --git a/packages/ext-client/tsup.config.ts b/packages/ext-client/tsup.config.ts index ba674f5c..7b63baa4 100644 --- a/packages/ext-client/tsup.config.ts +++ b/packages/ext-client/tsup.config.ts @@ -4,7 +4,7 @@ import { version } from './package.json' export default defineConfig({ server: true, - additionalEntries: ['vite'], + additionalEntries: ['vite', 'bridge'], overwrite: config => { config.env = { ...config.env, diff --git a/packages/extension/background/background.ts b/packages/extension/background/background.ts index c0aa97bb..51b63cd8 100644 --- a/packages/extension/background/background.ts +++ b/packages/extension/background/background.ts @@ -1,6 +1,5 @@ -import { createCallbackStack } from '@solid-primitives/utils' -import { log } from '@solid-devtools/shared/utils' -import { OnMessageFn, PostMessageFn } from '@solid-devtools/shared/bridge' +import { createCallbackStack, log } from '@solid-devtools/shared/utils' +import { OnMessageFn, PostMessageFn } from 'solid-devtools/bridge' import { createPortMessanger, createRuntimeMessanger, @@ -90,10 +89,8 @@ chrome.runtime.onConnect.addListener(port => { onPortMessage('StructureUpdate', e => postRuntimeMessage('StructureUpdate', e)) onPortMessage('ComputationUpdates', e => postRuntimeMessage('ComputationUpdates', e)) - onPortMessage('SignalUpdates', e => postRuntimeMessage('SignalUpdates', e)) onPortMessage('SetInspectedDetails', e => postRuntimeMessage('SetInspectedDetails', e)) - onPortMessage('PropsUpdate', e => postRuntimeMessage('PropsUpdate', e)) - onPortMessage('ValueUpdate', e => postRuntimeMessage('ValueUpdate', e)) + onPortMessage('InspectorUpdate', e => postRuntimeMessage('InspectorUpdate', e)) onPortMessage('ClientHoveredComponent', e => postRuntimeMessage('ClientHoveredComponent', e)) onPortMessage('ClientInspectedNode', e => postRuntimeMessage('ClientInspectedNode', e)) @@ -106,7 +103,10 @@ chrome.runtime.onConnect.addListener(port => { }), ) - addCleanup(onRuntimeMessage('ToggleInspected', e => postPortMessage('ToggleInspected', e))) + addCleanup( + onRuntimeMessage('ToggleInspectedValue', e => postPortMessage('ToggleInspectedValue', e)), + ) + addCleanup(onRuntimeMessage('SetInspectedNode', e => postPortMessage('SetInspectedNode', e))) addCleanup(onRuntimeMessage('HighlightElement', e => postPortMessage('HighlightElement', e))) diff --git a/packages/extension/content/content.ts b/packages/extension/content/content.ts index d32de45f..412ba428 100644 --- a/packages/extension/content/content.ts +++ b/packages/extension/content/content.ts @@ -2,7 +2,7 @@ import { onWindowMessage, postWindowMessage, startListeningWindowMessages, -} from '@solid-devtools/shared/bridge' +} from 'solid-devtools/bridge' import { warn } from '@solid-devtools/shared/utils' import { createPortMessanger, DEVTOOLS_CONTENT_PORT } from '../shared/messanger' @@ -18,6 +18,7 @@ startListeningWindowMessages() const { postPortMessage, onPortMessage } = createPortMessanger(port) onWindowMessage('SolidOnPage', clientVersion => { + // eslint-disable-next-line no-console console.log( '🚧 %csolid-devtools%c is in early development! 🚧\nPlease report any bugs to https://github.com/thetarnav/solid-devtools/issues', 'color: #fff; background: rgba(181, 111, 22, 0.7); padding: 1px 4px;', @@ -56,13 +57,9 @@ onWindowMessage('StructureUpdate', graph => postPortMessage('StructureUpdate', g onWindowMessage('ComputationUpdates', e => postPortMessage('ComputationUpdates', e)) -onWindowMessage('SignalUpdates', e => postPortMessage('SignalUpdates', e)) - onWindowMessage('SetInspectedDetails', e => postPortMessage('SetInspectedDetails', e)) -onWindowMessage('PropsUpdate', e => postPortMessage('PropsUpdate', e)) - -onWindowMessage('ValueUpdate', e => postPortMessage('ValueUpdate', e)) +onWindowMessage('InspectorUpdate', e => postPortMessage('InspectorUpdate', e)) onWindowMessage('ClientHoveredComponent', e => postPortMessage('ClientHoveredComponent', e)) @@ -73,7 +70,8 @@ onPortMessage('PanelClosed', e => postWindowMessage('PanelClosed', e)) onPortMessage('ForceUpdate', () => postWindowMessage('ForceUpdate')) -onPortMessage('ToggleInspected', e => postWindowMessage('ToggleInspected', e)) +onPortMessage('ToggleInspectedValue', e => postWindowMessage('ToggleInspectedValue', e)) +onPortMessage('SetInspectedNode', e => postWindowMessage('SetInspectedNode', e)) onPortMessage('HighlightElement', e => postWindowMessage('HighlightElement', e)) diff --git a/packages/extension/devtools/devtools.ts b/packages/extension/devtools/devtools.ts index 5a5dc8c9..70d177d3 100644 --- a/packages/extension/devtools/devtools.ts +++ b/packages/extension/devtools/devtools.ts @@ -1,6 +1,6 @@ import { createRuntimeMessanger, DEVTOOLS_CONNECTION_NAME } from '../shared/messanger' -import { once } from '@solid-devtools/shared/bridge' -import { log } from '@solid-devtools/shared/utils' +import { once } from 'solid-devtools/bridge' +import { error, log } from '@solid-devtools/shared/utils' log('Devtools script working.') @@ -22,8 +22,8 @@ once(onRuntimeMessage, 'SolidOnPage', async () => { log('Panel created.') panel.onShown.addListener(onPanelShown) panel.onHidden.addListener(onPanelHidden) - } catch (error) { - console.error(error) + } catch (err) { + error(err) } }) diff --git a/packages/extension/package.json b/packages/extension/package.json index 845e735b..c71e2e32 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -11,7 +11,7 @@ "build": "npm run clean && vite build && node scripts/zip.cjs", "clean": "rimraf dist dist.zip", "test": "vitest", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit --paths null" }, "devDependencies": { "@crxjs/vite-plugin": "^1.0.14", @@ -19,18 +19,21 @@ "@types/webextension-polyfill": "^0.9.1", "jsdom": "^20.0.1", "rimraf": "^3.0.2", - "solid-devtools": "workspace:^0.20.1", - "typescript": "^4.8.4", - "vite": "^3.1.8", - "vite-plugin-solid": "^2.3.10", - "vitest": "^0.23.4", + "vite": "^3.2.3", "webextension-polyfill": "^0.10.0", "zip-a-folder": "^1.1.5" }, "dependencies": { "@solid-devtools/frontend": "workspace:^0.0.7", "@solid-devtools/shared": "workspace:^0.9.2", - "@solid-primitives/utils": "^3.1.0" + "@solid-primitives/utils": "^3.1.0", + "solid-devtools": "workspace:^0.20.1", + "solid-js": "^1.6.2" + }, + "overrides": { + "@crxjs/vite-plugin": { + "vite": "^3" + } }, "packageManager": "pnpm@7.13.0" } diff --git a/packages/extension/shared/messanger.ts b/packages/extension/shared/messanger.ts index e409c560..e1a344b0 100644 --- a/packages/extension/shared/messanger.ts +++ b/packages/extension/shared/messanger.ts @@ -1,4 +1,4 @@ -import { LOG_MESSAGES, OnMessageFn, PostMessageFn, Messages } from '@solid-devtools/shared/bridge' +import { LOG_MESSAGES, OnMessageFn, PostMessageFn, Messages } from 'solid-devtools/bridge' import { log } from '@solid-devtools/shared/utils' export const DEVTOOLS_CONTENT_PORT = 'DEVTOOLS_CONTENT_PORT' @@ -20,7 +20,7 @@ export function createPortMessanger(port: chrome.runtime.Port): { port.onMessage.removeListener(onMessage) }) - function onMessage(event: unknown, port: chrome.runtime.Port) { + function onMessage(event: unknown) { if (!event || typeof event !== 'object') return const e = event as Record if (typeof e.id !== 'string') return diff --git a/packages/extension/src/bridge.ts b/packages/extension/src/bridge.ts index c096abe4..b1a9d27f 100644 --- a/packages/extension/src/bridge.ts +++ b/packages/extension/src/bridge.ts @@ -1,6 +1,6 @@ import { Controller } from '@solid-devtools/frontend' -import { once } from '@solid-devtools/shared/bridge' import { createRuntimeMessanger } from '../shared/messanger' +import { once } from 'solid-devtools/bridge' export default function createBridge({ setVersions, @@ -25,8 +25,11 @@ export default function createBridge({ onHighlightElementChange(data) { postRuntimeMessage('HighlightElement', data) }, - onInspect(payloa) { - postRuntimeMessage('ToggleInspected', payloa) + onInspectValue(payload) { + postRuntimeMessage('ToggleInspectedValue', payload) + }, + onInspectNode(node) { + postRuntimeMessage('SetInspectedNode', node) }, }) @@ -38,11 +41,7 @@ export default function createBridge({ onRuntimeMessage('SetInspectedDetails', controller.setInspectedDetails.bind(controller)) - onRuntimeMessage('SignalUpdates', controller.updateSignals.bind(controller)) - - onRuntimeMessage('PropsUpdate', controller.updateProps.bind(controller)) - - onRuntimeMessage('ValueUpdate', controller.updateValue.bind(controller)) + onRuntimeMessage('InspectorUpdate', controller.updateInspector.bind(controller)) onRuntimeMessage('ClientLocatorMode', controller.setLocatorState.bind(controller)) diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index 28d05291..e1980f28 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -14,14 +14,13 @@ const r = (str: TemplateStringsArray) => resolve(__dirname, str.join('')) export default defineConfig({ plugins: [solidPlugin({ dev: false }), crx({ manifest })], resolve: { - conditions: ['browser', 'development'], alias: { '@solid-devtools/shared': r`../shared/src`, }, }, define: { // need to insert the "" quotes manually, because vite just inserts the value as-is. - __CLIENT_VERSION__: `"${pkg.devDependencies['solid-devtools'].match(/\d+.\d+.\d+/)![0]}"`, + __CLIENT_VERSION__: `"${pkg.dependencies['solid-devtools'].match(/\d+.\d+.\d+/)![0]}"`, }, build: { emptyOutDir: false, diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 55603bdb..3dbbfe26 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -36,6 +36,7 @@ "dependencies": { "@floating-ui/dom": "^1.0.3", "@otonashixav/solid-flip": "^0.10.5", + "@solid-devtools/debugger": "workspace:^0.13.1", "@solid-devtools/shared": "workspace:^0.9.2", "@solid-primitives/context": "^0.1.2", "@solid-primitives/cursor": "^0.0.101", @@ -43,7 +44,7 @@ "@solid-primitives/event-bus": "^0.1.3", "@solid-primitives/event-listener": "^2.2.3", "@solid-primitives/keyboard": "^1.0.3", - "@solid-primitives/keyed": "^1.1.3", + "@solid-primitives/keyed": "^1.1.4", "@solid-primitives/media": "^2.0.3", "@solid-primitives/props": "^2.2.2", "@solid-primitives/range": "^0.1.3", @@ -56,23 +57,18 @@ "@vanilla-extract/private": "^1.0.3", "clsx": "^1.2.1", "csstype": "^3.1.1", - "solid-floating-ui": "^0.1.0", - "solid-headless": "^0.12.6", - "solid-transition-group": "^0.0.11", - "type-fest": "^3.1.0" + "solid-floating-ui": "^0.2.0", + "solid-headless": "^0.13.0", + "solid-transition-group": "^0.0.12", + "type-fest": "^3.2.0" }, "devDependencies": { - "@types/node": "^18.11.3", "@vanilla-extract/esbuild-plugin": "^2.2.0", "autoprefixer": "^10.4.12", - "postcss": "^8.4.18", - "solid-js": "^1.6.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "postcss": "^8.4.18" }, "peerDependencies": { - "solid-js": "^1.5.7" + "solid-js": "^1.6.2" }, "packageManager": "pnpm@7.13.0" } diff --git a/packages/frontend/src/App.css.ts b/packages/frontend/src/App.css.ts index 4978c595..3f594278 100644 --- a/packages/frontend/src/App.css.ts +++ b/packages/frontend/src/App.css.ts @@ -24,9 +24,6 @@ export const header = style({ columnGap: spacing[2], backgroundColor: panelBg, borderBottom: panelBorder, -}) - -export const h3 = style({ color: color.black, ...media({ [dark]: { @@ -34,6 +31,7 @@ export const h3 = style({ }, }), }) + export const select = style({ width: spacing[7], height: spacing[7], diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index b25ba007..f937462f 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -8,7 +8,7 @@ import Structure from './modules/structure/Structure' import { useController } from './controller' import * as styles from './App.css' -const SelectComponent: Component<{}> = props => { +const SelectComponent: Component<{}> = () => { const ctx = useController() return ( = props => { ) } -const Options: Component<{}> = props => { +const Options: Component<{}> = () => { return ( {({ isOpen, setState }) => { @@ -85,7 +85,7 @@ const App: Component<{ headerSubtitle?: JSX.Element }> = props => {
-

Welcome to Solid Devtools

+

Welcome to Solid Devtools

{props.headerSubtitle &&

{props.headerSubtitle}

}
diff --git a/packages/frontend/src/controller.tsx b/packages/frontend/src/controller.tsx index 60c24416..88750eeb 100644 --- a/packages/frontend/src/controller.tsx +++ b/packages/frontend/src/controller.tsx @@ -1,7 +1,18 @@ import { batch, createEffect, createSignal, on } from 'solid-js' import { createContextProvider } from '@solid-primitives/context' -import { NodeID, NodeType, RootsUpdates } from '@solid-devtools/shared/graph' -import type { Messages } from '@solid-devtools/shared/bridge' +import { + ComputationUpdate, + HighlightElementPayload, + Mapped, + NodeID, + NodeType, + RootsUpdates, +} from '@solid-devtools/debugger/types' +import type { + InspectorUpdate, + SetInspectedNodeData, + ToggleInspectedValueData, +} from '@solid-devtools/debugger' import createStructure from './modules/structure' import createInspector from './modules/inspector' @@ -13,23 +24,22 @@ type ListenersFromPayloads> = { } interface ClientListenerPayloads { - Inspect: Messages['ToggleInspected'] + InspectNode: SetInspectedNodeData + InspectValue: ToggleInspectedValueData DevtoolsLocatorStateChange: boolean - HighlightElementChange: Messages['HighlightElement'] + HighlightElementChange: HighlightElementPayload } export type ClientListeners = ListenersFromPayloads interface DevtoolsListenerPayloads { ResetPanel: void - SetInspectedDetails: Messages['SetInspectedDetails'] + SetInspectedDetails: Mapped.OwnerDetails StructureUpdate: RootsUpdates | null - ComputationUpdates: Messages['ComputationUpdates'] - SignalUpdates: Messages['SignalUpdates'] - PropsUpdate: Messages['PropsUpdate'] - ValueUpdate: Messages['ValueUpdate'] + ComputationUpdates: ComputationUpdate[] + InspectorUpdate: InspectorUpdate[] ClientLocatorModeChange: boolean - ClientHoveredComponent: Messages['ClientHoveredComponent'] - ClientInspectedNode: Messages['ClientInspectedNode'] + ClientHoveredComponent: { nodeId: NodeID; state: boolean } + ClientInspectedNode: NodeID } export type DevtoolsListeners = ListenersFromPayloads @@ -48,19 +58,13 @@ export class Controller { updateStructure(update: RootsUpdates | null) { this.listeners.onStructureUpdate(update) } - updateComputation(computationUpdate: Messages['ComputationUpdates']) { + updateComputation(computationUpdate: DevtoolsListenerPayloads['ComputationUpdates']) { this.listeners.onComputationUpdates(computationUpdate) } - updateSignals(signalUpdates: Messages['SignalUpdates']) { - this.listeners.onSignalUpdates(signalUpdates) + updateInspector(inspectorUpdate: DevtoolsListenerPayloads['InspectorUpdate']) { + this.listeners.onInspectorUpdate(inspectorUpdate) } - updateProps(propsUpdate: Messages['PropsUpdate']) { - this.listeners.onPropsUpdate(propsUpdate) - } - updateValue(valueUpdate: Messages['ValueUpdate']) { - this.listeners.onValueUpdate(valueUpdate) - } - setInspectedDetails(ownerDetails: Messages['SetInspectedDetails']) { + setInspectedDetails(ownerDetails: DevtoolsListenerPayloads['SetInspectedDetails']) { this.listeners.onSetInspectedDetails(ownerDetails) } resetPanel() { @@ -69,10 +73,10 @@ export class Controller { setLocatorState(active: boolean) { this.listeners.onClientLocatorModeChange(active) } - setHoveredNode(node: Messages['ClientHoveredComponent']) { + setHoveredNode(node: DevtoolsListenerPayloads['ClientHoveredComponent']) { this.listeners.onClientHoveredComponent(node) } - setInspectedNode(node: Messages['ClientInspectedNode']) { + setInspectedNode(node: DevtoolsListenerPayloads['ClientInspectedNode']) { this.listeners.onClientInspectedNode(node) } } @@ -134,14 +138,8 @@ const [Provider, useControllerCtx] = createContextProvider((props: { controller: inspector.handleStructureChange() }) }, - onSignalUpdates({ signals, update }) { - inspector.handleSignalUpdates(signals, update) - }, - onPropsUpdate(updated) { - inspector.handlePropsUpdate(updated) - }, - onValueUpdate({ value, update }) { - inspector.handleValueUpdate(value, update) + onInspectorUpdate(payload) { + inspector.update(payload) }, }) @@ -158,18 +156,14 @@ const [Provider, useControllerCtx] = createContextProvider((props: { controller: ), ) - // send inspected node/value/prop/signal - inspector.setOnInspectedHandler(payload => { - if (payload.type === 'node') { - const node = payload.data - const nodePayload = node - ? { nodeId: node.id, rootId: structure.getParentRoot(node).id } - : null - client.onInspect({ type: 'node', data: nodePayload }) - } else { - client.onInspect(payload) - } + // set inspected node + inspector.setOnInspectedNodeHandler(node => { + client.onInspectNode( + node ? { nodeId: node.id, rootId: structure.getParentRoot(node).id } : null, + ) }) + // toggle inspected value/prop/signal + inspector.setOnInspectedValueHandler(client.onInspectValue) // highlight hovered element createEffect( diff --git a/packages/frontend/src/modules/inspector/Inspector.tsx b/packages/frontend/src/modules/inspector/Inspector.tsx index 3397a355..2e6736b6 100644 --- a/packages/frontend/src/modules/inspector/Inspector.tsx +++ b/packages/frontend/src/modules/inspector/Inspector.tsx @@ -1,83 +1,115 @@ -import { Component, Show } from 'solid-js' +import { Component, createMemo, For, JSX, Show } from 'solid-js' import { Entries } from '@solid-primitives/keyed' -import { NodeType } from '@solid-devtools/shared/graph' +import { NodeType } from '@solid-devtools/debugger/types' import { Scrollable, Badge } from '@/ui' -import { Signals, ValueNode } from './SignalNode' +import { ValueNode } from './ValueNode' import { useController } from '@/controller' -import { $VALUE, Inspector } from '.' +import { Inspector } from '.' import * as styles from './inspector.css' +export default function Details() { + const { inspector } = useController() + + return ( + +
+ + + {details => } + + +
+
+ ) +} + +function ListSignals(props: { when: T; title: JSX.Element; children: JSX.Element }) { + return ( + +
+

{props.title}

+
    {props.children}
+
+
+ ) +} + const DetailsContent: Component<{ details: Inspector.Details }> = ({ details }) => { - const { name, id, type, signals, props: componentProps, value: nodeValue } = details + const { name, id, type, props: componentProps, ownerValue } = details const { inspector } = useController() + const signals = createMemo(() => { + const list = Object.values(details.signals) + const memos: typeof list = [] + const signals: typeof list = [] + const stores: typeof list = [] + for (const signal of list) { + if (signal.type === NodeType.Memo) memos.push(signal) + else if (signal.type === NodeType.Signal) signals.push(signal) + else if (signal.type === NodeType.Store) stores.push(signal) + } + return { memos, signals, stores } + }) + return (
-
-

- {name} #{id} -

-
{NodeType[type]}
-
-
- {componentProps && ( -
-

Props {componentProps.proxy && PROXY}

- +
+
+

+ {name} #{id} +

+
{NodeType[type]}
+
+
+ Props {componentProps!.proxy && PROXY}} + > + {(name, value) => ( inspector.togglePropSelection(name)} + extended={value().selected} + onClick={() => inspector.inspectValueItem('prop', name)} onElementHover={inspector.toggleHoveredElement} + isSignal /> )} -
- )} -
-

Signals

- + + {(['stores', 'signals', 'memos'] as const).map(type => ( + + + {signal => ( + inspector.inspectValueItem('signal', signal.id)} + onElementHover={inspector.toggleHoveredElement} + isSignal={type !== 'stores'} + /> + )} + + + ))} + {ownerValue && ( +
+

{NodeType[type]}

+ inspector.inspectValueItem('value')} + onElementHover={inspector.toggleHoveredElement} + isSignal + /> +
+ )}
- {nodeValue && ( -
- - inspector.listenToValueUpdates(id => id === $VALUE && listener()) - } - onClick={() => inspector.toggleValueSelection()} - onElementHover={inspector.toggleHoveredElement} - /> -
- )}
) } - -export default function Details() { - const { inspector } = useController() - - return ( - -
- - - {details => } - - -
-
- ) -} diff --git a/packages/frontend/src/modules/inspector/SignalNode.tsx b/packages/frontend/src/modules/inspector/SignalNode.tsx deleted file mode 100644 index 8ffe3ba1..00000000 --- a/packages/frontend/src/modules/inspector/SignalNode.tsx +++ /dev/null @@ -1,329 +0,0 @@ -import { - Component, - ComponentProps, - createContext, - createMemo, - createSignal, - For, - JSX, - Match, - ParentComponent, - Show, - splitProps, - Switch, - untrack, - useContext, -} from 'solid-js' -import { Entries } from '@solid-primitives/keyed' -import { NodeID, NodeType } from '@solid-devtools/shared/graph' -import { - EncodedValue, - EncodedValueOf, - INFINITY, - NAN, - NEGATIVE_INFINITY, - ValueType, -} from '@solid-devtools/shared/serialize' -import clsx from 'clsx' -import { Highlight, Icon } from '@/ui' -import { $VALUE, Inspector } from '.' -import * as styles from './SignalNode.css' -import { createHover } from '@solid-devtools/shared/primitives' -import { Listen } from '@solid-primitives/event-bus' -import { createPingedSignal } from '@/utils' - -type ValueComponent = Component, 'type'>> - -const StringValuePreview: ValueComponent = props => ( - "{props.value}" -) - -const NumberValuePreview: ValueComponent = props => { - const value = () => { - switch (props.value) { - case NAN: - return 'NaN' - case INFINITY: - return 'Infinity' - case NEGATIVE_INFINITY: - return '-Infinity' - default: - return props.value - } - } - return {value()} -} - -const BooleanValuePreview: ValueComponent = props => ( - e.preventDefault()} - checked={props.value} - > -) - -const FunctionValuePreview: ValueComponent = props => ( - {props.value ? `f ${props.value}()` : 'function()'} -) -const GetterValuePreview: ValueComponent = props => ( - get {props.value}() -) - -const NullableValuePreview: Component<{ value: null | undefined }> = props => ( - {props.value === null ? 'null' : 'undefined'} -) - -const SymbolValuePreview: ValueComponent = props => ( - Symbol({props.value}) -) - -const InstanceValuePreview: ValueComponent = props => ( - {props.value} -) - -export type ToggleElementHover = (elementId: NodeID, hovered?: boolean) => void - -const ElementHoverContext = createContext() - -const ElementValuePreview: ValueComponent = props => { - const onHover = useContext(ElementHoverContext) - - const handleHover = - onHover && - ((hovered: boolean) => { - if (props.value.id === undefined) return - onHover(props.value.id, hovered) - }) - - const hoverProps = handleHover && createHover(handleHover) - - return ( - -
- {props.value.name} - - ) -} - -const ObjectValuePreview: Component< - EncodedValueOf & { extended?: boolean } -> = props => ( - - - 0} - fallback={ - - Empty {props.type === ValueType.Array ? 'Array' : 'Object'} - - } - > - - {props.type === ValueType.Array ? 'Array' : 'Object'} [{props.value}] - - - - - - - -) - -const CollapsableObjectPreview: Component<{ - value: - | EncodedValueOf['children'] - | EncodedValueOf['children'] -}> = props => { - return ( -
    - - {(key, value) => ( - - {key} - - - } - > - {untrack(() => { - const [extended, setExtended] = createSignal(false) - return ( - { - e.stopPropagation() - setExtended(p => !p) - }} - > - {key} - - | EncodedValueOf)} - extended={extended()} - /> - - ) - })} - - )} - -
- ) -} - -const ValuePreview: Component<{ value: EncodedValue }> = props => - createMemo(() => { - switch (props.value.type) { - case ValueType.String: - return - case ValueType.Number: - return - case ValueType.Boolean: - return - case ValueType.Object: - case ValueType.Array: - return - case ValueType.Function: - return - case ValueType.Getter: - return - case ValueType.Null: - return - case ValueType.Undefined: - return - case ValueType.Symbol: - return - case ValueType.Instance: - return - case ValueType.Element: - return - // default: - // return {ValueType[props.value.type]} - } - }) - -const ValueName: ParentComponent<{ isTitle?: boolean; isMemo?: boolean }> = props => { - return ( -
- {props.isTitle !== true && props.isMemo && } -
- {props.children} -
-
- ) -} - -const ValueRow: ParentComponent<{ selected?: boolean } & ComponentProps<'li'>> = props => { - const [, attrs] = splitProps(props, ['selected', 'children', 'class']) - - // early return if this value in not selectable (if undefined, this shouldn't be assigned again) - if (props.selected === undefined) { - return ( -
  • - {props.children} -
  • - ) - } - - const [isHovered, setIsHovered] = createSignal(false) - return ( -
  • { - e.stopPropagation() - setIsHovered(true) - }} - on:pointerout={e => { - e.stopPropagation() - setIsHovered(false) - }} - > -
    - {props.children} -
  • - ) -} - -export const ValueNode: Component<{ - value: EncodedValue - name: JSX.Element - nameIsTitle?: boolean - isMemo?: boolean - selected: boolean - listenToUpdate?: Listen - onClick?: VoidFunction - onElementHover?: ToggleElementHover -}> = props => { - const isUpdated = props.listenToUpdate && createPingedSignal(props.listenToUpdate) - - return ( - - - - {props.name} - - - - - - - ) -} - -type SignalControlls = { - toggleSignalSelection(id: NodeID): void - toggleHoveredElement: ToggleElementHover - listenToValueUpdates: Listen -} - -export const Signals: Component<{ each: Inspector.Signal[] } & SignalControlls> = props => { - const sorted = createMemo(() => - props.each.slice().sort((a, b) => { - if (a.type === b.type) return a.id > b.id ? 1 : -1 - return a.type === NodeType.Memo ? 1 : -1 - }), - ) - return ( - -
      - {signal => } -
    -
    - ) -} - -export const SignalNode: Component<{ signal: Inspector.Signal } & SignalControlls> = ({ - signal, - toggleSignalSelection, - toggleHoveredElement, - listenToValueUpdates, -}) => { - const { type, id, name } = signal - - return ( - listenToValueUpdates(id => id === signal.id && listener())} - onClick={() => toggleSignalSelection(id)} - onElementHover={toggleHoveredElement} - /> - ) -} diff --git a/packages/frontend/src/modules/inspector/SignalNode.css.ts b/packages/frontend/src/modules/inspector/ValueNode.css.ts similarity index 51% rename from packages/frontend/src/modules/inspector/SignalNode.css.ts rename to packages/frontend/src/modules/inspector/ValueNode.css.ts index 30d628bb..62b75496 100644 --- a/packages/frontend/src/modules/inspector/SignalNode.css.ts +++ b/packages/frontend/src/modules/inspector/ValueNode.css.ts @@ -1,86 +1,77 @@ -import { style, styleVariants } from '@vanilla-extract/css' +import { createVar, style, styleVariants } from '@vanilla-extract/css' import { CSSPropertiesWithVars } from '@vanilla-extract/css/dist/declarations/src/types' -import { dark, color, spacing, theme, media } from '@/ui/theme' +import { dark, color, spacing, theme, media, centerChild, transition } from '@/ui/theme' import { createHighlightStyles } from '@/ui/mixins' +import { colorDisabled } from '@/ui/theme/vars.css' const RowHeight = spacing[4.5] const RowGap = spacing[0.5] -export const Signals = { - container: style({ +export const row = (() => { + const valueRowHighlight = createHighlightStyles() + + const container = style({ display: 'flex', - flexDirection: 'column', - gap: RowGap, - }), -} + flexWrap: 'wrap', + alignItems: 'flex-start', + paddingLeft: '2ch', + fontFamily: theme.font.mono, + color: color.gray[800], + lineHeight: RowHeight, + }) -const valueRowHighlight = createHighlightStyles() + const collapseOpacity = createVar() -export const ValueRow = { - container: style([ - valueRowHighlight.container, - { - width: '100%', - display: 'flex', - flexWrap: 'wrap', - alignItems: 'flex-start', - cursor: 'pointer', - vars: { - [valueRowHighlight.bgColorVar]: color.gray[300], - [valueRowHighlight.bgOpacityVar]: '0', - }, - fontFamily: theme.font.mono, - color: color.gray[800], - lineHeight: RowHeight, - }, - ]), - containerFocused: style({ - vars: { - [valueRowHighlight.bgOpacityVar]: '0.2', - }, - }), - containerHovered: style({ - vars: { [valueRowHighlight.bgOpacityVar]: '0.3' }, - }), - highlight: style([ - valueRowHighlight.highlight, - { - border: `1px solid ${color.gray[400]}`, + return { + collapseOpacity, + container: styleVariants({ + base: [container], + collapsable: [ + container, + valueRowHighlight.container, + { + cursor: 'pointer', + vars: { + [valueRowHighlight.bgColorVar]: color.gray[300], + [valueRowHighlight.bgOpacityVar]: '0', + }, + selectors: { + [`&[data-hovered=true]`]: { + vars: { [valueRowHighlight.bgOpacityVar]: '0.3' }, + }, + }, + ...media({ + [dark]: { + vars: { + [valueRowHighlight.bgColorVar]: color.gray[600], + }, + }, + }), + }, + ], + }), + highlight: style([valueRowHighlight.highlight, { border: `1px solid ${color.gray[400]}` }]), + toggle: { + container: style({ + position: 'absolute', + left: `-${spacing[1]}`, + width: RowHeight, + height: RowHeight, + ...centerChild, + }), + button: style({ + opacity: collapseOpacity, + ...transition('opacity'), + }), }, - ]), -} + } +})() -const ValueName_container_base = style({ - display: 'flex', - alignItems: 'center', - height: RowHeight, -}) -const ValueName_name_base = style({ - height: RowHeight, - minWidth: '5ch', - marginRight: '2ch', - ':after': { - content: ':', - color: color.gray[500], - }, - ...media({ - [dark]: { - ':after': { - color: color.gray[500], - }, - }, - }), -}) -export const ValueName = { - container: styleVariants({ - base: [ValueName_container_base, { paddingLeft: spacing[2] }], - title: [ValueName_container_base], - }), - signalDot: style({ - width: spacing[1], - height: spacing[1], - borderRadius: '50%', - backgroundColor: color.amber[400], +export const name = { + container: style({ + display: 'flex', + alignItems: 'center', + height: RowHeight, }), icon: style({ height: spacing[3], @@ -93,31 +84,32 @@ export const ValueName = { }, }), }), - name: styleVariants({ - base: [ - ValueName_name_base, - { - fontWeight: 600, - fontFamily: theme.font.mono, - color: color.gray[800], - ...media({ - [dark]: { - color: color.gray[200], - }, - }), + name: style({ + height: RowHeight, + minWidth: '5ch', + marginRight: '2ch', + userSelect: 'none', + ':after': { + content: ':', + color: colorDisabled, + }, + fontFamily: theme.font.mono, + color: color.gray[800], + ...media({ + [dark]: { + color: color.gray[200], }, - ], - title: [ - ValueName_name_base, - { - color: color.gray[500], + }), + selectors: { + '&[data-signal=true]': { + color: color.amber[600], ...media({ [dark]: { - color: color.gray[300], + color: color.amber[500], }, }), }, - ], + }, }), highlight: style({ display: 'inline-block', @@ -125,7 +117,7 @@ export const ValueName = { } export const baseValue = style({ - fontWeight: 600, + fontWeight: 500, height: RowHeight, color: color.gray[800], ...media({ @@ -140,7 +132,7 @@ const bracketsStyles: CSSPropertiesWithVars = { color: color.gray[800], } export const ValueObject = style({ - color: color.disabled, + color: colorDisabled, ':before': { ...bracketsStyles, content: '{', @@ -157,7 +149,6 @@ export const collapsable = { display: 'flex', flexDirection: 'column', gap: RowGap, - marginLeft: '2ch', }), } @@ -165,6 +156,8 @@ export const ValueString = style([ baseValue, { minHeight: RowHeight, + height: 'fit-content', + maxWidth: 'fit-content', color: color.green, ...media({ [dark]: { @@ -202,7 +195,7 @@ export const ValueFunction = style([ export const Nullable = style([ baseValue, { - color: color.disabled, + color: colorDisabled, }, ]) @@ -214,11 +207,6 @@ export const ValueElement = { elHighlight.container, { color: color.amber[600], - ...media({ - [dark]: { - color: color.amber[600], - }, - }), textTransform: 'lowercase', vars: { [elHighlight.bgColorVar]: color.gray[300], @@ -230,13 +218,21 @@ export const ValueElement = { }, }, ':before': { - color: color.disabled, + color: colorDisabled, content: `<`, }, ':after': { - color: color.disabled, + color: colorDisabled, content: '/>', }, + ...media({ + [dark]: { + color: color.amber[500], + vars: { + [elHighlight.bgColorVar]: color.gray[600], + }, + }, + }), }, ]), highlight: elHighlight.highlight, diff --git a/packages/frontend/src/modules/inspector/ValueNode.tsx b/packages/frontend/src/modules/inspector/ValueNode.tsx new file mode 100644 index 00000000..8d5353cd --- /dev/null +++ b/packages/frontend/src/modules/inspector/ValueNode.tsx @@ -0,0 +1,301 @@ +import { + Component, + createContext, + createMemo, + createSignal, + JSX, + Match, + Show, + Switch, + untrack, + useContext, +} from 'solid-js' +import { Entries } from '@solid-primitives/keyed' +import { assignInlineVars } from '@vanilla-extract/dynamic' +import { + NodeID, + EncodedValue, + EncodedValueOf, + INFINITY, + NAN, + NEGATIVE_INFINITY, + ValueType, +} from '@solid-devtools/debugger/types' +import { createHover, createPingedSignal } from '@solid-devtools/shared/primitives' +import { CollapseToggle, Highlight } from '@/ui' +import * as styles from './ValueNode.css' + +type ToggleElementHover = (elementId: NodeID, hovered?: boolean) => void + +const ValueContext = createContext<{ onElementHover?: ToggleElementHover; underStore: boolean }>() + +function createNestedHover() { + const [isHovered, setIsHovered] = createSignal(false) + return { + isHovered, + hoverProps: { + 'on:pointerover': (e: PointerEvent) => { + e.stopPropagation() + setIsHovered(true) + }, + 'on:pointerout': (e: PointerEvent) => { + e.stopPropagation() + setIsHovered(false) + }, + }, + } +} + +const getIsCollapsable = (value: EncodedValue): boolean => + value.type === ValueType.Object || + value.type === ValueType.Array || + value.type === ValueType.Store + +export const ValueNode: Component<{ + value: EncodedValue + name: JSX.Element + extended?: boolean + /** top-level, or inside a store (the value can change) */ + isSignal?: boolean + onClick?: VoidFunction + onElementHover?: ToggleElementHover +}> = props => { + const ctx = useContext(ValueContext) + const isStore = () => props.value.type === ValueType.Store + const isCollapsable = () => getIsCollapsable(props.value) + + const isUpdated = + props.isSignal || ctx?.underStore ? createPingedSignal(() => props.value) : undefined + + const ValueContent = () => + + const handleSelect = () => { + if (props.onClick && isCollapsable()) props.onClick() + } + + const content = createMemo(() => ( + <> +
    +
    + + {props.name} + +
    +
    + { + // provide context if one isn't already provided or if the value is a store + // (so that the ctx.underStore could be overwritten) + ctx && !isStore() ? ( + + ) : ( + + + + ) + } + + )) + + return ( + {content()}}> + {untrack(() => { + const { isHovered, hoverProps } = createNestedHover() + return ( +
  • +
    +
    + +
    + {content()} +
  • + ) + })} +
    + ) +} + +const ValuePreview: Component<{ value: EncodedValue; extended?: boolean }> = props => { + return createMemo(() => { + const value = props.value + switch (value.type) { + case ValueType.String: + return + case ValueType.Number: + return + case ValueType.Boolean: + return + case ValueType.Object: + case ValueType.Array: + return + case ValueType.Function: + return + case ValueType.Getter: + return + case ValueType.Null: + case ValueType.Undefined: + return + case ValueType.Symbol: + return + case ValueType.Instance: + return + case ValueType.Element: + return + case ValueType.Store: + return + // default: + // return {ValueType[props.value.type]} + } + }) +} + +const CollapsableObjectPreview: Component<{ + value: EncodedValueOf['children'] +}> = props => ( +
      + + {(key, value) => ( + { + const [extended, setExtended] = createSignal(false) + return ( + setExtended(p => !p)} + extended={extended()} + /> + ) + })} + fallback={} + /> + )} + +
    +) + +const getObjectLength = ( + obj: EncodedValueOf, +): number => + obj.children + ? Array.isArray(obj.children) + ? obj.children.length + : Object.keys(obj.children).length + : obj.value + +const ObjectValuePreview: ValueComponent = props => { + const length = createMemo(() => getObjectLength(props.value)) + return ( + }> + + + Empty {props.value.type === ValueType.Array ? 'Array' : 'Object'} + + + + + {props.value.type === ValueType.Array ? 'Array' : 'Object'} [{length()}] + + + + ) +} + +type ValueComponent = Component<{ + value: EncodedValueOf + extended?: boolean +}> + +const StringValuePreview: ValueComponent = props => ( + "{props.value.value}" +) + +const NumberValuePreview: ValueComponent = props => { + const value = () => { + switch (props.value.value) { + case NAN: + return 'NaN' + case INFINITY: + return 'Infinity' + case NEGATIVE_INFINITY: + return '-Infinity' + default: + return props.value.value + } + } + return {value()} +} + +const BooleanValuePreview: ValueComponent = props => ( + e.preventDefault()} + checked={props.value.value} + > +) + +const FunctionValuePreview: ValueComponent = props => ( + + {props.value.value ? `f ${props.value.value}()` : 'function()'} + +) +const GetterValuePreview: ValueComponent = props => ( + get {props.value.value}() +) + +const NullableValuePreview: ValueComponent = props => ( + {props.value.type === ValueType.Null ? 'null' : 'undefined'} +) + +const SymbolValuePreview: ValueComponent = props => ( + Symbol({props.value.value}) +) + +const InstanceValuePreview: ValueComponent = props => ( + {props.value.value} +) + +const ElementValuePreview: ValueComponent = props => { + const { onElementHover: onHover } = useContext(ValueContext) ?? {} + + const handleHover = + onHover && + ((hovered: boolean) => { + if (props.value.value.id === undefined) return + onHover(props.value.value.id, hovered) + }) + + const hoverProps = handleHover && createHover(handleHover) + + return ( + +
    + {props.value.value.name} + + ) +} diff --git a/packages/frontend/src/modules/inspector/index.ts b/packages/frontend/src/modules/inspector/index.ts index 09b3542c..9f328f3d 100644 --- a/packages/frontend/src/modules/inspector/index.ts +++ b/packages/frontend/src/modules/inspector/index.ts @@ -1,142 +1,190 @@ import { batch, createEffect, createSelector, createSignal } from 'solid-js' import { createStore, produce } from 'solid-js/store' -import { Writable } from 'type-fest' -import { createSimpleEmitter } from '@solid-primitives/event-bus' -import { Mapped, NodeID, NodeType } from '@solid-devtools/shared/graph' -import { EncodedValue } from '@solid-devtools/shared/serialize' -import { defer, untrackedCallback } from '@solid-devtools/shared/primitives' +import { defer, untrackedCallback, WritableDeep } from '@solid-devtools/shared/primitives' +import { error, warn } from '@solid-devtools/shared/utils' +import { + InspectorUpdate, + ProxyPropsUpdate, + StoreNodeUpdate, + ToggleInspectedValueData, + ValueNodeUpdate, + NodeType, + NodeID, + EncodedValue, + ValueItemID, + ValueItemType, + Mapped, + EncodedValueOf, + ValueType, +} from '@solid-devtools/debugger/types' import type { Structure } from '../structure' +import { Writable } from 'type-fest' export namespace Inspector { - export type Signal = { - readonly type: NodeType.Signal | NodeType.Memo - readonly name: string - readonly id: NodeID - readonly observers: NodeID[] - readonly value: EncodedValue + export interface ValueItem { + readonly itemId: ValueItemID readonly selected: boolean + readonly value: EncodedValue } - export type Props = { - readonly proxy: boolean - readonly record: Record< - string, - { readonly selected: boolean; readonly value: EncodedValue } - > - } - - export interface Details { - readonly id: NodeID + export interface Signal extends ValueItem { + readonly type: NodeType.Signal | NodeType.Memo | NodeType.Store readonly name: string - readonly type: NodeType - readonly path: Structure.Node[] - readonly signals: Record - readonly props?: Props - readonly value?: EncodedValue - readonly valueSelected: boolean - // TODO: more to come + readonly id: NodeID } -} -// TODO: this probably needs to be done when the inspected computation is rerun -// function reconcileSignals( -// newSignals: readonly Mapped.Signal[], -// signals: Record, -// ): void { -// const prev = new Set(Object.keys(signals)) -// for (const raw of newSignals) { -// const { id } = raw -// const signal = signals[id] -// if (signal) { -// // update signal observers -// signal.observers.length = 0 -// signal.observers.push.apply(signal.observers, raw.observers) -// // update signal value -// reconcileValue(signal.value, raw.value) -// prev.delete(id) -// } -// // add new signal -// else signals[id] = createSignalNode(raw) -// } -// // remove signals -// for (const id of prev) delete signals[id] -// } - -function reconcileValue(proxy: EncodedValue, next: EncodedValue) { - proxy.type = next.type - // value is a literal, so we can just assign it - if ('value' in next) proxy.value = next.value - else delete proxy.value - if (next.children) { - // add new children - if (!proxy.children) (proxy as EncodedValue).children = next.children - // reconcile children - else { - for (const key of Object.keys(proxy.children) as never[]) { - // remove child - if (!next.children[key]) delete proxy.children[key] - // update child - else reconcileValue(proxy.children[key], next.children[key]) - } - for (const key of Object.keys(next.children) as never[]) { - // add child - if (!proxy.children[key]) proxy.children[key] = next.children[key] - } - } - } - // remove children - else delete proxy.children -} + export type PropsRecord = Readonly> + export type SignalsRecord = Readonly> -function createSignalNode(raw: Readonly): Inspector.Signal { - return { ...raw, selected: false } + export type Details = Readonly<{ + id: NodeID + name: string + type: NodeType + path: Structure.Node[] + signals: SignalsRecord + props?: Readonly<{ + proxy: boolean + record: PropsRecord + }> + ownerValue?: ValueItem | undefined + }> } -function reconcileProps(proxy: Writable, raw: Mapped.Props): void { - const record = proxy.record - const newRecord = raw.record - proxy.proxy = raw.proxy - // the props cannot be deleted/added, so we can just update them - for (const [key, prop] of Object.entries(record)) { - const newProp = newRecord[key] - if (!newProp) delete record[key] - else reconcileValue(prop.value, newProp) - } - for (const [key, newProp] of Object.entries(newRecord)) { - if (!record[key]) record[key] = { value: newProp, selected: false } - } +const splitValueNodeId = (id: ValueItemID) => { + return id.split(':') as [ValueItemType, undefined | NodeID | string] } function createDetails( raw: Readonly, path: Structure.Node[], ): Inspector.Details { - const signals = raw.signals.reduce((signals, signal) => { - signals[signal.id] = createSignalNode(signal) - return signals - }, {} as Inspector.Details['signals']) + const signals: Writable = {} + for (const { id, name, type, value } of raw.signals) + signals[id] = { id, name, type, selected: false, value, itemId: `signal:${id}` } + const details: Writable = { id: raw.id, name: raw.name, type: raw.type, path, signals, - value: raw.value, - valueSelected: false, + ownerValue: raw.value ? { itemId: 'value', selected: false, value: raw.value } : undefined, } if (raw.props) { details.props = { proxy: raw.props.proxy, record: Object.entries(raw.props.record).reduce((props, [propName, value]) => { - props[propName] = { value, selected: false } + props[propName] = { value, selected: false, itemId: `prop:${propName}` } return props - }, {} as Inspector.Props['record']), + }, {} as Writable), } } return details } -export const $VALUE = Symbol('value') +function reconcileValueAtPath( + value: EncodedValue, + path: readonly (string | number)[], + property: string | number, + newValue: EncodedValue | undefined | number, +): void { + const fullPathString = [...path, property].join('.') + for (const key of path) { + if (!value.children) return error('Invalid path', fullPathString) + value = value.children[key as never] + } + const children = value?.children + if (!children) return error('Invalid path', fullPathString) + if (newValue === undefined) delete children[property as never] + else children[property as never] = newValue as any +} + +const XOR = (a: unknown, b: unknown) => (a || b) && !(a && b) + +function updateValueNode(obj: { value: EncodedValue }, newValue: EncodedValue): void { + if (obj.value.type === newValue.type) { + if (obj.value.type === ValueType.Store) { + obj = obj.value.value + newValue = (newValue as EncodedValueOf).value.value + } + const expanded = XOR('children' in obj.value!, 'children' in newValue) + if (expanded) { + obj.value!.children = newValue.children + return + } + } + obj.value = newValue +} + +function findStoreNode( + value: EncodedValue, + storeId: NodeID, +): EncodedValueOf | undefined { + if (value.type === ValueType.Store && value.value.id === storeId) return value + if (value.children) { + for (const child of Object.values(value.children)) { + const store = findStoreNode(child, storeId) + if (store) return store + } + } +} + +function findValueNode(details: Inspector.Details, valueId: ValueItemID): EncodedValue | undefined { + const [type, id] = splitValueNodeId(valueId) + if (type === 'signal') return details.signals[id!]?.value + if (type === 'prop') return details.props?.record[id!]?.value + return details.ownerValue?.value +} + +function updateValueItem( + proxy: WritableDeep, + { id: valueId, value }: ValueNodeUpdate, +): void { + const [type, id] = splitValueNodeId(valueId) + // Update signal/memo/store top-level value + if (type === 'signal') { + const signal = proxy.signals[id!] + if (!signal) throw `updateValue: value node (${valueId}) not found` + updateValueNode(signal, value) + } + // Update prop value + else if (type === 'prop') { + const prop = proxy.props?.record[id!] + if (!prop) throw `updateValue: prop (${valueId}) not found` + updateValueNode(prop, value) + } + // Update inspected node value + else proxy.ownerValue && updateValueNode(proxy.ownerValue, value) +} + +/** + * Props — add/remove changed prop keys of an proxy object + */ +function updateProps( + proxy: WritableDeep, + { added, removed }: ProxyPropsUpdate, +): void { + const props = proxy.props! + for (const key of added) + props.record[key] = { + value: { type: ValueType.Getter, value: key }, + selected: false, + itemId: `prop:${key}`, + } + for (const key of removed) delete props.record[key] +} + +function updateStore( + proxy: WritableDeep, + { path, property, storeId, value, valueNodeId }: StoreNodeUpdate, +): void { + const valueNode = findValueNode(proxy, valueNodeId) + if (!valueNode) return warn(`updateStore: value node (${valueNodeId}) not found`) + // TODO cache the store node + const store = findStoreNode(valueNode, storeId) + if (!store) return warn(`updateStore: store node (${storeId}) not found`) + reconcileValueAtPath(store.value.value, path, property, value) +} export default function createInspector({ getNodePath, @@ -146,10 +194,8 @@ export default function createInspector({ findNode(id: NodeID): Structure.Node | undefined }) { const [inspectedNode, setInspectedNode] = createSignal(null) - const [state, setDetails] = createStore<{ value: Inspector.Details | null }>({ value: null }) - const details = () => state.value - - const [listenToValueUpdates, emitValueUpdate] = createSimpleEmitter() + const [_state, setDetails] = createStore({ value: null as Inspector.Details | null }) + const details = () => _state.value const isNodeInspected = createSelector(() => inspectedNode()?.id ?? null) @@ -185,69 +231,66 @@ export default function createInspector({ const setNewDetails = untrackedCallback((raw: Mapped.OwnerDetails) => { const node = inspectedNode() - if (!node) return console.warn('setDetails: no node is being inspected') + if (!node) return warn('setDetails: no node is being inspected') setDetails('value', createDetails(raw, getNodePath(node))) }) - const handleSignalUpdates = untrackedCallback( - (updates: { id: NodeID; value: EncodedValue }[], isUpdate = true) => { - if (!details()) return - setDetails( - 'value', - 'signals', - produce(proxy => { - for (const update of updates) { - const signal = proxy[update.id] - if (!signal) return - reconcileValue(signal.value, update.value) - } - }), - ) - isUpdate && updates.forEach(update => emitValueUpdate(update.id)) - }, - ) - const handlePropsUpdate = untrackedCallback((props: Mapped.Props) => { - if (!details()?.props) return + // Handle Inspector updates comming from the debugger + function handleUpdate(updates: InspectorUpdate[]) { setDetails( 'value', - 'props', - produce(proxy => reconcileProps(proxy!, props)), - ) - }) - const handleValueUpdate = untrackedCallback((value: EncodedValue, isUpdate: boolean) => { - if (!details()?.value) return - setDetails( - 'value', - 'value', - produce(proxy => reconcileValue(proxy!, value)), + produce(proxy => { + if (!proxy) return + for (const update of updates) { + switch (update[0]) { + case 'value': + updateValueItem(proxy, update[1]) + break + case 'props': + updateProps(proxy, update[1]) + break + case 'store': + updateStore(proxy, update[1]) + break + } + } + }), ) - isUpdate && emitValueUpdate($VALUE) - }) + } /** variable for a callback in bridge.ts */ - let onInspectedHandler: - | (( - payload: - | { type: 'node'; data: Structure.Node | null } - | { type: 'signal' | 'prop'; data: { id: NodeID; selected: boolean } } - | { type: 'value'; data: boolean }, - ) => void) - | undefined - const setOnInspectedHandler = (fn: typeof onInspectedHandler) => (onInspectedHandler = fn) + let onInspectedNodeHandler: (node: Structure.Node | null) => void = () => {} + let onInspectedValueHandler: (data: ToggleInspectedValueData) => void = () => {} + const setOnInspectedValueHandler = (fn: typeof onInspectedValueHandler) => + (onInspectedValueHandler = fn) + const setOnInspectedNodeHandler = (fn: typeof onInspectedNodeHandler) => + (onInspectedNodeHandler = fn) - createEffect(defer(inspectedNode, node => onInspectedHandler?.({ type: 'node', data: node }))) + createEffect(defer(inspectedNode, node => onInspectedNodeHandler(node))) - function togglePropSelection(id: string, selected?: boolean): void { - setDetails('value', 'props', 'record', id, 'selected', p => (selected = selected ?? !p)) - onInspectedHandler!({ type: 'prop', data: { id, selected: selected! } }) - } - function toggleSignalSelection(id: NodeID, selected?: boolean) { - setDetails('value', 'signals', id, 'selected', p => (selected = selected ?? !p)) - onInspectedHandler!({ type: 'signal', data: { id, selected: selected! } }) - } - function toggleValueSelection(selected?: boolean) { - setDetails('value', 'valueSelected', p => (selected = selected ?? !p)) - onInspectedHandler!({ type: 'value', data: selected! }) + /** + * Toggle the inspection of a value item (signal, prop, or owner value) + */ + function inspectValueItem(type: 'value', id?: undefined, selected?: boolean): void + function inspectValueItem( + type: Exclude, + id: string, + selected?: boolean, + ): void + function inspectValueItem(type: ValueItemType, id?: string, selected?: boolean): void { + setDetails( + 'value', + produce((proxy: WritableDeep | null) => { + if (!proxy) return + let item: Writable | undefined + if (type === 'value') item = proxy.ownerValue + else if (type === 'signal') item = proxy.signals[id!] + else if (type === 'prop') item = proxy.props?.record[id!] + if (!item) return + item.selected = selected = selected ?? !item.selected + onInspectedValueHandler({ id: item.itemId, selected }) + }), + ) } // @@ -262,20 +305,16 @@ export default function createInspector({ return { inspectedNode, details, - listenToValueUpdates, setInspectedNode: setInspected, isNodeInspected, setDetails: setNewDetails, - handleSignalUpdates, - handlePropsUpdate, - handleValueUpdate, - toggleSignalSelection, - toggleValueSelection, - togglePropSelection, - onInspectedHandler, + update: handleUpdate, + inspectValueItem, + onInspectedHandler: onInspectedValueHandler, hoveredElement, toggleHoveredElement, handleStructureChange, - setOnInspectedHandler, + setOnInspectedValueHandler, + setOnInspectedNodeHandler, } } diff --git a/packages/frontend/src/modules/inspector/inspector.css.ts b/packages/frontend/src/modules/inspector/inspector.css.ts index b54e5712..b69f87d0 100644 --- a/packages/frontend/src/modules/inspector/inspector.css.ts +++ b/packages/frontend/src/modules/inspector/inspector.css.ts @@ -1,4 +1,5 @@ import { dark, spacing, color, media } from '@/ui/theme' +import { colorDisabled } from '@/ui/theme/vars.css' import { style } from '@vanilla-extract/css' export const scrollWrapper = style({ @@ -8,6 +9,10 @@ export const scrollWrapper = style({ }) export const root = style({ + minWidth: '100%', + width: 'fit-content', +}) +export const rootMargin = style({ padding: spacing[4], paddingBottom: spacing[16], }) @@ -17,7 +22,6 @@ export const header = style({ }) export const h1 = style({ - // TODO: typography fontSize: spacing[4], fontWeight: 'bold', color: color.black, @@ -29,18 +33,13 @@ export const h1 = style({ }) export const id = style({ fontSize: spacing[3], - color: color.gray[500], + color: colorDisabled, fontWeight: 400, textTransform: 'uppercase', }) export const type = style({ fontWeight: 400, - color: color.gray[500], - ...media({ - [dark]: { - color: color.gray[300], - }, - }), + color: colorDisabled, }) export const content = style({ @@ -50,11 +49,7 @@ export const content = style({ }) export const h2 = style({ - color: color.gray[500], + color: colorDisabled, marginBottom: spacing[1], - ...media({ - [dark]: { - color: color.gray[300], - }, - }), + textTransform: 'capitalize', }) diff --git a/packages/frontend/src/modules/structure/OwnerNode.tsx b/packages/frontend/src/modules/structure/OwnerNode.tsx index 1d7207be..63880192 100644 --- a/packages/frontend/src/modules/structure/OwnerNode.tsx +++ b/packages/frontend/src/modules/structure/OwnerNode.tsx @@ -1,11 +1,10 @@ import { Component } from 'solid-js' import { assignInlineVars } from '@vanilla-extract/dynamic' -import { NodeType } from '@solid-devtools/shared/graph' -import { Badge, Highlight, Icon } from '@/ui' +import { NodeType } from '@solid-devtools/debugger/types' +import { Badge, CollapseToggle, Highlight, Icon } from '@/ui' import { useStructure } from './ctx' import * as styles from './ownerNode.css' -import { createHover } from '@solid-devtools/shared/primitives' -import { createPingedSignal } from '@/utils' +import { createHover, createPingedSignal, trackFromListen } from '@solid-devtools/shared/primitives' import type { Structure } from '.' export const NodeTypeIcon: Component<{ type: NodeType; class?: string }> = props => { @@ -47,7 +46,7 @@ export const OwnerNode: Component<{ const { toggleCollapsed } = ctx const isCollapsed = ctx.isCollapsed.bind(null, owner) - const isUpdated = createPingedSignal(listener => listenToUpdate(listener)) + const isUpdated = createPingedSignal(trackFromListen(listener => listenToUpdate(listener))) const hoverProps = createHover(onHoverChange) @@ -57,23 +56,18 @@ export const OwnerNode: Component<{ data-selected={props.isSelected} data-frozen={props.owner.frozen} class={styles.container} - onClick={e => onInspectChange(!props.isSelected)} + onClick={() => onInspectChange(!props.isSelected)} {...hoverProps} style={assignInlineVars({ [styles.levelVar]: props.owner.level + '' })} >
    - + onToggle={() => toggleCollapsed(owner)} + isCollapsed={isCollapsed()} + /> {/* TODO: observers and sources highlighting */} <> diff --git a/packages/frontend/src/modules/structure/Path.tsx b/packages/frontend/src/modules/structure/Path.tsx index 512c1f4b..7fb90eef 100644 --- a/packages/frontend/src/modules/structure/Path.tsx +++ b/packages/frontend/src/modules/structure/Path.tsx @@ -1,18 +1,19 @@ import { Component } from 'solid-js' -import { NodeType } from '@solid-devtools/shared/graph' +import { NodeType } from '@solid-devtools/debugger/types' import { createHover } from '@solid-devtools/shared/primitives' import { Icon } from '@/ui' import { NodeTypeIcon } from './OwnerNode' -import type { Structure } from '.' import { useController } from '@/controller' import * as styles from './path.css' -export const OwnerPath: Component<{ path: Structure.Node[] }> = props => { - const { isNodeHovered, toggleHoveredNode, setInspectedNode } = useController() +export const OwnerPath: Component = () => { + const { isNodeHovered, toggleHoveredNode, setInspectedNode, inspectedDetails } = useController() + + const path = () => inspectedDetails()?.path ?? [] return (
    - {props.path.map((node, index) => { + {path().map((node, index) => { const hoverProps = createHover(hovering => toggleHoveredNode(node.id, hovering)) return ( <> diff --git a/packages/frontend/src/modules/structure/Structure.tsx b/packages/frontend/src/modules/structure/Structure.tsx index 740c7955..6a103684 100644 --- a/packages/frontend/src/modules/structure/Structure.tsx +++ b/packages/frontend/src/modules/structure/Structure.tsx @@ -1,17 +1,8 @@ -import { - Accessor, - Component, - createEffect, - createMemo, - createSignal, - For, - Show, - untrack, -} from 'solid-js' +import { Accessor, Component, createEffect, createMemo, createSignal, For, untrack } from 'solid-js' import { assignInlineVars } from '@vanilla-extract/dynamic' import { useRemSize } from '@solid-primitives/styles' import { createResizeObserver } from '@solid-primitives/resize-observer' -import { NodeID } from '@solid-devtools/shared/graph' +import { NodeID } from '@solid-devtools/debugger/types' import type { Structure } from '.' import { Scrollable } from '@/ui' import { StructureProvider } from './ctx' @@ -22,16 +13,12 @@ import * as styles from './structure.css' import { useController } from '@/controller' export default function StructureView() { - const { inspectedDetails } = useController() - return (
    - - - +
    @@ -44,7 +31,7 @@ type DisplayNode = { update: VoidFunction } -const DisplayStructureTree: Component = props => { +const DisplayStructureTree: Component = () => { const [containerScroll, setContainerScroll] = createSignal({ top: 0, height: 0 }) const remSize = useRemSize() diff --git a/packages/frontend/src/modules/structure/index.ts b/packages/frontend/src/modules/structure/index.ts index 3393f30f..805e9912 100644 --- a/packages/frontend/src/modules/structure/index.ts +++ b/packages/frontend/src/modules/structure/index.ts @@ -1,5 +1,5 @@ import { Accessor, createMemo, createSelector, createSignal, untrack } from 'solid-js' -import { NodeID, NodeType, RootsUpdates } from '@solid-devtools/shared/graph' +import { NodeID, NodeType, RootsUpdates } from '@solid-devtools/debugger/types' import { reconcileStructure } from './structure-reconcile' import { createSimpleEmitter } from '@solid-primitives/event-bus' diff --git a/packages/frontend/src/modules/structure/ownerNode.css.ts b/packages/frontend/src/modules/structure/ownerNode.css.ts index 4e77dbc7..54130d2c 100644 --- a/packages/frontend/src/modules/structure/ownerNode.css.ts +++ b/packages/frontend/src/modules/structure/ownerNode.css.ts @@ -1,7 +1,6 @@ import { createVar, style } from '@vanilla-extract/css' import { CSSVarFunction } from '@vanilla-extract/private' import { - centerChild, color, dark, inset, @@ -79,10 +78,7 @@ export const nameContainer = style({ export const collapse = style({ position: 'absolute', - height: rowHeight, - width: rowHeight, left: `-${rowHeight}`, - ...centerChild, opacity: 0, ...transition('background-color'), ':before': { @@ -101,9 +97,7 @@ export const collapse = style({ '&:hover:before': { backgroundColor: color.gray[200], }, - [`&${dataSelected}`]: { - opacity: 1, - }, + [`&[aria-selected=true]`]: { opacity: 1 }, }, ...media({ [dark]: { @@ -118,25 +112,6 @@ export const collapse = style({ }, }), }) -export const collapseIcon = style({ - width: spacing[2], - height: spacing[2], - color: color.gray[600], - transform: 'rotate(180deg)', - opacity: 0.5, - ...transition(['transform', 'opacity']), - selectors: { - [`${collapse}[aria-selected="true"] &`]: { - transform: 'rotate(90deg)', - opacity: 1, - }, - }, - ...media({ - [dark]: { - color: color.gray[400], - }, - }), -}) const strikeThroughLine: CSSPropertiesWithVars = { content: '', diff --git a/packages/frontend/src/modules/structure/structure-reconcile.ts b/packages/frontend/src/modules/structure/structure-reconcile.ts index 1b5700e4..f5d9a0fe 100644 --- a/packages/frontend/src/modules/structure/structure-reconcile.ts +++ b/packages/frontend/src/modules/structure/structure-reconcile.ts @@ -1,4 +1,4 @@ -import { Mapped, NodeID, NodeType, RootsUpdates } from '@solid-devtools/shared/graph' +import { Mapped, NodeID, NodeType, RootsUpdates } from '@solid-devtools/debugger/types' import type { Structure } from '.' let $nextNodeList: Structure.Node[] diff --git a/packages/frontend/src/modules/structure/test/structure.test.ts b/packages/frontend/src/modules/structure/test/structure.test.ts index ba6eca03..8c884bcf 100644 --- a/packages/frontend/src/modules/structure/test/structure.test.ts +++ b/packages/frontend/src/modules/structure/test/structure.test.ts @@ -1,7 +1,7 @@ import type { Structure } from '..' import { reconcileStructure } from '../structure-reconcile' import { describe, expect, test } from 'vitest' -import { Mapped, NodeID, NodeType } from '@solid-devtools/shared/graph' +import { Mapped, NodeID, NodeType } from '@solid-devtools/debugger/types' describe('reconcileStructure', () => { let updated: Record = { diff --git a/packages/frontend/src/ui/components/button/Button.tsx b/packages/frontend/src/ui/components/button/Button.tsx index 548a1d84..82bd0035 100644 --- a/packages/frontend/src/ui/components/button/Button.tsx +++ b/packages/frontend/src/ui/components/button/Button.tsx @@ -1,7 +1,9 @@ -import { ParentComponent, ComponentProps } from 'solid-js' +import { ParentComponent, ComponentProps, Component } from 'solid-js' // import { AriaToggleButtonProps, createToggleButton } from "@solid-aria/button" import { combineProps } from '@solid-primitives/props' +import { Icon } from '@/ui' import * as styles from './button.css' +import clsx from 'clsx' export const ToggleButton: ParentComponent< ComponentProps<'button'> & { onToggle: (selected: boolean) => void; selected: boolean } @@ -20,3 +22,29 @@ export const ToggleButton: ParentComponent< return + ) +} diff --git a/packages/frontend/src/ui/components/button/button.css.ts b/packages/frontend/src/ui/components/button/button.css.ts index 988c4f39..a02bb4a3 100644 --- a/packages/frontend/src/ui/components/button/button.css.ts +++ b/packages/frontend/src/ui/components/button/button.css.ts @@ -9,6 +9,7 @@ import { rounded, theme, transition, + spacing, } from '@/ui/theme' const selectedSelector = '&:is([aria-selected="true"], [aria-expanded="true"])' @@ -69,3 +70,45 @@ export const toggleButtonStyles: ComplexStyleRule = { } export const toggleButton = style(toggleButtonStyles) + +export const Collapse = (() => { + const button = style({ + position: 'relative', + height: '1.25rem', + width: '1.25rem', + flexShrink: 0, + ...centerChild, + }) + + const defaultCollapsed = style({}) + + return { + button, + defaultCollapsed, + icon: style({ + width: spacing[2], + height: spacing[2], + color: color.gray[600], + transform: 'rotate(180deg)', + opacity: 0.5, + ...transition(['transform', 'opacity']), + selectors: { + [`${button}[aria-selected="true"] &`]: { + transform: 'rotate(90deg)', + opacity: 1, + }, + [`${defaultCollapsed} &`]: { + opacity: 1, + }, + [`${defaultCollapsed}[aria-selected="true"] &`]: { + opacity: 0.5, + }, + }, + ...media({ + [dark]: { + color: color.gray[400], + }, + }), + }), + } +})() diff --git a/packages/frontend/src/ui/components/error-overlay/ErrorOverlay.tsx b/packages/frontend/src/ui/components/error-overlay/ErrorOverlay.tsx index d38c2f45..2032df08 100644 --- a/packages/frontend/src/ui/components/error-overlay/ErrorOverlay.tsx +++ b/packages/frontend/src/ui/components/error-overlay/ErrorOverlay.tsx @@ -51,6 +51,7 @@ const RenderErrorOverlay: Component< export const ErrorOverlay: ParentComponent<{ footer?: JSX.Element }> = props => { return ( console.error(e)} render={overlayProps => } > diff --git a/packages/frontend/src/ui/components/loading/Skeleton.tsx b/packages/frontend/src/ui/components/loading/Skeleton.tsx index 94df7d15..79feb31e 100644 --- a/packages/frontend/src/ui/components/loading/Skeleton.tsx +++ b/packages/frontend/src/ui/components/loading/Skeleton.tsx @@ -2,7 +2,7 @@ import { Component } from 'solid-js' import { createPolled } from '@solid-primitives/timer' import * as styles from './Skeleton.css' -export const Skeleton: Component<{}> = props => { +export const Skeleton: Component<{}> = () => { const nDots = createPolled((p: number = 0) => (p === 3 ? 1 : ++p), 800) return
    Loading{Array.from({ length: nDots() }, () => '.')}
    diff --git a/packages/frontend/src/ui/theme/index.ts b/packages/frontend/src/ui/theme/index.ts index 6d69daa4..2abc9a8c 100644 --- a/packages/frontend/src/ui/theme/index.ts +++ b/packages/frontend/src/ui/theme/index.ts @@ -78,7 +78,6 @@ export const theme = { gray, green: '#16a34a', red: '#ef4444', - disabled: gray[500], }, spacing: { px: '1px', diff --git a/packages/frontend/src/ui/theme/vars.css.ts b/packages/frontend/src/ui/theme/vars.css.ts index b78282e4..bcebc598 100644 --- a/packages/frontend/src/ui/theme/vars.css.ts +++ b/packages/frontend/src/ui/theme/vars.css.ts @@ -4,18 +4,21 @@ import { color, dark, media } from '.' export const panelBorderBg = createVar() export const panelBorder = createVar() export const panelBg = createVar() +export const colorDisabled = createVar() export const vars = style({ vars: { [panelBorderBg]: color.gray[200], [panelBorder]: `1px solid ${panelBorderBg}`, [panelBg]: color.gray[50], + [colorDisabled]: color.gray[500], }, ...media({ [dark]: { vars: { [panelBorderBg]: color.gray[600], [panelBg]: color.gray[800], + [colorDisabled]: color.gray[400], }, }, }), diff --git a/packages/frontend/src/utils.ts b/packages/frontend/src/utils.ts deleted file mode 100644 index 56ed7d5a..00000000 --- a/packages/frontend/src/utils.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createSignal, onCleanup } from 'solid-js' -import { Listen } from '@solid-primitives/event-bus' - -/** - * Creates a signal that will be activated for a given amount of time on every "ping" — a call to the listener function. - */ -export function createPingedSignal(listen: Listen, timeout = 400) { - const [isUpdated, setIsUpdated] = createSignal(false) - - let timeoutId: NodeJS.Timeout | undefined - const unsub = listen(() => { - setIsUpdated(true) - clearTimeout(timeoutId) - timeoutId = setTimeout(() => setIsUpdated(false), 400) - }) - onCleanup(() => { - clearTimeout(timeoutId) - unsub() - }) - - return isUpdated -} diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json index 03712ab5..bc4d1afa 100644 --- a/packages/frontend/tsconfig.json +++ b/packages/frontend/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.json", "compilerOptions": { "paths": { - "@solid-devtools/shared/*": ["../shared/src/*"], "@/*": ["./src/*"] } }, diff --git a/packages/logger/package.json b/packages/logger/package.json index 4def9703..91ee452d 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -48,13 +48,10 @@ "dev": "tsup --watch", "build": "tsup", "test": "echo \"NOOP test\"", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit --paths null" }, "devDependencies": { - "solid-js": "^1.6.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.23.4" + "tsup": "^6.4.0" }, "dependencies": { "@solid-devtools/debugger": "workspace:^0.13.1", @@ -62,7 +59,7 @@ "@solid-primitives/utils": "^3.1.0" }, "peerDependencies": { - "solid-js": "^1.5.0" + "solid-js": "^1.6.2" }, "packageManager": "pnpm@7.13.0" } diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index 42117aea..9b7b2310 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { Accessor, onCleanup, $PROXY, untrack, createEffect, on } from 'solid-js' import { arrayEquals, asArray, Many } from '@solid-primitives/utils' import { @@ -12,8 +13,12 @@ import { lookupOwner, makeValueUpdateListener, removeValueUpdateObserver, + Core, + getOwner, + Solid, + isSolidStore, } from '@solid-devtools/debugger' -import { getOwner, NodeType, Solid, Core } from '@solid-devtools/shared/graph' +import { NodeType } from '@solid-devtools/debugger/types' import { dedupeArray, arrayRefEquals } from '@solid-devtools/shared/utils' import { getComputationCreatedLabel, @@ -42,6 +47,7 @@ declare module 'solid-js/types/reactive/signal' { $debugSignals?: boolean $debugOwned?: boolean } + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface SignalState { $debugSignal?: boolean } @@ -425,7 +431,10 @@ export function debugOwnerSignals(owner?: Core.Owner, options: DebugSignalOption if (solidOwner.sourceMap) { const sourceList = Object.values(solidOwner.sourceMap) // signals can only be added - for (i = prevSourceListLength; i < sourceList.length; i++) signals.push(sourceList[i]) + for (i = prevSourceListLength; i < sourceList.length; i++) { + const signal = sourceList[i] + if (!isSolidStore(signal)) signals.push(signal) + } prevSourceListLength = i } // add owned memos diff --git a/packages/logger/src/log.ts b/packages/logger/src/log.ts index 5b961727..a05757bc 100644 --- a/packages/logger/src/log.ts +++ b/packages/logger/src/log.ts @@ -1,8 +1,15 @@ +/* eslint-disable no-console */ // see https://developer.chrome.com/docs/devtools/console/format-style/ // to gen a overview of how to style console messages -import { getNodeName, getNodeType, getOwnerType, isSolidMemo } from '@solid-devtools/debugger' -import { NodeType, Solid } from '@solid-devtools/shared/graph' +import { + getNodeName, + getNodeType, + getOwnerType, + isSolidMemo, + Solid, +} from '@solid-devtools/debugger' +import { NodeType } from '@solid-devtools/debugger/types' import { dedupeArray } from '@solid-devtools/shared/utils' import { getDiffMap, getStackDiffMap } from './utils' diff --git a/packages/overlay/package.json b/packages/overlay/package.json index 4b49c190..5c152a57 100644 --- a/packages/overlay/package.json +++ b/packages/overlay/package.json @@ -39,7 +39,7 @@ "scripts": { "dev": "pnpm run build --watch", "build": "tsx ./scripts/build.ts", - "typecheck": "tsc --noEmit", + "typecheck": "tsc --noEmit --paths null", "build:vite": "vite build", "build:tsup": "tsup" }, @@ -47,8 +47,6 @@ "@types/clean-css": "^4.2.6", "chokidar": "^3.5.3", "clean-css": "^5.3.1", - "esbuild": "^0.15.12", - "esbuild-plugin-solid": "^0.4.2", "tsx": "^3.10.4" }, "dependencies": { @@ -58,11 +56,10 @@ "@solid-primitives/cursor": "^0.0.101", "@solid-primitives/event-listener": "^2.2.3", "@solid-primitives/media": "^2.0.3", - "@solid-primitives/utils": "^3.1.0", - "solid-js": "^1.6.0" + "@solid-primitives/utils": "^3.1.0" }, "peerDependencies": { - "solid-js": "^1.5.7" + "solid-js": "^1.6.2" }, "packageManager": "pnpm@7.13.0" } diff --git a/packages/overlay/scripts/build.ts b/packages/overlay/scripts/build.ts index d0a3fbfb..68d8eef5 100644 --- a/packages/overlay/scripts/build.ts +++ b/packages/overlay/scripts/build.ts @@ -86,6 +86,7 @@ const commonOptions: esbuild.BuildOptions = { bundle: true, loader: { '.css': 'text' }, watch: isDev, + minify: !isDev, color: true, external: externals, treeShaking: true, diff --git a/packages/overlay/src/controller.ts b/packages/overlay/src/controller.ts index cf36f1e4..c11576fb 100644 --- a/packages/overlay/src/controller.ts +++ b/packages/overlay/src/controller.ts @@ -5,10 +5,18 @@ import { defer } from '@solid-devtools/shared/primitives' enableRootsAutoattach() +const clone = (obj: T): T => JSON.parse(JSON.stringify(obj)) +const separate = (obj: T, callback: (value: T) => void): void => { + queueMicrotask(() => { + const v = clone(obj) + queueMicrotask(() => callback(v)) + }) +} + export function createController() { const debug = useDebugger() - onCleanup(() => debug.setInspectedNode(null)) + onCleanup(() => debug.inspector.setInspectedNode(null)) const controller = new Controller({ onDevtoolsLocatorStateChange(enabled) { @@ -17,23 +25,11 @@ export function createController() { onHighlightElementChange(data) { queueMicrotask(() => debug.locator.setHighlightTarget(data)) }, - onInspect(payload) { - queueMicrotask(() => { - if (payload.type === 'node') { - debug.setInspectedNode(payload.data) - } else if (payload.type === 'value') { - debug.setInspectedValue(payload.data) - } else if (payload.type === 'prop') { - debug.setInspectedProp(payload.data.id, payload.data.selected) - } else if (payload.type === 'signal') { - const { id, selected } = payload.data - const value = debug.setInspectedSignal(id, selected) - value && - queueMicrotask(() => { - controller.updateSignals({ signals: [{ id, value }], update: false }) - }) - } - }) + onInspectNode(node) { + queueMicrotask(() => debug.inspector.setInspectedNode(node)) + }, + onInspectValue(node) { + queueMicrotask(() => debug.inspector.toggleValueNode(node)) }, }) @@ -45,21 +41,13 @@ export function createController() { queueMicrotask(() => controller.updateComputation(updates)) }) - debug.listenTo('SignalUpdates', updates => { - queueMicrotask(() => controller.updateSignals({ signals: updates, update: true })) - }) - - debug.listenTo('PropsUpdate', updates => { - queueMicrotask(() => controller.updateProps(updates)) - }) - - debug.listenTo('ValueUpdate', ({ value, update }) => { - queueMicrotask(() => controller.updateValue({ value, update })) + debug.listenTo('InspectorUpdate', payload => { + separate(payload, payload => controller.updateInspector(payload)) }) // send the focused owner details debug.listenTo('InspectedNodeDetails', details => { - queueMicrotask(() => controller.setInspectedDetails(details)) + separate(details, details => controller.setInspectedDetails(details)) }) // send the state of the client locator mode diff --git a/packages/overlay/src/index.tsx b/packages/overlay/src/index.tsx index 9c68e841..489f8e48 100644 --- a/packages/overlay/src/index.tsx +++ b/packages/overlay/src/index.tsx @@ -34,7 +34,7 @@ export const DevtoolsOverlay: Component = props => { return '' } -const Overlay: Component = props => { +const Overlay: Component = () => { const debug = useDebugger() onCleanup(() => debug.toggleEnabled(false)) diff --git a/packages/overlay/src/prod.ts b/packages/overlay/src/prod.ts index 094173b6..429efa70 100644 --- a/packages/overlay/src/prod.ts +++ b/packages/overlay/src/prod.ts @@ -1,5 +1,5 @@ import type * as API from '.' -export const DevtoolsOverlay: typeof API.DevtoolsOverlay = props => { +export const DevtoolsOverlay: typeof API.DevtoolsOverlay = () => { return '' } diff --git a/packages/shared/package.json b/packages/shared/package.json index 77c4bbaf..61a7fd23 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -20,7 +20,7 @@ "dev": "tsup --watch", "build": "tsup", "test": "vitest", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit --paths null" }, "private": false, "sideEffects": false, @@ -34,16 +34,6 @@ "require": "./dist/index.cjs", "types": "./dist/index.d.ts" }, - "./bridge": { - "import": "./dist/bridge.js", - "require": "./dist/bridge.cjs", - "types": "./dist/bridge.d.ts" - }, - "./graph": { - "import": "./dist/graph.js", - "require": "./dist/graph.cjs", - "types": "./dist/graph.d.ts" - }, "./utils": { "import": "./dist/utils.js", "require": "./dist/utils.cjs", @@ -54,11 +44,6 @@ "require": "./dist/variables.cjs", "types": "./dist/variables.d.ts" }, - "./serialize": { - "import": "./dist/serialize.js", - "require": "./dist/serialize.cjs", - "types": "./dist/serialize.d.ts" - }, "./primitives": { "import": "./dist/primitives.js", "require": "./dist/primitives.cjs", @@ -67,34 +52,19 @@ }, "typesVersions": { "*": { - "bridge": [ - "./dist/bridge.d.ts" - ], - "graph": [ - "./dist/graph.d.ts" - ], "utils": [ "./dist/utils.d.ts" ], "variables": [ "./dist/variables.d.ts" ], - "serialize": [ - "./dist/serialize.d.ts" - ], "primitives": [ "./dist/primitives.d.ts" ] } }, - "devDependencies": { - "solid-js": "^1.6.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.23.4" - }, "peerDependencies": { - "solid-js": "^1.5.0" + "solid-js": "^1.6.2" }, "dependencies": { "@solid-primitives/event-bus": "^0.1.3", @@ -104,6 +74,6 @@ "@solid-primitives/scheduled": "^1.1.0", "@solid-primitives/styles": "^0.0.100", "@solid-primitives/utils": "^3.1.0", - "type-fest": "^3.1.0" + "type-fest": "^3.2.0" } } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 2d9ab923..673c6fc2 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,6 +1,3 @@ -export * as bridge from './bridge' -export * as graph from './graph' export * as primitives from './primitives' -export * as serialize from './serialize' export * as utils from './utils' export * as variables from './variables' diff --git a/packages/shared/src/primitives.ts b/packages/shared/src/primitives.ts index 0df216a0..db36cb9a 100644 --- a/packages/shared/src/primitives.ts +++ b/packages/shared/src/primitives.ts @@ -1,3 +1,12 @@ +import { + Accessor, + createMemo, + createSignal, + getOwner, + onCleanup, + untrack, + createComputed, +} from 'solid-js' import type { AccessorArray, EffectFunction, @@ -6,11 +15,18 @@ import type { OnEffectFunction, SignalOptions, } from 'solid-js/types/reactive/signal' -import { Accessor, createMemo, createSignal, getOwner, onCleanup, untrack } from 'solid-js' import { AnyFunction, onRootCleanup } from '@solid-primitives/utils' import { makeEventListener } from '@solid-primitives/event-listener' import { createSharedRoot } from '@solid-primitives/rootless' import { createMediaQuery } from '@solid-primitives/media' +import { Primitive } from 'type-fest' +import { Listen } from '@solid-primitives/event-bus' + +export type WritableDeep = 0 extends 1 & T + ? T + : T extends Primitive + ? T + : { -readonly [K in keyof T]: WritableDeep } export const untrackedCallback = (fn: Fn): Fn => ((...a: Parameters) => untrack>(fn.bind(void 0, ...a))) as any @@ -164,3 +180,28 @@ export function atom(value?: T, options?: SignalOptions): Atom const [state, setState] = createSignal(value, { internal: true, ...options }) return (...args: any[]) => (args.length === 1 ? setState(args[0]) : state()) } + +export function trackFromListen(listen: Listen): VoidFunction { + const [track, trigger] = createSignal(undefined, { equals: false }) + listen(trigger) + return track +} + +/** + * Creates a signal that will be activated for a given amount of time on every "ping" — a call to the listener function. + */ +export function createPingedSignal(track: VoidFunction, timeout = 400): Accessor { + const [isUpdated, setIsUpdated] = createSignal(false) + + let timeoutId: ReturnType | undefined + createComputed( + defer(track, () => { + setIsUpdated(true) + clearTimeout(timeoutId) + timeoutId = setTimeout(() => setIsUpdated(false), timeout) + }), + ) + onCleanup(() => clearTimeout(timeoutId)) + + return isUpdated +} diff --git a/packages/shared/src/serialize.ts b/packages/shared/src/serialize.ts deleted file mode 100644 index 1ab6190b..00000000 --- a/packages/shared/src/serialize.ts +++ /dev/null @@ -1,125 +0,0 @@ -export const INFINITY = '__$sdt-Infinity__' -export const NEGATIVE_INFINITY = '__$sdt-NegativeInfinity__' -export const NAN = '__$sdt-NaN__' - -export enum ValueType { - Number, - Boolean, - String, - Null, - Undefined, - Symbol, - Array, - Object, - Function, - Getter, - Element, - Instance, -} - -export type EncodedPreviewPayloadMap = { - [ValueType.Array]: number - [ValueType.Object]: number - [ValueType.Number]: number | typeof INFINITY | typeof NEGATIVE_INFINITY | typeof NAN - [ValueType.Boolean]: boolean - [ValueType.String]: string - [ValueType.Symbol]: string - [ValueType.Function]: string - [ValueType.Getter]: string - [ValueType.Element]: { name: string; id?: string } - [ValueType.Instance]: string -} - -export type EncodedValueOf = { - type: K -} & (K extends keyof EncodedPreviewPayloadMap - ? { value: EncodedPreviewPayloadMap[K] } - : { value?: undefined }) & - (Deep extends true - ? K extends ValueType.Object - ? { children: Record> } - : K extends ValueType.Array - ? { children: EncodedValue[] } - : { children?: undefined } - : { children?: undefined }) - -export type EncodedValue = { - [K in ValueType]: EncodedValueOf -}[ValueType] - -export function encodeValue( - value: unknown, - deep: Deep, - elementMap?: ElementMap, -): EncodedValue { - if (typeof value === 'number') { - if (value === Infinity) return { type: ValueType.Number, value: INFINITY } - if (value === -Infinity) return { type: ValueType.Number, value: NEGATIVE_INFINITY } - if (Number.isNaN(value)) return { type: ValueType.Number, value: NAN } - return { type: ValueType.Number, value } - } - if (typeof value === 'boolean') return { type: ValueType.Boolean, value } - if (typeof value === 'string') return { type: ValueType.String, value } - if (value === null) return { type: ValueType.Null } - if (value === undefined) return { type: ValueType.Undefined } - if (typeof value === 'symbol') return { type: ValueType.Symbol, value: value.description ?? '' } - if (typeof value === 'function') return { type: ValueType.Function, value: value.name } - - if (value instanceof HTMLElement) - return { - type: ValueType.Element, - value: elementMap - ? { name: value.tagName, id: elementMap.set(value) } - : { name: value.tagName }, - } - - if (Array.isArray(value)) { - const payload = { type: ValueType.Array, value: value.length } as EncodedValueOf< - ValueType.Array, - boolean - > - if (deep) payload.children = value.map(item => encodeValue(item, true, elementMap)) - return payload - } - - const s = Object.prototype.toString.call(value) - const name = s.slice(8, -1) - if (name === 'Object') { - const obj = value as Record - const payload: EncodedValueOf = { - type: ValueType.Object, - value: Object.keys(obj).length, - } - if (deep) { - const children: Record> = (payload.children = {} as any) - for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) { - children[key] = descriptor.get - ? { type: ValueType.Getter, value: key } - : encodeValue(descriptor.value, true, elementMap) - } - } - return payload - } - - return { type: ValueType.Instance, value: name } -} - -let lastId = 0 - -export class ElementMap { - private obj: Record = {} - private map: WeakMap = new WeakMap() - - get(id: string): HTMLElement | undefined { - return this.obj[id] - } - - set(element: HTMLElement): string { - let id = this.map.get(element) - if (id !== undefined) return id - id = (lastId++).toString() - this.obj[id] = element - this.map.set(element, id) - return id - } -} diff --git a/packages/shared/src/utils.ts b/packages/shared/src/utils.ts index 0984d59d..5d0034e0 100644 --- a/packages/shared/src/utils.ts +++ b/packages/shared/src/utils.ts @@ -4,17 +4,25 @@ const getLogLabel = () => [ ] export function info(data: T): T { + // eslint-disable-next-line no-console console.info(...getLogLabel(), data) return data } export function log(...args: any[]): void { + // eslint-disable-next-line no-console console.log(...getLogLabel(), ...args) } export function warn(...args: any[]): void { + // eslint-disable-next-line no-console console.warn(...getLogLabel(), ...args) } +export function error(...args: any[]): void { + // eslint-disable-next-line no-console + console.error(...getLogLabel(), ...args) +} + export function formatTime(d: Date = new Date()): string { return ( ('0' + d.getHours()).slice(-2) + @@ -25,6 +33,23 @@ export function formatTime(d: Date = new Date()): string { ) } +export const createCallbackStack = (): { + push: (...callbacks: ((arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void)[]) => void + execute: (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void + clear: VoidFunction +} => { + let stack: Array<(arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void> = [] + const clear: VoidFunction = () => (stack = []) + return { + push: (...callbacks) => stack.push(...callbacks), + execute(arg0, arg1, arg2, arg3) { + stack.forEach(cb => cb(arg0, arg1, arg2, arg3)) + clear() + }, + clear, + } +} + export function callArrayProp< K extends PropertyKey, T extends (...args: Args) => void, diff --git a/packages/shared/src/variables.ts b/packages/shared/src/variables.ts index 466c43f6..7ab5c3bc 100644 --- a/packages/shared/src/variables.ts +++ b/packages/shared/src/variables.ts @@ -1,5 +1,2 @@ export const WINDOW_PROJECTPATH_PROPERTY = '$sdt_projectPath' -export const WINDOW_WRAP_STORE_PROPERTY = '$sdt_wrapStore' export const LOCATION_ATTRIBUTE_NAME = 'data-source-loc' -export const UNNAMED = '(unnamed)' -export const INTERNAL = Symbol('internal') diff --git a/packages/transform/README.md b/packages/transform/README.md index c6b9468f..7cba17fe 100644 --- a/packages/transform/README.md +++ b/packages/transform/README.md @@ -46,8 +46,6 @@ All of the transforms are disabled by default—you need to pick what you want b ```ts interface DevtoolsPluginOptions { - /** Wrap store creation to observe changes */ - wrapStores?: boolean /** Inject location attributes to jsx templates */ jsxLocation?: boolean /** Add automatic name when creating signals, memos, stores, or mutables */ @@ -56,7 +54,6 @@ interface DevtoolsPluginOptions { // in vite.config.ts plugins array: devtoolsPlugin({ - wrapStores: true, jsxLocation: true, name: true, }) diff --git a/packages/transform/package.json b/packages/transform/package.json index f311997a..9900c369 100644 --- a/packages/transform/package.json +++ b/packages/transform/package.json @@ -42,7 +42,7 @@ "dev": "tsup --watch", "build": "tsup", "test": "vitest", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit --paths null" }, "devDependencies": { "@babel/core": "^7.18.13", @@ -53,10 +53,7 @@ "@types/babel__core": "^7.1.19", "@types/babel__generator": "^7.6.4", "@types/babel__traverse": "^7.18.2", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vite": "^3.1.8", - "vitest": "^0.23.4" + "tsup": "^6.4.0" }, "dependencies": { "@babel/core": "^7.19.6", @@ -65,7 +62,7 @@ "@solid-devtools/shared": "workspace:^0.9.1" }, "peerDependencies": { - "solid-js": "^1.5.0", + "solid-js": "^1.6.2", "vite": "^2.2.3 || ^3.0.0" } } diff --git a/packages/transform/src/index.ts b/packages/transform/src/index.ts index ec33c0f1..74547c77 100644 --- a/packages/transform/src/index.ts +++ b/packages/transform/src/index.ts @@ -3,11 +3,8 @@ import { PluginOption } from 'vite' import { getFileExtension } from './utils' import jsxLocationPlugin from './jsxLocation' import namePlugin from './name' -import wrapStoresPlugin from './wrapStores' export interface DevtoolsPluginOptions { - /** Wrap store creation to observe changes */ - wrapStores?: boolean /** Inject location attributes to jsx templates */ jsxLocation?: boolean /** Add automatic name when creating signals, memos, stores, or mutables */ @@ -16,7 +13,7 @@ export interface DevtoolsPluginOptions { // This export is used for configuration. export const devtoolsPlugin = (options: DevtoolsPluginOptions = {}): PluginOption => { - const { wrapStores = false, jsxLocation = false, name = false } = options + const { jsxLocation = false, name = false } = options let enablePlugin = false let projectRoot = process.cwd() @@ -40,8 +37,7 @@ export const devtoolsPlugin = (options: DevtoolsPluginOptions = {}): PluginOptio // plugins that should only run on .tsx/.jsx files in development if (jsxLocation && isJSX) plugins.push(jsxLocationPlugin) - if (name) plugins.push(namePlugin) // must come before wrapStores - if (wrapStores) plugins.push(wrapStoresPlugin) + if (name) plugins.push(namePlugin) if (plugins.length === 0) return diff --git a/packages/transform/src/jsxLocation.ts b/packages/transform/src/jsxLocation.ts index 9bbd8672..69f08a4c 100644 --- a/packages/transform/src/jsxLocation.ts +++ b/packages/transform/src/jsxLocation.ts @@ -5,7 +5,7 @@ import { LOCATION_ATTRIBUTE_NAME, WINDOW_PROJECTPATH_PROPERTY, } from '@solid-devtools/shared/variables' -import { getLocationAttribute, isLowercase, windowId } from './utils' +import { getLocationAttribute, isLowercase } from './utils' const jsxLocationPlugin: PluginObj = { name: '@solid-devtools/jsx-location', @@ -21,7 +21,10 @@ const jsxLocationPlugin: PluginObj = { const body = path.node.body const dataSourceLocId = t.identifier(WINDOW_PROJECTPATH_PROPERTY) - const dataSourceLocMemberExpression = t.memberExpression(windowId, dataSourceLocId) + const dataSourceLocMemberExpression = t.memberExpression( + t.identifier('window'), + dataSourceLocId, + ) const cwdStringLiteral = t.stringLiteral(cwd) const assignmentExpression = t.assignmentExpression( '=', diff --git a/packages/transform/src/utils.ts b/packages/transform/src/utils.ts index a26c1d1f..8a8ea349 100644 --- a/packages/transform/src/utils.ts +++ b/packages/transform/src/utils.ts @@ -1,9 +1,3 @@ -import * as t from '@babel/types' - -export const windowId = t.identifier('window') -export const storeOverwriteName = '$sdt_createStore' -export const storeOverwriteNamespace = '$sdt_StoreNamespace' - const LOWERCASE_REGEX = /^[a-z0-9]+$/ export const isLowercase = (s: string) => LOWERCASE_REGEX.test(s) diff --git a/packages/transform/src/wrapStores.ts b/packages/transform/src/wrapStores.ts deleted file mode 100644 index f3f71bd1..00000000 --- a/packages/transform/src/wrapStores.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { PluginObj } from '@babel/core' -import * as t from '@babel/types' -import { WINDOW_WRAP_STORE_PROPERTY } from '@solid-devtools/shared/variables' -import { storeOverwriteName, storeOverwriteNamespace, windowId } from './utils' - -const createStoreId = t.identifier('createStore') -const createMutableId = t.identifier('createMutable') - -/* -Store.createStore = (obj, options) => { - let wrappedObj = obj; - - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - - return $sdt_createStore(wrappedObj, options); -}; -*/ - -function getStoreWrapperArrowFn(overwrite: t.Identifier): t.ArrowFunctionExpression { - const objId = t.identifier('obj') - const optionsId = t.identifier('options') - const wrappedObjId = t.identifier('wrappedObj') - const wrapStoreId = t.identifier(WINDOW_WRAP_STORE_PROPERTY) - const wrapStoreMember = t.memberExpression(windowId, wrapStoreId) - - return t.arrowFunctionExpression( - [objId, optionsId], - t.blockStatement([ - t.variableDeclaration('let', [t.variableDeclarator(wrappedObjId, objId)]), - t.ifStatement( - t.binaryExpression( - '===', - t.unaryExpression('typeof', wrapStoreMember), - t.stringLiteral('function'), - ), - t.blockStatement([ - t.toStatement( - t.assignmentExpression('=', wrappedObjId, t.callExpression(wrapStoreMember, [objId])), - ), - ]), - ), - t.returnStatement(t.callExpression(overwrite, [wrappedObjId, optionsId])), - ]), - ) -} - -const wrapStoresPlugin: PluginObj = { - name: '@solid-devtools/wrap-stores', - visitor: { - Program(path) { - const body = path.node.body - let IdSuffix = 0 - - for (let line = 0; line < body.length; line++) { - const node = body[line] - if (node.type !== 'ImportDeclaration' || node.source.value !== 'solid-js/store') continue - - for (const s of node.specifiers) { - // import * as Store from "solid-js/store" - if (s.type === 'ImportNamespaceSpecifier') { - const namespaceId = t.identifier(s.local.name) - s.local.name = storeOverwriteNamespace - - const overwriteStoreId = t.identifier(`${storeOverwriteName}${IdSuffix++}`) - const overwriteMutableId = t.identifier(`${storeOverwriteName}${IdSuffix++}`) - const originalStore = t.variableDeclaration('const', [ - t.variableDeclarator( - overwriteStoreId, - t.memberExpression(t.identifier(storeOverwriteNamespace), createStoreId), - ), - ]) - const originalMutable = t.variableDeclaration('const', [ - t.variableDeclarator( - overwriteMutableId, - t.memberExpression(t.identifier(storeOverwriteNamespace), createMutableId), - ), - ]) - const overwriteNamespace = t.variableDeclaration('const', [ - t.variableDeclarator( - namespaceId, - t.objectExpression([t.spreadElement(t.identifier(storeOverwriteNamespace))]), - ), - ]) - const overwriteStore = t.expressionStatement( - t.assignmentExpression( - '=', - t.memberExpression(namespaceId, createStoreId), - getStoreWrapperArrowFn(overwriteStoreId), - ), - ) - const overwriteMutable = t.expressionStatement( - t.assignmentExpression( - '=', - t.memberExpression(namespaceId, createMutableId), - getStoreWrapperArrowFn(overwriteMutableId), - ), - ) - - // insert after import statement - body.splice( - line + 1, - 0, - originalStore, - originalMutable, - overwriteNamespace, - overwriteStore, - overwriteMutable, - ) - line += 5 - } - // import { createStore } from "solid-js/store" - // import { createStore as userName } from "solid-js/store" - if ( - s.type === 'ImportSpecifier' && - ([(s.imported as t.Identifier).name, (s.imported as t.StringLiteral).value].includes( - 'createStore', - ) || - [(s.imported as t.Identifier).name, (s.imported as t.StringLiteral).value].includes( - 'createMutable', - )) - ) { - const userName = s.local.name - const overwriteName = `${storeOverwriteName}${IdSuffix++}` - s.local.name = overwriteName - - const overwrite = t.variableDeclaration('const', [ - t.variableDeclarator( - t.identifier(userName), - getStoreWrapperArrowFn(t.identifier(overwriteName)), - ), - ]) - - // insert after import statement - body.splice(++line, 0, overwrite) - } - } - } - }, - }, -} - -export default wrapStoresPlugin diff --git a/packages/transform/test/name.test.ts b/packages/transform/test/name.test.ts index e2a1d80e..3e57f06a 100644 --- a/packages/transform/test/name.test.ts +++ b/packages/transform/test/name.test.ts @@ -1,6 +1,5 @@ import { describe, test } from 'vitest' import plugin from '../src/name' -import wrapPlugin from '../src/wrapStores' import { assertTransform } from './utils' // Positive tests @@ -138,24 +137,3 @@ const signal = ${create}();` }) }) } - -describe('wrapStores interaction', () => { - test('named import', () => { - const src = `import { createStore } from "solid-js/store"; -const signal = createStore();` - - const expectedOutput = `import { createStore as $sdt_createStore0 } from "solid-js/store"; -const createStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return $sdt_createStore0(wrappedObj, options); -}; -const signal = createStore(undefined, { - name: "signal" -});` - - assertTransform(src, expectedOutput, plugin, wrapPlugin) - }) -}) diff --git a/packages/transform/test/wrapStores.test.ts b/packages/transform/test/wrapStores.test.ts deleted file mode 100644 index 81eaa9e0..00000000 --- a/packages/transform/test/wrapStores.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { describe, test } from 'vitest' -import { storeOverwriteName, storeOverwriteNamespace } from '../src/utils' -import plugin from '../src/wrapStores' -import { assertTransform } from './utils' - -describe('createStore', () => { - test('named import', () => { - const src = `import { createStore } from "solid-js/store";` - - const expectedOutput = `import { createStore as ${storeOverwriteName}0 } from "solid-js/store"; -const createStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) - }) - - test('renamed import', () => { - const src = `import { createStore as createSolidStore } from "solid-js/store";` - - const expectedOutput = `import { createStore as ${storeOverwriteName}0 } from "solid-js/store"; -const createSolidStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) - }) -}) - -describe('createMutable', () => { - test('named import', () => { - const src = `import { createMutable } from "solid-js/store";` - - const expectedOutput = `import { createMutable as ${storeOverwriteName}0 } from "solid-js/store"; -const createMutable = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) - }) - - test('renamed import', () => { - const src = `import { createMutable as createSolidStore } from "solid-js/store";` - - const expectedOutput = `import { createMutable as ${storeOverwriteName}0 } from "solid-js/store"; -const createSolidStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) - }) -}) - -test('namespace import', () => { - const src = `import * as Store from "solid-js/store";` - - const expectedOutput = `import * as ${storeOverwriteNamespace} from "solid-js/store"; -const ${storeOverwriteName}0 = ${storeOverwriteNamespace}.createStore; -const ${storeOverwriteName}1 = ${storeOverwriteNamespace}.createMutable; -const Store = { - ...${storeOverwriteNamespace} -}; -Store.createStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -}; -Store.createMutable = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}1(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) -}) - -test('both', () => { - const src = `import { createMutable, createStore } from "solid-js/store";` - - const expectedOutput = `import { createMutable as ${storeOverwriteName}0, createStore as ${storeOverwriteName}1 } from "solid-js/store"; -const createMutable = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}0(wrappedObj, options); -}; -const createStore = (obj, options) => { - let wrappedObj = obj; - if (typeof window.$sdt_wrapStore === "function") { - wrappedObj = window.$sdt_wrapStore(obj); - } - return ${storeOverwriteName}1(wrappedObj, options); -};` - - assertTransform(src, expectedOutput, plugin) -}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 478fb002..8622aff7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,46 +6,61 @@ importers: specifiers: '@changesets/cli': ^2.25.0 '@types/node': ^18.11.3 + '@typescript-eslint/eslint-plugin': ^5.42.0 + '@typescript-eslint/parser': ^5.42.0 babel-preset-solid: ^1.6.0 concurrently: ^7.4.0 + cross-env: ^7.0.3 esbuild: ^0.15.12 esbuild-plugin-solid: ^0.4.2 + eslint: ^8.26.0 + eslint-plugin-no-only-tests: ^3.1.0 + jsdom: ^20.0.2 prettier: 2.7.1 - solid-js: ^1.6.0 - tsup: ^6.3.0 + solid-js: ^1.6.2 + tsup: ^6.4.0 turbo: ^1.5.6 typescript: ^4.8.4 + vite: ^3.2.3 vite-plugin-solid: ^2.3.10 vitest: ^0.23.4 + dependencies: + solid-js: 1.6.2 devDependencies: - '@changesets/cli': 2.25.0 - '@types/node': 18.11.3 - babel-preset-solid: 1.6.0_@babel+core@7.19.6 - concurrently: 7.4.0 - esbuild: 0.15.12 - esbuild-plugin-solid: 0.4.2_bvef6vnf23wxoq6euuutaswigy + '@changesets/cli': 2.25.2 + '@types/node': 18.11.9 + '@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq + '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy + babel-preset-solid: 1.6.2_@babel+core@7.20.2 + concurrently: 7.5.0 + cross-env: 7.0.3 + esbuild: 0.15.13 + esbuild-plugin-solid: 0.4.2_y2jboexiucgiccfu4xrzxkgcay + eslint: 8.27.0 + eslint-plugin-no-only-tests: 3.1.0 + jsdom: 20.0.2 prettier: 2.7.1 - solid-js: 1.6.0 - tsup: 6.3.0_typescript@4.8.4 - turbo: 1.5.6 + tsup: 6.4.0_typescript@4.8.4 + turbo: 1.6.3 typescript: 4.8.4 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 - vitest: 0.23.4 + vite: 3.2.3_@types+node@18.11.9 + vite-plugin-solid: 2.4.0_solid-js@1.6.2+vite@3.2.3 + vitest: 0.23.4_jsdom@20.0.2 examples/clock: specifiers: solid-devtools: workspace:^0.20.1 - solid-js: ^1.6.0 + solid-js: ^1.6.2 typescript: ^4.8.4 vite: ^3.1.8 vite-plugin-solid: ^2.3.10 dependencies: solid-devtools: link:../../packages/ext-client - solid-js: 1.6.0 + solid-js: 1.6.2 devDependencies: typescript: 4.8.4 - vite: 3.1.8 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 + vite: 3.2.3 + vite-plugin-solid: 2.4.0_solid-js@1.6.2+vite@3.2.3 examples/sandbox: specifiers: @@ -56,63 +71,65 @@ importers: '@solid-devtools/transform': workspace:^0.7.5 '@solid-primitives/timer': ^1.3.4 solid-devtools: workspace:^0.20.1 - solid-js: ^1.6.0 + solid-js: ^1.6.2 typescript: ^4.8.4 + unocss: ^0.46.3 vite: ^3.1.8 vite-plugin-solid: ^2.3.10 dependencies: '@solid-devtools/debugger': link:../../packages/debugger '@solid-devtools/logger': link:../../packages/logger '@solid-devtools/overlay': link:../../packages/overlay - '@solid-primitives/timer': 1.3.4_solid-js@1.6.0 + '@solid-primitives/timer': 1.3.4_solid-js@1.6.2 solid-devtools: link:../../packages/ext-client - solid-js: 1.6.0 + solid-js: 1.6.2 devDependencies: - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.6 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 '@solid-devtools/transform': link:../../packages/transform typescript: 4.8.4 - vite: 3.1.8 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 + unocss: 0.46.4_vite@3.2.3 + vite: 3.2.3 + vite-plugin-solid: 2.4.0_solid-js@1.6.2+vite@3.2.3 examples/start: specifiers: '@solidjs/meta': ^0.28.0 '@solidjs/router': ^0.4.3 solid-devtools: workspace:^0.20.1 - solid-js: ^1.6.0 + solid-js: ^1.6.2 solid-start: ^0.1.8 solid-start-node: ^0.1.8 typescript: ^4.8.4 undici: ^5.11.0 vite: ^3.1.8 dependencies: - '@solidjs/meta': 0.28.0_solid-js@1.6.0 - '@solidjs/router': 0.4.3_solid-js@1.6.0 + '@solidjs/meta': 0.28.2_solid-js@1.6.2 + '@solidjs/router': 0.4.3_solid-js@1.6.2 solid-devtools: link:../../packages/ext-client - solid-js: 1.6.0 - solid-start: 0.1.8_t6jxp2tiygxm3dc5nraehhylmi - undici: 5.11.0 + solid-js: 1.6.2 + solid-start: 0.1.8_tbjdesofheooswmx2dbgquvvky + undici: 5.12.0 devDependencies: - solid-start-node: 0.1.8_skn3rynzh2ilyzdivsdrzncrzi + solid-start-node: 0.1.8_4a2ftuehhnoj3skchx5ymnqpr4 typescript: 4.8.4 - vite: 3.1.8 + vite: 3.2.3 examples/todomvc: specifiers: - solid-js: ^1.6.0 + solid-js: ^1.6.2 todomvc-app-css: ^2.4.2 todomvc-common: ^1.0.5 typescript: ^4.8.4 vite: ^3.1.8 vite-plugin-solid: ^2.3.10 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 todomvc-app-css: 2.4.2 todomvc-common: 1.0.5 devDependencies: typescript: 4.8.4 - vite: 3.1.8 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 + vite: 3.2.3 + vite-plugin-solid: 2.4.0_solid-js@1.6.2+vite@3.2.3 packages/debugger: specifiers: @@ -124,31 +141,24 @@ importers: '@solid-primitives/event-listener': ^2.2.3 '@solid-primitives/keyboard': ^1.0.3 '@solid-primitives/platform': ^0.0.102 - '@solid-primitives/scheduled': ^1.1.0 + '@solid-primitives/scheduled': ^1.2.0 '@solid-primitives/utils': ^3.1.0 - object-observer: ^5.1.6 - solid-js: ^1.6.0 - tsup: ^6.3.0 - type-fest: ^3.1.0 - typescript: ^4.8.4 + solid-js: ^1.6.2 + type-fest: ^3.2.0 dependencies: '@solid-devtools/shared': link:../shared - '@solid-primitives/bounds': 0.0.104_solid-js@1.6.0 - '@solid-primitives/cursor': 0.0.101_solid-js@1.6.0 - '@solid-primitives/event-bus': 0.1.3_solid-js@1.6.0 - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/keyboard': 1.0.3_solid-js@1.6.0 - '@solid-primitives/platform': 0.0.102_solid-js@1.6.0 - '@solid-primitives/scheduled': 1.1.0_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - object-observer: 5.1.6 - type-fest: 3.1.0 + '@solid-primitives/bounds': 0.0.104_solid-js@1.6.2 + '@solid-primitives/cursor': 0.0.101_solid-js@1.6.2 + '@solid-primitives/event-bus': 0.1.4_solid-js@1.6.2 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/keyboard': 1.0.5_solid-js@1.6.2 + '@solid-primitives/platform': 0.0.102_solid-js@1.6.2 + '@solid-primitives/scheduled': 1.2.0_solid-js@1.6.2 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 + type-fest: 3.2.0 optionalDependencies: '@solid-devtools/transform': link:../transform - devDependencies: - solid-js: 1.6.0 - tsup: 6.3.0_typescript@4.8.4 - typescript: 4.8.4 packages/ext-client: specifiers: @@ -156,22 +166,15 @@ importers: '@solid-devtools/shared': workspace:^0.9.2 '@solid-devtools/transform': workspace:^0.7.5 '@solid-primitives/utils': ^3.1.0 - solid-js: ^1.6.0 - tsup: ^6.3.0 - type-fest: ^3.1.0 - typescript: ^4.8.4 - vitest: ^0.23.4 + solid-js: ^1.6.2 + type-fest: ^3.2.0 dependencies: '@solid-devtools/debugger': link:../debugger '@solid-devtools/shared': link:../shared '@solid-devtools/transform': link:../transform - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - type-fest: 3.1.0 - devDependencies: - solid-js: 1.6.0 - tsup: 6.3.0_typescript@4.8.4 - typescript: 4.8.4 - vitest: 0.23.4 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 + type-fest: 3.2.0 packages/extension: specifiers: @@ -184,27 +187,23 @@ importers: jsdom: ^20.0.1 rimraf: ^3.0.2 solid-devtools: workspace:^0.20.1 - typescript: ^4.8.4 - vite: ^3.1.8 - vite-plugin-solid: ^2.3.10 - vitest: ^0.23.4 + solid-js: ^1.6.2 + vite: ^3.2.3 webextension-polyfill: ^0.10.0 zip-a-folder: ^1.1.5 dependencies: '@solid-devtools/frontend': link:../frontend '@solid-devtools/shared': link:../shared - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-devtools: link:../ext-client + solid-js: 1.6.2 devDependencies: - '@crxjs/vite-plugin': 1.0.14_vite@3.1.8 + '@crxjs/vite-plugin': 1.0.14_vite@3.2.3 '@types/chrome': 0.0.196 '@types/webextension-polyfill': 0.9.1 - jsdom: 20.0.1 + jsdom: 20.0.2 rimraf: 3.0.2 - solid-devtools: link:../ext-client - typescript: 4.8.4 - vite: 3.1.8 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 - vitest: 0.23.4_jsdom@20.0.1 + vite: 3.2.3 webextension-polyfill: 0.10.0 zip-a-folder: 1.1.5 @@ -212,6 +211,7 @@ importers: specifiers: '@floating-ui/dom': ^1.0.3 '@otonashixav/solid-flip': ^0.10.5 + '@solid-devtools/debugger': workspace:^0.13.1 '@solid-devtools/shared': workspace:^0.9.2 '@solid-primitives/context': ^0.1.2 '@solid-primitives/cursor': ^0.0.101 @@ -219,7 +219,7 @@ importers: '@solid-primitives/event-bus': ^0.1.3 '@solid-primitives/event-listener': ^2.2.3 '@solid-primitives/keyboard': ^1.0.3 - '@solid-primitives/keyed': ^1.1.3 + '@solid-primitives/keyed': ^1.1.4 '@solid-primitives/media': ^2.0.3 '@solid-primitives/props': ^2.2.2 '@solid-primitives/range': ^0.1.3 @@ -227,7 +227,6 @@ importers: '@solid-primitives/styles': ^0.0.100 '@solid-primitives/timer': ^1.3.4 '@solid-primitives/utils': ^3.1.0 - '@types/node': ^18.11.3 '@vanilla-extract/css': ^1.9.1 '@vanilla-extract/dynamic': ^2.0.2 '@vanilla-extract/esbuild-plugin': ^2.2.0 @@ -236,69 +235,59 @@ importers: clsx: ^1.2.1 csstype: ^3.1.1 postcss: ^8.4.18 - solid-floating-ui: ^0.1.0 - solid-headless: ^0.12.6 - solid-js: ^1.6.0 - solid-transition-group: ^0.0.11 - tsup: ^6.3.0 - type-fest: ^3.1.0 - typescript: ^4.8.4 - vitest: ^0.24.3 - dependencies: - '@floating-ui/dom': 1.0.3 - '@otonashixav/solid-flip': 0.10.5_solid-js@1.6.0 + solid-floating-ui: ^0.2.0 + solid-headless: ^0.13.0 + solid-js: ^1.6.2 + solid-transition-group: ^0.0.12 + type-fest: ^3.2.0 + dependencies: + '@floating-ui/dom': 1.0.4 + '@otonashixav/solid-flip': 0.10.5_solid-js@1.6.2 + '@solid-devtools/debugger': link:../debugger '@solid-devtools/shared': link:../shared - '@solid-primitives/context': 0.1.2_solid-js@1.6.0 - '@solid-primitives/cursor': 0.0.101_solid-js@1.6.0 - '@solid-primitives/destructure': 0.1.3_solid-js@1.6.0 - '@solid-primitives/event-bus': 0.1.3_solid-js@1.6.0 - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/keyboard': 1.0.3_solid-js@1.6.0 - '@solid-primitives/keyed': 1.1.3_solid-js@1.6.0 - '@solid-primitives/media': 2.0.3_solid-js@1.6.0 - '@solid-primitives/props': 2.2.2_solid-js@1.6.0 - '@solid-primitives/range': 0.1.3_solid-js@1.6.0 - '@solid-primitives/resize-observer': 2.0.5_solid-js@1.6.0 - '@solid-primitives/styles': 0.0.100_solid-js@1.6.0 - '@solid-primitives/timer': 1.3.4_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 + '@solid-primitives/context': 0.1.2_solid-js@1.6.2 + '@solid-primitives/cursor': 0.0.101_solid-js@1.6.2 + '@solid-primitives/destructure': 0.1.4_solid-js@1.6.2 + '@solid-primitives/event-bus': 0.1.4_solid-js@1.6.2 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/keyboard': 1.0.5_solid-js@1.6.2 + '@solid-primitives/keyed': 1.1.4_solid-js@1.6.2 + '@solid-primitives/media': 2.0.4_solid-js@1.6.2 + '@solid-primitives/props': 2.2.2_solid-js@1.6.2 + '@solid-primitives/range': 0.1.4_solid-js@1.6.2 + '@solid-primitives/resize-observer': 2.0.6_solid-js@1.6.2 + '@solid-primitives/styles': 0.0.100_solid-js@1.6.2 + '@solid-primitives/timer': 1.3.4_solid-js@1.6.2 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 '@vanilla-extract/css': 1.9.1 '@vanilla-extract/dynamic': 2.0.2 '@vanilla-extract/private': 1.0.3 clsx: 1.2.1 csstype: 3.1.1 - solid-floating-ui: 0.1.0_debms7fwfhtuw5f6vv5wjux7au - solid-headless: 0.12.6_solid-js@1.6.0 - solid-transition-group: 0.0.11_solid-js@1.6.0 - type-fest: 3.1.0 + solid-floating-ui: 0.2.0_sadgqcswk3ornos2gvsiom63vu + solid-headless: 0.13.0_solid-js@1.6.2 + solid-js: 1.6.2 + solid-transition-group: 0.0.12_solid-js@1.6.2 + type-fest: 3.2.0 devDependencies: - '@types/node': 18.11.3 '@vanilla-extract/esbuild-plugin': 2.2.0 - autoprefixer: 10.4.12_postcss@8.4.18 - postcss: 8.4.18 - solid-js: 1.6.0 - tsup: 6.3.0_tsifnmosqzrfo2mme7gtewypme - typescript: 4.8.4 - vitest: 0.24.3 + autoprefixer: 10.4.13_postcss@8.4.19 + postcss: 8.4.19 packages/logger: specifiers: '@solid-devtools/debugger': workspace:^0.13.1 '@solid-devtools/shared': workspace:^0.9.2 '@solid-primitives/utils': ^3.1.0 - solid-js: ^1.6.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.23.4 + solid-js: ^1.6.2 + tsup: ^6.4.0 dependencies: '@solid-devtools/debugger': link:../debugger '@solid-devtools/shared': link:../shared - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 devDependencies: - solid-js: 1.6.0 - tsup: 6.3.0_typescript@4.8.4 - typescript: 4.8.4 - vitest: 0.23.4 + tsup: 6.4.0 packages/overlay: specifiers: @@ -312,26 +301,22 @@ importers: '@types/clean-css': ^4.2.6 chokidar: ^3.5.3 clean-css: ^5.3.1 - esbuild: ^0.15.12 - esbuild-plugin-solid: ^0.4.2 - solid-js: ^1.6.0 + solid-js: ^1.6.2 tsx: ^3.10.4 dependencies: '@solid-devtools/debugger': link:../debugger '@solid-devtools/frontend': link:../frontend '@solid-devtools/shared': link:../shared - '@solid-primitives/cursor': 0.0.101_solid-js@1.6.0 - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/media': 2.0.3_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/cursor': 0.0.101_solid-js@1.6.2 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/media': 2.0.4_solid-js@1.6.2 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 devDependencies: '@types/clean-css': 4.2.6 chokidar: 3.5.3 clean-css: 5.3.1 - esbuild: 0.15.12 - esbuild-plugin-solid: 0.4.2_bvef6vnf23wxoq6euuutaswigy - tsx: 3.10.4 + tsx: 3.12.0 packages/shared: specifiers: @@ -342,25 +327,18 @@ importers: '@solid-primitives/scheduled': ^1.1.0 '@solid-primitives/styles': ^0.0.100 '@solid-primitives/utils': ^3.1.0 - solid-js: ^1.6.0 - tsup: ^6.3.0 - type-fest: ^3.1.0 - typescript: ^4.8.4 - vitest: ^0.23.4 - dependencies: - '@solid-primitives/event-bus': 0.1.3_solid-js@1.6.0 - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/media': 2.0.3_solid-js@1.6.0 - '@solid-primitives/rootless': 1.2.0_solid-js@1.6.0 - '@solid-primitives/scheduled': 1.1.0_solid-js@1.6.0 - '@solid-primitives/styles': 0.0.100_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - type-fest: 3.1.0 - devDependencies: - solid-js: 1.6.0 - tsup: 6.3.0_typescript@4.8.4 - typescript: 4.8.4 - vitest: 0.23.4 + solid-js: ^1.6.2 + type-fest: ^3.2.0 + dependencies: + '@solid-primitives/event-bus': 0.1.4_solid-js@1.6.2 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/media': 2.0.4_solid-js@1.6.2 + '@solid-primitives/rootless': 1.2.1_solid-js@1.6.2 + '@solid-primitives/scheduled': 1.2.0_solid-js@1.6.2 + '@solid-primitives/styles': 0.0.100_solid-js@1.6.2 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 + type-fest: 3.2.0 packages/transform: specifiers: @@ -375,29 +353,25 @@ importers: '@types/babel__core': ^7.1.19 '@types/babel__generator': ^7.6.4 '@types/babel__traverse': ^7.18.2 - solid-js: ^1.5.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - vite: ^3.1.8 - vitest: ^0.23.4 + solid-js: ^1.6.2 + tsup: ^6.4.0 + vite: ^2.2.3 || ^3.0.0 dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.6 - '@babel/types': 7.19.4 + '@babel/core': 7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 + '@babel/types': 7.20.2 '@solid-devtools/shared': link:../shared - solid-js: 1.6.0 + solid-js: 1.6.2 + vite: 3.2.3 devDependencies: - '@babel/generator': 7.19.6 - '@babel/parser': 7.19.6 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/traverse': 7.19.6 - '@types/babel__core': 7.1.19 + '@babel/generator': 7.20.4 + '@babel/parser': 7.20.3 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 + '@babel/traverse': 7.20.1 + '@types/babel__core': 7.1.20 '@types/babel__generator': 7.6.4 '@types/babel__traverse': 7.18.2 - tsup: 6.3.0_typescript@4.8.4 - typescript: 4.8.4 - vite: 3.1.8 - vitest: 0.23.4 + tsup: 6.4.0 packages: @@ -408,30 +382,41 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 + /@antfu/install-pkg/0.1.1: + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true + + /@antfu/utils/0.5.2: + resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} + dev: true + /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data/7.19.4: - resolution: {integrity: sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==} + /@babel/compat-data/7.20.1: + resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} engines: {node: '>=6.9.0'} - /@babel/core/7.19.6: - resolution: {integrity: sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==} + /@babel/core/7.20.2: + resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helpers': 7.19.4 - '@babel/parser': 7.19.6 + '@babel/generator': 7.20.4 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helpers': 7.20.1 + '@babel/parser': 7.20.3 '@babel/template': 7.18.10 - '@babel/traverse': 7.19.6 - '@babel/types': 7.19.4 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -440,11 +425,11 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator/7.19.6: - resolution: {integrity: sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==} + /@babel/generator/7.20.4: + resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 @@ -452,34 +437,34 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.19.6: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} + /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.4 - '@babel/core': 7.19.6 + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 semver: 6.3.0 - /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} + /@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 @@ -490,24 +475,24 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.19.6: + /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.20.2: resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.2.1 - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.19.6: + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.2: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.1 @@ -523,51 +508,51 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-function-name/7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-member-expression-to-functions/7.18.9: resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-module-imports/7.16.0: resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 - /@babel/helper-module-transforms/7.19.6: - resolution: {integrity: sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==} + /@babel/helper-module-transforms/7.20.2: + resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.19.4 + '@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.18.10 - '@babel/traverse': 7.19.6 - '@babel/types': 7.19.4 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 transitivePeerDependencies: - supports-color @@ -575,23 +560,23 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 - /@babel/helper-plugin-utils/7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.6: + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 transitivePeerDependencies: - supports-color @@ -602,28 +587,28 @@ packages: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.19.6 - '@babel/types': 7.19.4 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/helper-simple-access/7.19.4: - resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==} + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 - /@babel/helper-skip-transparent-expression-wrappers/7.18.9: - resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} @@ -643,18 +628,18 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.18.10 - '@babel/traverse': 7.19.6 - '@babel/types': 7.19.4 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/helpers/7.19.4: - resolution: {integrity: sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==} + /@babel/helpers/7.20.1: + resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 - '@babel/traverse': 7.19.6 - '@babel/types': 7.19.4 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 transitivePeerDependencies: - supports-color @@ -666,845 +651,845 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.19.6: - resolution: {integrity: sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==} + /@babel/parser/7.20.3: + resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.19.6: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.19.6: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 - /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.19.6: - resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} + /@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.20.2: + resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.19.6: + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.19.6: + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 - /@babel/plugin-proposal-object-rest-spread/7.19.4_@babel+core@7.19.6: - resolution: {integrity: sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==} + /@babel/plugin-proposal-object-rest-spread/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.4 - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.19.6 + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.19.6: + /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.19.6 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.2: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.6: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.2: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.19.6: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.2: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.2: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.2: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.19.6: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.2: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.6: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.2: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.19.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-block-scoping/7.19.4_@babel+core@7.19.6: - resolution: {integrity: sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==} + /@babel/plugin-transform-block-scoping/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-classes/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} + /@babel/plugin-transform-classes/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.19.1 '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-destructuring/7.19.4_@babel+core@7.19.6: - resolution: {integrity: sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==} + /@babel/plugin-transform-destructuring/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.19.6: + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.2: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 '@babel/helper-function-name': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.19.6: + /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.20.2: resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.19.6: + /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.2: resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-simple-access': 7.19.4 + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.19.6: + /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.20.2: resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.19.6: + /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.20.2: resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.19.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.19.6: - resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} + /@babel/plugin-transform-parameters/7.20.3_@babel+core@7.20.2: + resolution: {integrity: sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 dev: true optional: true - /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 dev: true optional: true - /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.19.6: + /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.2: resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 dev: true optional: true - /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.6: + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.2: resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/types': 7.19.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 + '@babel/types': 7.20.2 dev: true optional: true - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.0 - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.19.6: + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.2: resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.19.6: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.2: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-typescript/7.19.3_@babel+core@7.19.6: - resolution: {integrity: sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==} + /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.19.6: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.2: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.19.6: + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/preset-env/7.19.4_@babel+core@7.19.6: - resolution: {integrity: sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==} + /@babel/preset-env/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.4 - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.19.6 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-object-rest-spread': 7.19.4_@babel+core@7.19.6 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.6 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.19.6 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.19.6 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.19.6 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.19.6 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-block-scoping': 7.19.4_@babel+core@7.19.6 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-destructuring': 7.19.4_@babel+core@7.19.6 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.19.6 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.19.6 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.19.6 - '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.19.6 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.19.6 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.19.6 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.19.6 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.19.6 - '@babel/preset-modules': 0.1.5_@babel+core@7.19.6 - '@babel/types': 7.19.4 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.19.6 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.19.6 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.19.6 - core-js-compat: 3.25.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-async-generator-functions': 7.20.1_@babel+core@7.20.2 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-object-rest-spread': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-block-scoping': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-classes': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-destructuring': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.2 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.20.2 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.20.2 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.2 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.2 + '@babel/preset-modules': 0.1.5_@babel+core@7.20.2 + '@babel/types': 7.20.2 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 + core-js-compat: 3.26.0 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/preset-modules/0.1.5_@babel+core@7.19.6: + /@babel/preset-modules/0.1.5_@babel+core@7.20.2: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.19.6 - '@babel/types': 7.19.4 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 + '@babel/types': 7.20.2 esutils: 2.0.3 - /@babel/preset-typescript/7.18.6_@babel+core@7.19.6: + /@babel/preset-typescript/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.19.6 + '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /@babel/runtime/7.19.4: - resolution: {integrity: sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==} + /@babel/runtime/7.20.1: + resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.10 @@ -1514,38 +1499,38 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.6 - '@babel/types': 7.19.4 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 - /@babel/traverse/7.19.6: - resolution: {integrity: sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==} + /@babel/traverse/7.20.1: + resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.6 + '@babel/generator': 7.20.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.19.6 - '@babel/types': 7.19.4 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types/7.19.4: - resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} + /@babel/types/7.20.2: + resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@changesets/apply-release-plan/6.1.1: - resolution: {integrity: sha512-LaQiP/Wf0zMVR0HNrLQAjz3rsNsr0d/RlnP6Ef4oi8VafOwnY1EoWdK4kssuUJGgNgDyHpomS50dm8CU3D7k7g==} + /@changesets/apply-release-plan/6.1.2: + resolution: {integrity: sha512-H8TV9E/WtJsDfoDVbrDGPXmkZFSv7W2KLqp4xX4MKZXshb0hsQZUNowUa8pnus9qb/5OZrFFRVsUsDCVHNW/AQ==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/config': 2.2.0 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 1.5.0 @@ -1563,7 +1548,7 @@ packages: /@changesets/assemble-release-plan/5.2.2: resolution: {integrity: sha512-B1qxErQd85AeZgZFZw2bDKyOfdXHhG+X5S+W3Da2yCem8l/pRy4G/S7iOpEcMwg6lH8q2ZhgbZZwZ817D+aLuQ==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.4 '@changesets/types': 5.2.0 @@ -1577,12 +1562,12 @@ packages: '@changesets/types': 5.2.0 dev: true - /@changesets/cli/2.25.0: - resolution: {integrity: sha512-Svu5KD2enurVHGEEzCRlaojrHjVYgF9srmMP9VQSy9c1TspX6C9lDPpulsSNIjYY9BuU/oiWpjBgR7RI9eQiAA==} + /@changesets/cli/2.25.2: + resolution: {integrity: sha512-ACScBJXI3kRyMd2R8n8SzfttDHi4tmKSwVwXBazJOylQItSRSF4cGmej2E4FVf/eNfGy6THkL9GzAahU9ErZrA==} hasBin: true dependencies: - '@babel/runtime': 7.19.4 - '@changesets/apply-release-plan': 6.1.1 + '@babel/runtime': 7.20.1 + '@changesets/apply-release-plan': 6.1.2 '@changesets/assemble-release-plan': 5.2.2 '@changesets/changelog-git': 0.1.13 '@changesets/config': 2.2.0 @@ -1594,7 +1579,7 @@ packages: '@changesets/pre': 1.0.13 '@changesets/read': 0.5.8 '@changesets/types': 5.2.0 - '@changesets/write': 0.2.1 + '@changesets/write': 0.2.2 '@manypkg/get-packages': 1.1.3 '@types/is-ci': 3.0.0 '@types/semver': 6.2.3 @@ -1647,7 +1632,7 @@ packages: /@changesets/get-release-plan/3.0.15: resolution: {integrity: sha512-W1tFwxE178/en+zSj/Nqbc3mvz88mcdqUMJhRzN1jDYqN3QI4ifVaRF9mcWUU+KI0gyYEtYR65tour690PqTcA==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/assemble-release-plan': 5.2.2 '@changesets/config': 2.2.0 '@changesets/pre': 1.0.13 @@ -1663,7 +1648,7 @@ packages: /@changesets/git/1.5.0: resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.0 '@manypkg/get-packages': 1.1.3 @@ -1687,7 +1672,7 @@ packages: /@changesets/pre/1.0.13: resolution: {integrity: sha512-jrZc766+kGZHDukjKhpBXhBJjVQMied4Fu076y9guY1D3H622NOw8AQaLV3oQsDtKBTrT2AUFjt9Z2Y9Qx+GfA==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.0 '@manypkg/get-packages': 1.1.3 @@ -1697,7 +1682,7 @@ packages: /@changesets/read/0.5.8: resolution: {integrity: sha512-eYaNfxemgX7f7ELC58e7yqQICW5FB7V+bd1lKt7g57mxUrTveYME+JPaBPpYx02nP53XI6CQp6YxnR9NfmFPKw==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/git': 1.5.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.15 @@ -1715,17 +1700,17 @@ packages: resolution: {integrity: sha512-km/66KOqJC+eicZXsm2oq8A8bVTSpkZJ60iPV/Nl5Z5c7p9kk8xxh6XGRTlnludHldxOOfudhnDN2qPxtHmXzA==} dev: true - /@changesets/write/0.2.1: - resolution: {integrity: sha512-KUd49nt2fnYdGixIqTi1yVE1nAoZYUMdtB3jBfp77IMqjZ65hrmZE5HdccDlTeClZN0420ffpnfET3zzeY8pdw==} + /@changesets/write/0.2.2: + resolution: {integrity: sha512-kCYNHyF3xaId1Q/QE+DF3UTrHTyg3Cj/f++T8S8/EkC+jh1uK2LFnM9h+EzV+fsmnZDrs7r0J4LLpeI/VWC5Hg==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/types': 5.2.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.7.1 dev: true - /@crxjs/vite-plugin/1.0.14_vite@3.1.8: + /@crxjs/vite-plugin/1.0.14_vite@3.2.3: resolution: {integrity: sha512-emOueVCqFRFmpcfT80Xsm4mfuFw9VSp5GY4eh5qeLDeiP81g0hddlobVQCo0pE2ZvNnWbyhLrXEYAaMAXjNL6A==} engines: {node: '>=14'} peerDependencies: @@ -1745,9 +1730,9 @@ packages: picocolors: 1.0.0 react-refresh: 0.13.0 rollup: 2.79.1 - vite: 3.1.8 + vite: 3.2.3 optionalDependencies: - '@vitejs/plugin-react': 2.1.0_vite@3.1.8 + '@vitejs/plugin-react': 2.2.0_vite@3.2.3 transitivePeerDependencies: - supports-color dev: true @@ -1765,7 +1750,7 @@ packages: /@esbuild-kit/core-utils/3.0.0: resolution: {integrity: sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==} dependencies: - esbuild: 0.15.12 + esbuild: 0.15.13 source-map-support: 0.5.21 dev: true @@ -1776,8 +1761,8 @@ packages: get-tsconfig: 4.2.0 dev: true - /@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + /@esbuild/android-arm/0.15.13: + resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1792,20 +1777,37 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + /@esbuild/linux-loong64/0.15.13: + resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true + /@eslint/eslintrc/1.3.3: + resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.4.1 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@floating-ui/core/1.0.1: resolution: {integrity: sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==} dev: false - /@floating-ui/dom/1.0.3: - resolution: {integrity: sha512-6H1kwjkOZKabApNtXRiYHvMmYJToJ1DV7rQ3xc/WJpOABhQIOJJOdz2AOejj8X+gcybaFmBpisVTZxBZAM3V0w==} + /@floating-ui/dom/1.0.4: + resolution: {integrity: sha512-maYJRv+sAXTy4K9mzdv0JPyNW5YPVHrqtY90tEdI6XNpuLOP26Ci2pfwPsKBA/Wh4Z3FX5sUrtUFTdMYj9v+ug==} dependencies: '@floating-ui/core': 1.0.1 dev: false @@ -1818,6 +1820,43 @@ packages: dependencies: '@hapi/hoek': 9.3.0 + /@humanwhocodes/config-array/0.11.7: + resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@iconify/types/2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true + + /@iconify/utils/2.0.1: + resolution: {integrity: sha512-t8IyICk25wgZL4YKn/2kYfjG5MGA6EWZlaUJZ1OEIku4V+kX9V900T5E4HIqS3hLyD6/RJET0zY4vxO9pHLHHw==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.5.2 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.6.0 + local-pkg: 0.4.2 + transitivePeerDependencies: + - supports-color + dev: true + /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -1859,7 +1898,7 @@ packages: /@manypkg/find-root/1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -1868,7 +1907,7 @@ packages: /@manypkg/get-packages/1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -1894,12 +1933,12 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - /@otonashixav/solid-flip/0.10.5_solid-js@1.6.0: + /@otonashixav/solid-flip/0.10.5_solid-js@1.6.2: resolution: {integrity: sha512-Tb2n9lzuktteqm26KJ1yH9NJsY2SbgNCHWnCOAKjEWBfGfw4j31vJVG1+k11WmgP2g9YzuyS8Skr7HsFntXZWA==} peerDependencies: solid-js: '>=1.0.0' dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false /@polka/url/1.0.0-next.21: @@ -1964,6 +2003,20 @@ packages: estree-walker: 2.0.2 picomatch: 2.3.1 + /@rollup/pluginutils/5.0.2: + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.0 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + /@sideway/address/4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -1975,204 +2028,212 @@ packages: /@sideway/pinpoint/2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - /@solid-primitives/bounds/0.0.104_solid-js@1.6.0: + /@solid-primitives/bounds/0.0.104_solid-js@1.6.2: resolution: {integrity: sha512-p5KXzNWzocrlHtd5Zi0OnudlQiw1DCBKrGjMfbhqvZb7YxmLaF6pR1bG4PBcL7Ud5PH420UL5SieDG5CsrSH9A==} peerDependencies: solid-js: ^1.5.0 dependencies: - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/resize-observer': 2.0.5_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/resize-observer': 2.0.6_solid-js@1.6.2 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/context/0.1.2_solid-js@1.6.0: + /@solid-primitives/context/0.1.2_solid-js@1.6.2: resolution: {integrity: sha512-kYnP08rKHgZA7O9azK8Bqo7yzN+2Fh8PHsftsghSAN6MVbH0soTSaBz+Cwx7jsVOJ7X3FRNjTEGIlvq97vfGyw==} peerDependencies: solid-js: ^1.5.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solid-primitives/cursor/0.0.101_solid-js@1.6.0: + /@solid-primitives/cursor/0.0.101_solid-js@1.6.2: resolution: {integrity: sha512-BGRxYf+j23khlih4Xbk5t5zEBC7c2kR0ASMwEEQpNnp9jQB21A8vSS9GVhRQj09HNcQ03Rvyvn6Sl9HzXM40Pg==} peerDependencies: solid-js: ^1.5.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/destructure/0.1.3_solid-js@1.6.0: - resolution: {integrity: sha512-+JAlP+NCyjySpUao+ewaB5xUTnibF6nZl7/ILkudiLe08bQByMKMlQb4ACSpuKvHK/brvfCGyGg72ElrcZIz0g==} + /@solid-primitives/destructure/0.1.4_solid-js@1.6.2: + resolution: {integrity: sha512-PQYyz2tKWauWqe6HRqAe1p7VkZ518EcFkCcDDRgWoCTLYmtDXAbSH2QjB7FIDVj5AAxs4DbmjjmJ2Y4N9Gf+mw==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/event-bus/0.1.3_solid-js@1.6.0: - resolution: {integrity: sha512-1jhUnDvFk2Pj5RqMp/hpSKXza7rMf4pR453w5N+I4x7zFnQB8Ay5M+drmCnUbJiL2r34viWkHIqTQ7t2B3C1nQ==} + /@solid-primitives/event-bus/0.1.4_solid-js@1.6.2: + resolution: {integrity: sha512-fpj5/b/x5EZGmey7iUm6d/oc52ff8HbTr7yO/+WJUheMSCyY6dQz7INth7ovx57a3SDKTqZJGY3wRZijdBVFdg==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/immutable': 0.1.3_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/immutable': 0.1.4_solid-js@1.6.2 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/event-listener/2.2.3_solid-js@1.6.0: - resolution: {integrity: sha512-mJnC6haPJu6zpeClRbua/bpYtMYyNJvUFCwxQBYOPNSlurb0bNj2PuXjFhWpgJuxStI8tCLRJYX+InjiEk1kOw==} + /@solid-primitives/event-listener/2.2.4_solid-js@1.6.2: + resolution: {integrity: sha512-O/ppM0SpXWtNC7AHv1bQA9Dy6pj3NUM06MhSV9xwVv4N06PmlNYhGLDSPT1Esesm6b0fDgCXB5V+AgCSEzQd/w==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/immutable/0.1.3_solid-js@1.6.0: - resolution: {integrity: sha512-T82Dy/i9QmK4/iSfbEo0bgdbW9PSOTnS0V2Y5G9L9uW/4TfpQmo67gWptcJTJsTbLn1QgTy3RPBTWwn8j4qIRw==} + /@solid-primitives/immutable/0.1.4_solid-js@1.6.2: + resolution: {integrity: sha512-9oLK8ihIjG5FZv74KoXXyKErxgGxGZsdevsIKB0ugTreBBmozHPcYTjoYFL/sHoqs2ZNMlmfNQ3kduvrvKG2RQ==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/keyboard/1.0.3_solid-js@1.6.0: - resolution: {integrity: sha512-PjbcEDqCqjm+zGgj+PHdgG0U4yFQQkDpIoQ7PdHnWc3RQrKAGPhm7wNJvo0uZQBfYMwwFozEc/slne4PUPRPZg==} + /@solid-primitives/keyboard/1.0.5_solid-js@1.6.2: + resolution: {integrity: sha512-rDgBRi/tKcsfGE5zM5JSStdGor0yL7X6idpbhwXRC9KUTQX1yCDtIf07uGugi9lmQYwCIriRetZT4UCLgn66EQ==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/rootless': 1.2.0_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/rootless': 1.2.1_solid-js@1.6.2 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/keyed/1.1.3_solid-js@1.6.0: - resolution: {integrity: sha512-sesL9vpyBCcgYDTKGN/U4PzVzgT1zgJz2f8rFn1OAbxFzj8lWy2lKOirns0tgdzX2mAaLcRNAhcvJMfxsAd/6g==} + /@solid-primitives/keyed/1.1.4_solid-js@1.6.2: + resolution: {integrity: sha512-K4DR4qGYOh5pJXgKKWwPjBEsnEBF4Old3zo4ht9wGBEvv3UB82P+zExqJK1lFie+7dYLOkgKD+8iZle1wZSEzg==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solid-primitives/media/2.0.3_solid-js@1.6.0: - resolution: {integrity: sha512-VtHzRBjxiH/fhiKWcnr5tA5FMeLBcd5CIaNPoo5ZXiSCa5vUuwuKB5GU5u+gwv/+NKLNATMil422KfGpmBbJ0g==} + /@solid-primitives/media/2.0.4_solid-js@1.6.2: + resolution: {integrity: sha512-MZkdUlV3qJQts4b7ZfAldbFGB1neH64rwHsnTmIeF2Zj8gWjYcYtJ36SwkRs3NjHQ53uQliZ+DtMXiCeapNw/g==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/rootless': 1.2.0_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/rootless': 1.2.1_solid-js@1.6.2 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/platform/0.0.102_solid-js@1.6.0: + /@solid-primitives/platform/0.0.102_solid-js@1.6.2: resolution: {integrity: sha512-1eZA1/HYOhmlZ9LrrGot+LUi/ypO2NXqfB+9F1WY98dGNDMz9pG9k+X7kg2YDJTUHDGbzY7WrsBRyAE8LurE7Q==} peerDependencies: solid-js: ^1.5.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solid-primitives/props/2.2.2_solid-js@1.6.0: + /@solid-primitives/props/2.2.2_solid-js@1.6.2: resolution: {integrity: sha512-vjRRoi/z3S2ylIJKCs+mN07oxDmt2S9gPCbTqkEx8jYHnvzocpt34UQdglLoSklTE6jI37JhW3g/Cs8Qr/peHg==} peerDependencies: solid-js: ^1.3.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 3.1.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/range/0.1.3_solid-js@1.6.0: - resolution: {integrity: sha512-dY8tepoYRWtJ4Lwm1KmnBkUEkn/YwTkkcbZ8p4nnm/Y/wrbYYf3v5X09rOe4h7NUNp3SjbiT0VOzch+7SVRlgw==} + /@solid-primitives/range/0.1.4_solid-js@1.6.2: + resolution: {integrity: sha512-tyGk2V3VTe22rmy+ArjSS3zIi91kNN0bJN8pp5riLXi+etWaKm1OJYSn+B4uCAG7wBKSrepfjCW4fRGXHBNhbw==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/resize-observer/2.0.5_solid-js@1.6.0: - resolution: {integrity: sha512-4twMKKSYd2WZ7LWXnSkEafgK4n0qDHCjolSX4ifupXtSV4XV0ZJWiEUpX3szf8sHFiR4+uVOWJwL0RlM930pwQ==} + /@solid-primitives/resize-observer/2.0.6_solid-js@1.6.2: + resolution: {integrity: sha512-PbYmBFJBx1/WcrTZepcr6fABOrUP6CeXxehy2AKPCJInX3LKQ/elHLsM1g6KwVbvqpZ0aQ3a/3I7sRYk6BSrpw==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/event-listener': 2.2.3_solid-js@1.6.0 - '@solid-primitives/rootless': 1.2.0_solid-js@1.6.0 - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/event-listener': 2.2.4_solid-js@1.6.2 + '@solid-primitives/rootless': 1.2.1_solid-js@1.6.2 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/rootless/1.2.0_solid-js@1.6.0: - resolution: {integrity: sha512-Kf/7/YqmToN40qb6oUgZnHjNBhK/eNVAUGCBnTIZ0XmbML9UpR+9ZmI1S3Eg1OmVZVfEyG3E/jFMnfxVdtQlPg==} + /@solid-primitives/rootless/1.2.1_solid-js@1.6.2: + resolution: {integrity: sha512-8RpdyS1e58PQbDjgjpyCh+IGoX3QEs/2LauMfl94eXJ5d/o1y/c6P61z9XqQm+Bx1Otdgx4nbFCoF7HPqa0mwg==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - '@solid-primitives/utils': 3.1.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/utils': 4.0.0_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/scheduled/1.1.0_solid-js@1.6.0: - resolution: {integrity: sha512-2A2dAiXe+lN0/KRUbIPXEcLoONRJXJmmvVda+y+qiSTbYmcoU2TtNlC04uhQBQJs8Yq2ElJuQhmFladcGLtE9g==} + /@solid-primitives/scheduled/1.2.0_solid-js@1.6.2: + resolution: {integrity: sha512-59QbtGACZD8RIkD0jNQVUHRBF6uW7dKzDVFYSgogRdfxRO9kgXc6aGkLrCjd4k4g3kYe+XiBLcvYKyut4F7BHg==} peerDependencies: - solid-js: ^1.5.0 + solid-js: ^1.6.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solid-primitives/styles/0.0.100_solid-js@1.6.0: + /@solid-primitives/styles/0.0.100_solid-js@1.6.2: resolution: {integrity: sha512-9OPLQX3dbi26ur0f/VayIvW8FZ+wMMxRYLj6xnxtgUayVX8ZqmPqRBsBSBDWEL4C0YihEhAsYYUzXhiL76jiWw==} peerDependencies: solid-js: ^1.5.0 dependencies: - '@solid-primitives/rootless': 1.2.0_solid-js@1.6.0 - solid-js: 1.6.0 + '@solid-primitives/rootless': 1.2.1_solid-js@1.6.2 + solid-js: 1.6.2 dev: false - /@solid-primitives/timer/1.3.4_solid-js@1.6.0: + /@solid-primitives/timer/1.3.4_solid-js@1.6.2: resolution: {integrity: sha512-hJbW93n9uY2vqeeS8W5a+vfY7EHQP4ru2vzCCOhuVFxPISk5d5H+3zMWx9KBq8IMYxuRRr3W8wPjIC9snfqIzw==} peerDependencies: solid-js: ^1.5.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solid-primitives/utils/3.1.0_solid-js@1.6.0: + /@solid-primitives/utils/3.1.0_solid-js@1.6.2: resolution: {integrity: sha512-/rerChcwgFtHEgVCCBY7BXGHh7a83HcIAzR8QhXJ789geIVbBs2YxHF4UUZlG7ec00NKSfvO3+sQquN/xKQLMw==} peerDependencies: solid-js: ^1.5.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /@solidjs/meta/0.28.0_solid-js@1.6.0: - resolution: {integrity: sha512-x52VdB9RZJ1apDB/pAmf58oeJsJ0lGKFXWjnm/TE/MlENIBPg3JaW8H5v2HnGpQC0WUbgiIsDFWpLWVNBo5t6g==} + /@solid-primitives/utils/4.0.0_solid-js@1.6.2: + resolution: {integrity: sha512-fGsJy8Z8YiwogpiezD7TWjI62UCb0JAHJWdoXWGrggrn4bfToZotKkabiB0IVFMkWVE1ZcrkvZT3bkmqGnK0ng==} + peerDependencies: + solid-js: ^1.6.0 + dependencies: + solid-js: 1.6.2 + dev: false + + /@solidjs/meta/0.28.2_solid-js@1.6.2: + resolution: {integrity: sha512-avlLgBPdk4KVxzRGFlYp/MIJo8B5jVgXPgk6OUnUP8km21Z+ovO+DUd7ZPA7ejv8PBdWi9GE3zCzw8RU2YuV2Q==} peerDependencies: solid-js: '>=1.4.0' dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 - /@solidjs/router/0.4.3_solid-js@1.6.0: + /@solidjs/router/0.4.3_solid-js@1.6.2: resolution: {integrity: sha512-mYpd4HxpH/3UZjHGTr2dhvPGXu034Ktxd05CJGA6nRjRGYCgUfhCQHRdEivyqJyb4LhHyDht4ny5xmwEOkUTaQ==} peerDependencies: solid-js: ^1.3.5 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@types/babel__core/7.1.19: - resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} + /@types/babel__core/7.1.20: + resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} dependencies: - '@babel/parser': 7.19.6 - '@babel/types': 7.19.4 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.2 @@ -2181,30 +2242,30 @@ packages: /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.19.6 - '@babel/types': 7.19.4 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 dev: true /@types/babel__traverse/7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.2 dev: true /@types/chai-subset/1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: - '@types/chai': 4.3.3 + '@types/chai': 4.3.4 dev: true - /@types/chai/4.3.3: - resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} + /@types/chai/4.3.4: + resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} dev: true /@types/chrome/0.0.196: @@ -2217,7 +2278,7 @@ packages: /@types/clean-css/4.2.6: resolution: {integrity: sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==} dependencies: - '@types/node': 18.11.3 + '@types/node': 18.11.9 source-map: 0.6.1 dev: true @@ -2252,6 +2313,10 @@ packages: ci-info: 3.5.0 dev: true + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true @@ -2260,8 +2325,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node/18.11.3: - resolution: {integrity: sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==} + /@types/node/18.11.9: + resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} dev: true /@types/normalize-package-data/2.4.1: @@ -2271,21 +2336,313 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.3 + '@types/node': 18.11.9 dev: true /@types/semver/6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: true + /@types/webextension-polyfill/0.9.1: resolution: {integrity: sha512-6aNzPIhqKlAV9t06nwSH3/veAceYE2dS2RVFZI8V1+UXHqsFNB6cRwxNmheiBvEGRc45E/gyZNzH0xAYIC27KA==} dev: true + /@typescript-eslint/eslint-plugin/5.42.1_2udltptbznfmezdozpdoa2aemq: + resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/type-utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy + '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy + debug: 4.3.4 + eslint: 8.27.0 + ignore: 5.2.0 + natural-compare-lite: 1.4.0 + regexpp: 3.2.0 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.42.1_rmayb2veg2btbq6mbmnyivgasy: + resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4 + debug: 4.3.4 + eslint: 8.27.0 + typescript: 4.8.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.42.1: + resolution: {integrity: sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/visitor-keys': 5.42.1 + dev: true + + /@typescript-eslint/type-utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy: + resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4 + '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy + debug: 4.3.4 + eslint: 8.27.0 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.42.1: + resolution: {integrity: sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.42.1_typescript@4.8.4: + resolution: {integrity: sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/visitor-keys': 5.42.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy: + resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4 + eslint: 8.27.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.27.0 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.42.1: + resolution: {integrity: sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.42.1 + eslint-visitor-keys: 3.3.0 + dev: true + + /@unocss/astro/0.46.4_vite@3.2.3: + resolution: {integrity: sha512-Cyw17FcT6H5N2GvE7kWHj8xSP102T4V6O9dKlFMgQhhWXBIHA0toE2IHM1wV1LWBO93n6b5+FlDQxiFvq+CkUA==} + dependencies: + '@unocss/core': 0.46.4 + '@unocss/reset': 0.46.4 + '@unocss/vite': 0.46.4_vite@3.2.3 + transitivePeerDependencies: + - rollup + - vite + dev: true + + /@unocss/cli/0.46.4: + resolution: {integrity: sha512-egDUf6zqVWJFW1/2Y6NxJRwQ2Jys+DCbQTqCLEwZ4DN3SI7A4rmM/07K4m3JMoLJsn9srH2dnykpvxt2ZN3Uow==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@ampproject/remapping': 2.2.0 + '@rollup/pluginutils': 5.0.2 + '@unocss/config': 0.46.4 + '@unocss/core': 0.46.4 + '@unocss/preset-uno': 0.46.4 + cac: 6.7.14 + chokidar: 3.5.3 + colorette: 2.0.19 + consola: 2.15.3 + fast-glob: 3.2.12 + magic-string: 0.26.7 + pathe: 0.3.9 + perfect-debounce: 0.1.3 + transitivePeerDependencies: + - rollup + dev: true + + /@unocss/config/0.46.4: + resolution: {integrity: sha512-EN/4wn+RZpbWAei40osHTMfAaLGh1TmoyH2pypSdKLV17PFWkXu4hmcl4lHUl6+gHigL6TGQjlww7N9QOspt6g==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.46.4 + unconfig: 0.3.7 + dev: true + + /@unocss/core/0.46.4: + resolution: {integrity: sha512-pLWJ/QgRW1DT1m0Y/7IyX7tURi/1fJ0T17jygH+iMGfwOJVFigkqxstTbWknuVFqc1rCH+pO20bI5k0r3xvIPA==} + dev: true + + /@unocss/inspector/0.46.4: + resolution: {integrity: sha512-Ww6MMHtYPlGN72HnDrLFJvn88nM+lNy913TDfWu9lQZ9fZyA8KbvQ2IhE9klbA/LWW9kn+7i67tJNV3E5yVsmQ==} + dependencies: + gzip-size: 6.0.0 + sirv: 2.0.2 + dev: true + + /@unocss/preset-attributify/0.46.4: + resolution: {integrity: sha512-B3N5J0PRjNaMr2ma0eGqinEwbxYoosAtN4a/5vOKWsbkBoVAKZl+6lyvbjDNtPnwKxjEuHL3MbMUvzG46kLGGA==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/preset-icons/0.46.4: + resolution: {integrity: sha512-5Ojnv7VYwGk1sjiEbjreifHNuAObQxvKAT8MjR9keTC5IkDWgEu+h7FLFtPRLyG1Yb89hmbs2MFAKnNPCUdPeQ==} + dependencies: + '@iconify/utils': 2.0.1 + '@unocss/core': 0.46.4 + ohmyfetch: 0.4.21 + transitivePeerDependencies: + - supports-color + dev: true + + /@unocss/preset-mini/0.46.4: + resolution: {integrity: sha512-zDuFe+F83k6qOVXcncAZdjRaWIGrME8pt7k2PeCFmnjMyEpHHAISRItfa4sIu4dVhhYRNIuymldLdss5jmCCoQ==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/preset-tagify/0.46.4: + resolution: {integrity: sha512-HWAk39pKWcZ3GJcEEI1NWdcY3RqsJJPuC7FIn70VHTbn7KQh997+4TACuA/QGc4OItkiCL6ZLj6xjJCPtQakYg==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/preset-typography/0.46.4: + resolution: {integrity: sha512-6+aU9kuXO7FLOPt73SjGvgi/hrx4Z1gGD3iwSn+4kPpqSA+XChO/lz93OIwUCQMAuGKlJzXIqlpqZoMVTtPpig==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/preset-uno/0.46.4: + resolution: {integrity: sha512-6k1Icc6DUPgQNQut9ZGG+BOVvZ60rhApLEY1CiJaxRDNnE1fx5mbWtuQT/Uwl5osMCRgfbuFkCVdo1Qt2QwvVw==} + dependencies: + '@unocss/core': 0.46.4 + '@unocss/preset-mini': 0.46.4 + '@unocss/preset-wind': 0.46.4 + dev: true + + /@unocss/preset-web-fonts/0.46.4: + resolution: {integrity: sha512-W3/2jlD24EU8JSz+GGpnD+21RxxeYhzTr2G32AmOXYCpR2+hBCOCKnG6YBJmgp3xjNwNibXew6ZCBU0JGgPrNg==} + dependencies: + '@unocss/core': 0.46.4 + ohmyfetch: 0.4.21 + dev: true + + /@unocss/preset-wind/0.46.4: + resolution: {integrity: sha512-J3+pT5oaVu0HKRdHgeTqyazQs/lpB5lVUpDjw5nRKmSGcWCRe2BG6IptM6IFGBweMWK0SWwDxgefqsb4qIyrlA==} + dependencies: + '@unocss/core': 0.46.4 + '@unocss/preset-mini': 0.46.4 + dev: true + + /@unocss/reset/0.46.4: + resolution: {integrity: sha512-Bd5LlvJj2A0wdJIAjzXF2+SL5gVJlAItk0ZO88OR2q2UZnqAYDrjWGfZGyNQKttKPWNuTH87IC6/8FFjoIAtxA==} + dev: true + + /@unocss/scope/0.46.4: + resolution: {integrity: sha512-wNgFxvUzoqGyzW7dJCPLdIgbtcLulyIYBbVOSXEJ3fy+j8rjcF23HAZF/mh3hIRYbci8gm8XmG4+BKPlG3D7Aw==} + dev: true + + /@unocss/transformer-attributify-jsx/0.46.4: + resolution: {integrity: sha512-dEUEx/GJu8i3qZi9ci9E+5OXARVbhzmu+xrZ6yIbVRzOuxr2yp3zbMKPrP3cek+LRGgCQdk6ZkE/FVET4X4EGg==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/transformer-compile-class/0.46.4: + resolution: {integrity: sha512-T0m8vsymnUClhXMBulSIs8iIuNhvkys28UpIR6mnobI/cZV/+FKo+2w8r2vKyNkSlKd+yXZm+/RzF6q6S7Z5AQ==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/transformer-directives/0.46.4: + resolution: {integrity: sha512-ePw4E6beBVtogf7KFysDFvIqd1EAsb1nHs5b5W5JlKTcHySSZIY0neDhN6sD32PRfmQgkgTbR2Cu4XM6u/zBjA==} + dependencies: + '@unocss/core': 0.46.4 + css-tree: 2.2.1 + dev: true + + /@unocss/transformer-variant-group/0.46.4: + resolution: {integrity: sha512-5kzd4cEB/If+C0FsEj5wa8nb/0/SAvbEypGUluttaWcEaOH+h/CTMK5bPcFZScxrjNmBxe26f7CyNC0fe2G4yw==} + dependencies: + '@unocss/core': 0.46.4 + dev: true + + /@unocss/vite/0.46.4_vite@3.2.3: + resolution: {integrity: sha512-qWVuogukCkRCNVT7Kuqt4V7lqLMUu/u/IPfF9hA9C5kz/2ZoE3neHzwBrPq34xBBKCcD+eo96skarBTtHpVn0w==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 + dependencies: + '@ampproject/remapping': 2.2.0 + '@rollup/pluginutils': 5.0.2 + '@unocss/config': 0.46.4 + '@unocss/core': 0.46.4 + '@unocss/inspector': 0.46.4 + '@unocss/scope': 0.46.4 + '@unocss/transformer-directives': 0.46.4 + magic-string: 0.26.7 + vite: 3.2.3 + transitivePeerDependencies: + - rollup + dev: true + /@vanilla-extract/babel-plugin-debug-ids/1.0.0: resolution: {integrity: sha512-Q2Nh/0FEAENfcphAv+fvcMoKfl3bhPWO/2x3MPviNAhsTsvuvYPuRtLjcXwoe4aJ8MxxI46JLY33j8NBEzpTIg==} dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -2322,8 +2679,8 @@ packages: /@vanilla-extract/integration/6.0.0: resolution: {integrity: sha512-uBz4QAhKYswyhN3LYd4duuN3uq7WT1jKckd0sP2+Y8gL+6UXdhN9QOUvNBfvofkrYYWqS8efH4hnsGyyWW8f+w==} dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 '@vanilla-extract/babel-plugin-debug-ids': 1.0.0 '@vanilla-extract/css': 1.9.1 esbuild: 0.11.23 @@ -2350,9 +2707,9 @@ packages: open: 8.4.0 rollup: 2.79.1 source-map: 0.7.4 - yargs: 17.6.0 + yargs: 17.6.2 - /@vinxi/vite-plugin-inspect/0.6.27_rollup@2.79.1+vite@3.1.8: + /@vinxi/vite-plugin-inspect/0.6.27_rollup@2.79.1+vite@3.2.3: resolution: {integrity: sha512-EI63vk0wGF3XcUYSWsKSeuzisx8lgUnjLSqk9XHnboSnjhbPZKe/cMrcXUbdNi+ZnK/a3L7+w3y/XMYWW4NHRA==} engines: {node: '>=14'} peerDependencies: @@ -2365,26 +2722,26 @@ packages: pretty-bytes: 6.0.0 sirv: 2.0.2 ufo: 0.8.6 - vite: 3.1.8 + vite: 3.2.3 transitivePeerDependencies: - rollup - supports-color - /@vitejs/plugin-react/2.1.0_vite@3.1.8: - resolution: {integrity: sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==} + /@vitejs/plugin-react/2.2.0_vite@3.2.3: + resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==} engines: {node: ^14.18.0 || >=16.0.0} requiresBuild: true peerDependencies: vite: ^3.0.0 dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.2 magic-string: 0.26.7 react-refresh: 0.14.0 - vite: 3.1.8 + vite: 3.2.3 transitivePeerDependencies: - supports-color dev: true @@ -2408,17 +2765,25 @@ packages: /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.0 + acorn: 8.8.1 acorn-walk: 8.2.0 dev: true + /acorn-jsx/5.3.2_acorn@8.8.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.1 + dev: true + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + /acorn/8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} hasBin: true @@ -2434,6 +2799,15 @@ packages: /ahocorasick/1.0.2: resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -2501,13 +2875,17 @@ packages: sprintf-js: 1.0.3 dev: true + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array.prototype.flat/1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2533,19 +2911,19 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /autoprefixer/10.4.12_postcss@8.4.18: - resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==} + /autoprefixer/10.4.13_postcss@8.4.19: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.21.4 - caniuse-lite: 1.0.30001423 + caniuse-lite: 1.0.30001431 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.18 + postcss: 8.4.19 postcss-value-parser: 4.2.0 dev: true @@ -2556,57 +2934,57 @@ packages: transitivePeerDependencies: - debug - /babel-plugin-jsx-dom-expressions/0.35.1_@babel+core@7.19.6: - resolution: {integrity: sha512-OnSFhoYE+tfuhiNCBtC4ZZvc/4kuEaJzhVnH/FfNVkCIGCPr+lG8PLeeFejkW8GSY88Ryt9T75TFABNb7y405g==} + /babel-plugin-jsx-dom-expressions/0.35.4_@babel+core@7.20.2: + resolution: {integrity: sha512-Ab8W+36+XcNpyb644K537MtuhZRssgE3hmZD/08a1Z99Xfnd38tR2BZaDl7yEQvvHrb46N+eje2YjIg4VGAfVQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.20.2 '@babel/helper-module-imports': 7.16.0 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/types': 7.19.4 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 + '@babel/types': 7.20.2 html-entities: 2.3.2 - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.19.6: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.2: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.4 - '@babel/core': 7.19.6 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.19.6 + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 semver: 6.3.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.19.6: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.2: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.19.6 - core-js-compat: 3.25.5 + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + core-js-compat: 3.26.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.19.6: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.2: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.6 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - /babel-preset-solid/1.6.0_@babel+core@7.19.6: - resolution: {integrity: sha512-Unv2mU+H+AQ0PiGMlwywqAJqmDRZy8kfRkTDnTup3SYIp1UFkP5KcHg76O/2+wZ7mEgY071BsgeVcV1Cw96Fvg==} + /babel-preset-solid/1.6.2_@babel+core@7.20.2: + resolution: {integrity: sha512-5sFI34g7Jtp4r04YFWkuC1o+gnekBdPXQTJb5/6lmxi5YwzazVgKAXRwEAToC3zRaPyIYJbZUVLpOi5mDzPEuw==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.6 - babel-plugin-jsx-dom-expressions: 0.35.1_@babel+core@7.19.6 + '@babel/core': 7.20.2 + babel-plugin-jsx-dom-expressions: 0.35.4_@babel+core@7.20.2 /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2669,7 +3047,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001423 + caniuse-lite: 1.0.30001431 electron-to-chromium: 1.4.284 node-releases: 2.0.6 update-browserslist-db: 1.0.10_browserslist@4.21.4 @@ -2693,13 +3071,13 @@ packages: engines: {node: '>=6'} dev: true - /bundle-require/3.1.0_esbuild@0.15.12: - resolution: {integrity: sha512-IIXtAO7fKcwPHNPt9kY/WNVJqy7NDy6YqJvv6ENH0TOZoJ+yjpEsn1w40WKZbR2ibfu5g1rfgJTvmFHpm5aOMA==} + /bundle-require/3.1.2_esbuild@0.15.13: + resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.13' dependencies: - esbuild: 0.15.12 + esbuild: 0.15.13 load-tsconfig: 0.2.3 dev: true @@ -2725,6 +3103,11 @@ packages: get-intrinsic: 1.1.3 dev: true + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -2739,18 +3122,18 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite/1.0.30001423: - resolution: {integrity: sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==} + /caniuse-lite/1.0.30001431: + resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} - /chai/4.3.6: - resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} + /chai/4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 check-error: 1.0.2 - deep-eql: 3.0.1 + deep-eql: 4.1.2 get-func-name: 2.0.0 - loupe: 2.3.4 + loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -2870,6 +3253,10 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2923,8 +3310,8 @@ packages: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /concurrently/7.4.0: - resolution: {integrity: sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==} + /concurrently/7.5.0: + resolution: {integrity: sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true dependencies: @@ -2936,7 +3323,7 @@ packages: spawn-command: 0.0.2-1 supports-color: 8.1.1 tree-kill: 1.2.2 - yargs: 17.6.0 + yargs: 17.6.2 dev: true /connect-injector/0.4.4: @@ -2962,11 +3349,15 @@ packages: transitivePeerDependencies: - supports-color + /consola/2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + dev: true + /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - /core-js-compat/3.25.5: - resolution: {integrity: sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==} + /core-js-compat/3.26.0: + resolution: {integrity: sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==} dependencies: browserslist: 4.21.4 @@ -2988,6 +3379,14 @@ packages: readable-stream: 3.6.0 dev: true + /cross-env/7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + /cross-spawn/5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -3015,6 +3414,14 @@ packages: nth-check: 2.1.1 dev: true + /css-tree/2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.0.2 + dev: true + /css-what/5.1.0: resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} engines: {node: '>= 6'} @@ -3104,8 +3511,8 @@ packages: dependencies: ms: 2.1.2 - /decamelize-keys/1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} + /decamelize-keys/1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 @@ -3121,9 +3528,9 @@ packages: resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} dev: true - /deep-eql/3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} + /deep-eql/4.1.2: + resolution: {integrity: sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==} + engines: {node: '>=6'} dependencies: type-detect: 4.0.8 dev: true @@ -3157,6 +3564,10 @@ packages: object-keys: 1.1.1 dev: true + /defu/6.1.0: + resolution: {integrity: sha512-pOFYRTIhoKujrmbTRhcW5lYQLBXw/dlTwfI8IguF1QCDJOcJzNH1w+YFjxqy6BAuJrClTy6MUE8q+oKJ2FLsIw==} + dev: true + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3166,6 +3577,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + /destr/1.2.0: + resolution: {integrity: sha512-JG+cG4ZPB1L27sl2C2URg8MIOmIUtTbE5wEx02BpmrTCqg/hXxFKXsYsnODl5PdpqNRaS1KQGUQ56V8jk8XpYQ==} + dev: true + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -3178,6 +3593,13 @@ packages: path-type: 4.0.0 dev: true + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + /dom-serializer/2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -3212,6 +3634,10 @@ packages: domhandler: 5.0.3 dev: true + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + /ee-first/1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} @@ -3274,8 +3700,8 @@ packages: object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 unbox-primitive: 1.0.2 dev: true @@ -3283,8 +3709,8 @@ packages: resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} dev: true - /es-module-lexer/1.0.5: - resolution: {integrity: sha512-oxJ+R1DzAw6j4g1Lx70bIKgfoRCX67C51kH2Mx7J4bS7ZzWxkcivXskFspzgKHUj6JUwUTghQgUPy8zTp6mMBw==} + /es-module-lexer/1.1.0: + resolution: {integrity: sha512-fJg+1tiyEeS8figV+fPcPpm8WqJEflG3yPU0NOm5xMvrNkuiy7HzX/Ljng4Y0hAoiw4/3hQTCFYw+ub8+a2pRA==} /es-shim-unscopables/1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} @@ -3309,8 +3735,8 @@ packages: requiresBuild: true optional: true - /esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + /esbuild-android-64/0.15.13: + resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -3325,8 +3751,8 @@ packages: requiresBuild: true optional: true - /esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + /esbuild-android-arm64/0.15.13: + resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -3341,8 +3767,8 @@ packages: requiresBuild: true optional: true - /esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + /esbuild-darwin-64/0.15.13: + resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3357,8 +3783,8 @@ packages: requiresBuild: true optional: true - /esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + /esbuild-darwin-arm64/0.15.13: + resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3373,8 +3799,8 @@ packages: requiresBuild: true optional: true - /esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + /esbuild-freebsd-64/0.15.13: + resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3389,8 +3815,8 @@ packages: requiresBuild: true optional: true - /esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + /esbuild-freebsd-arm64/0.15.13: + resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3405,8 +3831,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + /esbuild-linux-32/0.15.13: + resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3421,8 +3847,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + /esbuild-linux-64/0.15.13: + resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3437,8 +3863,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + /esbuild-linux-arm/0.15.13: + resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3453,8 +3879,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + /esbuild-linux-arm64/0.15.13: + resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3469,8 +3895,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + /esbuild-linux-mips64le/0.15.13: + resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3485,8 +3911,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + /esbuild-linux-ppc64le/0.15.13: + resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3501,8 +3927,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + /esbuild-linux-riscv64/0.15.13: + resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3517,8 +3943,8 @@ packages: requiresBuild: true optional: true - /esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + /esbuild-linux-s390x/0.15.13: + resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3533,8 +3959,8 @@ packages: requiresBuild: true optional: true - /esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + /esbuild-netbsd-64/0.15.13: + resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3549,42 +3975,42 @@ packages: requiresBuild: true optional: true - /esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + /esbuild-openbsd-64/0.15.13: + resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true - /esbuild-plugin-solid/0.4.2_bvef6vnf23wxoq6euuutaswigy: + /esbuild-plugin-solid/0.4.2_6we57ubfqshakcgdszwdwpd52a: resolution: {integrity: sha512-T5GphLoud3RumjeNYO3K9WVjWDzVKG5evlS7hUEUI0n9tiCL+CnbvJh3SSwFi3xeeXpZRrnZc1gd6FWQsVobTg==} peerDependencies: esbuild: '>=0.12' solid-js: '>= 1.0' dependencies: - '@babel/core': 7.19.6 - '@babel/preset-typescript': 7.18.6_@babel+core@7.19.6 - babel-preset-solid: 1.6.0_@babel+core@7.19.6 - esbuild: 0.15.12 - solid-js: 1.6.0 + '@babel/core': 7.20.2 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 + babel-preset-solid: 1.6.2_@babel+core@7.20.2 + esbuild: 0.14.54 + solid-js: 1.6.2 transitivePeerDependencies: - supports-color - dev: true - /esbuild-plugin-solid/0.4.2_xrubpslr2ri5v6aetguaj52fhy: + /esbuild-plugin-solid/0.4.2_y2jboexiucgiccfu4xrzxkgcay: resolution: {integrity: sha512-T5GphLoud3RumjeNYO3K9WVjWDzVKG5evlS7hUEUI0n9tiCL+CnbvJh3SSwFi3xeeXpZRrnZc1gd6FWQsVobTg==} peerDependencies: esbuild: '>=0.12' solid-js: '>= 1.0' dependencies: - '@babel/core': 7.19.6 - '@babel/preset-typescript': 7.18.6_@babel+core@7.19.6 - babel-preset-solid: 1.6.0_@babel+core@7.19.6 - esbuild: 0.14.54 - solid-js: 1.6.0 + '@babel/core': 7.20.2 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 + babel-preset-solid: 1.6.2_@babel+core@7.20.2 + esbuild: 0.15.13 + solid-js: 1.6.2 transitivePeerDependencies: - supports-color + dev: true /esbuild-sunos-64/0.14.54: resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} @@ -3594,8 +4020,8 @@ packages: requiresBuild: true optional: true - /esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + /esbuild-sunos-64/0.15.13: + resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3610,8 +4036,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + /esbuild-windows-32/0.15.13: + resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3626,8 +4052,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + /esbuild-windows-64/0.15.13: + resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3642,8 +4068,8 @@ packages: requiresBuild: true optional: true - /esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + /esbuild-windows-arm64/0.15.13: + resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3684,34 +4110,34 @@ packages: esbuild-windows-64: 0.14.54 esbuild-windows-arm64: 0.14.54 - /esbuild/0.15.12: - resolution: {integrity: sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==} + /esbuild/0.15.13: + resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.12 - '@esbuild/linux-loong64': 0.15.12 - esbuild-android-64: 0.15.12 - esbuild-android-arm64: 0.15.12 - esbuild-darwin-64: 0.15.12 - esbuild-darwin-arm64: 0.15.12 - esbuild-freebsd-64: 0.15.12 - esbuild-freebsd-arm64: 0.15.12 - esbuild-linux-32: 0.15.12 - esbuild-linux-64: 0.15.12 - esbuild-linux-arm: 0.15.12 - esbuild-linux-arm64: 0.15.12 - esbuild-linux-mips64le: 0.15.12 - esbuild-linux-ppc64le: 0.15.12 - esbuild-linux-riscv64: 0.15.12 - esbuild-linux-s390x: 0.15.12 - esbuild-netbsd-64: 0.15.12 - esbuild-openbsd-64: 0.15.12 - esbuild-sunos-64: 0.15.12 - esbuild-windows-32: 0.15.12 - esbuild-windows-64: 0.15.12 - esbuild-windows-arm64: 0.15.12 + '@esbuild/android-arm': 0.15.13 + '@esbuild/linux-loong64': 0.15.13 + esbuild-android-64: 0.15.13 + esbuild-android-arm64: 0.15.13 + esbuild-darwin-64: 0.15.13 + esbuild-darwin-arm64: 0.15.13 + esbuild-freebsd-64: 0.15.13 + esbuild-freebsd-arm64: 0.15.13 + esbuild-linux-32: 0.15.13 + esbuild-linux-64: 0.15.13 + esbuild-linux-arm: 0.15.13 + esbuild-linux-arm64: 0.15.13 + esbuild-linux-mips64le: 0.15.13 + esbuild-linux-ppc64le: 0.15.13 + esbuild-linux-riscv64: 0.15.13 + esbuild-linux-s390x: 0.15.13 + esbuild-netbsd-64: 0.15.13 + esbuild-openbsd-64: 0.15.13 + esbuild-sunos-64: 0.15.13 + esbuild-windows-32: 0.15.13 + esbuild-windows-64: 0.15.13 + esbuild-windows-arm64: 0.15.13 /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -3724,6 +4150,11 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} @@ -3737,12 +4168,129 @@ packages: source-map: 0.6.1 dev: true + /eslint-plugin-no-only-tests/3.1.0: + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + engines: {node: '>=5.0.0'} + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.27.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.27.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.27.0: + resolution: {integrity: sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.3 + '@humanwhocodes/config-array': 0.11.7 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.27.0 + eslint-visitor-keys: 3.3.0 + espree: 9.4.1 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.17.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.1.5 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.1 + acorn-jsx: 5.3.2_acorn@8.8.1 + eslint-visitor-keys: 3.3.0 + dev: true + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -3794,6 +4342,10 @@ packages: tmp: 0.0.33 dev: true + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -3804,6 +4356,10 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true @@ -3813,6 +4369,13 @@ packages: dependencies: reusify: 1.0.4 + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3856,6 +4419,18 @@ packages: pkg-dir: 4.2.0 dev: true + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + /follow-redirects/1.15.2_debug@4.3.4: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -3986,6 +4561,13 @@ packages: dependencies: is-glob: 4.0.3 + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + /glob/7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: @@ -4012,6 +4594,13 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -4032,6 +4621,13 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -4149,6 +4745,19 @@ packages: engines: {node: '>= 4'} dev: true + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -4268,6 +4877,11 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -4356,8 +4970,13 @@ packages: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} dev: true - /joi/17.6.3: - resolution: {integrity: sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==} + /jiti/1.16.0: + resolution: {integrity: sha512-L3BJStEf5NAqNuzrpfbN71dp43mYIcBUlCRea/vdyv5dW/AYa1d4bpelko4SHdY3I6eN9Wzyasxirj1/vv5kmg==} + hasBin: true + dev: true + + /joi/17.7.0: + resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -4370,6 +4989,10 @@ packages: engines: {node: '>=10'} dev: true + /js-sdsl/4.1.5: + resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} + dev: true + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4381,8 +5004,15 @@ packages: esprima: 4.0.1 dev: true - /jsdom/20.0.1: - resolution: {integrity: sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==} + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsdom/20.0.2: + resolution: {integrity: sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -4391,7 +5021,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.0 + acorn: 8.8.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -4414,7 +5044,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.9.0 + ws: 8.11.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -4441,6 +5071,14 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} @@ -4488,6 +5126,14 @@ packages: type-check: 0.3.2 dev: true + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} @@ -4550,6 +5196,10 @@ packages: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true @@ -4565,8 +5215,8 @@ packages: /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /loupe/2.3.4: - resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + /loupe/2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.0 dev: true @@ -4578,6 +5228,13 @@ packages: yallist: 2.1.2 dev: true + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: @@ -4601,10 +5258,14 @@ packages: engines: {node: '>=8'} dev: true + /mdn-data/2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + /media-query-parser/2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 /meow/6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} @@ -4612,7 +5273,7 @@ packages: dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 + decamelize-keys: 1.1.1 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 2.5.0 @@ -4722,10 +5383,22 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + /node-fetch-native/0.1.8: + resolution: {integrity: sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==} + dev: true + /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} @@ -4778,10 +5451,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /object-observer/5.1.6: - resolution: {integrity: sha512-3Lcp1Q9BW0ELoObPTCx6qOJlqpHo1d1TZHugoY50RjQRMLBOcGa9Dwy7FQtMYALmb/zo3GjEWjV09FJ4Ss/lQg==} - dev: false - /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} @@ -4792,6 +5461,15 @@ packages: object-keys: 1.1.1 dev: true + /ohmyfetch/0.4.21: + resolution: {integrity: sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw==} + dependencies: + destr: 1.2.0 + node-fetch-native: 0.1.8 + ufo: 0.8.6 + undici: 5.12.0 + dev: true + /on-finished/2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -4835,6 +5513,18 @@ packages: word-wrap: 1.2.3 dev: true + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -4892,6 +5582,13 @@ packages: engines: {node: '>=6'} dev: true + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4945,10 +5642,18 @@ packages: engines: {node: '>=8'} dev: true + /pathe/0.3.9: + resolution: {integrity: sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==} + dev: true + /pathval/1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /perfect-debounce/0.1.3: + resolution: {integrity: sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==} + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -4997,29 +5702,12 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config/3.1.4_postcss@8.4.18: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.0.6 - postcss: 8.4.18 - yaml: 1.10.2 - dev: true - /postcss-value-parser/4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss/8.4.18: - resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} + /postcss/8.4.19: + resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -5041,6 +5729,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + /prettier/2.7.1: resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} engines: {node: '>=10.13.0'} @@ -5181,7 +5874,7 @@ packages: /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.20.1 /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} @@ -5197,6 +5890,11 @@ packages: engines: {node: '>=6'} dev: true + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + /regexpu-core/5.2.1: resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} engines: {node: '>=4'} @@ -5233,6 +5931,11 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5270,7 +5973,7 @@ packages: open: 8.4.0 rollup: 2.79.1 source-map: 0.7.4 - yargs: 17.6.0 + yargs: 17.6.2 /rollup-route-manifest/1.0.0_rollup@2.79.1: resolution: {integrity: sha512-3CmcMmCLAzJDUXiO3z6386/Pt8/k9xTZv8gIHyXI8hYGoAInnYdOsFXiGGzQRMy6TXR1jUZme2qbdwjH2nFMjg==} @@ -5281,19 +5984,20 @@ packages: rollup: 2.79.1 route-sort: 1.0.0 - /rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 - /rollup/2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} + /rollup/3.2.5: + resolution: {integrity: sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 + dev: true /route-sort/1.0.0: resolution: {integrity: sha512-SFgmvjoIhp5S4iBEDW3XnbT+7PRuZ55oRuNjY+CDB1SGZkyCG9bqQ3/dhaZTctTBYMAvDxd2Uy9dStuaUfgJqQ==} @@ -5307,7 +6011,7 @@ packages: /rxjs/7.5.7: resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} dependencies: - tslib: 2.4.0 + tslib: 2.4.1 /sade/1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -5350,6 +6054,14 @@ packages: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + /semver/7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -5412,7 +6124,7 @@ packages: engines: {node: '>=6'} hasBin: true dependencies: - array.prototype.flat: 1.3.0 + array.prototype.flat: 1.3.1 breakword: 1.0.5 grapheme-splitter: 1.0.4 strip-ansi: 6.0.1 @@ -5420,43 +6132,43 @@ packages: yargs: 15.4.1 dev: true - /solid-floating-ui/0.1.0_debms7fwfhtuw5f6vv5wjux7au: - resolution: {integrity: sha512-HjGF8X3xSMmwFUMvET1Q68RZuqtcRAsmY6iI4eb3kB3gHtmwLdwEre+cO9iSRrxfnh3CiCyn9LNui72CQPQvdg==} + /solid-floating-ui/0.2.0_sadgqcswk3ornos2gvsiom63vu: + resolution: {integrity: sha512-c1iXyQ8AU62bzZtPVggpp+rzTAuE1PkGs2HI9jIoaJV/RfOjGiM4HTOcAVGwkg/Gm0XFqj8w4bTptAM3rqbrRA==} engines: {node: '>=10'} peerDependencies: '@floating-ui/dom': ^1.0 solid-js: ^1.3 dependencies: - '@floating-ui/dom': 1.0.3 - solid-js: 1.6.0 + '@floating-ui/dom': 1.0.4 + solid-js: 1.6.2 dev: false - /solid-headless/0.12.6_solid-js@1.6.0: - resolution: {integrity: sha512-NNnsuICNYMtvXbnU/WQTo7xf9sVGGXhzcQQx0DTeKDf+VD9oiyvVrM5H3tNT8K3TaYBMG8QRuHiG+rs+LS0hZw==} + /solid-headless/0.13.0_solid-js@1.6.2: + resolution: {integrity: sha512-N118iPl7W5lyug4K+4c0cwM8YR2yEVJ/3H4wq6tVijATHfXfLnB1ACFI5GGHSXlwu70PUzaGSKwcVqLlloUMyA==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 dependencies: - solid-js: 1.6.0 - solid-use: 0.5.0_solid-js@1.6.0 + solid-js: 1.6.2 + solid-use: 0.5.0_solid-js@1.6.2 dev: false - /solid-js/1.6.0: - resolution: {integrity: sha512-db5s65ErgZnBhapPx77qauzul8akHlMCvirS+Y86U4abMa3uizMVNW9ql3UxbO0yMzMGNpFJwUiOlXmJCbwVpA==} + /solid-js/1.6.2: + resolution: {integrity: sha512-AZBsj+Yn1xliniTTeuQKG9V7VQVkQ8lZmSKvBjpcVSoZeF7nvt/N5f7Kcsx6QSufioa2YgvBjkIiA0cM0qhotw==} dependencies: csstype: 3.1.1 - /solid-refresh/0.4.1_solid-js@1.6.0: + /solid-refresh/0.4.1_solid-js@1.6.2: resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} peerDependencies: solid-js: ^1.3 dependencies: - '@babel/generator': 7.19.6 + '@babel/generator': 7.20.4 '@babel/helper-module-imports': 7.18.6 - '@babel/types': 7.19.4 - solid-js: 1.6.0 + '@babel/types': 7.20.2 + solid-js: 1.6.2 - /solid-start-node/0.1.8_skn3rynzh2ilyzdivsdrzncrzi: + /solid-start-node/0.1.8_4a2ftuehhnoj3skchx5ymnqpr4: resolution: {integrity: sha512-gmX9HGMP9bDVOJUO3m32EGm3QqhRH1FgCkURwMB6tOmLTSd9S1JoG3aB5+r5JmWwJoajnZn1fcq7QLbtwZOSpQ==} peerDependencies: solid-start: '*' @@ -5470,15 +6182,15 @@ packages: polka: 1.0.0-next.22 rollup: 2.79.1 sirv: 2.0.2 - solid-start: 0.1.8_t6jxp2tiygxm3dc5nraehhylmi + solid-start: 0.1.8_tbjdesofheooswmx2dbgquvvky terser: 5.15.1 - undici: 5.11.0 - vite: 3.1.8 + undici: 5.12.0 + vite: 3.2.3 transitivePeerDependencies: - supports-color dev: true - /solid-start/0.1.8_t6jxp2tiygxm3dc5nraehhylmi: + /solid-start/0.1.8_tbjdesofheooswmx2dbgquvvky: resolution: {integrity: sha512-Q5GTwKbHNOP1EH9e7Ky4BrsbF7bnWCQ1ZdotwoK9xL2+IuiSBbTGoxD2RVVuIZgbXvnfgAZz9o0WGkK2wdIyGw==} hasBin: true peerDependencies: @@ -5487,24 +6199,24 @@ packages: solid-js: ^1.5.8 vite: ^3.0.4 dependencies: - '@babel/core': 7.19.6 - '@babel/generator': 7.19.6 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/preset-env': 7.19.4_@babel+core@7.19.6 - '@babel/preset-typescript': 7.18.6_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/generator': 7.20.4 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 + '@babel/preset-env': 7.20.2_@babel+core@7.20.2 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 '@babel/template': 7.18.10 - '@solidjs/meta': 0.28.0_solid-js@1.6.0 - '@solidjs/router': 0.4.3_solid-js@1.6.0 + '@solidjs/meta': 0.28.2_solid-js@1.6.2 + '@solidjs/router': 0.4.3_solid-js@1.6.2 '@types/cookie': 0.5.1 - '@vinxi/vite-plugin-inspect': 0.6.27_rollup@2.79.1+vite@3.1.8 + '@vinxi/vite-plugin-inspect': 0.6.27_rollup@2.79.1+vite@3.2.3 chokidar: 3.5.3 compression: 1.7.4 connect: 3.7.0 debug: 4.3.4 dequal: 2.0.3 - es-module-lexer: 1.0.5 + es-module-lexer: 1.1.0 esbuild: 0.14.54 - esbuild-plugin-solid: 0.4.2_xrubpslr2ri5v6aetguaj52fhy + esbuild-plugin-solid: 0.4.2_6we57ubfqshakcgdszwdwpd52a fast-glob: 3.2.12 get-port: 6.1.2 parse-multipart-data: 1.5.0 @@ -5514,31 +6226,31 @@ packages: rollup-route-manifest: 1.0.0_rollup@2.79.1 sade: 1.8.1 sirv: 2.0.2 - solid-js: 1.6.0 + solid-js: 1.6.2 terser: 5.15.1 - undici: 5.11.0 - vite: 3.1.8 - vite-plugin-inspect: 0.6.1_vite@3.1.8 - vite-plugin-solid: 2.3.10_solid-js@1.6.0+vite@3.1.8 + undici: 5.12.0 + vite: 3.2.3 + vite-plugin-inspect: 0.6.1_vite@3.2.3 + vite-plugin-solid: 2.4.0_solid-js@1.6.2+vite@3.2.3 wait-on: 6.0.1_debug@4.3.4 transitivePeerDependencies: - supports-color - /solid-transition-group/0.0.11_solid-js@1.6.0: - resolution: {integrity: sha512-WcMhZvaQKAWfByVgtJuKwR2naXQHG1tJHDvqsC/EyNsoNWRkDu+9AWcwaUWW1kXZ24n17We0IIRe7z4G5dEYRw==} + /solid-transition-group/0.0.12_solid-js@1.6.2: + resolution: {integrity: sha512-Eu4MfNZSSxM67C+4EXaoDiWr4BFbDLg3j30JQJgQEIH9UDOfgNPfZlsFDhT/PxwJqhe6sn85W+dbmYJzBmjpAA==} peerDependencies: solid-js: ^1.0.0 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false - /solid-use/0.5.0_solid-js@1.6.0: + /solid-use/0.5.0_solid-js@1.6.2: resolution: {integrity: sha512-z1AaS99SL3gNP70K4+XIVKGXDRI56m3Q6Q4X63bfgw0kaN6cwT4SAyFZAmIRjHcvf5rOMRQfNgUV4YVDha+LcQ==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 dependencies: - solid-js: 1.6.0 + solid-js: 1.6.2 dev: false /source-map-js/1.0.2: @@ -5634,16 +6346,16 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 @@ -5685,10 +6397,15 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + /strip-literal/0.4.2: resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} dependencies: - acorn: 8.8.0 + acorn: 8.8.1 dev: true /sucrase/3.28.0: @@ -5753,10 +6470,14 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.0 + acorn: 8.8.1 commander: 2.20.3 source-map-support: 0.5.21 + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + /thenify-all/1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -5860,11 +6581,15 @@ packages: /ts-toolbelt/9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} - /tslib/2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - /tsup/6.3.0_tsifnmosqzrfo2mme7gtewypme: - resolution: {integrity: sha512-IaNQO/o1rFgadLhNonVKNCT2cks+vvnWX3DnL8sB87lBDqRvJXHENr5lSPJlqwplUlDxSwZK8dSg87rgBu6Emw==} + /tsup/6.4.0: + resolution: {integrity: sha512-4OlbqIK/SF+cJp0mMqPM2pKULvgj/1S2Gm3I1aFoFGIryUOyIqPZBoqKkqVQT6uFtWJ5AHftIv0riXKfHox1zQ==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -5879,29 +6604,27 @@ packages: typescript: optional: true dependencies: - bundle-require: 3.1.0_esbuild@0.15.12 + bundle-require: 3.1.2_esbuild@0.15.13 cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.15.12 + esbuild: 0.15.13 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss: 8.4.18 - postcss-load-config: 3.1.4_postcss@8.4.18 + postcss-load-config: 3.1.4 resolve-from: 5.0.0 - rollup: 2.79.1 + rollup: 3.2.5 source-map: 0.8.0-beta.0 sucrase: 3.28.0 tree-kill: 1.2.2 - typescript: 4.8.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsup/6.3.0_typescript@4.8.4: - resolution: {integrity: sha512-IaNQO/o1rFgadLhNonVKNCT2cks+vvnWX3DnL8sB87lBDqRvJXHENr5lSPJlqwplUlDxSwZK8dSg87rgBu6Emw==} + /tsup/6.4.0_typescript@4.8.4: + resolution: {integrity: sha512-4OlbqIK/SF+cJp0mMqPM2pKULvgj/1S2Gm3I1aFoFGIryUOyIqPZBoqKkqVQT6uFtWJ5AHftIv0riXKfHox1zQ==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -5916,17 +6639,17 @@ packages: typescript: optional: true dependencies: - bundle-require: 3.1.0_esbuild@0.15.12 + bundle-require: 3.1.2_esbuild@0.15.13 cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.15.12 + esbuild: 0.15.13 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 3.1.4 resolve-from: 5.0.0 - rollup: 2.79.1 + rollup: 3.2.5 source-map: 0.8.0-beta.0 sucrase: 3.28.0 tree-kill: 1.2.2 @@ -5936,8 +6659,18 @@ packages: - ts-node dev: true - /tsx/3.10.4: - resolution: {integrity: sha512-sBxeSgUAPVqRgBPk6TY0yFiNDUlva9rA+Nj46oYEd89FXVD2MFWChFhybTtq7Qh1Ies/O75mQNwpLuO7m8gToA==} + /tsutils/3.21.0_typescript@4.8.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.8.4 + dev: true + + /tsx/3.12.0: + resolution: {integrity: sha512-Z9drA8U1/jRJRWVTS2rOwdsCfkAShwfYBlE+6BVZsZChDsgYsEZZe44MGNNK6V6wQTTtu1kRNV57MsKRMJfdpg==} hasBin: true dependencies: '@esbuild-kit/cjs-loader': 2.4.0 @@ -5958,68 +6691,68 @@ packages: smartwrap: 2.0.2 strip-ansi: 6.0.1 wcwidth: 1.0.1 - yargs: 17.6.0 + yargs: 17.6.2 dev: true - /turbo-darwin-64/1.5.6: - resolution: {integrity: sha512-CWdXMwenBS2+QXIR2Czx7JPnAcoMzWx/QwTDcHVxZyeayMHgz8Oq5AHCtfaHDSfV8YhD3xa0GLSk6+cFt+W8BQ==} + /turbo-darwin-64/1.6.3: + resolution: {integrity: sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64/1.5.6: - resolution: {integrity: sha512-c/aXgW9JuXT2bJSKf01pdSDQKnrdcdj3WFKmKiVldb9We6eqFzI0fLHBK97k5LM/OesmRMfCMQ2Cv2DU8RqBAA==} + /turbo-darwin-arm64/1.6.3: + resolution: {integrity: sha512-75DXhFpwE7CinBbtxTxH08EcWrxYSPFow3NaeFwsG8aymkWXF+U2aukYHJA6I12n9/dGqf7yRXzkF0S/9UtdyQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64/1.5.6: - resolution: {integrity: sha512-y/jNF7SG+XJEwk2GxIqy3g4dj/a0PgZKDGyOkp24qp4KBRcHBl6dI1ZEfNed30EhEqmW4F5Dr7IpeCZoqgbrMg==} + /turbo-linux-64/1.6.3: + resolution: {integrity: sha512-O9uc6J0yoRPWdPg9THRQi69K6E2iZ98cRHNvus05lZbcPzZTxJYkYGb5iagCmCW/pq6fL4T4oLWAd6evg2LGQA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64/1.5.6: - resolution: {integrity: sha512-FRcxPtW7eFrbR3QaYBVX8cK7i+2Cerqi6F0t5ulcq+d1OGSdSW3l35rPPyJdwCzCy+k/S9sBcyCV0RtbS6RKCQ==} + /turbo-linux-arm64/1.6.3: + resolution: {integrity: sha512-dCy667qqEtZIhulsRTe8hhWQNCJO0i20uHXv7KjLHuFZGCeMbWxB8rsneRoY+blf8+QNqGuXQJxak7ayjHLxiA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64/1.5.6: - resolution: {integrity: sha512-/5KIExY7zbrbeL5fhKGuO85u5VtJ3Ue4kI0MbYCNnTGe7a10yTYkwswgtGihsgEF4AW0Nm0159aHmXZS2Le8IA==} + /turbo-windows-64/1.6.3: + resolution: {integrity: sha512-lKRqwL3mrVF09b9KySSaOwetehmGknV9EcQTF7d2dxngGYYX1WXoQLjFP9YYH8ZV07oPm+RUOAKSCQuDuMNhiA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64/1.5.6: - resolution: {integrity: sha512-p+LQN9O39+rZuOAyc6BzyVGvdEKo+v+XmtdeyZsZpfj4xuOLtsEptW1w6cUD439u0YcPknuccGq1MQ0lXQ6Xuw==} + /turbo-windows-arm64/1.6.3: + resolution: {integrity: sha512-BXY1sDPEA1DgPwuENvDCD8B7Hb0toscjus941WpL8CVd10hg9pk/MWn9CNgwDO5Q9ks0mw+liDv2EMnleEjeNA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo/1.5.6: - resolution: {integrity: sha512-xJO/fhiMo4lI62iGR9OgUfJTC9tnnuoMwNC52IfvvBDEPlA8RWGMS8SFpDVG9bNCXvVRrtUTNJXMe6pJWBiOTA==} + /turbo/1.6.3: + resolution: {integrity: sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.5.6 - turbo-darwin-arm64: 1.5.6 - turbo-linux-64: 1.5.6 - turbo-linux-arm64: 1.5.6 - turbo-windows-64: 1.5.6 - turbo-windows-arm64: 1.5.6 + turbo-darwin-64: 1.6.3 + turbo-darwin-arm64: 1.6.3 + turbo-linux-64: 1.6.3 + turbo-linux-arm64: 1.6.3 + turbo-windows-64: 1.6.3 + turbo-windows-arm64: 1.6.3 dev: true /type-check/0.3.2: @@ -6029,6 +6762,13 @@ packages: prelude-ls: 1.1.2 dev: true + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -6039,6 +6779,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -6049,8 +6794,8 @@ packages: engines: {node: '>=8'} dev: true - /type-fest/3.1.0: - resolution: {integrity: sha512-StmrZmK3eD9mDF9Vt7UhqthrDSk66O9iYl5t5a0TSoVkHjl0XZx/xuc/BRz4urAXXGHOY5OLsE0RdJFIApSFmw==} + /type-fest/3.2.0: + resolution: {integrity: sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==} engines: {node: '>=14.16'} dev: false @@ -6076,8 +6821,16 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.11.0: - resolution: {integrity: sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==} + /unconfig/0.3.7: + resolution: {integrity: sha512-1589b7oGa8ILBYpta7TndM5mLHLzHUqBfhszeZxuUBrjO/RoQ52VGVWsS3w0C0GLNxO9RPmqkf6BmIvBApaRdA==} + dependencies: + '@antfu/utils': 0.5.2 + defu: 6.1.0 + jiti: 1.16.0 + dev: true + + /undici/5.12.0: + resolution: {integrity: sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 @@ -6116,6 +6869,38 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /unocss/0.46.4_vite@3.2.3: + resolution: {integrity: sha512-fm+t0p/Sni32s9yxn4JC1nEAHOrjo8vYR0+Wwxnbtu+vYPef/562EFAu2qoagZRRU7pVab1L0EiivcFHlcErGA==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.46.4 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + dependencies: + '@unocss/astro': 0.46.4_vite@3.2.3 + '@unocss/cli': 0.46.4 + '@unocss/core': 0.46.4 + '@unocss/preset-attributify': 0.46.4 + '@unocss/preset-icons': 0.46.4 + '@unocss/preset-mini': 0.46.4 + '@unocss/preset-tagify': 0.46.4 + '@unocss/preset-typography': 0.46.4 + '@unocss/preset-uno': 0.46.4 + '@unocss/preset-web-fonts': 0.46.4 + '@unocss/preset-wind': 0.46.4 + '@unocss/reset': 0.46.4 + '@unocss/transformer-attributify-jsx': 0.46.4 + '@unocss/transformer-compile-class': 0.46.4 + '@unocss/transformer-directives': 0.46.4 + '@unocss/transformer-variant-group': 0.46.4 + '@unocss/vite': 0.46.4_vite@3.2.3 + transitivePeerDependencies: + - rollup + - supports-color + - vite + dev: true + /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -6130,6 +6915,12 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -6156,7 +6947,7 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /vite-plugin-inspect/0.6.1_vite@3.1.8: + /vite-plugin-inspect/0.6.1_vite@3.2.3: resolution: {integrity: sha512-MQzIgMoPyiPDuHoO6p7QBOrmheBU/ntg0cgtgcnm21S/Xds5oak1CbVLSAvv4fK1ZpetLK+tlJ+2mlFO9fG3SQ==} engines: {node: '>=14'} peerDependencies: @@ -6167,137 +6958,105 @@ packages: kolorist: 1.6.0 sirv: 2.0.2 ufo: 0.8.6 - vite: 3.1.8 + vite: 3.2.3 transitivePeerDependencies: - supports-color - /vite-plugin-solid/2.3.10_solid-js@1.6.0+vite@3.1.8: - resolution: {integrity: sha512-5jMF+QFk2TQaPLlDl7LvZZ99D4kO1X+rD9LR78p9sx9O+XisVSQaHFPLrCsyW/lXuBwub+ox/pNaZdCUZJwd3Q==} + /vite-plugin-solid/2.4.0_solid-js@1.6.2+vite@3.2.3: + resolution: {integrity: sha512-Rr+t2sr9TWIvH16yzBZzx6O9YSpYAvcwKUMPqbi/4iU3mRumXQ4O10i1XGtQIynC7U3XwJsMzAJigDFGbiJBiw==} peerDependencies: solid-js: ^1.3.17 vite: ^3.0.0 dependencies: - '@babel/core': 7.19.6 - '@babel/preset-typescript': 7.18.6_@babel+core@7.19.6 - babel-preset-solid: 1.6.0_@babel+core@7.19.6 + '@babel/core': 7.20.2 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 + babel-preset-solid: 1.6.2_@babel+core@7.20.2 merge-anything: 5.0.4 - solid-js: 1.6.0 - solid-refresh: 0.4.1_solid-js@1.6.0 - vite: 3.1.8 + solid-js: 1.6.2 + solid-refresh: 0.4.1_solid-js@1.6.2 + vite: 3.2.3 + vitefu: 0.1.1_vite@3.2.3 transitivePeerDependencies: - supports-color - /vite/3.1.8: - resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} + /vite/3.2.3: + resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: + '@types/node': '>= 14' less: '*' sass: '*' stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: + '@types/node': + optional: true less: optional: true sass: optional: true stylus: optional: true + sugarss: + optional: true terser: optional: true dependencies: - esbuild: 0.15.12 - postcss: 8.4.18 + esbuild: 0.15.13 + postcss: 8.4.19 resolve: 1.22.1 - rollup: 2.78.1 + rollup: 2.79.1 optionalDependencies: fsevents: 2.3.2 - /vitest/0.23.4: - resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} - engines: {node: '>=v14.16.0'} + /vite/3.2.3_@types+node@18.11.9: + resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 peerDependenciesMeta: - '@edge-runtime/vm': + '@types/node': optional: true - '@vitest/browser': + less: optional: true - '@vitest/ui': + sass: optional: true - happy-dom: + stylus: optional: true - jsdom: + sugarss: + optional: true + terser: optional: true dependencies: - '@types/chai': 4.3.3 - '@types/chai-subset': 1.3.3 - '@types/node': 18.11.3 - chai: 4.3.6 - debug: 4.3.4 - local-pkg: 0.4.2 - strip-literal: 0.4.2 - tinybench: 2.3.1 - tinypool: 0.3.0 - tinyspy: 1.0.2 - vite: 3.1.8 - transitivePeerDependencies: - - less - - sass - - stylus - - supports-color - - terser + '@types/node': 18.11.9 + esbuild: 0.15.13 + postcss: 8.4.19 + resolve: 1.22.1 + rollup: 2.79.1 + optionalDependencies: + fsevents: 2.3.2 dev: true - /vitest/0.23.4_jsdom@20.0.1: - resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} - engines: {node: '>=v14.16.0'} - hasBin: true + /vitefu/0.1.1_vite@3.2.3: + resolution: {integrity: sha512-HClD14fjMJ+NQgXBqT3dC3RdO/+Chayil+cCPYZKY3kT+KcJomKzrdgzfCHJkIL2L0OAY+VPvrSW615iPtc7ag==} peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' + vite: ^3.0.0 peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: + vite: optional: true dependencies: - '@types/chai': 4.3.3 - '@types/chai-subset': 1.3.3 - '@types/node': 18.11.3 - chai: 4.3.6 - debug: 4.3.4 - jsdom: 20.0.1 - local-pkg: 0.4.2 - strip-literal: 0.4.2 - tinybench: 2.3.1 - tinypool: 0.3.0 - tinyspy: 1.0.2 - vite: 3.1.8 - transitivePeerDependencies: - - less - - sass - - stylus - - supports-color - - terser - dev: true + vite: 3.2.3 - /vitest/0.24.3: - resolution: {integrity: sha512-aM0auuPPgMSstWvr851hB74g/LKaKBzSxcG3da7ejfZbx08Y21JpZmbmDYrMTCGhVZKqTGwzcnLMwyfz2WzkhQ==} + /vitest/0.23.4_jsdom@20.0.2: + resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -6318,21 +7077,23 @@ packages: jsdom: optional: true dependencies: - '@types/chai': 4.3.3 + '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.3 - chai: 4.3.6 + '@types/node': 18.11.9 + chai: 4.3.7 debug: 4.3.4 + jsdom: 20.0.2 local-pkg: 0.4.2 strip-literal: 0.4.2 tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 3.1.8 + vite: 3.2.3_@types+node@18.11.9 transitivePeerDependencies: - less - sass - stylus + - sugarss - supports-color - terser dev: true @@ -6350,7 +7111,7 @@ packages: hasBin: true dependencies: axios: 0.25.0_debug@4.3.4 - joi: 17.6.3 + joi: 17.7.0 lodash: 4.17.21 minimist: 1.2.7 rxjs: 7.5.7 @@ -6467,8 +7228,8 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws/8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} + /ws/8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6501,6 +7262,10 @@ packages: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -6535,8 +7300,8 @@ packages: yargs-parser: 18.1.3 dev: true - /yargs/17.6.0: - resolution: {integrity: sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==} + /yargs/17.6.2: + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 diff --git a/tsconfig.json b/tsconfig.json index 4425f300..6153061b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,8 +9,7 @@ "solid-devtools": ["./packages/ext-client/src/index.ts"], "@solid-devtools/shared/*": ["./packages/shared/src/*"], "@solid-devtools/debugger": ["./packages/debugger/src/index.ts"], - "@solid-devtools/logger": ["./packages/logger/src/index.ts"], - "@solid-devtools/locator": ["./packages/locator/src/index.ts"] + "@solid-devtools/logger": ["./packages/logger/src/index.ts"] } }, "exclude": ["node_modules", "**/dist/**/*"]