@sharpee/core 0.9.56-beta

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.
Files changed (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/dist/constants/attributes.d.ts +32 -0
  4. package/dist/constants/attributes.d.ts.map +1 -0
  5. package/dist/constants/attributes.js +53 -0
  6. package/dist/constants/attributes.js.map +1 -0
  7. package/dist/constants/core-events.d.ts +37 -0
  8. package/dist/constants/core-events.d.ts.map +1 -0
  9. package/dist/constants/core-events.js +50 -0
  10. package/dist/constants/core-events.js.map +1 -0
  11. package/dist/constants/entity-types.d.ts +15 -0
  12. package/dist/constants/entity-types.d.ts.map +1 -0
  13. package/dist/constants/entity-types.js +27 -0
  14. package/dist/constants/entity-types.js.map +1 -0
  15. package/dist/constants/index.d.ts +22 -0
  16. package/dist/constants/index.d.ts.map +1 -0
  17. package/dist/constants/index.js +41 -0
  18. package/dist/constants/index.js.map +1 -0
  19. package/dist/constants/relationships.d.ts +25 -0
  20. package/dist/constants/relationships.d.ts.map +1 -0
  21. package/dist/constants/relationships.js +55 -0
  22. package/dist/constants/relationships.js.map +1 -0
  23. package/dist/debug/index.d.ts +5 -0
  24. package/dist/debug/index.d.ts.map +1 -0
  25. package/dist/debug/index.js +21 -0
  26. package/dist/debug/index.js.map +1 -0
  27. package/dist/debug/types.d.ts +65 -0
  28. package/dist/debug/types.d.ts.map +1 -0
  29. package/dist/debug/types.js +39 -0
  30. package/dist/debug/types.js.map +1 -0
  31. package/dist/events/event-factory.d.ts +81 -0
  32. package/dist/events/event-factory.d.ts.map +1 -0
  33. package/dist/events/event-factory.js +74 -0
  34. package/dist/events/event-factory.js.map +1 -0
  35. package/dist/events/event-helpers.d.ts +118 -0
  36. package/dist/events/event-helpers.d.ts.map +1 -0
  37. package/dist/events/event-helpers.js +151 -0
  38. package/dist/events/event-helpers.js.map +1 -0
  39. package/dist/events/event-registry.d.ts +154 -0
  40. package/dist/events/event-registry.d.ts.map +1 -0
  41. package/dist/events/event-registry.js +24 -0
  42. package/dist/events/event-registry.js.map +1 -0
  43. package/dist/events/event-source.d.ts +39 -0
  44. package/dist/events/event-source.d.ts.map +1 -0
  45. package/dist/events/event-source.js +57 -0
  46. package/dist/events/event-source.js.map +1 -0
  47. package/dist/events/event-system.d.ts +27 -0
  48. package/dist/events/event-system.d.ts.map +1 -0
  49. package/dist/events/event-system.js +64 -0
  50. package/dist/events/event-system.js.map +1 -0
  51. package/dist/events/game-events.d.ts +245 -0
  52. package/dist/events/game-events.d.ts.map +1 -0
  53. package/dist/events/game-events.js +250 -0
  54. package/dist/events/game-events.js.map +1 -0
  55. package/dist/events/index.d.ts +19 -0
  56. package/dist/events/index.d.ts.map +1 -0
  57. package/dist/events/index.js +51 -0
  58. package/dist/events/index.js.map +1 -0
  59. package/dist/events/platform-events.d.ts +161 -0
  60. package/dist/events/platform-events.d.ts.map +1 -0
  61. package/dist/events/platform-events.js +135 -0
  62. package/dist/events/platform-events.js.map +1 -0
  63. package/dist/events/semantic-event-source.d.ts +85 -0
  64. package/dist/events/semantic-event-source.d.ts.map +1 -0
  65. package/dist/events/semantic-event-source.js +147 -0
  66. package/dist/events/semantic-event-source.js.map +1 -0
  67. package/dist/events/standard-events.d.ts +26 -0
  68. package/dist/events/standard-events.d.ts.map +1 -0
  69. package/dist/events/standard-events.js +27 -0
  70. package/dist/events/standard-events.js.map +1 -0
  71. package/dist/events/system-event.d.ts +62 -0
  72. package/dist/events/system-event.d.ts.map +1 -0
  73. package/dist/events/system-event.js +55 -0
  74. package/dist/events/system-event.js.map +1 -0
  75. package/dist/events/typed-event.d.ts +69 -0
  76. package/dist/events/typed-event.d.ts.map +1 -0
  77. package/dist/events/typed-event.js +20 -0
  78. package/dist/events/typed-event.js.map +1 -0
  79. package/dist/events/types.d.ts +105 -0
  80. package/dist/events/types.d.ts.map +1 -0
  81. package/dist/events/types.js +4 -0
  82. package/dist/events/types.js.map +1 -0
  83. package/dist/execution/index.d.ts +2 -0
  84. package/dist/execution/index.d.ts.map +1 -0
  85. package/dist/execution/index.js +23 -0
  86. package/dist/execution/index.js.map +1 -0
  87. package/dist/execution/types.d.ts +117 -0
  88. package/dist/execution/types.d.ts.map +1 -0
  89. package/dist/execution/types.js +4 -0
  90. package/dist/execution/types.js.map +1 -0
  91. package/dist/extensions/index.d.ts +3 -0
  92. package/dist/extensions/index.d.ts.map +1 -0
  93. package/dist/extensions/index.js +20 -0
  94. package/dist/extensions/index.js.map +1 -0
  95. package/dist/extensions/registry.d.ts +61 -0
  96. package/dist/extensions/registry.d.ts.map +1 -0
  97. package/dist/extensions/registry.js +153 -0
  98. package/dist/extensions/registry.js.map +1 -0
  99. package/dist/extensions/types.d.ts +84 -0
  100. package/dist/extensions/types.d.ts.map +1 -0
  101. package/dist/extensions/types.js +15 -0
  102. package/dist/extensions/types.js.map +1 -0
  103. package/dist/ifid/ifid.d.ts +30 -0
  104. package/dist/ifid/ifid.d.ts.map +1 -0
  105. package/dist/ifid/ifid.js +52 -0
  106. package/dist/ifid/ifid.js.map +1 -0
  107. package/dist/ifid/index.d.ts +2 -0
  108. package/dist/ifid/index.d.ts.map +1 -0
  109. package/dist/ifid/index.js +9 -0
  110. package/dist/ifid/index.js.map +1 -0
  111. package/dist/index.d.ts +11 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +36 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/metadata/index.d.ts +2 -0
  116. package/dist/metadata/index.d.ts.map +1 -0
  117. package/dist/metadata/index.js +3 -0
  118. package/dist/metadata/index.js.map +1 -0
  119. package/dist/metadata/story-metadata.d.ts +64 -0
  120. package/dist/metadata/story-metadata.d.ts.map +1 -0
  121. package/dist/metadata/story-metadata.js +5 -0
  122. package/dist/metadata/story-metadata.js.map +1 -0
  123. package/dist/query/index.d.ts +9 -0
  124. package/dist/query/index.d.ts.map +1 -0
  125. package/dist/query/index.js +25 -0
  126. package/dist/query/index.js.map +1 -0
  127. package/dist/query/query-manager.d.ts +86 -0
  128. package/dist/query/query-manager.d.ts.map +1 -0
  129. package/dist/query/query-manager.js +391 -0
  130. package/dist/query/query-manager.js.map +1 -0
  131. package/dist/query/types.d.ts +188 -0
  132. package/dist/query/types.d.ts.map +1 -0
  133. package/dist/query/types.js +106 -0
  134. package/dist/query/types.js.map +1 -0
  135. package/dist/random/index.d.ts +5 -0
  136. package/dist/random/index.d.ts.map +1 -0
  137. package/dist/random/index.js +9 -0
  138. package/dist/random/index.js.map +1 -0
  139. package/dist/random/seeded-random.d.ts +32 -0
  140. package/dist/random/seeded-random.d.ts.map +1 -0
  141. package/dist/random/seeded-random.js +62 -0
  142. package/dist/random/seeded-random.js.map +1 -0
  143. package/dist/rules/compatibility.d.ts +46 -0
  144. package/dist/rules/compatibility.d.ts.map +1 -0
  145. package/dist/rules/compatibility.js +62 -0
  146. package/dist/rules/compatibility.js.map +1 -0
  147. package/dist/rules/condition-builder.d.ts +23 -0
  148. package/dist/rules/condition-builder.d.ts.map +1 -0
  149. package/dist/rules/condition-builder.js +16 -0
  150. package/dist/rules/condition-builder.js.map +1 -0
  151. package/dist/rules/helpers.d.ts +51 -0
  152. package/dist/rules/helpers.d.ts.map +1 -0
  153. package/dist/rules/helpers.js +111 -0
  154. package/dist/rules/helpers.js.map +1 -0
  155. package/dist/rules/index.d.ts +12 -0
  156. package/dist/rules/index.d.ts.map +1 -0
  157. package/dist/rules/index.js +34 -0
  158. package/dist/rules/index.js.map +1 -0
  159. package/dist/rules/rule-system.d.ts +6 -0
  160. package/dist/rules/rule-system.d.ts.map +1 -0
  161. package/dist/rules/rule-system.js +10 -0
  162. package/dist/rules/rule-system.js.map +1 -0
  163. package/dist/rules/rule-world-adapter.d.ts +43 -0
  164. package/dist/rules/rule-world-adapter.d.ts.map +1 -0
  165. package/dist/rules/rule-world-adapter.js +74 -0
  166. package/dist/rules/rule-world-adapter.js.map +1 -0
  167. package/dist/rules/simple-rule-system.d.ts +36 -0
  168. package/dist/rules/simple-rule-system.d.ts.map +1 -0
  169. package/dist/rules/simple-rule-system.js +135 -0
  170. package/dist/rules/simple-rule-system.js.map +1 -0
  171. package/dist/rules/types.d.ts +64 -0
  172. package/dist/rules/types.d.ts.map +1 -0
  173. package/dist/rules/types.js +6 -0
  174. package/dist/rules/types.js.map +1 -0
  175. package/dist/types/attribute.d.ts +40 -0
  176. package/dist/types/attribute.d.ts.map +1 -0
  177. package/dist/types/attribute.js +4 -0
  178. package/dist/types/attribute.js.map +1 -0
  179. package/dist/types/entity.d.ts +47 -0
  180. package/dist/types/entity.d.ts.map +1 -0
  181. package/dist/types/entity.js +4 -0
  182. package/dist/types/entity.js.map +1 -0
  183. package/dist/types/index.d.ts +10 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +27 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/types/relationship.d.ts +44 -0
  188. package/dist/types/relationship.d.ts.map +1 -0
  189. package/dist/types/relationship.js +4 -0
  190. package/dist/types/relationship.js.map +1 -0
  191. package/dist/types/result.d.ts +81 -0
  192. package/dist/types/result.d.ts.map +1 -0
  193. package/dist/types/result.js +79 -0
  194. package/dist/types/result.js.map +1 -0
  195. package/dist/types/save-data.d.ts +264 -0
  196. package/dist/types/save-data.d.ts.map +1 -0
  197. package/dist/types/save-data.js +6 -0
  198. package/dist/types/save-data.js.map +1 -0
  199. package/package.json +65 -0
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Event Factory - Type-safe semantic event creation
3
+ *
4
+ * @see ADR-082 for design rationale
5
+ */
6
+ import { EventDataRegistry, EventType } from './event-registry';
7
+ import { TypedSemanticEvent } from './typed-event';
8
+ import { ISemanticEvent } from './types';
9
+ /**
10
+ * Options for creating an event.
11
+ */
12
+ export interface CreateEventOptions {
13
+ /**
14
+ * Entities involved in the event.
15
+ */
16
+ entities?: ISemanticEvent['entities'];
17
+ /**
18
+ * Tags for categorizing the event.
19
+ */
20
+ tags?: string[];
21
+ /**
22
+ * Priority of the event (higher = more important).
23
+ */
24
+ priority?: number;
25
+ /**
26
+ * Whether this event should be narrated.
27
+ */
28
+ narrate?: boolean;
29
+ /**
30
+ * Custom event ID (auto-generated if not provided).
31
+ */
32
+ id?: string;
33
+ }
34
+ /**
35
+ * Create a type-safe semantic event.
36
+ *
37
+ * The data parameter is strictly typed based on the event type,
38
+ * providing compile-time verification of event data.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // TypeScript enforces correct data shape
43
+ * const event = createTypedEvent('query.invalid', {
44
+ * message: 'Invalid input',
45
+ * hint: 'Please try again'
46
+ * });
47
+ *
48
+ * // This would be a compile error:
49
+ * // createTypedEvent('query.invalid', { wrongField: true });
50
+ * ```
51
+ */
52
+ export declare function createTypedEvent<T extends EventType>(type: T, data: EventDataRegistry[T], options?: CreateEventOptions): TypedSemanticEvent<T>;
53
+ /**
54
+ * Message event variant types.
55
+ */
56
+ export type MessageVariant = 'success' | 'failure' | 'info' | 'warning' | 'debug';
57
+ /**
58
+ * Create a message event (convenience helper).
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const event = createMessageEvent('success', 'item_taken', {
63
+ * item: 'brass lantern'
64
+ * });
65
+ * ```
66
+ */
67
+ export declare function createMessageEvent(variant: MessageVariant, messageId: string, params?: Record<string, unknown>, options?: CreateEventOptions): TypedSemanticEvent<`message.${MessageVariant}`>;
68
+ /**
69
+ * Create an empty event (for events with no data).
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const event = createEmptyEvent('platform.quit_cancelled');
74
+ * ```
75
+ */
76
+ export declare function createEmptyEvent<T extends EventType>(type: T, options?: CreateEventOptions): TypedSemanticEvent<T>;
77
+ /**
78
+ * Reset the event counter (useful for testing).
79
+ */
80
+ export declare function resetEventCounter(): void;
81
+ //# sourceMappingURL=event-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-factory.d.ts","sourceRoot":"","sources":["../../src/events/event-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAEtC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAClD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,kBAAkB,CAAC,CAAC,CAAC,CAWvB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAElF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,kBAAkB,CAAC,WAAW,cAAc,EAAE,CAAC,CAGjD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAClD,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,kBAAkB,GAC3B,kBAAkB,CAAC,CAAC,CAAC,CAEvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Event Factory - Type-safe semantic event creation
4
+ *
5
+ * @see ADR-082 for design rationale
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createTypedEvent = createTypedEvent;
9
+ exports.createMessageEvent = createMessageEvent;
10
+ exports.createEmptyEvent = createEmptyEvent;
11
+ exports.resetEventCounter = resetEventCounter;
12
+ let eventCounter = 0;
13
+ /**
14
+ * Create a type-safe semantic event.
15
+ *
16
+ * The data parameter is strictly typed based on the event type,
17
+ * providing compile-time verification of event data.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // TypeScript enforces correct data shape
22
+ * const event = createTypedEvent('query.invalid', {
23
+ * message: 'Invalid input',
24
+ * hint: 'Please try again'
25
+ * });
26
+ *
27
+ * // This would be a compile error:
28
+ * // createTypedEvent('query.invalid', { wrongField: true });
29
+ * ```
30
+ */
31
+ function createTypedEvent(type, data, options = {}) {
32
+ return {
33
+ id: options.id ?? `evt-${Date.now()}-${++eventCounter}`,
34
+ type,
35
+ timestamp: Date.now(),
36
+ data,
37
+ entities: options.entities ?? {},
38
+ tags: options.tags,
39
+ priority: options.priority,
40
+ narrate: options.narrate
41
+ };
42
+ }
43
+ /**
44
+ * Create a message event (convenience helper).
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const event = createMessageEvent('success', 'item_taken', {
49
+ * item: 'brass lantern'
50
+ * });
51
+ * ```
52
+ */
53
+ function createMessageEvent(variant, messageId, params, options) {
54
+ const type = `message.${variant}`;
55
+ return createTypedEvent(type, { messageId, params }, options);
56
+ }
57
+ /**
58
+ * Create an empty event (for events with no data).
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const event = createEmptyEvent('platform.quit_cancelled');
63
+ * ```
64
+ */
65
+ function createEmptyEvent(type, options) {
66
+ return createTypedEvent(type, {}, options);
67
+ }
68
+ /**
69
+ * Reset the event counter (useful for testing).
70
+ */
71
+ function resetEventCounter() {
72
+ eventCounter = 0;
73
+ }
74
+ //# sourceMappingURL=event-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-factory.js","sourceRoot":"","sources":["../../src/events/event-factory.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAwDH,4CAeC;AAiBD,gDAQC;AAUD,4CAKC;AAKD,8CAEC;AAhHD,IAAI,YAAY,GAAG,CAAC,CAAC;AAgCrB;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,gBAAgB,CAC9B,IAAO,EACP,IAA0B,EAC1B,UAA8B,EAAE;IAEhC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;QACvD,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAOD;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,OAAuB,EACvB,SAAiB,EACjB,MAAgC,EAChC,OAA4B;IAE5B,MAAM,IAAI,GAAG,WAAW,OAAO,EAAiC,CAAC;IACjE,OAAO,gBAAgB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAiB,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,IAAO,EACP,OAA4B;IAE5B,OAAO,gBAAgB,CAAC,IAAI,EAAE,EAA0B,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,YAAY,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Event Helpers - Type-safe event consumption utilities
3
+ *
4
+ * These functions help consumers safely extract typed data from events
5
+ * without resorting to `as any` casts.
6
+ *
7
+ * @see ADR-082 for design rationale
8
+ */
9
+ import { EventDataRegistry, EventType } from './event-registry';
10
+ import { ISemanticEvent } from './types';
11
+ /**
12
+ * Check if an event is of a specific type and narrow its type.
13
+ *
14
+ * This is a type guard that allows TypeScript to narrow the event
15
+ * type in conditional branches.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * function processEvent(event: ISemanticEvent) {
20
+ * if (isEventType(event, 'query.invalid')) {
21
+ * // TypeScript knows event.data is QueryInvalidData
22
+ * console.log(event.data.message);
23
+ * console.log(event.data.hint);
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function isEventType<T extends EventType>(event: ISemanticEvent, type: T): event is ISemanticEvent & {
29
+ type: T;
30
+ data: EventDataRegistry[T];
31
+ };
32
+ /**
33
+ * Check if an event type starts with a prefix.
34
+ *
35
+ * Useful for handling categories of events (e.g., all message.* events).
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * if (hasEventPrefix(event, 'message.')) {
40
+ * // Handle any message event
41
+ * }
42
+ * ```
43
+ */
44
+ export declare function hasEventPrefix(event: ISemanticEvent, prefix: string): boolean;
45
+ /**
46
+ * Get typed event data if the event matches the expected type.
47
+ *
48
+ * Returns undefined if the event type doesn't match. This is the safe
49
+ * way to extract data when you're not sure of the event type.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const data = getEventData(event, 'quit.confirmed');
54
+ * if (data) {
55
+ * console.log(`Final score: ${data.finalScore}`);
56
+ * }
57
+ * ```
58
+ */
59
+ export declare function getEventData<T extends EventType>(event: ISemanticEvent, expectedType: T): EventDataRegistry[T] | undefined;
60
+ /**
61
+ * Get event data with a fallback for missing properties.
62
+ *
63
+ * This is useful when you need default values for optional fields.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const { message, hint } = getEventDataWithDefaults(
68
+ * event,
69
+ * 'query.invalid',
70
+ * { message: 'Invalid response.', hint: undefined }
71
+ * );
72
+ * ```
73
+ */
74
+ export declare function getEventDataWithDefaults<T extends EventType>(event: ISemanticEvent, expectedType: T, defaults: EventDataRegistry[T]): EventDataRegistry[T];
75
+ /**
76
+ * Assert and get typed event data.
77
+ *
78
+ * Throws if the event type doesn't match. Use this when you're certain
79
+ * of the event type and want a clear error if assumptions are wrong.
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * // In a handler that only receives 'quit.confirmed' events
84
+ * const data = requireEventData(event, 'quit.confirmed');
85
+ * console.log(`Score: ${data.finalScore}/${data.maxScore}`);
86
+ * ```
87
+ */
88
+ export declare function requireEventData<T extends EventType>(event: ISemanticEvent, expectedType: T): EventDataRegistry[T];
89
+ /**
90
+ * Safely access a property from event data with type inference.
91
+ *
92
+ * Returns undefined if the event type doesn't match or the property
93
+ * doesn't exist.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const message = getEventProperty(event, 'query.invalid', 'message');
98
+ * // message is string | undefined
99
+ * ```
100
+ */
101
+ export declare function getEventProperty<T extends EventType, K extends keyof EventDataRegistry[T]>(event: ISemanticEvent, expectedType: T, property: K): EventDataRegistry[T][K] | undefined;
102
+ /**
103
+ * Get event data as a generic record for untyped event access.
104
+ *
105
+ * Use this when working with events that aren't yet in the EventDataRegistry.
106
+ * Prefer using typed helpers (isEventType, getEventData) when the event
107
+ * type is known.
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const data = getUntypedEventData(event);
112
+ * if (data.customField) {
113
+ * console.log(data.customField);
114
+ * }
115
+ * ```
116
+ */
117
+ export declare function getUntypedEventData(event: ISemanticEvent): Record<string, unknown>;
118
+ //# sourceMappingURL=event-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-helpers.d.ts","sourceRoot":"","sources":["../../src/events/event-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAC7C,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,CAAC,GACN,KAAK,IAAI,cAAc,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAA;CAAE,CAEnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAC9C,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,CAAC,GACd,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAKlC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,SAAS,EAC1D,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAKtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAClD,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,CAAC,GACd,iBAAiB,CAAC,CAAC,CAAC,CAOtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,iBAAiB,CAAC,CAAC,CAAC,EAEpC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,CAAC,GACV,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAKrC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Event Helpers - Type-safe event consumption utilities
4
+ *
5
+ * These functions help consumers safely extract typed data from events
6
+ * without resorting to `as any` casts.
7
+ *
8
+ * @see ADR-082 for design rationale
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.isEventType = isEventType;
12
+ exports.hasEventPrefix = hasEventPrefix;
13
+ exports.getEventData = getEventData;
14
+ exports.getEventDataWithDefaults = getEventDataWithDefaults;
15
+ exports.requireEventData = requireEventData;
16
+ exports.getEventProperty = getEventProperty;
17
+ exports.getUntypedEventData = getUntypedEventData;
18
+ /**
19
+ * Check if an event is of a specific type and narrow its type.
20
+ *
21
+ * This is a type guard that allows TypeScript to narrow the event
22
+ * type in conditional branches.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * function processEvent(event: ISemanticEvent) {
27
+ * if (isEventType(event, 'query.invalid')) {
28
+ * // TypeScript knows event.data is QueryInvalidData
29
+ * console.log(event.data.message);
30
+ * console.log(event.data.hint);
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+ function isEventType(event, type) {
36
+ return event.type === type;
37
+ }
38
+ /**
39
+ * Check if an event type starts with a prefix.
40
+ *
41
+ * Useful for handling categories of events (e.g., all message.* events).
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * if (hasEventPrefix(event, 'message.')) {
46
+ * // Handle any message event
47
+ * }
48
+ * ```
49
+ */
50
+ function hasEventPrefix(event, prefix) {
51
+ return event.type.startsWith(prefix);
52
+ }
53
+ /**
54
+ * Get typed event data if the event matches the expected type.
55
+ *
56
+ * Returns undefined if the event type doesn't match. This is the safe
57
+ * way to extract data when you're not sure of the event type.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const data = getEventData(event, 'quit.confirmed');
62
+ * if (data) {
63
+ * console.log(`Final score: ${data.finalScore}`);
64
+ * }
65
+ * ```
66
+ */
67
+ function getEventData(event, expectedType) {
68
+ if (event.type === expectedType) {
69
+ return event.data;
70
+ }
71
+ return undefined;
72
+ }
73
+ /**
74
+ * Get event data with a fallback for missing properties.
75
+ *
76
+ * This is useful when you need default values for optional fields.
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const { message, hint } = getEventDataWithDefaults(
81
+ * event,
82
+ * 'query.invalid',
83
+ * { message: 'Invalid response.', hint: undefined }
84
+ * );
85
+ * ```
86
+ */
87
+ function getEventDataWithDefaults(event, expectedType, defaults) {
88
+ if (event.type === expectedType && event.data) {
89
+ return { ...defaults, ...event.data };
90
+ }
91
+ return defaults;
92
+ }
93
+ /**
94
+ * Assert and get typed event data.
95
+ *
96
+ * Throws if the event type doesn't match. Use this when you're certain
97
+ * of the event type and want a clear error if assumptions are wrong.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // In a handler that only receives 'quit.confirmed' events
102
+ * const data = requireEventData(event, 'quit.confirmed');
103
+ * console.log(`Score: ${data.finalScore}/${data.maxScore}`);
104
+ * ```
105
+ */
106
+ function requireEventData(event, expectedType) {
107
+ if (event.type !== expectedType) {
108
+ throw new Error(`Expected event type '${expectedType}', got '${event.type}'`);
109
+ }
110
+ return event.data;
111
+ }
112
+ /**
113
+ * Safely access a property from event data with type inference.
114
+ *
115
+ * Returns undefined if the event type doesn't match or the property
116
+ * doesn't exist.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const message = getEventProperty(event, 'query.invalid', 'message');
121
+ * // message is string | undefined
122
+ * ```
123
+ */
124
+ function getEventProperty(event, expectedType, property) {
125
+ if (event.type === expectedType && event.data) {
126
+ return event.data[property];
127
+ }
128
+ return undefined;
129
+ }
130
+ /**
131
+ * Get event data as a generic record for untyped event access.
132
+ *
133
+ * Use this when working with events that aren't yet in the EventDataRegistry.
134
+ * Prefer using typed helpers (isEventType, getEventData) when the event
135
+ * type is known.
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const data = getUntypedEventData(event);
140
+ * if (data.customField) {
141
+ * console.log(data.customField);
142
+ * }
143
+ * ```
144
+ */
145
+ function getUntypedEventData(event) {
146
+ if (event.data && typeof event.data === 'object') {
147
+ return event.data;
148
+ }
149
+ return {};
150
+ }
151
+ //# sourceMappingURL=event-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-helpers.js","sourceRoot":"","sources":["../../src/events/event-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAsBH,kCAKC;AAcD,wCAEC;AAgBD,oCAQC;AAgBD,4DASC;AAeD,4CAUC;AAcD,4CAYC;AAiBD,kDAOC;AAlKD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,WAAW,CACzB,KAAqB,EACrB,IAAO;IAEP,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,cAAc,CAAC,KAAqB,EAAE,MAAc;IAClE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,YAAY,CAC1B,KAAqB,EACrB,YAAe;IAEf,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,IAA4B,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,wBAAwB,CACtC,KAAqB,EACrB,YAAe,EACf,QAA8B;IAE9B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAI,KAAK,CAAC,IAA6B,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAC9B,KAAqB,EACrB,YAAe;IAEf,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,wBAAwB,YAAY,WAAW,KAAK,CAAC,IAAI,GAAG,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAA4B,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,gBAAgB,CAI9B,KAAqB,EACrB,YAAe,EACf,QAAW;IAEX,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAQ,KAAK,CAAC,IAA6B,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,mBAAmB,CACjC,KAAqB;IAErB,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,IAA+B,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Event Data Registry - Central type definitions for all semantic events
3
+ *
4
+ * This module defines the mapping between event type strings and their
5
+ * corresponding data shapes. It serves as the single source of truth
6
+ * for event data types across the Sharpee platform.
7
+ *
8
+ * @see ADR-082 for the design rationale
9
+ *
10
+ * ## Extensibility
11
+ *
12
+ * Packages can extend this registry using TypeScript declaration merging:
13
+ *
14
+ * ```typescript
15
+ * declare module '@sharpee/core' {
16
+ * interface EventDataRegistry {
17
+ * 'my.custom.event': MyCustomData;
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ import { EntityId } from '../types/entity';
23
+ /**
24
+ * Registry mapping event type strings to their data shapes.
25
+ *
26
+ * This interface is designed to be extended via declaration merging
27
+ * by stdlib, stories, and other packages.
28
+ */
29
+ export interface EventDataRegistry {
30
+ 'query.pending': QueryPendingData;
31
+ 'query.invalid': QueryInvalidData;
32
+ 'query.response': QueryResponseData;
33
+ 'message.success': MessageData;
34
+ 'message.failure': MessageData;
35
+ 'message.info': MessageData;
36
+ 'message.warning': MessageData;
37
+ 'message.debug': MessageData;
38
+ 'game.initializing': EmptyData;
39
+ 'game.initialized': GameInitializedData;
40
+ 'game.starting': EmptyData;
41
+ 'game.started': GameStartedData;
42
+ 'game.ending': GameEndingData;
43
+ 'game.ended': GameEndedData;
44
+ 'game.won': GameEndedData;
45
+ 'game.lost': GameEndedData;
46
+ 'game.quit': EmptyData;
47
+ 'game.aborted': EmptyData;
48
+ 'platform.save_requested': SaveRequestedData;
49
+ 'platform.save_completed': SaveCompletedData;
50
+ 'platform.save_failed': SaveFailedData;
51
+ 'platform.restore_requested': RestoreRequestedData;
52
+ 'platform.restore_completed': RestoreCompletedData;
53
+ 'platform.restore_failed': RestoreFailedData;
54
+ 'platform.quit_requested': EmptyData;
55
+ 'platform.quit_confirmed': QuitConfirmedData;
56
+ 'platform.quit_cancelled': EmptyData;
57
+ 'platform.restart_requested': EmptyData;
58
+ 'platform.restart_completed': EmptyData;
59
+ 'platform.restart_cancelled': EmptyData;
60
+ 'turn.started': TurnData;
61
+ 'turn.ended': TurnData;
62
+ 'quit.confirmed': QuitConfirmedData;
63
+ 'quit.cancelled': EmptyData;
64
+ }
65
+ /**
66
+ * Empty data for events that carry no payload.
67
+ */
68
+ export interface EmptyData {
69
+ }
70
+ /**
71
+ * Standard message event data.
72
+ */
73
+ export interface MessageData {
74
+ messageId: string;
75
+ params?: Record<string, unknown>;
76
+ }
77
+ export interface QueryPendingData {
78
+ query: {
79
+ id: string;
80
+ messageId: string;
81
+ messageParams?: Record<string, unknown>;
82
+ options?: string[];
83
+ validationType?: string;
84
+ };
85
+ }
86
+ export interface QueryInvalidData {
87
+ message?: string;
88
+ hint?: string;
89
+ queryId?: string;
90
+ }
91
+ export interface QueryResponseData {
92
+ queryId: string;
93
+ response: string | number | boolean;
94
+ }
95
+ export interface GameInitializedData {
96
+ storyId?: string;
97
+ storyTitle?: string;
98
+ storyVersion?: string;
99
+ }
100
+ export interface GameStartedData {
101
+ storyId?: string;
102
+ storyTitle?: string;
103
+ initialLocation?: EntityId;
104
+ }
105
+ export interface GameEndingData {
106
+ reason?: string;
107
+ }
108
+ export interface GameEndedData {
109
+ finalScore?: number;
110
+ maxScore?: number;
111
+ moves?: number;
112
+ reason?: string;
113
+ rank?: string;
114
+ }
115
+ export interface SaveRequestedData {
116
+ slotName?: string;
117
+ }
118
+ export interface SaveCompletedData {
119
+ slotName?: string;
120
+ timestamp?: number;
121
+ }
122
+ export interface SaveFailedData {
123
+ slotName?: string;
124
+ error?: string;
125
+ }
126
+ export interface RestoreRequestedData {
127
+ slotName?: string;
128
+ }
129
+ export interface RestoreCompletedData {
130
+ slotName?: string;
131
+ timestamp?: number;
132
+ }
133
+ export interface RestoreFailedData {
134
+ slotName?: string;
135
+ error?: string;
136
+ }
137
+ export interface QuitConfirmedData {
138
+ messageId?: string;
139
+ finalScore?: number;
140
+ maxScore?: number;
141
+ moves?: number;
142
+ }
143
+ export interface TurnData {
144
+ turn: number;
145
+ }
146
+ /**
147
+ * All known event type strings.
148
+ */
149
+ export type EventType = keyof EventDataRegistry;
150
+ /**
151
+ * Get the data type for a specific event type.
152
+ */
153
+ export type EventDataFor<T extends EventType> = EventDataRegistry[T];
154
+ //# sourceMappingURL=event-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-registry.d.ts","sourceRoot":"","sources":["../../src/events/event-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Event Data Registry - Central type definitions for all semantic events
4
+ *
5
+ * This module defines the mapping between event type strings and their
6
+ * corresponding data shapes. It serves as the single source of truth
7
+ * for event data types across the Sharpee platform.
8
+ *
9
+ * @see ADR-082 for the design rationale
10
+ *
11
+ * ## Extensibility
12
+ *
13
+ * Packages can extend this registry using TypeScript declaration merging:
14
+ *
15
+ * ```typescript
16
+ * declare module '@sharpee/core' {
17
+ * interface EventDataRegistry {
18
+ * 'my.custom.event': MyCustomData;
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ //# sourceMappingURL=event-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-registry.js","sourceRoot":"","sources":["../../src/events/event-registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Generic event source infrastructure for the narrative engine.
3
+ * This provides a simple pub/sub mechanism for any type of event.
4
+ */
5
+ /**
6
+ * Generic event source interface for pub/sub pattern
7
+ */
8
+ export interface IGenericEventSource<T> {
9
+ /**
10
+ * Emit an event to all subscribers
11
+ */
12
+ emit(event: T): void;
13
+ /**
14
+ * Subscribe to events
15
+ * @returns Unsubscribe function
16
+ */
17
+ subscribe(handler: (event: T) => void): () => void;
18
+ }
19
+ /**
20
+ * Simple synchronous implementation of EventSource
21
+ */
22
+ export declare class SimpleEventSource<T> implements IGenericEventSource<T> {
23
+ private handlers;
24
+ emit(event: T): void;
25
+ subscribe(handler: (event: T) => void): () => void;
26
+ /**
27
+ * Get the current number of subscribers
28
+ */
29
+ get subscriberCount(): number;
30
+ /**
31
+ * Remove all subscribers
32
+ */
33
+ clear(): void;
34
+ }
35
+ /**
36
+ * Create a new event source for a specific event type
37
+ */
38
+ export declare function createEventSource<T>(): IGenericEventSource<T>;
39
+ //# sourceMappingURL=event-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-source.d.ts","sourceRoot":"","sources":["../../src/events/event-source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,QAAQ,CAA8B;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAapB,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAYlD;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAE7D"}