Files
xyflow/packages/svelte/src/lib/store/context.ts

37 lines
1.1 KiB
TypeScript

import type { ConnectableContext } from '$lib/components/NodeWrapper/types';
import { setContext, getContext, hasContext } from 'svelte';
import type { StoreContext } from './types';
/**
* Creates a type-safe context getter and setter pair.
* Extended from Svelte's official createContext pattern.
* - When called with an error message string, it throws if the context is not set
* - When called without arguments, it returns the context value or undefined
*/
function createContext<T>(): [
{
(errorMessage: string): T;
(): T | undefined;
},
(context: T) => T
] {
const key = {};
return [
(errorMessage?: string) => {
if (errorMessage && !hasContext(key)) {
throw new Error(errorMessage);
}
return getContext(key);
},
(context) => setContext(key, context)
];
}
export const [getNodeIdContext, setNodeIdContext] = createContext<string>();
export const [getNodeConnectableContext, setNodeConnectableContext] =
createContext<ConnectableContext>();
export const [getEdgeIdContext, setEdgeIdContext] = createContext<string>();