UNPKG

resig.js

Version:

Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.

182 lines 14.2 kB
/** * Signal-Σ Streaming Infrastructure * Advanced streaming, real-time collaboration, and AI integration */ // Stream Coalgebra System export { createStreamingSignal, streamFrom, streamFromIterable, } from './coalgebra'; // WebRTC Streaming export { WebRTCPeer, BroadcastChannelSignaling, createWebRTCStream, createWebRTCBroadcast, } from './webrtc'; // Event Sourcing with CRDTs export { MemoryEventStore, IndexedDBEventStore, createEventSourcedCRDT, eventSourcedORSet, eventSourcedGCounter, indexedDBEventStore, } from './event-sourcing'; // AI Transformer Interface export { BaseAITransformer, OpenAITransformer, MockAITransformer, MultiModalTransformer, createLLMTransformer, createVisionModel, composeAITransformers, createBatchAITransformer, } from './ai-transformer'; // Convenience functions for common use cases import { createLLMTransformer } from './ai-transformer'; import { createStreamingSignal } from './coalgebra'; import { createWebRTCStream } from './webrtc'; /** * Create a real-time collaborative signal using WebRTC */ export const createCollaborativeSignal = (initialValue, peerId, config) => { const stream = createWebRTCStream(peerId, config); stream._set(initialValue); return stream; }; /** * Create an AI-enhanced signal that processes input through an AI model */ export const createAIEnhancedSignal = (initialValue, aiModel = 'mock', config) => { const input = createStreamingSignal(initialValue); const ai = createLLMTransformer(aiModel, config); const output = ai.transform(input); return { input, output, confidence: ai.confidence(), tokens: ai.tokens(), isProcessing: ai.isProcessing(), setInput: (value) => input._set(value), }; }; /** * Create a streaming signal with built-in persistence */ export const createPersistentStream = (initialValue, storageKey) => { const stream = createStreamingSignal(initialValue); // Load from localStorage on creation try { const stored = localStorage.getItem(storageKey); if (stored) { stream._set(JSON.parse(stored)); } } catch (error) { console.warn('Failed to load from localStorage:', error); } // Save to localStorage on changes stream.subscribe((value) => { try { localStorage.setItem(storageKey, JSON.stringify(value)); } catch (error) { console.warn('Failed to save to localStorage:', error); } }); return stream; }; /** * Create a throttled streaming signal for performance optimization */ export const createThrottledStream = (initialValue, throttleMs = 100) => { return createStreamingSignal(initialValue).throttle(throttleMs); }; /** * Create a debounced streaming signal for user input */ export const createDebouncedStream = (initialValue, debounceMs = 300) => { return createStreamingSignal(initialValue).debounce(debounceMs); }; /** * Create a filtered streaming signal */ export const createFilteredStream = (initialValue, predicate) => { return createStreamingSignal(initialValue).filter(predicate); }; /** * Create a transformed streaming signal */ export const createTransformedStream = (initialValue, transformer) => { return createStreamingSignal(initialValue).transform(transformer); }; /** * Merge multiple streaming signals into one */ export const mergeStreams = (...streams) => { if (streams.length === 0) { throw new Error('Cannot merge empty array of streams'); } return streams.reduce((merged, stream) => merged.merge(stream)); }; /** * Create a signal that combines multiple streams */ export const combineStreams = (streams) => { const keys = Object.keys(streams); const combined = createStreamingSignal({}); // Initialize with current values const initialValue = {}; keys.forEach((key) => { initialValue[key] = streams[key].value(); }); combined._set(initialValue); // Subscribe to all streams keys.forEach((key) => { streams[key].subscribe((value) => { const currentValue = combined.value(); combined._set({ ...currentValue, [key]: value }); }); }); return combined; }; /** * Create a signal that switches between different streams based on a condition */ export const switchStream = (condition, trueStream, falseStream) => { const switched = createStreamingSignal(condition.value() ? trueStream.value() : falseStream.value()); condition.subscribe((isTrue) => { const sourceStream = isTrue ? trueStream : falseStream; switched._set(sourceStream.value()); }); trueStream.subscribe((value) => { if (condition.value()) { switched._set(value); } }); falseStream.subscribe((value) => { if (!condition.value()) { switched._set(value); } }); return switched; }; /** * Create a signal that accumulates values over time */ export const createAccumulatorStream = (initialValue, initialAccumulator, accumulator) => { const source = createStreamingSignal(initialValue); const accumulated = createStreamingSignal(initialAccumulator); source.subscribe((value) => { const currentAcc = accumulated.value(); const newAcc = accumulator(currentAcc, value); accumulated._set(newAcc); }); // Add method to add values to the source accumulated.add = (value) => source._set(value); return accumulated; }; /** * Create a signal that samples another signal at regular intervals */ export const createSampledStream = (source, intervalMs) => { const sampled = createStreamingSignal(source.value()); setInterval(() => { sampled._set(source.value()); }, intervalMs); return sampled; }; /** * Create a signal that only emits distinct values */ export const createDistinctStream = (source, compareFn) => { const distinct = createStreamingSignal(source.value()); let lastValue = source.value(); const isEqual = compareFn || ((a, b) => a === b); source.subscribe((value) => { if (!isEqual(value, lastValue)) { lastValue = value; distinct._set(value); } }); return distinct; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RyZWFtaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILDBCQUEwQjtBQUMxQixPQUFPLEVBS0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFFckIsbUJBQW1CO0FBQ25CLE9BQU8sRUFJTCxVQUFVLEVBQ1YseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixxQkFBcUIsR0FDdEIsTUFBTSxVQUFVLENBQUM7QUFFbEIsNEJBQTRCO0FBQzVCLE9BQU8sRUFPTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLDJCQUEyQjtBQUMzQixPQUFPLEVBTUwsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLDZDQUE2QztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3ZDLFlBQWUsRUFDZixNQUFjLEVBQ2QsTUFBZ0MsRUFDaEMsRUFBRTtJQUNGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUF3RCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMs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