liminal 0.5.4 → 0.5.6

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 (117) hide show
  1. package/Agent.ts +24 -16
  2. package/CHANGELOG.md +12 -0
  3. package/Context.ts +52 -0
  4. package/EventBase.ts +21 -8
  5. package/Fiber.ts +44 -57
  6. package/Handler.ts +6 -0
  7. package/L/L.ts +0 -3
  8. package/L/_infer.ts +14 -21
  9. package/L/_message.ts +6 -4
  10. package/L/branch.ts +15 -33
  11. package/L/emit.ts +10 -2
  12. package/L/model.ts +11 -6
  13. package/L/rune.ts +2 -2
  14. package/LEvent.ts +25 -21
  15. package/MessageRegistry.ts +21 -0
  16. package/{state/ModelRegistry.ts → ModelRegistry.ts} +17 -18
  17. package/Rune.ts +2 -2
  18. package/Runic.ts +11 -3
  19. package/RuntimeEvent.ts +6 -0
  20. package/dist/Agent.d.ts +11 -7
  21. package/dist/Agent.js +11 -8
  22. package/dist/Agent.js.map +1 -1
  23. package/dist/Context.d.ts +12 -0
  24. package/dist/Context.js +41 -0
  25. package/dist/Context.js.map +1 -0
  26. package/dist/EventBase.d.ts +7 -4
  27. package/dist/EventBase.js +17 -11
  28. package/dist/EventBase.js.map +1 -1
  29. package/dist/Fiber.d.ts +7 -19
  30. package/dist/Fiber.js +38 -34
  31. package/dist/Fiber.js.map +1 -1
  32. package/dist/Handler.d.ts +4 -1
  33. package/dist/Handler.js +2 -1
  34. package/dist/Handler.js.map +1 -1
  35. package/dist/L/L.d.ts +0 -3
  36. package/dist/L/L.js +0 -3
  37. package/dist/L/L.js.map +1 -1
  38. package/dist/L/_infer.js +15 -18
  39. package/dist/L/_infer.js.map +1 -1
  40. package/dist/L/_message.js +6 -4
  41. package/dist/L/_message.js.map +1 -1
  42. package/dist/L/branch.js +13 -32
  43. package/dist/L/branch.js.map +1 -1
  44. package/dist/L/emit.js +10 -2
  45. package/dist/L/emit.js.map +1 -1
  46. package/dist/L/model.d.ts +2 -1
  47. package/dist/L/model.js +10 -5
  48. package/dist/L/model.js.map +1 -1
  49. package/dist/L/rune.d.ts +2 -2
  50. package/dist/L/rune.js +1 -0
  51. package/dist/L/rune.js.map +1 -1
  52. package/dist/LEvent.d.ts +55 -10
  53. package/dist/LEvent.js +17 -16
  54. package/dist/LEvent.js.map +1 -1
  55. package/dist/MessageRegistry.d.ts +9 -0
  56. package/dist/MessageRegistry.js +15 -0
  57. package/dist/MessageRegistry.js.map +1 -0
  58. package/dist/{state/ModelRegistry.d.ts → ModelRegistry.d.ts} +4 -3
  59. package/dist/{state/ModelRegistry.js → ModelRegistry.js} +12 -13
  60. package/dist/ModelRegistry.js.map +1 -0
  61. package/dist/Rune.d.ts +2 -2
  62. package/dist/Runic.d.ts +3 -3
  63. package/dist/Runic.js.map +1 -1
  64. package/dist/RuntimeEvent.d.ts +5 -0
  65. package/dist/RuntimeEvent.js +2 -0
  66. package/dist/RuntimeEvent.js.map +1 -0
  67. package/dist/index.d.ts +3 -4
  68. package/dist/index.js +3 -4
  69. package/dist/index.js.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/index.ts +3 -4
  72. package/package.json +1 -1
  73. package/Globals.ts +0 -10
  74. package/L/all.ts +0 -11
  75. package/L/fork.ts +0 -20
  76. package/L/join.ts +0 -9
  77. package/L/namespace.ts +0 -11
  78. package/L/self.ts +0 -13
  79. package/dist/Globals.d.ts +0 -6
  80. package/dist/Globals.js +0 -2
  81. package/dist/Globals.js.map +0 -1
  82. package/dist/L/all.d.ts +0 -7
  83. package/dist/L/all.js +0 -5
  84. package/dist/L/all.js.map +0 -1
  85. package/dist/L/fork.d.ts +0 -1
  86. package/dist/L/fork.js +0 -20
  87. package/dist/L/fork.js.map +0 -1
  88. package/dist/L/join.d.ts +0 -5
  89. package/dist/L/join.js +0 -5
  90. package/dist/L/join.js.map +0 -1
  91. package/dist/L/namespace.d.ts +0 -1
  92. package/dist/L/namespace.js +0 -12
  93. package/dist/L/namespace.js.map +0 -1
  94. package/dist/L/self.d.ts +0 -6
  95. package/dist/L/self.js +0 -7
  96. package/dist/L/self.js.map +0 -1
  97. package/dist/run.d.ts +0 -3
  98. package/dist/run.js +0 -35
  99. package/dist/run.js.map +0 -1
  100. package/dist/state/Context.d.ts +0 -8
  101. package/dist/state/Context.js +0 -17
  102. package/dist/state/Context.js.map +0 -1
  103. package/dist/state/MessageRegistry.d.ts +0 -8
  104. package/dist/state/MessageRegistry.js +0 -17
  105. package/dist/state/MessageRegistry.js.map +0 -1
  106. package/dist/state/ModelConfig.d.ts +0 -49
  107. package/dist/state/ModelConfig.js +0 -18
  108. package/dist/state/ModelConfig.js.map +0 -1
  109. package/dist/state/ModelRegistry.js.map +0 -1
  110. package/dist/state/StateMap.d.ts +0 -8
  111. package/dist/state/StateMap.js +0 -18
  112. package/dist/state/StateMap.js.map +0 -1
  113. package/run.ts +0 -39
  114. package/state/Context.ts +0 -19
  115. package/state/MessageRegistry.ts +0 -21
  116. package/state/ModelConfig.ts +0 -49
  117. package/state/StateMap.ts +0 -24
package/Runic.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  import type { Rune } from "./Rune.ts"
2
2
 
3
3
  export type RuneIterator<Y extends Rune = Rune, T = any> = Iterator<Y, T> | AsyncIterator<Y, T>
4
- export type RuneIterable<Y extends Rune, T> = Iterable<Y, T> | AsyncIterable<Y, T>
4
+ export type RuneIterable<Y extends Rune = Rune, T = any> = Iterable<Y, T> | AsyncIterable<Y, T>
5
5
  export type Runic<Y extends Rune = Rune, T = any> = RuneIterable<Y, T> | (() => RuneIterable<Y, T>)
6
+
6
7
  export namespace Runic {
7
- export type Y<R extends Runic> = R extends Runic<infer Y> ? Y : never
8
- export type T<R extends Runic> = R extends Runic<Rune, infer T> ? T : never
8
+ export type Y<X extends Runic> = X extends RuneIterable<infer Y> ? Y
9
+ : X extends () => RuneIterable<infer Y> ? Y
10
+ : X extends RuneIterator<infer Y> ? Y
11
+ : never
12
+
13
+ export type T<X extends Runic> = X extends RuneIterable<Rune, infer T> ? T
14
+ : X extends () => RuneIterable<Rune, infer T> ? T
15
+ : X extends RuneIterator<Rune, infer T> ? T
16
+ : never
9
17
 
10
18
  export function unwrap<Y extends Rune, T>(runic: Runic<Y, T>): RuneIterator<Y, T> {
11
19
  if (Symbol.iterator in runic) {
@@ -0,0 +1,6 @@
1
+ import type { Fiber, FiberInfo } from "./Fiber.ts"
2
+
3
+ export interface RuntimeEvent<E> extends FiberInfo {
4
+ readonly parent?: FiberInfo
5
+ readonly event: E
6
+ }
package/dist/Agent.d.ts CHANGED
@@ -1,12 +1,16 @@
1
- import type { FiberInfo } from "./Fiber.ts";
2
- import type { Rune, RuneKey } from "./Rune.ts";
1
+ import { MessageRegistry } from "./MessageRegistry.ts";
2
+ import { ModelRegistry } from "./ModelRegistry.ts";
3
+ import type { Rune } from "./Rune.ts";
3
4
  import type { Runic } from "./Runic.ts";
5
+ import type { RuntimeEvent } from "./RuntimeEvent.ts";
6
+ export interface AgentConfig<E> {
7
+ handler?: ((event: RuntimeEvent<E>) => void) | undefined;
8
+ models?: ModelRegistry;
9
+ messages?: MessageRegistry;
10
+ signal?: AbortSignal | undefined;
11
+ }
4
12
  export interface Agent<out T, out E> extends PromiseLike<T> {
5
13
  T: T;
6
14
  E: E;
7
15
  }
8
- export declare function Agent<Y extends Rune, T>(runic: Runic<Y, T>, config?: AgentConfig<Y, T>): Agent<T, Rune.E<Y>>;
9
- export interface AgentConfig<Y extends Rune, _T> {
10
- handler: (event: Y[RuneKey], info: FiberInfo) => void;
11
- signal?: AbortSignal;
12
- }
16
+ export declare function Agent<Y extends Rune, T>(runic: Runic<Y, T>, config?: AgentConfig<Rune.E<Y>>): Agent<T, Rune.E<Y>>;
package/dist/Agent.js CHANGED
@@ -1,14 +1,17 @@
1
- import { run } from "./run.js";
1
+ import { Context } from "./Context.js";
2
+ import { Fiber } from "./Fiber.js";
3
+ import { HandlerContext } from "./Handler.js";
4
+ import { MessageRegistry, MessageRegistryContext } from "./MessageRegistry.js";
5
+ import { ModelRegistry, ModelRegistryContext } from "./ModelRegistry.js";
2
6
  export function Agent(runic, config) {
3
7
  return {
4
8
  then(onfulfilled, onrejected) {
5
- return run(runic, {
6
- T: null,
7
- globals: {
8
- handler: config?.handler ?? (() => { }),
9
- },
10
- signal: config?.signal,
11
- }).then(onfulfilled, onrejected);
9
+ const rootCtx = new Context([
10
+ [HandlerContext, config?.handler],
11
+ [ModelRegistryContext, config?.models ?? new ModelRegistry()],
12
+ [MessageRegistryContext, config?.messages ?? new MessageRegistry()],
13
+ ]);
14
+ return rootCtx.run(() => Fiber(runic).resolve().then(onfulfilled, onrejected));
12
15
  },
13
16
  };
14
17
  }
package/dist/Agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../Agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAS9B,MAAM,UAAU,KAAK,CAAoB,KAAkB,EAAE,MAA0B;IACrF,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,UAAU;YAC1B,OAAO,GAAG,CAAC,KAAK,EAAE;gBAChB,CAAC,EAAE,IAAK;gBACR,OAAO,EAAE;oBACP,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;iBACvC;gBACD,MAAM,EAAE,MAAM,EAAE,MAAM;aACvB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAClC,CAAC;KACsD,CAAA;AAC3D,CAAC"}
1
+ {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../Agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAiBxE,MAAM,UAAU,KAAK,CACnB,KAAkB,EAClB,MAA+B;IAE/B,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,UAAU;YAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;gBAC1B,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;gBACjC,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC7D,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAC;aACpE,CAAC,CAAA;YACF,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAA;QAChF,CAAC;KACsD,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare class Context extends Map<ContextHandle, unknown> {
2
+ static ensure(): Context;
3
+ get<V>(context: ContextHandle<V>): V | undefined;
4
+ getOrInit<V>(context: ContextHandle<V>, init: () => V): V;
5
+ set<V>(context: ContextHandle<V>, value: V): this;
6
+ run<R>(callback: () => R): R;
7
+ clone(overrides?: Iterable<[ContextHandle, unknown]>): Context;
8
+ }
9
+ export type ContextHandle<V = any> = {
10
+ clone?: ((value: V) => V) | undefined;
11
+ };
12
+ export declare function ContextHandle<V>(clone?: (value: V) => V): ContextHandle<V>;
@@ -0,0 +1,41 @@
1
+ import { assert } from "liminal-util";
2
+ import { AsyncLocalStorage } from "node:async_hooks";
3
+ const storage = new AsyncLocalStorage();
4
+ export class Context extends Map {
5
+ static ensure() {
6
+ const context = storage.getStore();
7
+ assert(context);
8
+ return context;
9
+ }
10
+ get(context) {
11
+ return super.get(context);
12
+ }
13
+ getOrInit(context, init) {
14
+ if (this.has(context)) {
15
+ return this.get(context);
16
+ }
17
+ const instance = init();
18
+ this.set(context, instance);
19
+ return instance;
20
+ }
21
+ set(context, value) {
22
+ super.set(context, value);
23
+ return this;
24
+ }
25
+ run(callback) {
26
+ return storage.run(this, callback);
27
+ }
28
+ clone(overrides) {
29
+ const context = new Context(overrides);
30
+ for (const [handle, value] of this.entries()) {
31
+ if (!context.has(handle)) {
32
+ context.set(handle, handle.clone?.(value) ?? value);
33
+ }
34
+ }
35
+ return context;
36
+ }
37
+ }
38
+ export function ContextHandle(clone) {
39
+ return { clone };
40
+ }
41
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAW,CAAA;AAEhD,MAAM,OAAO,OAAQ,SAAQ,GAA2B;IACtD,MAAM,CAAC,MAAM;QACX,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAClC,MAAM,CAAC,OAAO,CAAC,CAAA;QACf,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,GAAG,CAAI,OAAyB;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAU,CAAA;IACpC,CAAC;IAED,SAAS,CAAI,OAAyB,EAAE,IAAa;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAM,CAAA;QAC/B,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,GAAG,CAAI,OAAyB,EAAE,KAAQ;QACxC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAI,QAAiB;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,SAA8C;QAClD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;QACtC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAMD,MAAM,UAAU,aAAa,CAAI,KAAuB;IACtD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC"}
@@ -1,7 +1,10 @@
1
- import { inspect, type InspectOptions } from "node:util";
2
- export declare abstract class EventBase<B extends symbol, K extends string> {
1
+ export interface EventBase<B extends symbol = symbol, K extends string = string> {
3
2
  readonly brand: B;
4
3
  readonly type: K;
5
- constructor(brand: B, type: K);
6
- [inspect.custom](depth: number, options: InspectOptions): string;
7
4
  }
5
+ export declare function EventBase<B extends symbol, K extends string>(brand: B, type: K): {
6
+ new (): {
7
+ readonly brand: B;
8
+ readonly type: K;
9
+ };
10
+ };
package/dist/EventBase.js CHANGED
@@ -1,14 +1,20 @@
1
1
  import { inspect } from "node:util";
2
- export class EventBase {
3
- brand;
4
- type;
5
- constructor(brand, type) {
6
- this.brand = brand;
7
- this.type = type;
8
- }
9
- [inspect.custom](depth, options) {
10
- const { brand: _0, type: _1, ...rest } = this;
11
- return `${this.constructor.name} ` + inspect(rest, { ...options, depth });
12
- }
2
+ export function EventBase(brand, type) {
3
+ return class {
4
+ brand = brand;
5
+ type = type;
6
+ // Allows us to circumvent a false positive ts error related to private symbols.
7
+ // https://github.com/microsoft/TypeScript/issues/58496
8
+ static {
9
+ Object.defineProperties(this.prototype, {
10
+ [inspect.custom]: {
11
+ value(depth, options) {
12
+ const { brand: _0, type: _1, ...rest } = this;
13
+ return `${this.constructor.name} ` + inspect(rest, { ...options, depth });
14
+ },
15
+ },
16
+ });
17
+ }
18
+ };
13
19
  }
14
20
  //# sourceMappingURL=EventBase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventBase.js","sourceRoot":"","sources":["../EventBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAA;AAExD,MAAM,OAAgB,SAAS;IAElB;IACA;IAFX,YACW,KAAQ,EACR,IAAO;QADP,UAAK,GAAL,KAAK,CAAG;QACR,SAAI,GAAJ,IAAI,CAAG;IACf,CAAC;IAEJ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,OAAuB;QACrD,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;QAC7C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"EventBase.js","sourceRoot":"","sources":["../EventBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAA;AAOxD,MAAM,UAAU,SAAS,CAAqC,KAAQ,EAAE,IAAO;IAC7E,OAAO;QACI,KAAK,GAAG,KAAK,CAAA;QACb,IAAI,GAAG,IAAI,CAAA;QAEpB,gFAAgF;QAChF,uDAAuD;QACvD;YACE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE;gBACtC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAChB,KAAK,CAAC,KAAa,EAAE,OAAuB;wBAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;wBAC7C,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC3E,CAAC;iBACF;aACF,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC"}
package/dist/Fiber.d.ts CHANGED
@@ -1,24 +1,12 @@
1
- import type { Globals } from "./Globals.ts";
2
1
  import type { Rune } from "./Rune.ts";
3
2
  import { Runic } from "./Runic.ts";
4
- import type { StateMap } from "./state/StateMap.ts";
5
- export interface Fiber<out T = any> {
6
- T: T;
7
- runic: Runic<Rune, T>;
8
- globals: Globals;
9
- parent: Fiber<any> | undefined;
10
- fiberId: number;
11
- handler<E>(event: E): void;
12
- run(): Promise<T>;
13
- }
14
3
  export interface FiberInfo {
15
- fiber: number;
16
- timestamp: number;
4
+ readonly index: number;
5
+ readonly parent?: FiberInfo;
17
6
  }
18
- export interface FiberConfig<T = any> {
19
- T: T;
20
- signal?: AbortSignal | undefined;
21
- globals: Globals;
22
- state?: StateMap | undefined;
7
+ export interface Fiber<T = any> {
8
+ parent?: Fiber | undefined;
9
+ info: FiberInfo;
10
+ resolve(): Promise<T>;
23
11
  }
24
- export declare function handler<E>(fiberConfig: FiberConfig, event: E): void;
12
+ export declare function Fiber<T = any>(runic: Runic<Rune, T>, parent?: Fiber): Fiber<T>;
package/dist/Fiber.js CHANGED
@@ -1,37 +1,41 @@
1
- import { assert } from "liminal-util";
2
- import { FiberCreated, FiberResolved, FiberStarted } from "./LEvent.js";
1
+ import { Context } from "./Context.js";
3
2
  import { Runic } from "./Runic.js";
4
- let nextFiberId = 0;
5
- export function handler(fiberConfig, event) {
6
- fiberConfig.globals.handler(event, {
7
- // fiber: fiberConfig.fiberId,
8
- timestamp: Date.now(),
9
- });
3
+ let nextIndex = 0;
4
+ export function Fiber(runic, parent) {
5
+ let index = nextIndex++;
6
+ let pending;
7
+ const context = Context.ensure();
8
+ return {
9
+ parent,
10
+ info: {
11
+ index,
12
+ ...parent && { parent: parent.info },
13
+ },
14
+ resolve,
15
+ };
16
+ function resolve() {
17
+ if (!pending) {
18
+ const { promise, resolve, reject } = Promise.withResolvers();
19
+ pending = promise;
20
+ const iterator = Runic.unwrap(runic);
21
+ let nextArg;
22
+ context.run(async () => {
23
+ try {
24
+ let current = await iterator.next();
25
+ while (!current.done) {
26
+ const rune = current.value;
27
+ nextArg = await rune(this);
28
+ current = await iterator.next(nextArg);
29
+ }
30
+ const { value } = current;
31
+ resolve(value);
32
+ }
33
+ catch (error) {
34
+ reject(error);
35
+ }
36
+ });
37
+ }
38
+ return pending;
39
+ }
10
40
  }
11
- // export interface FiberConfig<T> {
12
- // parent?: Fiber<any>
13
- // globals: Globals
14
- // runic: Runic<Rune, T>
15
- // signal?: AbortSignal | undefined
16
- // }
17
- // export function Fiber<T>(config: FiberConfig<T>): Fiber<T> {
18
- // const fiber = {
19
- // runic: config.runic,
20
- // globals: config.globals,
21
- // parent: config.parent,
22
- // fiberId: nextFiberId++,
23
- // handler,
24
- // run,
25
- // } satisfies Omit<Fiber<T>, "T"> as Fiber<T>
26
- // fiber.handler(new FiberCreated())
27
- // return fiber
28
- // async function run(this: Fiber<T>): Promise<T> {
29
- // fiber.handler(new FiberStarted())
30
- // const iterator = Runic.unwrap(this.runic)
31
- // const result = await iterator.next()
32
- // assert(result.done)
33
- // fiber.handler(new FiberResolved(result.value))
34
- // return result.value
35
- // }
36
- // }
37
41
  //# sourceMappingURL=Fiber.js.map
package/dist/Fiber.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Fiber.js","sourceRoot":"","sources":["../Fiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBlC,IAAI,WAAW,GAAG,CAAC,CAAA;AASnB,MAAM,UAAU,OAAO,CAAI,WAAwB,EAAE,KAAQ;IAC3D,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;QACjC,8BAA8B;QAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAA;AACJ,CAAC;AAED,oCAAoC;AACpC,wBAAwB;AACxB,qBAAqB;AACrB,0BAA0B;AAC1B,qCAAqC;AACrC,IAAI;AAEJ,+DAA+D;AAC/D,oBAAoB;AACpB,2BAA2B;AAC3B,+BAA+B;AAC/B,6BAA6B;AAC7B,8BAA8B;AAC9B,eAAe;AACf,WAAW;AACX,gDAAgD;AAEhD,sCAAsC;AACtC,iBAAiB;AAEjB,qDAAqD;AACrD,wCAAwC;AACxC,gDAAgD;AAChD,2CAA2C;AAC3C,0BAA0B;AAC1B,qDAAqD;AACrD,0BAA0B;AAC1B,MAAM;AACN,IAAI"}
1
+ {"version":3,"file":"Fiber.js","sourceRoot":"","sources":["../Fiber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOlC,IAAI,SAAS,GAAG,CAAC,CAAA;AAQjB,MAAM,UAAU,KAAK,CAAU,KAAqB,EAAE,MAAc;IAClE,IAAI,KAAK,GAAG,SAAS,EAAE,CAAA;IACvB,IAAI,OAA+B,CAAA;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,OAAO;QACL,MAAM;QACN,IAAI,EAAE;YACJ,KAAK;YACL,GAAG,MAAM,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;SACrC;QACD,OAAO;KACR,CAAA;IAED,SAAS,OAAO;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAK,CAAA;YAC/D,OAAO,GAAG,OAAO,CAAA;YACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACpC,IAAI,OAAgB,CAAA;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACrB,IAAI,CAAC;oBACH,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;oBACnC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;wBACrB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAA;wBAC1B,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1B,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACxC,CAAC;oBACD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;oBACzB,OAAO,CAAC,KAAK,CAAC,CAAA;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAA;gBACf,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC"}
package/dist/Handler.d.ts CHANGED
@@ -1 +1,4 @@
1
- export {};
1
+ import { ContextHandle } from "./Context.ts";
2
+ import type { RuntimeEvent } from "./RuntimeEvent.ts";
3
+ export type Handler<E = any> = [(event: RuntimeEvent<E>) => void][0];
4
+ export declare const HandlerContext: ContextHandle<Handler | undefined>;
package/dist/Handler.js CHANGED
@@ -1,2 +1,3 @@
1
- export {};
1
+ import { ContextHandle } from "./Context.js";
2
+ export const HandlerContext = ContextHandle();
2
3
  //# sourceMappingURL=Handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Handler.js","sourceRoot":"","sources":["../Handler.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"Handler.js","sourceRoot":"","sources":["../Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAK5C,MAAM,CAAC,MAAM,cAAc,GAAuC,aAAa,EAAE,CAAA"}
package/dist/L/L.d.ts CHANGED
@@ -4,9 +4,6 @@ export * from "./_message.ts";
4
4
  export * from "./assistant.ts";
5
5
  export * from "./branch.ts";
6
6
  export * from "./emit.ts";
7
- export * from "./fork.ts";
8
- export * from "./join.ts";
9
7
  export * from "./model.ts";
10
- export * from "./self.ts";
11
8
  export * from "./system.ts";
12
9
  export * from "./user.ts";
package/dist/L/L.js CHANGED
@@ -4,10 +4,7 @@ export * from "./_message.js";
4
4
  export * from "./assistant.js";
5
5
  export * from "./branch.js";
6
6
  export * from "./emit.js";
7
- export * from "./fork.js";
8
- export * from "./join.js";
9
7
  export * from "./model.js";
10
- export * from "./self.js";
11
8
  export * from "./system.js";
12
9
  export * from "./user.js";
13
10
  //# sourceMappingURL=L.js.map
package/dist/L/L.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"L.js","sourceRoot":"","sources":["../../L/L.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"L.js","sourceRoot":"","sources":["../../L/L.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
package/dist/L/_infer.js CHANGED
@@ -1,32 +1,29 @@
1
1
  import { assert } from "liminal-util";
2
+ import { Context, ContextHandle } from "../Context.js";
2
3
  import { InferenceRequested, Inferred } from "../LEvent.js";
3
- import { context } from "../state/Context.js";
4
- import { MessageRegistry } from "../state/MessageRegistry.js";
5
- import { ModelRegistry } from "../state/ModelRegistry.js";
4
+ import { MessageRegistryContext } from "../MessageRegistry.js";
5
+ import { ModelRegistryContext } from "../ModelRegistry.js";
6
6
  import { emit } from "./emit.js";
7
7
  import { rune } from "./rune.js";
8
8
  export function* _infer(schema) {
9
- const state = context.get();
10
- const modelRegistry = state.getOrInit(ModelRegistry.make);
9
+ const context = Context.ensure();
10
+ const modelRegistry = context.get(ModelRegistryContext);
11
+ assert(modelRegistry);
11
12
  const model = modelRegistry.peek();
12
- const messageRegistry = state.getOrInit(MessageRegistry.make);
13
- const counter = state.getOrInit(InferenceRequestCounter);
14
13
  assert(model);
15
- const requestId = counter.next();
14
+ const requestId = context.getOrInit(InferenceRequestCounterContext, () => new InferenceRequestCounter()).next();
16
15
  yield* emit(new InferenceRequested(requestId, schema));
16
+ const messageRegistry = context.get(MessageRegistryContext);
17
+ assert(messageRegistry);
17
18
  const inference = yield* rune(() => model.resolve(messageRegistry.messages, schema));
18
19
  yield* emit(new Inferred(requestId, inference));
19
20
  return inference;
20
21
  }
21
- function InferenceRequestCounter(instance) {
22
- return {
23
- count: instance?.count ?? 0,
24
- next() {
25
- return this.count++;
26
- },
27
- clone() {
28
- return InferenceRequestCounter(this);
29
- },
30
- };
22
+ class InferenceRequestCounter {
23
+ count = 0;
24
+ next() {
25
+ return this.count++;
26
+ }
31
27
  }
28
+ const InferenceRequestCounterContext = ContextHandle();
32
29
  //# sourceMappingURL=_infer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_infer.js","sourceRoot":"","sources":["../../L/_infer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAA;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,MAAqB;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACzD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;IACxD,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAChC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IACpF,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAC/C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAkB;IACjD,OAAO;QACL,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;QAC3B,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,KAAK;YACH,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"_infer.js","sourceRoot":"","sources":["../../L/_infer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,MAAqB;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/G,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,CAAC,CAAA;IACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IACpF,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAC/C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,uBAAuB;IAC3B,KAAK,GAAW,CAAC,CAAA;IACjB,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAED,MAAM,8BAA8B,GAA2C,aAAa,EAAE,CAAA"}
@@ -1,10 +1,12 @@
1
+ import { assert } from "liminal-util";
2
+ import { Context } from "../Context.js";
1
3
  import { MessageAppended } from "../LEvent.js";
2
- import { context } from "../state/Context.js";
3
- import { MessageRegistry } from "../state/MessageRegistry.js";
4
+ import { MessageRegistryContext } from "../MessageRegistry.js";
4
5
  import { emit } from "./emit.js";
5
6
  export function* _message(role, content) {
6
- const state = context.get();
7
- const messageRegistry = state.getOrInit(MessageRegistry.make);
7
+ const context = Context.ensure();
8
+ const messageRegistry = context.get(MessageRegistryContext);
9
+ assert(messageRegistry);
8
10
  const message = { role, content };
9
11
  yield* emit(new MessageAppended(message));
10
12
  messageRegistry.append(message);
@@ -1 +1 @@
1
- {"version":3,"file":"_message.js","sourceRoot":"","sources":["../../L/_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,cAAc,CAAA;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAiB,EAAE,OAA2B;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAC3B,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1C,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;IACzC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"_message.js","sourceRoot":"","sources":["../../L/_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAe,eAAe,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAiB,EAAE,OAA2B;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,CAAC,CAAA;IACvB,MAAM,OAAO,GAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1C,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;IACzC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC"}
package/dist/L/branch.js CHANGED
@@ -1,41 +1,22 @@
1
- import { run } from "../run.js";
1
+ import { Context } from "../Context.js";
2
+ import { Fiber } from "../Fiber.js";
2
3
  import {} from "../Rune.js";
3
- import { context } from "../state/Context.js";
4
4
  import { rune } from "./rune.js";
5
- import { self } from "./self.js";
6
5
  export function* branch(value) {
7
- const parent = yield* self;
8
- const { globals } = parent;
6
+ const context = Context.ensure();
7
+ const parent = yield* rune((fiber) => fiber);
9
8
  if (Array.isArray(value)) {
10
- const runners = value.map((runic) => {
11
- const state = context.get();
12
- const fiberConfig = {
13
- T: null,
14
- globals,
15
- state,
16
- };
17
- return () => run(runic, fiberConfig);
18
- });
19
- return yield* rune(() => Promise.all(runners.map((runner) => runner())));
9
+ const fibers = value.map((runic) => context.clone().run(() => Fiber(runic, parent)));
10
+ return yield* rune(() => Promise.all(fibers.map(({ resolve }) => resolve())));
20
11
  }
21
12
  else if (typeof value === "object") {
22
- const runners = Object.entries(value).map(([key, runic]) => {
23
- const state = context.get();
24
- const fiberConfig = {
25
- T: null,
26
- globals,
27
- state,
28
- };
29
- return async () => [key, await run(runic, fiberConfig)];
30
- });
31
- return yield* rune(() => Promise.all(runners.map((runner) => runner())).then(Object.fromEntries));
13
+ const entries = Object.entries(value);
14
+ const fibers = entries.map(([_key, runic]) => context.clone().run(() => Fiber(runic, parent)));
15
+ return yield* rune(() => Promise
16
+ .all(fibers.map(({ resolve }, i) => resolve().then((value) => [entries[i][0], value])))
17
+ .then(Object.fromEntries));
32
18
  }
33
- const state = context.get();
34
- const fiberConfig = {
35
- T: null,
36
- globals,
37
- state,
38
- };
39
- return yield* rune(() => run(typeof value === "function" ? value() : value, fiberConfig));
19
+ const fiber = context.clone().run(() => Fiber(typeof value === "function" ? value() : value, parent));
20
+ return yield* rune(() => fiber.resolve());
40
21
  }
41
22
  //# sourceMappingURL=branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../L/branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAa,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,KAAsD;IAC5E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;YAC3B,MAAM,WAAW,GAAgB;gBAC/B,CAAC,EAAE,IAAK;gBACR,OAAO;gBACP,KAAK;aACN,CAAA;YACD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACzD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;YAC3B,MAAM,WAAW,GAAgB;gBAC/B,CAAC,EAAE,IAAK;gBACR,OAAO;gBACP,KAAK;aACN,CAAA;YACD,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IACnG,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAC3B,MAAM,WAAW,GAAgB;QAC/B,CAAC,EAAE,IAAK;QACR,OAAO;QACP,KAAK;KACN,CAAA;IACD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;AAC3F,CAAC"}
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../L/branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAa,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,KAAsD;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACpF,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/E,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC9F,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACtB,OAAO;aACJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;aACvF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAC5B,CAAA;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACrG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;AAC3C,CAAC"}
package/dist/L/emit.js CHANGED
@@ -1,6 +1,14 @@
1
- import { handler } from "../Fiber.js";
1
+ import { Context } from "../Context.js";
2
+ import { HandlerContext } from "../Handler.js";
2
3
  import { rune } from "./rune.js";
3
4
  export function* emit(event) {
4
- yield* rune((fiberConfig) => handler(fiberConfig, event))();
5
+ const context = Context.ensure();
6
+ const handler = context.get(HandlerContext);
7
+ const fiber = yield* rune((fiber) => fiber);
8
+ handler?.({
9
+ ...fiber.info,
10
+ ...fiber.parent && { parent: fiber.parent.info },
11
+ event,
12
+ });
5
13
  }
6
14
  //# sourceMappingURL=emit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../L/emit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAU,KAAsB;IACnD,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAK,CAAA;AAChE,CAAC"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../L/emit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAU,KAAsB;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC3C,OAAO,EAAE,CAAC;QACR,GAAG,KAAK,CAAC,IAAI;QACb,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QAChD,KAAK;KACN,CAAC,CAAA;AACJ,CAAC"}
package/dist/L/model.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import { ModelRegistered } from "../LEvent.ts";
1
2
  import type { Model } from "../Model.ts";
2
3
  import type { Rune } from "../Rune.ts";
3
- export interface model extends Generator<Rune<never>, void> {
4
+ export interface model extends Generator<Rune<ModelRegistered>, void> {
4
5
  }
5
6
  export declare function model(model: Model): model;
package/dist/L/model.js CHANGED
@@ -1,8 +1,13 @@
1
- import { context } from "../state/Context.js";
2
- import { ModelRegistry } from "../state/ModelRegistry.js";
1
+ import { assert } from "liminal-util";
2
+ import { Context } from "../Context.js";
3
+ import { ModelRegistered } from "../LEvent.js";
4
+ import { ModelRegistryContext } from "../ModelRegistry.js";
5
+ import { emit } from "./emit.js";
3
6
  export function* model(model) {
4
- const state = context.get();
5
- const modelRegistry = state.getOrInit(ModelRegistry.make);
6
- modelRegistry.register(model);
7
+ const context = Context.ensure();
8
+ const registry = context.get(ModelRegistryContext);
9
+ assert(registry);
10
+ registry.register(model);
11
+ yield* emit(new ModelRegistered(model));
7
12
  }
8
13
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../L/model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAIzD,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,KAAY;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACzD,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../L/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,KAAY;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAClD,MAAM,CAAC,QAAQ,CAAC,CAAA;IAChB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACxB,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;AACzC,CAAC"}
package/dist/L/rune.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { FiberConfig } from "../Fiber.ts";
1
+ import { Fiber } from "../Fiber.ts";
2
2
  import { type Rune } from "../Rune.ts";
3
3
  export interface rune<T> extends Iterable<Rune<never>, T> {
4
4
  <E>(): Generator<Rune<E>, T>;
5
5
  }
6
- export declare function rune<R>(source: (fiberConfig: FiberConfig) => R): rune<Awaited<R>>;
6
+ export declare function rune<R>(source: (fiber: Fiber) => R): rune<Awaited<R>>;
package/dist/L/rune.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { Fiber } from "../Fiber.js";
1
2
  import { RuneKey } from "../Rune.js";
2
3
  export function rune(source) {
3
4
  return Object.assign(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"rune.js","sourceRoot":"","sources":["../../L/rune.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,OAAO,EAAE,MAAM,YAAY,CAAA;AAM/C,MAAM,UAAU,IAAI,CAAI,MAAuC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAClB,QAAQ,CAAC;QACP,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAW,EAAE,CAAC,CAAA;IAChE,CAAC,EACD;QACE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChB,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAW,EAAE,CAAC,CAAA;QAChE,CAAC;KACF,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"rune.js","sourceRoot":"","sources":["../../L/rune.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAa,OAAO,EAAE,MAAM,YAAY,CAAA;AAM/C,MAAM,UAAU,IAAI,CAAI,MAA2B;IACjD,OAAO,MAAM,CAAC,MAAM,CAClB,QAAQ,CAAC;QACP,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAW,EAAE,CAAC,CAAA;IAChE,CAAC,EACD;QACE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChB,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAW,EAAE,CAAC,CAAA;QAChE,CAAC;KACF,CACF,CAAA;AACH,CAAC"}