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
JavaScript
/**
* 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RyZWFtaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILDBCQUEwQjtBQUMxQixPQUFPLEVBS0wscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFFckIsbUJBQW1CO0FBQ25CLE9BQU8sRUFJTCxVQUFVLEVBQ1YseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixxQkFBcUIsR0FDdEIsTUFBTSxVQUFVLENBQUM7QUFFbEIsNEJBQTRCO0FBQzVCLE9BQU8sRUFPTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLDJCQUEyQjtBQUMzQixPQUFPLEVBTUwsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLDZDQUE2QztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3ZDLFlBQWUsRUFDZixNQUFjLEVBQ2QsTUFBZ0MsRUFDaEMsRUFBRTtJQUNGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFJLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUF3RCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3RSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQ3BDLFlBQWUsRUFDZixVQUFrQixNQUFNLEVBQ3hCLE1BQWdDLEVBQ2hDLEVBQUU7SUFDRixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FDN0IsT0FBaUUsRUFDakUsTUFBTSxDQUNQLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUU5RCxPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtRQUMzQixNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRTtRQUNuQixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRTtRQUMvQixRQUFRLEVBQUUsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNwQixLQUF1RCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsWUFBZSxFQUNmLFVBQWtCLEVBQ2xCLEVBQUU7SUFDRixNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVuRCxxQ0FBcUM7SUFDckMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1YsTUFBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN6QixJQUFJLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsWUFBZSxFQUNmLGFBQXFCLEdBQUcsRUFDeEIsRUFBRTtJQUNGLE9BQU8scUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsWUFBZSxFQUNmLGFBQXFCLEdBQUcsRUFDeEIsRUFBRTtJQUNGLE9BQU8scUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsWUFBZSxFQUNmLFNBQWdDLEVBQ2hDLEVBQUU7SUFDRixPQUFPLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLFlBQWUsRUFDZixXQUE0QixFQUM1QixFQUFFO0lBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBSSxHQUFHLE9BQTZCLEVBQUUsRUFBRTtJQUNsRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBZ0MsT0FFN0QsRUFBc0IsRUFBRTtJQUN2QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBZ0IsQ0FBQztJQUNqRCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxFQUFPLENBQUMsQ0FBQztJQUVoRCxpQ0FBaUM7SUFDakMsTUFBTSxZQUFZLEdBQUcsRUFBTyxDQUFDO0lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0YsUUFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFckMsMkJBQTJCO0lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLFFBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUMxQixTQUFtQyxFQUNuQyxVQUE4QixFQUM5QixXQUErQixFQUNYLEVBQUU7SUFDdEIsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQ3BDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQzdELENBQUM7SUFFRixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDN0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUN0RCxRQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM3QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLFFBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEIsUUFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUNyQyxZQUFlLEVBQ2Ysa0JBQXFCLEVBQ3JCLFdBQW9DLEVBQ2hCLEVBQUU7SUFDdEIsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUU5RCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDekIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsV0FBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFFSCx5Q0FBeUM7SUFDeEMsV0FBbUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFFLE1BQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFckUsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxNQUEwQixFQUMxQixVQUFrQixFQUNFLEVBQUU7SUFDdEIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdEQsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNkLE9BQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxNQUEwQixFQUMxQixTQUFtQyxFQUNmLEVBQUU7SUFDdEIsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sT0FBTyxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRWpELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9CLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDakIsUUFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDIn0=