@fjell/core
Version:
Core Item and Key Framework for Fjell
74 lines (73 loc) • 4.74 kB
TypeScript
import { ComKey, ItemQuery, ItemTypeArray, LocKeyArray, PriKey } from '@fjell/types';
/**
* Base subscription interface that all subscription types extend.
* Provides core subscription properties with full type safety.
*/
export interface BaseSubscription {
/** Unique subscription identifier - generated when subscription is created */
id: string;
/** Optional: specific event types to listen for (defaults to all if not specified) */
eventTypes?: string[];
/** Optional: storage backends to listen to (defaults to all if not specified) */
scopes?: string[];
/** Optional: additional filtering criteria using existing ItemQuery system */
query?: ItemQuery;
}
/**
* Subscription to events for a specific item using PriKey or ComKey.
* Provides exact item-level event subscriptions with full type safety.
*/
export interface ItemSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends BaseSubscription {
/** The specific key to subscribe to - fully typed PriKey or ComKey */
key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>;
}
/**
* Subscription to events for all items in a location using KTA + location array.
* Provides location-based event subscriptions with full type safety.
*/
export interface LocationSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends BaseSubscription {
/** Item type array defining the type hierarchy */
kta: ItemTypeArray<S, L1, L2, L3, L4, L5>;
/** Location key array defining the specific location */
location: LocKeyArray<L1, L2, L3, L4, L5>;
}
/**
* Union type of all subscription types.
* This allows handling any subscription type generically while maintaining type safety.
*/
export type Subscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = ItemSubscription<S, L1, L2, L3, L4, L5> | LocationSubscription<S, L1, L2, L3, L4, L5>;
/**
* Options for creating subscriptions.
* Used by convenience methods to create subscriptions without requiring full subscription objects.
*/
export interface SubscriptionOptions<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
/** Optional: specific event types to listen for */
eventTypes?: string[];
/** Optional: storage backends to listen to */
scopes?: string[];
/** Optional: additional filtering criteria */
query?: ItemQuery;
}
/**
* Type guard to check if a subscription is an ItemSubscription
*/
export declare function isItemSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(subscription: Subscription<S, L1, L2, L3, L4, L5>): subscription is ItemSubscription<S, L1, L2, L3, L4, L5>;
/**
* Type guard to check if a subscription is a LocationSubscription
*/
export declare function isLocationSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(subscription: Subscription<S, L1, L2, L3, L4, L5>): subscription is LocationSubscription<S, L1, L2, L3, L4, L5>;
/**
* Utility function to generate unique subscription IDs.
* Libraries can use this or implement their own ID generation strategy.
*/
export declare function generateSubscriptionId(): string;
/**
* Utility function to create an ItemSubscription with generated ID.
* Simplifies subscription creation for library implementations.
*/
export declare function createItemSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>, options?: SubscriptionOptions<S, L1, L2, L3, L4, L5>): ItemSubscription<S, L1, L2, L3, L4, L5>;
/**
* Utility function to create a LocationSubscription with generated ID.
* Simplifies subscription creation for library implementations.
*/
export declare function createLocationSubscription<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(kta: ItemTypeArray<S, L1, L2, L3, L4, L5>, location: LocKeyArray<L1, L2, L3, L4, L5>, options?: SubscriptionOptions<S, L1, L2, L3, L4, L5>): LocationSubscription<S, L1, L2, L3, L4, L5>;