@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
+ * Generic result type for operations that can succeed or fail
3
+ * This is a discriminated union type - check the 'success' field to narrow the type
4
+ */
5
+ export type Result<T, E = Error> = {
6
+ success: true;
7
+ value: T;
8
+ } | {
9
+ success: false;
10
+ error: E;
11
+ };
12
+ /**
13
+ * Convenience functions for working with Result types
14
+ */
15
+ export declare const Result: {
16
+ /**
17
+ * Create a successful result
18
+ */
19
+ ok<T>(value: T): Result<T, any>;
20
+ /**
21
+ * Create a failed result
22
+ */
23
+ fail<E>(error: E): Result<any, E>;
24
+ /**
25
+ * Check if a result is successful
26
+ */
27
+ isOk<T, E>(result: Result<T, E>): result is {
28
+ success: true;
29
+ value: T;
30
+ };
31
+ /**
32
+ * Check if a result is a failure
33
+ */
34
+ isFail<T, E>(result: Result<T, E>): result is {
35
+ success: false;
36
+ error: E;
37
+ };
38
+ /**
39
+ * Map a successful result to a new value
40
+ */
41
+ map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;
42
+ /**
43
+ * Map a failed result to a new error
44
+ */
45
+ mapError<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
46
+ /**
47
+ * Chain results together
48
+ */
49
+ flatMap<T, U, E>(result: Result<T, E>, fn: (value: T) => Result<U, E>): Result<U, E>;
50
+ /**
51
+ * Get the value or throw an error
52
+ */
53
+ unwrap<T, E>(result: Result<T, E>): T;
54
+ /**
55
+ * Get the value or return a default
56
+ */
57
+ unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T;
58
+ };
59
+ /**
60
+ * Generic command result type for operations that produce events
61
+ * Domain-specific implementations can extend this
62
+ */
63
+ export interface ICommandResult<TEvent = any> {
64
+ /**
65
+ * Whether the command was successful
66
+ */
67
+ success: boolean;
68
+ /**
69
+ * Events generated during command execution
70
+ */
71
+ events: TEvent[];
72
+ /**
73
+ * Error message if the command failed
74
+ */
75
+ error?: string;
76
+ /**
77
+ * Additional metadata about the command execution
78
+ */
79
+ metadata?: Record<string, unknown>;
80
+ }
81
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;OACA,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;IAI/B;;OAEG;SACE,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAIjC;;OAEG;SACE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE;IAIvE;;OAEG;WACI,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE;IAI1E;;OAEG;QACC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAOrE;;OAEG;aACM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAO1E;;OAEG;YACK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAOpF;;OAEG;WACI,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;IAOrC;;OAEG;aACM,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC;CAMzD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,MAAM,GAAG,GAAG;IAC1C;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ // packages/core/src/types/result.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Result = void 0;
5
+ /**
6
+ * Convenience functions for working with Result types
7
+ */
8
+ exports.Result = {
9
+ /**
10
+ * Create a successful result
11
+ */
12
+ ok(value) {
13
+ return { success: true, value };
14
+ },
15
+ /**
16
+ * Create a failed result
17
+ */
18
+ fail(error) {
19
+ return { success: false, error };
20
+ },
21
+ /**
22
+ * Check if a result is successful
23
+ */
24
+ isOk(result) {
25
+ return result.success;
26
+ },
27
+ /**
28
+ * Check if a result is a failure
29
+ */
30
+ isFail(result) {
31
+ return !result.success;
32
+ },
33
+ /**
34
+ * Map a successful result to a new value
35
+ */
36
+ map(result, fn) {
37
+ if (result.success) {
38
+ return exports.Result.ok(fn(result.value));
39
+ }
40
+ return result;
41
+ },
42
+ /**
43
+ * Map a failed result to a new error
44
+ */
45
+ mapError(result, fn) {
46
+ if (!result.success) {
47
+ return exports.Result.fail(fn(result.error));
48
+ }
49
+ return result;
50
+ },
51
+ /**
52
+ * Chain results together
53
+ */
54
+ flatMap(result, fn) {
55
+ if (result.success) {
56
+ return fn(result.value);
57
+ }
58
+ return result;
59
+ },
60
+ /**
61
+ * Get the value or throw an error
62
+ */
63
+ unwrap(result) {
64
+ if (result.success) {
65
+ return result.value;
66
+ }
67
+ throw result.error;
68
+ },
69
+ /**
70
+ * Get the value or return a default
71
+ */
72
+ unwrapOr(result, defaultValue) {
73
+ if (result.success) {
74
+ return result.value;
75
+ }
76
+ return defaultValue;
77
+ }
78
+ };
79
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAUpC;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,EAAE,CAAI,KAAQ;QACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAI,CAAI,KAAQ;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,CAAO,MAAoB;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,MAAM,CAAO,MAAoB;QAC/B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,GAAG,CAAU,MAAoB,EAAE,EAAmB;QACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,cAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAU,MAAoB,EAAE,EAAmB;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,cAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO,CAAU,MAAoB,EAAE,EAA8B;QACnE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAO,MAAoB;QAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAO,MAAoB,EAAE,YAAe;QAClD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF,CAAC"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Save/Restore data structures for game state serialization
3
+ */
4
+ /**
5
+ * Complete save game data structure
6
+ */
7
+ export interface ISaveData {
8
+ /** Engine version for compatibility checking */
9
+ version: string;
10
+ /** Unix timestamp when save was created */
11
+ timestamp: number;
12
+ /** Game metadata for save management */
13
+ metadata: ISaveMetadata;
14
+ /** Complete engine state */
15
+ engineState: IEngineState;
16
+ /** Story configuration for validation */
17
+ storyConfig: IStoryConfig;
18
+ }
19
+ /**
20
+ * Save game metadata
21
+ */
22
+ export interface ISaveMetadata {
23
+ /** Unique story identifier */
24
+ storyId: string;
25
+ /** Story version for compatibility */
26
+ storyVersion: string;
27
+ /** Number of turns played */
28
+ turnCount: number;
29
+ /** Optional: Total play time in milliseconds */
30
+ playTime?: number;
31
+ /** Optional: Player-provided or auto-generated description */
32
+ description?: string;
33
+ }
34
+ /**
35
+ * Complete engine state for serialization
36
+ */
37
+ export interface IEngineState {
38
+ /** Complete event history */
39
+ eventSource: ISerializedEvent[];
40
+ /** Current world state */
41
+ spatialIndex: ISerializedSpatialIndex;
42
+ /** Turn history for undo/redo */
43
+ turnHistory: ISerializedTurn[];
44
+ /** Optional: Parser state if needed */
45
+ parserState?: ISerializedParserState;
46
+ /** Optional: Scheduler state (daemons and fuses) */
47
+ schedulerState?: ISerializedSchedulerState;
48
+ }
49
+ /**
50
+ * Serialized scheduler state for save/load
51
+ */
52
+ export interface ISerializedSchedulerState {
53
+ /** Current turn number */
54
+ turn: number;
55
+ /** Daemon states */
56
+ daemons: ISerializedDaemonState[];
57
+ /** Fuse states */
58
+ fuses: ISerializedFuseState[];
59
+ /** Random seed for deterministic replay */
60
+ randomSeed: number;
61
+ }
62
+ /**
63
+ * Serialized daemon runtime state
64
+ */
65
+ export interface ISerializedDaemonState {
66
+ /** Daemon ID */
67
+ id: string;
68
+ /** Whether daemon is paused */
69
+ isPaused: boolean;
70
+ /** Number of times daemon has run */
71
+ runCount: number;
72
+ }
73
+ /**
74
+ * Serialized fuse runtime state
75
+ */
76
+ export interface ISerializedFuseState {
77
+ /** Fuse ID */
78
+ id: string;
79
+ /** Turns remaining until trigger */
80
+ turnsRemaining: number;
81
+ /** Whether fuse is paused */
82
+ isPaused: boolean;
83
+ /** Optional: Entity the fuse is bound to */
84
+ entityId?: string;
85
+ }
86
+ /**
87
+ * Serialized event representation
88
+ */
89
+ export interface ISerializedEvent {
90
+ /** Unique event ID */
91
+ id: string;
92
+ /** Event type */
93
+ type: string;
94
+ /** Unix timestamp */
95
+ timestamp: number;
96
+ /** Event payload data */
97
+ data: Record<string, unknown>;
98
+ /** Optional metadata */
99
+ metadata?: Record<string, unknown>;
100
+ }
101
+ /**
102
+ * Serialized spatial index state
103
+ */
104
+ export interface ISerializedSpatialIndex {
105
+ /** All entities indexed by ID */
106
+ entities: Record<string, ISerializedEntity>;
107
+ /** All locations indexed by ID */
108
+ locations: Record<string, ISerializedLocation>;
109
+ /** Spatial relationships */
110
+ relationships: Record<string, ISerializedRelationship[]>;
111
+ }
112
+ /**
113
+ * Serialized entity representation
114
+ */
115
+ export interface ISerializedEntity {
116
+ /** Unique entity ID */
117
+ id: string;
118
+ /** Entity traits as key-value pairs */
119
+ traits: Record<string, unknown>;
120
+ /** Entity type hint for deserialization */
121
+ entityType?: string;
122
+ }
123
+ /**
124
+ * Serialized location representation
125
+ */
126
+ export interface ISerializedLocation {
127
+ /** Unique location ID */
128
+ id: string;
129
+ /** Location properties */
130
+ properties: Record<string, unknown>;
131
+ /** IDs of entities at this location */
132
+ contents: string[];
133
+ /** Connected locations */
134
+ connections?: Record<string, string>;
135
+ }
136
+ /**
137
+ * Serialized spatial relationship
138
+ */
139
+ export interface ISerializedRelationship {
140
+ /** Relationship type (e.g., "contains", "supports") */
141
+ type: string;
142
+ /** Source entity/location ID */
143
+ sourceId: string;
144
+ /** Target entity/location ID */
145
+ targetId: string;
146
+ /** Additional relationship data */
147
+ data?: Record<string, unknown>;
148
+ }
149
+ /**
150
+ * Serialized turn data
151
+ */
152
+ export interface ISerializedTurn {
153
+ /** Turn number */
154
+ turnNumber: number;
155
+ /** Event IDs that occurred in this turn */
156
+ eventIds: string[];
157
+ /** Turn timestamp */
158
+ timestamp: number;
159
+ /** Optional: Command that triggered this turn */
160
+ command?: string;
161
+ }
162
+ /**
163
+ * Serialized parser state (if needed)
164
+ */
165
+ export interface ISerializedParserState {
166
+ /** Current context stack */
167
+ contextStack?: unknown[];
168
+ /** Disambiguation state */
169
+ disambiguationState?: unknown;
170
+ /** Any other parser-specific state */
171
+ [key: string]: unknown;
172
+ }
173
+ /**
174
+ * Story configuration for validation
175
+ */
176
+ export interface IStoryConfig {
177
+ /** Unique story identifier */
178
+ id: string;
179
+ /** Story version */
180
+ version: string;
181
+ /** Story title */
182
+ title: string;
183
+ /** Story author(s) */
184
+ author: string;
185
+ /** Optional: Additional story metadata */
186
+ metadata?: Record<string, unknown>;
187
+ }
188
+ /**
189
+ * Client-provided hooks for save/restore functionality
190
+ */
191
+ export interface ISaveRestoreHooks {
192
+ /**
193
+ * Called when save is requested
194
+ * @param data Complete save data to persist
195
+ * @throws Error if save fails
196
+ */
197
+ onSaveRequested: (data: ISaveData) => Promise<void>;
198
+ /**
199
+ * Called when restore is requested
200
+ * @returns Save data to restore, or null if cancelled/unavailable
201
+ */
202
+ onRestoreRequested: () => Promise<ISaveData | null>;
203
+ /**
204
+ * Called when quit is requested
205
+ * @param context Quit context with game state info
206
+ * @returns true if game should quit, false if cancelled
207
+ */
208
+ onQuitRequested?: (context: IQuitContext) => Promise<boolean>;
209
+ /**
210
+ * Called when restart is requested
211
+ * @param context Restart context with game state info
212
+ * @returns true if game should restart, false if cancelled
213
+ */
214
+ onRestartRequested?: (context: IRestartContext) => Promise<boolean>;
215
+ }
216
+ /**
217
+ * Context provided when quit is requested
218
+ */
219
+ export interface IQuitContext {
220
+ /** Current game score */
221
+ score?: number;
222
+ /** Number of moves/turns taken */
223
+ moves?: number;
224
+ /** Whether there are unsaved changes */
225
+ hasUnsavedChanges?: boolean;
226
+ /** Whether to force quit without confirmation */
227
+ force?: boolean;
228
+ /** Any final game statistics */
229
+ stats?: Record<string, unknown>;
230
+ }
231
+ /**
232
+ * Context provided when restart is requested
233
+ */
234
+ export interface IRestartContext {
235
+ /** Current progress information */
236
+ currentProgress?: {
237
+ score?: number;
238
+ moves?: number;
239
+ location?: string;
240
+ };
241
+ /** Whether confirmation is needed */
242
+ confirmationRequired?: boolean;
243
+ /** Whether there are unsaved changes */
244
+ hasUnsavedChanges?: boolean;
245
+ /** Whether to force restart without confirmation */
246
+ force?: boolean;
247
+ }
248
+ /**
249
+ * Result of a save operation
250
+ */
251
+ export interface ISaveResult {
252
+ success: boolean;
253
+ error?: string;
254
+ }
255
+ /**
256
+ * Result of a restore operation
257
+ */
258
+ export interface IRestoreResult {
259
+ success: boolean;
260
+ error?: string;
261
+ /** If true, UI should perform full refresh */
262
+ refreshUI?: boolean;
263
+ }
264
+ //# sourceMappingURL=save-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-data.d.ts","sourceRoot":"","sources":["../../src/types/save-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAEhB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,QAAQ,EAAE,aAAa,CAAC;IAExB,4BAA4B;IAC5B,WAAW,EAAE,YAAY,CAAC;IAE1B,yCAAyC;IACzC,WAAW,EAAE,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAEhC,0BAA0B;IAC1B,YAAY,EAAE,uBAAuB,CAAC;IAEtC,iCAAiC;IACjC,WAAW,EAAE,eAAe,EAAE,CAAC;IAE/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC,oDAAoD;IACpD,cAAc,CAAC,EAAE,yBAAyB,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAElC,kBAAkB;IAClB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAE9B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IAEX,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc;IACd,EAAE,EAAE,MAAM,CAAC;IAEX,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IAEvB,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAElB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE5C,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAE/C,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IAEX,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IAEzB,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAEhB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;;OAGG;IACH,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEpD;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,eAAe,CAAC,EAAE;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Save/Restore data structures for game state serialization
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=save-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-data.js","sourceRoot":"","sources":["../../src/types/save-data.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@sharpee/core",
3
+ "version": "0.9.56-beta",
4
+ "description": "Core functionality for the Sharpee interactive fiction engine",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^18.0.0",
17
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
18
+ "@typescript-eslint/parser": "^5.59.0",
19
+ "cross-env": "^7.0.3",
20
+ "eslint": "^8.38.0",
21
+ "rimraf": "^5.0.0",
22
+ "typescript": "^5.0.0"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "keywords": [
28
+ "interactive-fiction",
29
+ "if",
30
+ "text-adventure",
31
+ "sharpee",
32
+ "core",
33
+ "ifid"
34
+ ],
35
+ "author": "Sharpee Team",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/ChicagoDave/sharpee.git",
40
+ "directory": "packages/core"
41
+ },
42
+ "homepage": "https://github.com/ChicagoDave/sharpee#readme",
43
+ "bugs": {
44
+ "url": "https://github.com/ChicagoDave/sharpee/issues"
45
+ },
46
+ "engines": {
47
+ "node": ">=18.0.0"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "dependencies": {
53
+ "eventemitter3": "^5.0.1"
54
+ },
55
+ "scripts": {
56
+ "build": "tsc",
57
+ "test": "vitest",
58
+ "test:ci": "vitest run",
59
+ "test:verbose": "vitest run --reporter=verbose",
60
+ "test:watch": "vitest",
61
+ "test:coverage": "vitest run --coverage",
62
+ "lint": "eslint src --ext .ts",
63
+ "clean": "rimraf dist"
64
+ }
65
+ }