refactor(svelte): use custom stores for nodes and edges

This commit is contained in:
moklick
2023-03-07 17:16:33 +01:00
parent 33b9a801fe
commit 1153486ae2
9 changed files with 163 additions and 142 deletions

View File

@@ -87,7 +87,6 @@ export default function drag(
const dragHandler = d3Drag()
.on('start', (event: UseDragEvent) => {
const pointerPos = getPointerPosition(event);
console.log(pointerPos);
lastPos = pointerPos;
dragItems = getDragItems(get(nodes), pointerPos, nodeId);
})

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { setContext, onMount, createEventDispatcher } from 'svelte';
import { setContext, onMount } from 'svelte';
import cc from 'classcat';
import { key, createStore } from '$lib/store';
@@ -18,8 +18,8 @@
type $$Events = SvelteFlowEvents;
export let id: $$Props['id'] = '1';
export let nodes: $$Props['nodes'] = [];
export let edges: $$Props['edges'] = [];
export let nodes: $$Props['nodes'];
export let edges: $$Props['edges'];
export let fitView: $$Props['fitView'] = undefined;
export let minZoom: $$Props['minZoom'] = undefined;
export let maxZoom: $$Props['maxZoom'] = undefined;
@@ -28,7 +28,6 @@
export let edgeTypes: $$Props['edgeTypes'] = undefined;
export let selectionKey: $$Props['selectionKey'] = undefined;
export let deleteKey: $$Props['deleteKey'] = undefined;
export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined;
export let connectionRadius: $$Props['connectionRadius'] = undefined;
export let connectionLineType: $$Props['connectionLineType'] = undefined
export let style: $$Props['style'] = undefined;
@@ -38,6 +37,8 @@
let domNode: HTMLDivElement;
const store = createStore({
nodes,
edges,
fitView,
nodeTypes
});
@@ -51,15 +52,6 @@
store.width.set(width);
store.height.set(height);
store.domNode.set(domNode);
// @todo: is this a svelte way for two way binding?
store.nodes.subscribe((ns) => {
nodes = ns;
});
store.edges.subscribe((es) => {
edges = es;
});
});
$: {
@@ -67,7 +59,6 @@
id,
connectionLineType,
connectionRadius,
defaultEdgeOptions
};
Object.keys(updatableProps).forEach(prop => {
@@ -79,14 +70,6 @@
})
}
$: {
store.setNodes(nodes);
}
$: {
store.setEdges(edges);
}
$: {
if (nodeTypes !== undefined) {
store.setNodeTypes(nodeTypes);

View File

@@ -14,10 +14,12 @@ import type {
EdgeTypes,
DefaultEdgeOptions
} from '$lib/types';
import type { Writable } from 'svelte/store';
import type { createNodes } from '$lib/utils';
export type SvelteFlowProps = {
nodes: Node[];
edges: Edge[];
nodes: ReturnType<typeof createNodes>;
edges: Writable<Edge[]>;
id?: string;
nodeTypes?: NodeTypes;

View File

@@ -30,10 +30,13 @@ import {
initialStoreState
} from './initial-store';
import type { SvelteFlowStore } from './types';
import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types';
export const key = Symbol();
type CreateStoreProps = {
nodes: SvelteFlowProps['nodes'];
edges: SvelteFlowProps['edges'];
fitView?: boolean;
nodeOrigin?: NodeOrigin;
transform?: Transform;
@@ -42,9 +45,15 @@ type CreateStoreProps = {
id?: string;
};
export function createStore({ fitView: fitViewOnInit = false }: CreateStoreProps): SvelteFlowStore {
export function createStore({
fitView: fitViewOnInit = false,
nodes,
edges
}: CreateStoreProps): SvelteFlowStore {
const store = {
...initialStoreState
...initialStoreState,
nodes,
edges
};
let fitViewOnInitDone = false;
@@ -63,36 +72,9 @@ export function createStore({ fitView: fitViewOnInit = false }: CreateStoreProps
});
}
function setEdges(edges: Edge[]) {
const defaultEdgeOptions = get(store.defaultEdgeOptions);
const nextEdges = defaultEdgeOptions
? edges.map((e) => ({ ...defaultEdgeOptions, ...e }))
: edges;
store.edges.set(nextEdges);
}
function addEdge(edgeParams: Edge | Connection) {
const edges = get(store.edges);
setEdges(addEdgeUtil(edgeParams, edges));
}
function setNodes(nodes: Node[]) {
const defaultNodeOptions = get(store.defaultNodeOptions) || {};
store.nodes.update((currentNodes) => {
const nextNodes = nodes.map((n) => {
const currentNode = currentNodes.find((cn) => cn.id === n.id) || {};
return {
...defaultNodeOptions,
...currentNode,
...n,
positionAbsolute: n.position
};
});
return nextNodes;
});
store.edges.set(addEdgeUtil(edgeParams, edges));
}
function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) {
@@ -332,8 +314,6 @@ export function createStore({ fitView: fitViewOnInit = false }: CreateStoreProps
connectionPath: getConnectionPath(store),
// actions
setNodes,
setEdges,
setNodeTypes,
setEdgeTypes,
addEdge,

View File

@@ -16,16 +16,7 @@ import OutputNode from '$lib/components/nodes/OutputNode.svelte';
import BezierEdge from '$lib/components/edges/BezierEdge.svelte';
import StraightEdge from '$lib/components/edges/StraightEdge.svelte';
import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte';
import type {
Node,
Edge,
ConnectionData,
NodeTypes,
EdgeTypes,
EdgeLayouted,
DefaultEdgeOptions,
DefaultNodeOptions
} from '$lib/types';
import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted } from '$lib/types';
export const initConnectionData = {
nodeId: null,
@@ -49,8 +40,6 @@ export const initialEdgeTypes = {
export const initialStoreState = {
id: writable<string | null>(null),
nodes: writable<Node[]>([]),
edges: writable<Edge[]>([]),
edgesLayouted: readable<EdgeLayouted[]>([]),
height: writable<number>(500),
width: writable<number>(500),
@@ -61,8 +50,6 @@ export const initialStoreState = {
zoom: null,
selection: null
}),
defaultNodeOptions: writable<DefaultNodeOptions | null>(null),
defaultEdgeOptions: writable<DefaultEdgeOptions | null>(null),
dragging: writable<boolean>(false),
selectionRect: writable<SelectionRect | null>(null),
selectionKeyPressed: writable<boolean>(false),

View File

@@ -8,10 +8,9 @@ import type {
import type { initialStoreState } from './initial-store';
import type { Node, Edge, ConnectionData, NodeTypes, EdgeTypes } from '$lib/types';
import type { Writable } from 'svelte/store';
export type SvelteFlowStoreActions = {
setNodes: (nodes: Node[]) => void;
setEdges: (edges: Edge[]) => void;
setNodeTypes: (nodeTypes: NodeTypes) => void;
setEdgeTypes: (edgeTypes: EdgeTypes) => void;
addEdge: (edge: Edge | Connection) => void;
@@ -33,6 +32,9 @@ export type SvelteFlowStoreActions = {
cancelConnection: () => void;
};
export type SvelteFlowStoreState = typeof initialStoreState;
export type SvelteFlowStoreState = typeof initialStoreState & {
nodes: Writable<Node[]>;
edges: Writable<Edge[]>;
};
export type SvelteFlowStore = SvelteFlowStoreState & SvelteFlowStoreActions;

View File

@@ -9,7 +9,8 @@ import {
getConnectedEdgesBase,
getDimensions
} from '@reactflow/utils';
import type { Edge, Node } from '$lib/types';
import type { DefaultEdgeOptions, DefaultNodeOptions, Edge, Node } from '$lib/types';
import { writable, type Writable } from 'svelte/store';
export const isNode = isNodeBase<Node, Edge>;
export const isEdge = isEdgeBase<Node, Edge>;
@@ -45,3 +46,67 @@ export const getHandleBounds = (
};
});
};
export const createNodes = (
nodes: Node[],
defaultOptions?: DefaultNodeOptions
): Writable<Node[]> & { setDefaultOptions: (opts: DefaultNodeOptions) => void } => {
const { subscribe, set, update } = writable<Node[]>([]);
let value = nodes;
let defaults = defaultOptions || {};
const _set: typeof set = (nds: Node[]) => {
const nextNodes = defaults ? nds.map((node) => ({ ...defaults, ...node })) : nds;
// @todo calculate absolute position based on parent / child relation
const nextNodesLayouted = nextNodes.map((n) => ({ ...n, positionAbsolute: n.position }));
value = nextNodesLayouted;
set(value);
};
const _update: typeof update = (fn: (nds: Node[]) => Node[]) => _set(fn(value));
const setDefaultOptions = (options: DefaultNodeOptions) => {
defaults = options;
};
_set(value);
return {
subscribe,
set: _set,
update: _update,
setDefaultOptions
};
};
export const createEdges = (
edges: Edge[],
defaultOptions?: DefaultEdgeOptions
): Writable<Edge[]> & { setDefaultOptions: (opts: DefaultEdgeOptions) => void } => {
const { subscribe, set, update } = writable<Edge[]>([]);
let value = edges;
let defaults = defaultOptions || {};
const _set: typeof set = (eds: Edge[]) => {
const nextEdges = defaults ? eds.map((edge) => ({ ...defaults, ...edge })) : eds;
value = nextEdges;
set(value);
};
const _update: typeof update = (fn: (eds: Edge[]) => Edge[]) => _set(fn(value));
const setDefaultOptions = (options: DefaultEdgeOptions) => {
defaults = options;
};
_set(value);
return {
subscribe,
set: _set,
update: _update,
setDefaultOptions
};
};

View File

@@ -5,7 +5,9 @@
BackgroundVariant,
Minimap,
Panel,
type Node, type Edge, type NodeTypes
createNodes,
createEdges,
type NodeTypes
} from '../lib/index';
import CustomNode from '../customnodes/Custom.svelte';
@@ -47,7 +49,7 @@
// }
// }
let nodes: Node<{ label: string }>[] = [
let nodes = createNodes([
{
id: '1',
type: 'input',
@@ -93,9 +95,9 @@
data: { label: 'Custom Node' },
position: { x: 150, y: 300 }
}
];
]);
let edges: Edge[] = [
let edges = createEdges([
{
id: '1-2',
type: 'default',
@@ -114,28 +116,35 @@
type: 'default',
source: '2',
target: '4',
animated: true
}
];
], { animated: true });
function updateNode() {
nodes[0].position = { x: nodes[0].position.x + 20, y: nodes[0].position.y };
nodes.update(nds => nds.map(n => {
if (n.id === '1') {
return {
...n,
position: { x: n.position.x + 20, y: n.position.y }
}
}
return n;
}));
}
// $: {
// console.log('nodes changed', nodes)
// }
$: {
console.log('nodes changed', $nodes)
}
</script>
<SvelteFlow
bind:nodes
bind:edges
{nodes}
{edges}
{nodeTypes}
fitView
minZoom={0.1}
maxZoom={2.5}
initialViewport={{ x: 100, y: 100, zoom: 2 }}
defaultEdgeOptions={{ animated: true }}
on:node:click={(event) => console.log('on node click', event)}
on:node:mouseenter={(event) => console.log('on node enter', event)}
on:node:mouseleave={(event) => console.log('on node leave', event)}

102
pnpm-lock.yaml generated
View File

@@ -32,8 +32,8 @@ importers:
'@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.7
'@changesets/cli': registry.npmjs.org/@changesets/cli/2.25.0
'@preconstruct/cli': registry.npmjs.org/@preconstruct/cli/2.2.1
'@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.0_lldphppbh67ylraps6qcolshhy
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.54.0_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1_icdgnfqbkli2ydghsaevjiv5ae
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.54.1_id2eilsndvzhjjktb64trvy3gu
autoprefixer: registry.npmjs.org/autoprefixer/10.4.9_postcss@8.4.21
concurrently: registry.npmjs.org/concurrently/7.6.0
cypress: registry.npmjs.org/cypress/10.7.0
@@ -422,10 +422,7 @@ importers:
'@types/d3-selection': ^3.0.3
'@types/d3-zoom': ^3.0.1
'@types/node': ^18.7.16
'@types/react': '>=17'
'@types/react-dom': '>=17'
d3-zoom: ^3.0.0
react: ^18.2.0
typescript: ^4.9.4
dependencies:
'@reactflow/system': link:../system
@@ -439,9 +436,6 @@ importers:
'@reactflow/rollup-config': link:../../tooling/rollup-config
'@reactflow/tsconfig': link:../../tooling/tsconfig
'@types/node': registry.npmjs.org/@types/node/18.7.16
'@types/react': registry.npmjs.org/@types/react/18.0.19
'@types/react-dom': registry.npmjs.org/@types/react-dom/18.0.6
react: registry.npmjs.org/react/18.2.0
typescript: registry.npmjs.org/typescript/4.9.4
tooling/eslint-config:
@@ -2760,11 +2754,11 @@ packages:
- supports-color
dev: true
registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.0_lldphppbh67ylraps6qcolshhy:
resolution: {integrity: sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz}
id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.0
registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1_icdgnfqbkli2ydghsaevjiv5ae:
resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz}
id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1
name: '@typescript-eslint/eslint-plugin'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -2774,10 +2768,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.54.0_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0
'@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.54.0_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.0_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.54.1_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1
'@typescript-eslint/type-utils': registry.npmjs.org/@typescript-eslint/type-utils/5.54.1_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.1_id2eilsndvzhjjktb64trvy3gu
debug: registry.npmjs.org/debug/4.3.4
eslint: registry.npmjs.org/eslint/8.23.1
grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4
@@ -2814,11 +2808,11 @@ packages:
- supports-color
dev: true
registry.npmjs.org/@typescript-eslint/parser/5.54.0_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz}
id: registry.npmjs.org/@typescript-eslint/parser/5.54.0
registry.npmjs.org/@typescript-eslint/parser/5.54.1_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz}
id: registry.npmjs.org/@typescript-eslint/parser/5.54.1
name: '@typescript-eslint/parser'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -2827,9 +2821,9 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.1
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.4
debug: registry.npmjs.org/debug/4.3.4
eslint: registry.npmjs.org/eslint/8.23.1
typescript: registry.npmjs.org/typescript/4.9.4
@@ -2847,14 +2841,14 @@ packages:
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.49.0
dev: true
registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0:
resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz}
registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1:
resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz}
name: '@typescript-eslint/scope-manager'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.1
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1
dev: true
registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u:
@@ -2880,11 +2874,11 @@ packages:
- supports-color
dev: true
registry.npmjs.org/@typescript-eslint/type-utils/5.54.0_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz}
id: registry.npmjs.org/@typescript-eslint/type-utils/5.54.0
registry.npmjs.org/@typescript-eslint/type-utils/5.54.1_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz}
id: registry.npmjs.org/@typescript-eslint/type-utils/5.54.1
name: '@typescript-eslint/type-utils'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -2893,8 +2887,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.0_id2eilsndvzhjjktb64trvy3gu
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.4
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.1_id2eilsndvzhjjktb64trvy3gu
debug: registry.npmjs.org/debug/4.3.4
eslint: registry.npmjs.org/eslint/8.23.1
tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4
@@ -2910,10 +2904,10 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
registry.npmjs.org/@typescript-eslint/types/5.54.0:
resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz}
registry.npmjs.org/@typescript-eslint/types/5.54.1:
resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz}
name: '@typescript-eslint/types'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@@ -2941,11 +2935,11 @@ packages:
- supports-color
dev: true
registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4:
resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz}
id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0
registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.4:
resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz}
id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1
name: '@typescript-eslint/typescript-estree'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@@ -2953,8 +2947,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.1
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1
debug: registry.npmjs.org/debug/4.3.4
globby: registry.npmjs.org/globby/11.1.0
is-glob: registry.npmjs.org/is-glob/4.0.3
@@ -2988,20 +2982,20 @@ packages:
- typescript
dev: true
registry.npmjs.org/@typescript-eslint/utils/5.54.0_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz}
id: registry.npmjs.org/@typescript-eslint/utils/5.54.0
registry.npmjs.org/@typescript-eslint/utils/5.54.1_id2eilsndvzhjjktb64trvy3gu:
resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz}
id: registry.npmjs.org/@typescript-eslint/utils/5.54.1
name: '@typescript-eslint/utils'
version: 5.54.0
version: 5.54.1
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': registry.npmjs.org/@types/json-schema/7.0.11
'@types/semver': registry.npmjs.org/@types/semver/7.3.13
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.1
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.4
eslint: registry.npmjs.org/eslint/8.23.1
eslint-scope: registry.npmjs.org/eslint-scope/5.1.1
eslint-utils: registry.npmjs.org/eslint-utils/3.0.0_eslint@8.23.1
@@ -3021,13 +3015,13 @@ packages:
eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0
dev: true
registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0:
resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz}
registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1:
resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz}
name: '@typescript-eslint/visitor-keys'
version: 5.54.0
version: 5.54.1
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.1
eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0
dev: true