javascript / expert
Snippet
Kapselung von WeakMap-Metadatenregistern in Svelte-Kontextverträgen
Kombiniert die Svelte-Kontext-API mit JavaScript-Symbols und WeakMaps, um echte, vom Garbage Collector bereinigbare private Metadaten an Komponentenhierarchien anzuhängen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { setContext, getContext } from 'svelte';const PRIVATE_REGISTRY_KEY = Symbol('PrivateRegistryKey');const metadataRegistry = new WeakMap();export function initPrivateContext(ownerToken, initialData) {metadataRegistry.set(ownerToken, initialData);setContext(PRIVATE_REGISTRY_KEY, ownerToken);}export function usePrivateContext(key) {const ownerToken = getContext(PRIVATE_REGISTRY_KEY);if (!ownerToken) return undefined;const metadata = metadataRegistry.get(ownerToken);return metadata ? metadata[key] : undefined;}
svelte
Erklärung
1
const PRIVATE_REGISTRY_KEY = Symbol('PrivateRegistryKey');
Erzeugt einen eindeutigen Symbol-Schlüssel zur Isolation des Svelte-Kontextes.
2
const metadataRegistry = new WeakMap();
Instanziiert eine WeakMap für private Metadaten mit automatischer Garbage Collection.
3
metadataRegistry.set(ownerToken, initialData);
Ordet privaten Zustand strikt an die Lebensdauer der Token-Referenz zu.
4
const metadata = metadataRegistry.get(ownerToken);
Liest verborgene Metadaten aus der modulweiten WeakMap anhand des Kontext-Tokens aus.