use new createContext utility for better type safety

This commit is contained in:
peterkogo
2025-10-30 21:25:02 +01:00
committed by moklick
parent 3ee054689a
commit 8512d344ef
12 changed files with 89 additions and 71 deletions
+36
View File
@@ -0,0 +1,36 @@
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>();