refactor(svelte): use custom stores for nodes and edges
This commit is contained in:
@@ -87,7 +87,6 @@ export default function drag(
|
|||||||
const dragHandler = d3Drag()
|
const dragHandler = d3Drag()
|
||||||
.on('start', (event: UseDragEvent) => {
|
.on('start', (event: UseDragEvent) => {
|
||||||
const pointerPos = getPointerPosition(event);
|
const pointerPos = getPointerPosition(event);
|
||||||
console.log(pointerPos);
|
|
||||||
lastPos = pointerPos;
|
lastPos = pointerPos;
|
||||||
dragItems = getDragItems(get(nodes), pointerPos, nodeId);
|
dragItems = getDragItems(get(nodes), pointerPos, nodeId);
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { setContext, onMount, createEventDispatcher } from 'svelte';
|
import { setContext, onMount } from 'svelte';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
|
|
||||||
import { key, createStore } from '$lib/store';
|
import { key, createStore } from '$lib/store';
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
type $$Events = SvelteFlowEvents;
|
type $$Events = SvelteFlowEvents;
|
||||||
|
|
||||||
export let id: $$Props['id'] = '1';
|
export let id: $$Props['id'] = '1';
|
||||||
export let nodes: $$Props['nodes'] = [];
|
export let nodes: $$Props['nodes'];
|
||||||
export let edges: $$Props['edges'] = [];
|
export let edges: $$Props['edges'];
|
||||||
export let fitView: $$Props['fitView'] = undefined;
|
export let fitView: $$Props['fitView'] = undefined;
|
||||||
export let minZoom: $$Props['minZoom'] = undefined;
|
export let minZoom: $$Props['minZoom'] = undefined;
|
||||||
export let maxZoom: $$Props['maxZoom'] = undefined;
|
export let maxZoom: $$Props['maxZoom'] = undefined;
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
export let edgeTypes: $$Props['edgeTypes'] = undefined;
|
export let edgeTypes: $$Props['edgeTypes'] = undefined;
|
||||||
export let selectionKey: $$Props['selectionKey'] = undefined;
|
export let selectionKey: $$Props['selectionKey'] = undefined;
|
||||||
export let deleteKey: $$Props['deleteKey'] = undefined;
|
export let deleteKey: $$Props['deleteKey'] = undefined;
|
||||||
export let defaultEdgeOptions: $$Props['defaultEdgeOptions'] = undefined;
|
|
||||||
export let connectionRadius: $$Props['connectionRadius'] = undefined;
|
export let connectionRadius: $$Props['connectionRadius'] = undefined;
|
||||||
export let connectionLineType: $$Props['connectionLineType'] = undefined
|
export let connectionLineType: $$Props['connectionLineType'] = undefined
|
||||||
export let style: $$Props['style'] = undefined;
|
export let style: $$Props['style'] = undefined;
|
||||||
@@ -38,6 +37,8 @@
|
|||||||
let domNode: HTMLDivElement;
|
let domNode: HTMLDivElement;
|
||||||
|
|
||||||
const store = createStore({
|
const store = createStore({
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
fitView,
|
fitView,
|
||||||
nodeTypes
|
nodeTypes
|
||||||
});
|
});
|
||||||
@@ -51,15 +52,6 @@
|
|||||||
store.width.set(width);
|
store.width.set(width);
|
||||||
store.height.set(height);
|
store.height.set(height);
|
||||||
store.domNode.set(domNode);
|
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,
|
id,
|
||||||
connectionLineType,
|
connectionLineType,
|
||||||
connectionRadius,
|
connectionRadius,
|
||||||
defaultEdgeOptions
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.keys(updatableProps).forEach(prop => {
|
Object.keys(updatableProps).forEach(prop => {
|
||||||
@@ -79,14 +70,6 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
$: {
|
|
||||||
store.setNodes(nodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
$: {
|
|
||||||
store.setEdges(edges);
|
|
||||||
}
|
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
if (nodeTypes !== undefined) {
|
if (nodeTypes !== undefined) {
|
||||||
store.setNodeTypes(nodeTypes);
|
store.setNodeTypes(nodeTypes);
|
||||||
|
|||||||
@@ -14,10 +14,12 @@ import type {
|
|||||||
EdgeTypes,
|
EdgeTypes,
|
||||||
DefaultEdgeOptions
|
DefaultEdgeOptions
|
||||||
} from '$lib/types';
|
} from '$lib/types';
|
||||||
|
import type { Writable } from 'svelte/store';
|
||||||
|
import type { createNodes } from '$lib/utils';
|
||||||
|
|
||||||
export type SvelteFlowProps = {
|
export type SvelteFlowProps = {
|
||||||
nodes: Node[];
|
nodes: ReturnType<typeof createNodes>;
|
||||||
edges: Edge[];
|
edges: Writable<Edge[]>;
|
||||||
|
|
||||||
id?: string;
|
id?: string;
|
||||||
nodeTypes?: NodeTypes;
|
nodeTypes?: NodeTypes;
|
||||||
|
|||||||
@@ -30,10 +30,13 @@ import {
|
|||||||
initialStoreState
|
initialStoreState
|
||||||
} from './initial-store';
|
} from './initial-store';
|
||||||
import type { SvelteFlowStore } from './types';
|
import type { SvelteFlowStore } from './types';
|
||||||
|
import type { SvelteFlowProps } from '$lib/container/SvelteFlow/types';
|
||||||
|
|
||||||
export const key = Symbol();
|
export const key = Symbol();
|
||||||
|
|
||||||
type CreateStoreProps = {
|
type CreateStoreProps = {
|
||||||
|
nodes: SvelteFlowProps['nodes'];
|
||||||
|
edges: SvelteFlowProps['edges'];
|
||||||
fitView?: boolean;
|
fitView?: boolean;
|
||||||
nodeOrigin?: NodeOrigin;
|
nodeOrigin?: NodeOrigin;
|
||||||
transform?: Transform;
|
transform?: Transform;
|
||||||
@@ -42,9 +45,15 @@ type CreateStoreProps = {
|
|||||||
id?: string;
|
id?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function createStore({ fitView: fitViewOnInit = false }: CreateStoreProps): SvelteFlowStore {
|
export function createStore({
|
||||||
|
fitView: fitViewOnInit = false,
|
||||||
|
nodes,
|
||||||
|
edges
|
||||||
|
}: CreateStoreProps): SvelteFlowStore {
|
||||||
const store = {
|
const store = {
|
||||||
...initialStoreState
|
...initialStoreState,
|
||||||
|
nodes,
|
||||||
|
edges
|
||||||
};
|
};
|
||||||
|
|
||||||
let fitViewOnInitDone = false;
|
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) {
|
function addEdge(edgeParams: Edge | Connection) {
|
||||||
const edges = get(store.edges);
|
const edges = get(store.edges);
|
||||||
setEdges(addEdgeUtil(edgeParams, edges));
|
store.edges.set(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;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) {
|
function updateNodePositions(nodeDragItems: NodeDragItem[], dragging = false) {
|
||||||
@@ -332,8 +314,6 @@ export function createStore({ fitView: fitViewOnInit = false }: CreateStoreProps
|
|||||||
connectionPath: getConnectionPath(store),
|
connectionPath: getConnectionPath(store),
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
setNodes,
|
|
||||||
setEdges,
|
|
||||||
setNodeTypes,
|
setNodeTypes,
|
||||||
setEdgeTypes,
|
setEdgeTypes,
|
||||||
addEdge,
|
addEdge,
|
||||||
|
|||||||
@@ -16,16 +16,7 @@ import OutputNode from '$lib/components/nodes/OutputNode.svelte';
|
|||||||
import BezierEdge from '$lib/components/edges/BezierEdge.svelte';
|
import BezierEdge from '$lib/components/edges/BezierEdge.svelte';
|
||||||
import StraightEdge from '$lib/components/edges/StraightEdge.svelte';
|
import StraightEdge from '$lib/components/edges/StraightEdge.svelte';
|
||||||
import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte';
|
import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte';
|
||||||
import type {
|
import type { ConnectionData, NodeTypes, EdgeTypes, EdgeLayouted } from '$lib/types';
|
||||||
Node,
|
|
||||||
Edge,
|
|
||||||
ConnectionData,
|
|
||||||
NodeTypes,
|
|
||||||
EdgeTypes,
|
|
||||||
EdgeLayouted,
|
|
||||||
DefaultEdgeOptions,
|
|
||||||
DefaultNodeOptions
|
|
||||||
} from '$lib/types';
|
|
||||||
|
|
||||||
export const initConnectionData = {
|
export const initConnectionData = {
|
||||||
nodeId: null,
|
nodeId: null,
|
||||||
@@ -49,8 +40,6 @@ export const initialEdgeTypes = {
|
|||||||
|
|
||||||
export const initialStoreState = {
|
export const initialStoreState = {
|
||||||
id: writable<string | null>(null),
|
id: writable<string | null>(null),
|
||||||
nodes: writable<Node[]>([]),
|
|
||||||
edges: writable<Edge[]>([]),
|
|
||||||
edgesLayouted: readable<EdgeLayouted[]>([]),
|
edgesLayouted: readable<EdgeLayouted[]>([]),
|
||||||
height: writable<number>(500),
|
height: writable<number>(500),
|
||||||
width: writable<number>(500),
|
width: writable<number>(500),
|
||||||
@@ -61,8 +50,6 @@ export const initialStoreState = {
|
|||||||
zoom: null,
|
zoom: null,
|
||||||
selection: null
|
selection: null
|
||||||
}),
|
}),
|
||||||
defaultNodeOptions: writable<DefaultNodeOptions | null>(null),
|
|
||||||
defaultEdgeOptions: writable<DefaultEdgeOptions | null>(null),
|
|
||||||
dragging: writable<boolean>(false),
|
dragging: writable<boolean>(false),
|
||||||
selectionRect: writable<SelectionRect | null>(null),
|
selectionRect: writable<SelectionRect | null>(null),
|
||||||
selectionKeyPressed: writable<boolean>(false),
|
selectionKeyPressed: writable<boolean>(false),
|
||||||
|
|||||||
@@ -8,10 +8,9 @@ import type {
|
|||||||
|
|
||||||
import type { initialStoreState } from './initial-store';
|
import type { initialStoreState } from './initial-store';
|
||||||
import type { Node, Edge, ConnectionData, NodeTypes, EdgeTypes } from '$lib/types';
|
import type { Node, Edge, ConnectionData, NodeTypes, EdgeTypes } from '$lib/types';
|
||||||
|
import type { Writable } from 'svelte/store';
|
||||||
|
|
||||||
export type SvelteFlowStoreActions = {
|
export type SvelteFlowStoreActions = {
|
||||||
setNodes: (nodes: Node[]) => void;
|
|
||||||
setEdges: (edges: Edge[]) => void;
|
|
||||||
setNodeTypes: (nodeTypes: NodeTypes) => void;
|
setNodeTypes: (nodeTypes: NodeTypes) => void;
|
||||||
setEdgeTypes: (edgeTypes: EdgeTypes) => void;
|
setEdgeTypes: (edgeTypes: EdgeTypes) => void;
|
||||||
addEdge: (edge: Edge | Connection) => void;
|
addEdge: (edge: Edge | Connection) => void;
|
||||||
@@ -33,6 +32,9 @@ export type SvelteFlowStoreActions = {
|
|||||||
cancelConnection: () => void;
|
cancelConnection: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SvelteFlowStoreState = typeof initialStoreState;
|
export type SvelteFlowStoreState = typeof initialStoreState & {
|
||||||
|
nodes: Writable<Node[]>;
|
||||||
|
edges: Writable<Edge[]>;
|
||||||
|
};
|
||||||
|
|
||||||
export type SvelteFlowStore = SvelteFlowStoreState & SvelteFlowStoreActions;
|
export type SvelteFlowStore = SvelteFlowStoreState & SvelteFlowStoreActions;
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ import {
|
|||||||
getConnectedEdgesBase,
|
getConnectedEdgesBase,
|
||||||
getDimensions
|
getDimensions
|
||||||
} from '@reactflow/utils';
|
} 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 isNode = isNodeBase<Node, Edge>;
|
||||||
export const isEdge = isEdgeBase<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
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|||||||
@@ -5,7 +5,9 @@
|
|||||||
BackgroundVariant,
|
BackgroundVariant,
|
||||||
Minimap,
|
Minimap,
|
||||||
Panel,
|
Panel,
|
||||||
type Node, type Edge, type NodeTypes
|
createNodes,
|
||||||
|
createEdges,
|
||||||
|
type NodeTypes
|
||||||
} from '../lib/index';
|
} from '../lib/index';
|
||||||
import CustomNode from '../customnodes/Custom.svelte';
|
import CustomNode from '../customnodes/Custom.svelte';
|
||||||
|
|
||||||
@@ -47,7 +49,7 @@
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
let nodes: Node<{ label: string }>[] = [
|
let nodes = createNodes([
|
||||||
{
|
{
|
||||||
id: '1',
|
id: '1',
|
||||||
type: 'input',
|
type: 'input',
|
||||||
@@ -93,9 +95,9 @@
|
|||||||
data: { label: 'Custom Node' },
|
data: { label: 'Custom Node' },
|
||||||
position: { x: 150, y: 300 }
|
position: { x: 150, y: 300 }
|
||||||
}
|
}
|
||||||
];
|
]);
|
||||||
|
|
||||||
let edges: Edge[] = [
|
let edges = createEdges([
|
||||||
{
|
{
|
||||||
id: '1-2',
|
id: '1-2',
|
||||||
type: 'default',
|
type: 'default',
|
||||||
@@ -114,28 +116,35 @@
|
|||||||
type: 'default',
|
type: 'default',
|
||||||
source: '2',
|
source: '2',
|
||||||
target: '4',
|
target: '4',
|
||||||
animated: true
|
|
||||||
}
|
}
|
||||||
];
|
], { animated: true });
|
||||||
|
|
||||||
function updateNode() {
|
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>
|
</script>
|
||||||
|
|
||||||
<SvelteFlow
|
<SvelteFlow
|
||||||
bind:nodes
|
{nodes}
|
||||||
bind:edges
|
{edges}
|
||||||
{nodeTypes}
|
{nodeTypes}
|
||||||
fitView
|
fitView
|
||||||
minZoom={0.1}
|
minZoom={0.1}
|
||||||
maxZoom={2.5}
|
maxZoom={2.5}
|
||||||
initialViewport={{ x: 100, y: 100, zoom: 2 }}
|
initialViewport={{ x: 100, y: 100, zoom: 2 }}
|
||||||
defaultEdgeOptions={{ animated: true }}
|
|
||||||
on:node:click={(event) => console.log('on node click', event)}
|
on:node:click={(event) => console.log('on node click', event)}
|
||||||
on:node:mouseenter={(event) => console.log('on node enter', event)}
|
on:node:mouseenter={(event) => console.log('on node enter', event)}
|
||||||
on:node:mouseleave={(event) => console.log('on node leave', event)}
|
on:node:mouseleave={(event) => console.log('on node leave', event)}
|
||||||
|
|||||||
Generated
+48
-54
@@ -32,8 +32,8 @@ importers:
|
|||||||
'@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.7
|
'@changesets/changelog-github': registry.npmjs.org/@changesets/changelog-github/0.4.7
|
||||||
'@changesets/cli': registry.npmjs.org/@changesets/cli/2.25.0
|
'@changesets/cli': registry.npmjs.org/@changesets/cli/2.25.0
|
||||||
'@preconstruct/cli': registry.npmjs.org/@preconstruct/cli/2.2.1
|
'@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/eslint-plugin': registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1_icdgnfqbkli2ydghsaevjiv5ae
|
||||||
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.54.0_id2eilsndvzhjjktb64trvy3gu
|
'@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
|
autoprefixer: registry.npmjs.org/autoprefixer/10.4.9_postcss@8.4.21
|
||||||
concurrently: registry.npmjs.org/concurrently/7.6.0
|
concurrently: registry.npmjs.org/concurrently/7.6.0
|
||||||
cypress: registry.npmjs.org/cypress/10.7.0
|
cypress: registry.npmjs.org/cypress/10.7.0
|
||||||
@@ -422,10 +422,7 @@ importers:
|
|||||||
'@types/d3-selection': ^3.0.3
|
'@types/d3-selection': ^3.0.3
|
||||||
'@types/d3-zoom': ^3.0.1
|
'@types/d3-zoom': ^3.0.1
|
||||||
'@types/node': ^18.7.16
|
'@types/node': ^18.7.16
|
||||||
'@types/react': '>=17'
|
|
||||||
'@types/react-dom': '>=17'
|
|
||||||
d3-zoom: ^3.0.0
|
d3-zoom: ^3.0.0
|
||||||
react: ^18.2.0
|
|
||||||
typescript: ^4.9.4
|
typescript: ^4.9.4
|
||||||
dependencies:
|
dependencies:
|
||||||
'@reactflow/system': link:../system
|
'@reactflow/system': link:../system
|
||||||
@@ -439,9 +436,6 @@ importers:
|
|||||||
'@reactflow/rollup-config': link:../../tooling/rollup-config
|
'@reactflow/rollup-config': link:../../tooling/rollup-config
|
||||||
'@reactflow/tsconfig': link:../../tooling/tsconfig
|
'@reactflow/tsconfig': link:../../tooling/tsconfig
|
||||||
'@types/node': registry.npmjs.org/@types/node/18.7.16
|
'@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
|
typescript: registry.npmjs.org/typescript/4.9.4
|
||||||
|
|
||||||
tooling/eslint-config:
|
tooling/eslint-config:
|
||||||
@@ -2760,11 +2754,11 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.0_lldphppbh67ylraps6qcolshhy:
|
registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1_icdgnfqbkli2ydghsaevjiv5ae:
|
||||||
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}
|
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.0
|
id: registry.npmjs.org/@typescript-eslint/eslint-plugin/5.54.1
|
||||||
name: '@typescript-eslint/eslint-plugin'
|
name: '@typescript-eslint/eslint-plugin'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@typescript-eslint/parser': ^5.0.0
|
'@typescript-eslint/parser': ^5.0.0
|
||||||
@@ -2774,10 +2768,10 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/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.0
|
'@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.0_id2eilsndvzhjjktb64trvy3gu
|
'@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.0_id2eilsndvzhjjktb64trvy3gu
|
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.1_id2eilsndvzhjjktb64trvy3gu
|
||||||
debug: registry.npmjs.org/debug/4.3.4
|
debug: registry.npmjs.org/debug/4.3.4
|
||||||
eslint: registry.npmjs.org/eslint/8.23.1
|
eslint: registry.npmjs.org/eslint/8.23.1
|
||||||
grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4
|
grapheme-splitter: registry.npmjs.org/grapheme-splitter/1.0.4
|
||||||
@@ -2814,11 +2808,11 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/parser/5.54.0_id2eilsndvzhjjktb64trvy3gu:
|
registry.npmjs.org/@typescript-eslint/parser/5.54.1_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}
|
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.0
|
id: registry.npmjs.org/@typescript-eslint/parser/5.54.1
|
||||||
name: '@typescript-eslint/parser'
|
name: '@typescript-eslint/parser'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||||
@@ -2827,9 +2821,9 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0
|
'@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.0
|
'@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.0_typescript@4.9.4
|
'@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
|
debug: registry.npmjs.org/debug/4.3.4
|
||||||
eslint: registry.npmjs.org/eslint/8.23.1
|
eslint: registry.npmjs.org/eslint/8.23.1
|
||||||
typescript: registry.npmjs.org/typescript/4.9.4
|
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
|
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.49.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/scope-manager/5.54.0:
|
registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1:
|
||||||
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}
|
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'
|
name: '@typescript-eslint/scope-manager'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dependencies:
|
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
|
||||||
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0
|
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u:
|
registry.npmjs.org/@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u:
|
||||||
@@ -2880,11 +2874,11 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/type-utils/5.54.0_id2eilsndvzhjjktb64trvy3gu:
|
registry.npmjs.org/@typescript-eslint/type-utils/5.54.1_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}
|
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.0
|
id: registry.npmjs.org/@typescript-eslint/type-utils/5.54.1
|
||||||
name: '@typescript-eslint/type-utils'
|
name: '@typescript-eslint/type-utils'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: '*'
|
eslint: '*'
|
||||||
@@ -2893,8 +2887,8 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/typescript-estree': registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4
|
'@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.0_id2eilsndvzhjjktb64trvy3gu
|
'@typescript-eslint/utils': registry.npmjs.org/@typescript-eslint/utils/5.54.1_id2eilsndvzhjjktb64trvy3gu
|
||||||
debug: registry.npmjs.org/debug/4.3.4
|
debug: registry.npmjs.org/debug/4.3.4
|
||||||
eslint: registry.npmjs.org/eslint/8.23.1
|
eslint: registry.npmjs.org/eslint/8.23.1
|
||||||
tsutils: registry.npmjs.org/tsutils/3.21.0_typescript@4.9.4
|
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}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/types/5.54.0:
|
registry.npmjs.org/@typescript-eslint/types/5.54.1:
|
||||||
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}
|
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'
|
name: '@typescript-eslint/types'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -2941,11 +2935,11 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.4:
|
registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1_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}
|
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.0
|
id: registry.npmjs.org/@typescript-eslint/typescript-estree/5.54.1
|
||||||
name: '@typescript-eslint/typescript-estree'
|
name: '@typescript-eslint/typescript-estree'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '*'
|
typescript: '*'
|
||||||
@@ -2953,8 +2947,8 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
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
|
||||||
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0
|
'@typescript-eslint/visitor-keys': registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1
|
||||||
debug: registry.npmjs.org/debug/4.3.4
|
debug: registry.npmjs.org/debug/4.3.4
|
||||||
globby: registry.npmjs.org/globby/11.1.0
|
globby: registry.npmjs.org/globby/11.1.0
|
||||||
is-glob: registry.npmjs.org/is-glob/4.0.3
|
is-glob: registry.npmjs.org/is-glob/4.0.3
|
||||||
@@ -2988,20 +2982,20 @@ packages:
|
|||||||
- typescript
|
- typescript
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/utils/5.54.0_id2eilsndvzhjjktb64trvy3gu:
|
registry.npmjs.org/@typescript-eslint/utils/5.54.1_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}
|
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.0
|
id: registry.npmjs.org/@typescript-eslint/utils/5.54.1
|
||||||
name: '@typescript-eslint/utils'
|
name: '@typescript-eslint/utils'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11
|
'@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11
|
||||||
'@types/semver': registry.npmjs.org/@types/semver/7.3.13
|
'@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/scope-manager': registry.npmjs.org/@typescript-eslint/scope-manager/5.54.1
|
||||||
'@typescript-eslint/types': registry.npmjs.org/@typescript-eslint/types/5.54.0
|
'@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.0_typescript@4.9.4
|
'@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: registry.npmjs.org/eslint/8.23.1
|
||||||
eslint-scope: registry.npmjs.org/eslint-scope/5.1.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
|
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
|
eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.0:
|
registry.npmjs.org/@typescript-eslint/visitor-keys/5.54.1:
|
||||||
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}
|
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'
|
name: '@typescript-eslint/visitor-keys'
|
||||||
version: 5.54.0
|
version: 5.54.1
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dependencies:
|
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
|
eslint-visitor-keys: registry.npmjs.org/eslint-visitor-keys/3.3.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user