liminal 0.5.3 → 0.5.4

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 (93) hide show
  1. package/Agent.ts +5 -5
  2. package/CHANGELOG.md +9 -0
  3. package/EventBase.ts +13 -0
  4. package/Fiber.ts +42 -92
  5. package/Globals.ts +1 -1
  6. package/L/L.ts +0 -1
  7. package/L/_infer.ts +27 -22
  8. package/L/_message.ts +5 -7
  9. package/L/assistant.ts +2 -9
  10. package/L/branch.ts +30 -24
  11. package/L/emit.ts +2 -3
  12. package/L/fork.ts +18 -16
  13. package/L/model.ts +3 -2
  14. package/L/rune.ts +2 -2
  15. package/L/self.ts +3 -3
  16. package/LEvent.ts +40 -17
  17. package/Rune.ts +2 -2
  18. package/dist/Agent.d.ts +1 -1
  19. package/dist/Agent.js +4 -5
  20. package/dist/Agent.js.map +1 -1
  21. package/dist/EventBase.d.ts +7 -0
  22. package/dist/EventBase.js +14 -0
  23. package/dist/EventBase.js.map +1 -0
  24. package/dist/Fiber.d.ts +8 -22
  25. package/dist/Fiber.js +32 -74
  26. package/dist/Fiber.js.map +1 -1
  27. package/dist/Globals.d.ts +0 -1
  28. package/dist/L/L.d.ts +0 -1
  29. package/dist/L/L.js +0 -1
  30. package/dist/L/L.js.map +1 -1
  31. package/dist/L/_infer.d.ts +2 -2
  32. package/dist/L/_infer.js +19 -16
  33. package/dist/L/_infer.js.map +1 -1
  34. package/dist/L/_message.js +5 -7
  35. package/dist/L/_message.js.map +1 -1
  36. package/dist/L/assistant.js +2 -7
  37. package/dist/L/assistant.js.map +1 -1
  38. package/dist/L/branch.js +31 -22
  39. package/dist/L/branch.js.map +1 -1
  40. package/dist/L/emit.js +2 -3
  41. package/dist/L/emit.js.map +1 -1
  42. package/dist/L/fork.d.ts +1 -7
  43. package/dist/L/fork.js +19 -10
  44. package/dist/L/fork.js.map +1 -1
  45. package/dist/L/model.js +3 -2
  46. package/dist/L/model.js.map +1 -1
  47. package/dist/L/rune.d.ts +2 -2
  48. package/dist/L/rune.js.map +1 -1
  49. package/dist/L/self.d.ts +2 -2
  50. package/dist/L/self.js +1 -1
  51. package/dist/L/self.js.map +1 -1
  52. package/dist/LEvent.d.ts +22 -19
  53. package/dist/LEvent.js +44 -0
  54. package/dist/LEvent.js.map +1 -1
  55. package/dist/Rune.d.ts +2 -2
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +2 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/run.d.ts +3 -0
  60. package/dist/run.js +35 -0
  61. package/dist/run.js.map +1 -0
  62. package/dist/state/Context.d.ts +8 -0
  63. package/dist/state/Context.js +17 -0
  64. package/dist/state/Context.js.map +1 -0
  65. package/dist/state/MessageRegistry.d.ts +1 -0
  66. package/dist/state/MessageRegistry.js +3 -0
  67. package/dist/state/MessageRegistry.js.map +1 -1
  68. package/dist/state/ModelRegistry.d.ts +1 -0
  69. package/dist/state/ModelRegistry.js +9 -0
  70. package/dist/state/ModelRegistry.js.map +1 -1
  71. package/dist/state/StateMap.d.ts +3 -2
  72. package/dist/state/StateMap.js +8 -0
  73. package/dist/state/StateMap.js.map +1 -1
  74. package/dist/tsconfig.tsbuildinfo +1 -1
  75. package/index.ts +2 -0
  76. package/package.json +3 -4
  77. package/run.ts +39 -0
  78. package/state/Context.ts +19 -0
  79. package/state/MessageRegistry.ts +4 -0
  80. package/state/ModelRegistry.ts +10 -0
  81. package/state/StateMap.ts +11 -2
  82. package/L/state.ts +0 -20
  83. package/dist/L/state.d.ts +0 -7
  84. package/dist/L/state.js +0 -14
  85. package/dist/L/state.js.map +0 -1
  86. package/dist/state/Counter.d.ts +0 -6
  87. package/dist/state/Counter.js +0 -13
  88. package/dist/state/Counter.js.map +0 -1
  89. package/dist/state/DefaultStateMap.d.ts +0 -4
  90. package/dist/state/DefaultStateMap.js +0 -14
  91. package/dist/state/DefaultStateMap.js.map +0 -1
  92. package/state/Counter.ts +0 -11
  93. package/state/DefaultStateMap.ts +0 -14
package/dist/LEvent.js CHANGED
@@ -1,4 +1,48 @@
1
+ import { EventBase } from "./EventBase.js";
1
2
  export const LEventTag = Symbol.for("liminal/LEvent");
3
+ export class InferenceRequested extends EventBase {
4
+ requestId;
5
+ constructor(requestId, schema) {
6
+ super(LEventTag, "inference_requested");
7
+ this.requestId = requestId;
8
+ if (schema) {
9
+ this.schema = schema;
10
+ }
11
+ }
12
+ }
13
+ export class Inferred extends EventBase {
14
+ requestId;
15
+ inference;
16
+ constructor(requestId, inference) {
17
+ super(LEventTag, "inferred");
18
+ this.requestId = requestId;
19
+ this.inference = inference;
20
+ }
21
+ }
22
+ export class MessageAppended extends EventBase {
23
+ message;
24
+ constructor(message) {
25
+ super(LEventTag, "message_appended");
26
+ this.message = message;
27
+ }
28
+ }
29
+ export class FiberCreated extends EventBase {
30
+ constructor() {
31
+ super(LEventTag, "fiber_created");
32
+ }
33
+ }
34
+ export class FiberStarted extends EventBase {
35
+ constructor() {
36
+ super(LEventTag, "fiber_started");
37
+ }
38
+ }
39
+ export class FiberResolved extends EventBase {
40
+ value;
41
+ constructor(value) {
42
+ super(LEventTag, "fiber_resolved");
43
+ this.value = value;
44
+ }
45
+ }
2
46
  export function isLEvent(value) {
3
47
  return typeof value === "object" && value !== null && LEventTag in value;
4
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LEvent.js","sourceRoot":"","sources":["../LEvent.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,SAAS,GAAkB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAGpE,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAA;AAC1E,CAAC"}
1
+ {"version":3,"file":"LEvent.js","sourceRoot":"","sources":["../LEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAK1C,MAAM,CAAC,MAAM,SAAS,GAAkB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAGpE,MAAM,OAAO,kBAAmB,SAAQ,SAA2C;IAGtE;IADX,YACW,SAAiB,EAC1B,MAAiC;QAEjC,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAA;QAH9B,cAAS,GAAT,SAAS,CAAQ;QAI1B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,SAAgC;IAEjD;IACA;IAFX,YACW,SAAiB,EACjB,SAAiB;QAE1B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAHnB,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAQ;IAG5B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,SAAwC;IACtD;IAArB,YAAqB,OAAgB;QACnC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;QADjB,YAAO,GAAP,OAAO,CAAS;IAErC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,SAAqC;IACrE;QACE,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,SAAqC;IACrE;QACE,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,SAAsC;IAClD;IAArB,YAAqB,KAAU;QAC7B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QADf,UAAK,GAAL,KAAK,CAAK;IAE/B,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAA;AAC1E,CAAC"}
package/dist/Rune.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { Fiber } from "./Fiber.ts";
1
+ import type { FiberConfig } from "./Fiber.ts";
2
2
  export interface Rune<out E = any> {
3
- (fiber: Fiber): any;
3
+ (fiber: FiberConfig): any;
4
4
  [RuneKey]: E;
5
5
  }
6
6
  export declare namespace Rune {
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export * as _util from "liminal-util";
2
2
  export * from "./Agent.ts";
3
+ export * from "./EventBase.ts";
3
4
  export * from "./Fiber.ts";
4
5
  export * as L from "./L/L.ts";
5
6
  export * from "./LEvent.ts";
7
+ export * from "./Message.ts";
6
8
  export * from "./Model.ts";
7
9
  export * from "./Rune.ts";
8
10
  export * from "./Runic.ts";
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  export * as _util from "liminal-util";
2
2
  export * from "./Agent.js";
3
+ export * from "./EventBase.js";
3
4
  export * from "./Fiber.js";
4
5
  export * as L from "./L/L.js";
5
6
  export * from "./LEvent.js";
7
+ export * from "./Message.js";
6
8
  export * from "./Model.js";
7
9
  export * from "./Rune.js";
8
10
  export * from "./Runic.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { FiberConfig } from "./Fiber.ts";
2
+ import { Runic } from "./Runic.ts";
3
+ export declare function run<X extends Runic>(runic: X, config: FiberConfig<Runic.T<X>>): Promise<Runic.T<X>>;
package/dist/run.js ADDED
@@ -0,0 +1,35 @@
1
+ import { Runic } from "./Runic.js";
2
+ import { context } from "./state/Context.js";
3
+ export async function run(runic, config) {
4
+ const { promise, resolve, reject } = Promise.withResolvers();
5
+ if (config.signal) {
6
+ if (config.signal.aborted) {
7
+ reject(config.signal.reason);
8
+ return await promise;
9
+ }
10
+ else {
11
+ config.signal.addEventListener("abort", () => {
12
+ reject(config.signal?.reason);
13
+ });
14
+ }
15
+ }
16
+ queueMicrotask(() => context.fork(async () => {
17
+ const iterator = Runic.unwrap(runic);
18
+ let nextArg;
19
+ try {
20
+ let current = await iterator.next(config);
21
+ while (!current.done) {
22
+ const rune = current.value;
23
+ nextArg = await rune(config);
24
+ current = await iterator.next(nextArg);
25
+ }
26
+ const { value } = current;
27
+ resolve(value);
28
+ }
29
+ catch (reason) {
30
+ reject(reason);
31
+ }
32
+ }));
33
+ return await promise;
34
+ }
35
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,KAAQ,EACR,MAA+B;IAE/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAc,CAAA;IACxE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC5B,OAAO,MAAM,OAAO,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC/B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,cAAc,CAAC,GAAG,EAAE,CAClB,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,OAAY,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACzC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAA;gBAC1B,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC5B,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxC,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;YACzB,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;QAAC,OAAO,MAAe,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,MAAM,OAAO,CAAA;AACtB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { StateMap } from "./StateMap";
3
+ declare class Context extends AsyncLocalStorage<StateMap> {
4
+ get(): StateMap;
5
+ fork<T>(f: () => Promise<T>): Promise<T>;
6
+ }
7
+ export declare const context: Context;
8
+ export {};
@@ -0,0 +1,17 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { StateMap } from "./StateMap";
3
+ class Context extends AsyncLocalStorage {
4
+ get() {
5
+ let state = this.getStore();
6
+ if (!state) {
7
+ state = new StateMap();
8
+ this.enterWith(state);
9
+ }
10
+ return state;
11
+ }
12
+ fork(f) {
13
+ return this.run(this.get(), f);
14
+ }
15
+ }
16
+ export const context = new Context();
17
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../state/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,MAAM,OAAQ,SAAQ,iBAA2B;IAC/C,GAAG;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAA;YACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAI,CAAmB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAChC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import type { Message } from "../Message.ts";
2
2
  export declare class MessageRegistry {
3
+ static make(messageRegistry?: MessageRegistry): MessageRegistry;
3
4
  messages: Array<Message>;
4
5
  constructor(messages?: Iterable<Message>);
5
6
  clone(): MessageRegistry;
@@ -1,5 +1,8 @@
1
1
  // TODO: marks and tags
2
2
  export class MessageRegistry {
3
+ static make(messageRegistry) {
4
+ return new MessageRegistry(messageRegistry?.messages ? [...messageRegistry?.messages] : undefined);
5
+ }
3
6
  messages;
4
7
  constructor(messages = []) {
5
8
  this.messages = Array.from(messages);
@@ -1 +1 @@
1
- {"version":3,"file":"MessageRegistry.js","sourceRoot":"","sources":["../../state/MessageRegistry.ts"],"names":[],"mappings":"AAEA,uBAAuB;AACvB,MAAM,OAAO,eAAe;IAC1B,QAAQ,CAAgB;IACxB,YAAY,WAA8B,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,OAAgB;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;CACF"}
1
+ {"version":3,"file":"MessageRegistry.js","sourceRoot":"","sources":["../../state/MessageRegistry.ts"],"names":[],"mappings":"AAEA,uBAAuB;AACvB,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,IAAI,CAAC,eAAiC;QAC3C,OAAO,IAAI,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACpG,CAAC;IAED,QAAQ,CAAgB;IACxB,YAAY,WAA8B,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,OAAgB;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;CACF"}
@@ -1,6 +1,7 @@
1
1
  import type { Model } from "../Model.ts";
2
2
  /** An intrusive list for storing `Model`s. */
3
3
  export declare class ModelRegistry {
4
+ static make(modelRegistry?: ModelRegistry): ModelRegistry;
4
5
  head?: ModelRegistryNode | undefined;
5
6
  tail?: ModelRegistryNode | undefined;
6
7
  clone(): ModelRegistry;
@@ -1,5 +1,14 @@
1
1
  /** An intrusive list for storing `Model`s. */
2
2
  export class ModelRegistry {
3
+ static make(modelRegistry) {
4
+ const instance = new ModelRegistry();
5
+ if (modelRegistry) {
6
+ for (let node = modelRegistry.head; node; node = node.next) {
7
+ instance.register(node.model);
8
+ }
9
+ }
10
+ return instance;
11
+ }
3
12
  clone() {
4
13
  const clone = new ModelRegistry();
5
14
  for (let node = this?.head; node; node = node.next) {
@@ -1 +1 @@
1
- {"version":3,"file":"ModelRegistry.js","sourceRoot":"","sources":["../../state/ModelRegistry.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,OAAO,aAAa;IAIxB,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;QACjC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAA;IACzB,CAAC;IAED,QAAQ,CAAC,KAAY;QACnB,MAAM,IAAI,GAAsB;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,KAAK;SACb,CAAA;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,IAAuB;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"ModelRegistry.js","sourceRoot":"","sources":["../../state/ModelRegistry.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,OAAO,aAAa;IACxB,MAAM,CAAC,IAAI,CAAC,aAA6B;QACvC,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3D,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAKD,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;QACjC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAA;IACzB,CAAC;IAED,QAAQ,CAAC,KAAY;QACnB,MAAM,IAAI,GAAsB;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,KAAK;SACb,CAAA;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,IAAuB;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;IACnC,CAAC;CACF"}
@@ -1,7 +1,8 @@
1
- export declare class StateMap extends Map<StateConstructor<Cloneable>, Cloneable> {
1
+ export declare class StateMap extends Map<StateFactory, Cloneable> {
2
2
  clone(): StateMap;
3
+ getOrInit<T extends Cloneable>(factory: StateFactory<T>): T;
3
4
  }
4
- export type StateConstructor<T extends Cloneable = Cloneable> = new () => T;
5
+ export type StateFactory<T = any> = (instance?: T) => T;
5
6
  export interface Cloneable {
6
7
  clone(): this;
7
8
  }
@@ -6,5 +6,13 @@ export class StateMap extends Map {
6
6
  }
7
7
  return clone;
8
8
  }
9
+ getOrInit(factory) {
10
+ let instance = this.get(factory);
11
+ if (!instance) {
12
+ instance = factory();
13
+ this.set(factory, instance);
14
+ }
15
+ return instance;
16
+ }
9
17
  }
10
18
  //# sourceMappingURL=StateMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StateMap.js","sourceRoot":"","sources":["../../state/StateMap.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,GAA2C;IACvE,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"StateMap.js","sourceRoot":"","sources":["../../state/StateMap.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,GAA4B;IACxD,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QAC/B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS,CAAsB,OAAwB;QACrD,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,OAAO,EAAE,CAAA;YACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,QAAiB,CAAA;IAC1B,CAAC;CACF"}