@fjell/core 4.4.49 → 4.4.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/event/emitter.d.ts +140 -0
- package/dist/event/events.d.ts +81 -0
- package/dist/event/index.d.ts +38 -0
- package/dist/event/matching.d.ts +54 -0
- package/dist/event/subscription.d.ts +74 -0
- package/dist/event/types.d.ts +186 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +272 -0
- package/package.json +1 -1
- package/src/event/emitter.ts +247 -0
- package/src/event/events.ts +178 -0
- package/src/event/index.ts +130 -0
- package/src/event/matching.ts +264 -0
- package/src/event/subscription.ts +181 -0
- package/src/event/types.ts +282 -0
- package/src/index.ts +4 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import { ComKey, ItemTypeArray, LocKeyArray, PriKey } from '../keys';
|
|
3
|
+
import { ItemQuery } from '../item/ItemQuery';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Base subscription interface that all subscription types extend.
|
|
7
|
+
* Provides core subscription properties with full type safety.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export interface BaseSubscription {
|
|
11
|
+
/** Unique subscription identifier - generated when subscription is created */
|
|
12
|
+
id: string;
|
|
13
|
+
|
|
14
|
+
/** Optional: specific event types to listen for (defaults to all if not specified) */
|
|
15
|
+
eventTypes?: string[];
|
|
16
|
+
|
|
17
|
+
/** Optional: storage backends to listen to (defaults to all if not specified) */
|
|
18
|
+
scopes?: string[];
|
|
19
|
+
|
|
20
|
+
/** Optional: additional filtering criteria using existing ItemQuery system */
|
|
21
|
+
query?: ItemQuery;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Subscription to events for a specific item using PriKey or ComKey.
|
|
26
|
+
* Provides exact item-level event subscriptions with full type safety.
|
|
27
|
+
*/
|
|
28
|
+
export interface ItemSubscription<
|
|
29
|
+
S extends string,
|
|
30
|
+
L1 extends string = never,
|
|
31
|
+
L2 extends string = never,
|
|
32
|
+
L3 extends string = never,
|
|
33
|
+
L4 extends string = never,
|
|
34
|
+
L5 extends string = never
|
|
35
|
+
> extends BaseSubscription {
|
|
36
|
+
/** The specific key to subscribe to - fully typed PriKey or ComKey */
|
|
37
|
+
key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Subscription to events for all items in a location using KTA + location array.
|
|
42
|
+
* Provides location-based event subscriptions with full type safety.
|
|
43
|
+
*/
|
|
44
|
+
export interface LocationSubscription<
|
|
45
|
+
S extends string,
|
|
46
|
+
L1 extends string = never,
|
|
47
|
+
L2 extends string = never,
|
|
48
|
+
L3 extends string = never,
|
|
49
|
+
L4 extends string = never,
|
|
50
|
+
L5 extends string = never
|
|
51
|
+
> extends BaseSubscription {
|
|
52
|
+
/** Item type array defining the type hierarchy */
|
|
53
|
+
kta: ItemTypeArray<S, L1, L2, L3, L4, L5>;
|
|
54
|
+
|
|
55
|
+
/** Location key array defining the specific location */
|
|
56
|
+
location: LocKeyArray<L1, L2, L3, L4, L5>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Union type of all subscription types.
|
|
61
|
+
* This allows handling any subscription type generically while maintaining type safety.
|
|
62
|
+
*/
|
|
63
|
+
export type Subscription<
|
|
64
|
+
S extends string,
|
|
65
|
+
L1 extends string = never,
|
|
66
|
+
L2 extends string = never,
|
|
67
|
+
L3 extends string = never,
|
|
68
|
+
L4 extends string = never,
|
|
69
|
+
L5 extends string = never
|
|
70
|
+
> = ItemSubscription<S, L1, L2, L3, L4, L5> | LocationSubscription<S, L1, L2, L3, L4, L5>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Options for creating subscriptions.
|
|
74
|
+
* Used by convenience methods to create subscriptions without requiring full subscription objects.
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
export interface SubscriptionOptions<
|
|
78
|
+
S extends string,
|
|
79
|
+
L1 extends string = never,
|
|
80
|
+
L2 extends string = never,
|
|
81
|
+
L3 extends string = never,
|
|
82
|
+
L4 extends string = never,
|
|
83
|
+
L5 extends string = never
|
|
84
|
+
> {
|
|
85
|
+
/** Optional: specific event types to listen for */
|
|
86
|
+
eventTypes?: string[];
|
|
87
|
+
|
|
88
|
+
/** Optional: storage backends to listen to */
|
|
89
|
+
scopes?: string[];
|
|
90
|
+
|
|
91
|
+
/** Optional: additional filtering criteria */
|
|
92
|
+
query?: ItemQuery;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Type guard to check if a subscription is an ItemSubscription
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
export function isItemSubscription<
|
|
100
|
+
S extends string,
|
|
101
|
+
L1 extends string = never,
|
|
102
|
+
L2 extends string = never,
|
|
103
|
+
L3 extends string = never,
|
|
104
|
+
L4 extends string = never,
|
|
105
|
+
L5 extends string = never
|
|
106
|
+
>(subscription: Subscription<S, L1, L2, L3, L4, L5>): subscription is ItemSubscription<S, L1, L2, L3, L4, L5> {
|
|
107
|
+
return 'key' in subscription;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Type guard to check if a subscription is a LocationSubscription
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
export function isLocationSubscription<
|
|
115
|
+
S extends string,
|
|
116
|
+
L1 extends string = never,
|
|
117
|
+
L2 extends string = never,
|
|
118
|
+
L3 extends string = never,
|
|
119
|
+
L4 extends string = never,
|
|
120
|
+
L5 extends string = never
|
|
121
|
+
>(subscription: Subscription<S, L1, L2, L3, L4, L5>): subscription is LocationSubscription<S, L1, L2, L3, L4, L5> {
|
|
122
|
+
return 'kta' in subscription && 'location' in subscription;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Utility function to generate unique subscription IDs.
|
|
127
|
+
* Libraries can use this or implement their own ID generation strategy.
|
|
128
|
+
*/
|
|
129
|
+
export function generateSubscriptionId(): string {
|
|
130
|
+
return `sub-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Utility function to create an ItemSubscription with generated ID.
|
|
135
|
+
* Simplifies subscription creation for library implementations.
|
|
136
|
+
*/
|
|
137
|
+
export function createItemSubscription<
|
|
138
|
+
S extends string,
|
|
139
|
+
L1 extends string = never,
|
|
140
|
+
L2 extends string = never,
|
|
141
|
+
L3 extends string = never,
|
|
142
|
+
L4 extends string = never,
|
|
143
|
+
L5 extends string = never
|
|
144
|
+
>(
|
|
145
|
+
key: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>,
|
|
146
|
+
options?: SubscriptionOptions<S, L1, L2, L3, L4, L5>
|
|
147
|
+
): ItemSubscription<S, L1, L2, L3, L4, L5> {
|
|
148
|
+
return {
|
|
149
|
+
id: generateSubscriptionId(),
|
|
150
|
+
key,
|
|
151
|
+
eventTypes: options?.eventTypes,
|
|
152
|
+
scopes: options?.scopes,
|
|
153
|
+
query: options?.query,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Utility function to create a LocationSubscription with generated ID.
|
|
159
|
+
* Simplifies subscription creation for library implementations.
|
|
160
|
+
*/
|
|
161
|
+
export function createLocationSubscription<
|
|
162
|
+
S extends string,
|
|
163
|
+
L1 extends string = never,
|
|
164
|
+
L2 extends string = never,
|
|
165
|
+
L3 extends string = never,
|
|
166
|
+
L4 extends string = never,
|
|
167
|
+
L5 extends string = never
|
|
168
|
+
>(
|
|
169
|
+
kta: ItemTypeArray<S, L1, L2, L3, L4, L5>,
|
|
170
|
+
location: LocKeyArray<L1, L2, L3, L4, L5>,
|
|
171
|
+
options?: SubscriptionOptions<S, L1, L2, L3, L4, L5>
|
|
172
|
+
): LocationSubscription<S, L1, L2, L3, L4, L5> {
|
|
173
|
+
return {
|
|
174
|
+
id: generateSubscriptionId(),
|
|
175
|
+
kta,
|
|
176
|
+
location,
|
|
177
|
+
eventTypes: options?.eventTypes,
|
|
178
|
+
scopes: options?.scopes,
|
|
179
|
+
query: options?.query,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { BaseEvent } from './events';
|
|
2
|
+
import { Subscription } from './subscription';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Common event types used throughout the event system.
|
|
6
|
+
* Libraries can extend these with custom event types as needed.
|
|
7
|
+
*/
|
|
8
|
+
export const STANDARD_EVENT_TYPES = {
|
|
9
|
+
CREATE: 'create',
|
|
10
|
+
UPDATE: 'update',
|
|
11
|
+
DELETE: 'delete',
|
|
12
|
+
ACTION: 'action',
|
|
13
|
+
} as const;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Type for standard event type values.
|
|
17
|
+
*/
|
|
18
|
+
export type StandardEventType = typeof STANDARD_EVENT_TYPES[keyof typeof STANDARD_EVENT_TYPES];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Common scope identifiers used by storage libraries.
|
|
22
|
+
* Libraries should use these standard scopes for consistency.
|
|
23
|
+
*/
|
|
24
|
+
export const STANDARD_SCOPES = {
|
|
25
|
+
FIRESTORE: 'firestore',
|
|
26
|
+
SEQUELIZE: 'sequelize',
|
|
27
|
+
POSTGRESQL: 'postgresql',
|
|
28
|
+
MYSQL: 'mysql',
|
|
29
|
+
MONGODB: 'mongodb',
|
|
30
|
+
REDIS: 'redis',
|
|
31
|
+
} as const;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Type for standard scope values.
|
|
35
|
+
*/
|
|
36
|
+
export type StandardScope = typeof STANDARD_SCOPES[keyof typeof STANDARD_SCOPES];
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Status of a subscription.
|
|
40
|
+
* Used to track subscription lifecycle and health.
|
|
41
|
+
*/
|
|
42
|
+
export enum SubscriptionStatus {
|
|
43
|
+
PENDING = 'pending', // Subscription created but not yet active
|
|
44
|
+
ACTIVE = 'active', // Subscription is active and receiving events
|
|
45
|
+
PAUSED = 'paused', // Subscription is paused (not receiving events)
|
|
46
|
+
ERROR = 'error', // Subscription has encountered an error
|
|
47
|
+
CANCELLED = 'cancelled', // Subscription has been cancelled/unsubscribed
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Metadata about a subscription's current state.
|
|
52
|
+
* Used for monitoring and debugging subscription health.
|
|
53
|
+
*/
|
|
54
|
+
export interface SubscriptionMetadata {
|
|
55
|
+
/** Current status of the subscription */
|
|
56
|
+
status: SubscriptionStatus;
|
|
57
|
+
|
|
58
|
+
/** When the subscription was created */
|
|
59
|
+
createdAt: Date;
|
|
60
|
+
|
|
61
|
+
/** When the subscription was last updated */
|
|
62
|
+
updatedAt: Date;
|
|
63
|
+
|
|
64
|
+
/** When the subscription last received an event */
|
|
65
|
+
lastEventAt?: Date;
|
|
66
|
+
|
|
67
|
+
/** Total number of events received by this subscription */
|
|
68
|
+
eventCount: number;
|
|
69
|
+
|
|
70
|
+
/** Any error that occurred with this subscription */
|
|
71
|
+
lastError?: Error;
|
|
72
|
+
|
|
73
|
+
/** Additional metadata specific to the storage implementation */
|
|
74
|
+
implementationMetadata?: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Enhanced subscription interface that includes metadata.
|
|
79
|
+
* Used internally by libraries for subscription management.
|
|
80
|
+
*/
|
|
81
|
+
export type ManagedSubscription<
|
|
82
|
+
S extends string,
|
|
83
|
+
L1 extends string = never,
|
|
84
|
+
L2 extends string = never,
|
|
85
|
+
L3 extends string = never,
|
|
86
|
+
L4 extends string = never,
|
|
87
|
+
L5 extends string = never
|
|
88
|
+
> = Subscription<S, L1, L2, L3, L4, L5> & {
|
|
89
|
+
/** Metadata about this subscription's state */
|
|
90
|
+
metadata: SubscriptionMetadata;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Event handler function type.
|
|
95
|
+
* Used for type-safe event callbacks.
|
|
96
|
+
*/
|
|
97
|
+
export type EventHandler<
|
|
98
|
+
S extends string,
|
|
99
|
+
L1 extends string = never,
|
|
100
|
+
L2 extends string = never,
|
|
101
|
+
L3 extends string = never,
|
|
102
|
+
L4 extends string = never,
|
|
103
|
+
L5 extends string = never
|
|
104
|
+
> = (event: BaseEvent<S, L1, L2, L3, L4, L5>) => void | Promise<void>;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Event handler with error handling.
|
|
108
|
+
* Allows handlers to indicate success/failure for better error tracking.
|
|
109
|
+
*/
|
|
110
|
+
export type SafeEventHandler<
|
|
111
|
+
S extends string,
|
|
112
|
+
L1 extends string = never,
|
|
113
|
+
L2 extends string = never,
|
|
114
|
+
L3 extends string = never,
|
|
115
|
+
L4 extends string = never,
|
|
116
|
+
L5 extends string = never
|
|
117
|
+
> = (event: BaseEvent<S, L1, L2, L3, L4, L5>) => Promise<{ success: boolean; error?: Error }>;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Batch of events for efficient processing.
|
|
121
|
+
* Used when multiple events need to be processed together.
|
|
122
|
+
*/
|
|
123
|
+
export interface EventBatch<
|
|
124
|
+
S extends string,
|
|
125
|
+
L1 extends string = never,
|
|
126
|
+
L2 extends string = never,
|
|
127
|
+
L3 extends string = never,
|
|
128
|
+
L4 extends string = never,
|
|
129
|
+
L5 extends string = never
|
|
130
|
+
> {
|
|
131
|
+
/** Events in this batch */
|
|
132
|
+
events: BaseEvent<S, L1, L2, L3, L4, L5>[];
|
|
133
|
+
|
|
134
|
+
/** When this batch was created */
|
|
135
|
+
createdAt: Date;
|
|
136
|
+
|
|
137
|
+
/** Optional: transaction ID if these events are part of a transaction */
|
|
138
|
+
transactionId?: string;
|
|
139
|
+
|
|
140
|
+
/** Optional: batch metadata */
|
|
141
|
+
metadata?: Record<string, unknown>;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Statistics about event processing.
|
|
146
|
+
* Used for monitoring and performance analysis.
|
|
147
|
+
*/
|
|
148
|
+
export interface EventStats {
|
|
149
|
+
/** Total events processed */
|
|
150
|
+
totalEvents: number;
|
|
151
|
+
|
|
152
|
+
/** Events processed by type */
|
|
153
|
+
eventsByType: Record<string, number>;
|
|
154
|
+
|
|
155
|
+
/** Events processed by scope */
|
|
156
|
+
eventsByScope: Record<string, number>;
|
|
157
|
+
|
|
158
|
+
/** Average event processing time in milliseconds */
|
|
159
|
+
averageProcessingTime: number;
|
|
160
|
+
|
|
161
|
+
/** Number of active subscriptions */
|
|
162
|
+
activeSubscriptions: number;
|
|
163
|
+
|
|
164
|
+
/** Number of failed event deliveries */
|
|
165
|
+
failedDeliveries: number;
|
|
166
|
+
|
|
167
|
+
/** When these stats were last updated */
|
|
168
|
+
lastUpdated: Date;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Configuration for event system behavior.
|
|
173
|
+
* Used by libraries to customize event processing.
|
|
174
|
+
*/
|
|
175
|
+
export interface EventSystemConfig {
|
|
176
|
+
/** Maximum number of events to batch together */
|
|
177
|
+
maxBatchSize?: number;
|
|
178
|
+
|
|
179
|
+
/** Maximum time to wait before processing a batch (milliseconds) */
|
|
180
|
+
maxBatchWaitTime?: number;
|
|
181
|
+
|
|
182
|
+
/** Maximum number of retry attempts for failed event deliveries */
|
|
183
|
+
maxRetryAttempts?: number;
|
|
184
|
+
|
|
185
|
+
/** Delay between retry attempts (milliseconds) */
|
|
186
|
+
retryDelay?: number;
|
|
187
|
+
|
|
188
|
+
/** Whether to enable event statistics collection */
|
|
189
|
+
enableStats?: boolean;
|
|
190
|
+
|
|
191
|
+
/** Maximum number of subscriptions to allow */
|
|
192
|
+
maxSubscriptions?: number;
|
|
193
|
+
|
|
194
|
+
/** Cleanup interval for inactive subscriptions (milliseconds) */
|
|
195
|
+
subscriptionCleanupInterval?: number;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Default configuration values.
|
|
200
|
+
* Libraries can use these as defaults and override as needed.
|
|
201
|
+
*/
|
|
202
|
+
export const DEFAULT_EVENT_CONFIG: Required<EventSystemConfig> = {
|
|
203
|
+
maxBatchSize: 100,
|
|
204
|
+
maxBatchWaitTime: 50, // 50ms
|
|
205
|
+
maxRetryAttempts: 3,
|
|
206
|
+
retryDelay: 1000, // 1 second
|
|
207
|
+
enableStats: true,
|
|
208
|
+
maxSubscriptions: 1000,
|
|
209
|
+
subscriptionCleanupInterval: 300000, // 5 minutes
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Error types specific to the event system.
|
|
214
|
+
* Used for better error handling and debugging.
|
|
215
|
+
*/
|
|
216
|
+
export class EventSystemError extends Error {
|
|
217
|
+
constructor(message: string, public readonly code: string, public readonly details?: Record<string, unknown>) {
|
|
218
|
+
super(message);
|
|
219
|
+
this.name = 'EventSystemError';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export class SubscriptionError extends EventSystemError {
|
|
224
|
+
constructor(message: string, public readonly subscriptionId: string, details?: Record<string, unknown>) {
|
|
225
|
+
super(message, 'SUBSCRIPTION_ERROR', { subscriptionId, ...details });
|
|
226
|
+
this.name = 'SubscriptionError';
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export class EventEmissionError extends EventSystemError {
|
|
231
|
+
constructor(message: string, public readonly eventType: string, details?: Record<string, unknown>) {
|
|
232
|
+
super(message, 'EVENT_EMISSION_ERROR', { eventType, ...details });
|
|
233
|
+
this.name = 'EventEmissionError';
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export class EventMatchingError extends EventSystemError {
|
|
238
|
+
constructor(message: string, details?: Record<string, unknown>) {
|
|
239
|
+
super(message, 'EVENT_MATCHING_ERROR', details);
|
|
240
|
+
this.name = 'EventMatchingError';
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Utility function to create standardized error messages.
|
|
246
|
+
*/
|
|
247
|
+
export function createEventSystemError(
|
|
248
|
+
type: 'subscription' | 'emission' | 'matching' | 'general',
|
|
249
|
+
message: string,
|
|
250
|
+
details?: Record<string, unknown>
|
|
251
|
+
): EventSystemError {
|
|
252
|
+
switch (type) {
|
|
253
|
+
case 'subscription':
|
|
254
|
+
return new SubscriptionError(message, details?.subscriptionId as string || 'unknown', details);
|
|
255
|
+
case 'emission':
|
|
256
|
+
return new EventEmissionError(message, details?.eventType as string || 'unknown', details);
|
|
257
|
+
case 'matching':
|
|
258
|
+
return new EventMatchingError(message, details);
|
|
259
|
+
case 'general':
|
|
260
|
+
default:
|
|
261
|
+
return new EventSystemError(message, 'GENERAL_ERROR', details);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Utility function to check if an error is an EventSystemError.
|
|
267
|
+
*/
|
|
268
|
+
export function isEventSystemError(error: unknown): error is EventSystemError {
|
|
269
|
+
return error instanceof EventSystemError;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Utility type for extracting the item type from an event.
|
|
274
|
+
*/
|
|
275
|
+
export type ExtractItemType<T> = T extends BaseEvent<infer S, any, any, any, any, any> ? S : never;
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Utility type for extracting all type parameters from an event.
|
|
279
|
+
*/
|
|
280
|
+
export type ExtractEventTypes<T> = T extends BaseEvent<infer S, infer L1, infer L2, infer L3, infer L4, infer L5>
|
|
281
|
+
? { S: S; L1: L1; L2: L2; L3: L3; L4: L4; L5: L5 }
|
|
282
|
+
: never;
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from "./dictionary";
|
|
|
2
2
|
export * from "./keys";
|
|
3
3
|
export * from "./items";
|
|
4
4
|
export * from "./Coordinate";
|
|
5
|
+
export * from "./Coordinate";
|
|
5
6
|
export { IFactory } from "./item/IFactory";
|
|
6
7
|
export { AItemService } from "./AItemService";
|
|
7
8
|
|
|
@@ -20,6 +21,9 @@ export * from './validation';
|
|
|
20
21
|
export * from './errors';
|
|
21
22
|
export * from './operations';
|
|
22
23
|
|
|
24
|
+
// Event system
|
|
25
|
+
export * from './event';
|
|
26
|
+
|
|
23
27
|
// Operations interfaces
|
|
24
28
|
export type {
|
|
25
29
|
Operations,
|