@voyantjs/core 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # @voyantjs/core
2
2
 
3
- Module system and framework primitives for Voyant. Transport-agnostic — provides the contracts, registry, container, event bus, links, query, workflows, plugins, and config shape that every Voyant module and transport adapter builds on.
3
+ Module system and framework primitives for Voyant. Transport-agnostic —
4
+ provides the contracts, registry, container, event bus, links, query,
5
+ workflows, optional plugin bundles, and config shape that every Voyant module
6
+ and transport adapter builds on.
4
7
 
5
8
  ## Install
6
9
 
@@ -18,6 +21,10 @@ import { defineVoyantConfig } from "@voyantjs/core/config"
18
21
  import { createWorkflow, step } from "@voyantjs/core/workflows"
19
22
  ```
20
23
 
24
+ In Voyant, modules, providers, extensions, and workflows are the main runtime
25
+ primitives. Plugins are optional distribution bundles that package those pieces
26
+ together for reuse across projects when a broader bundle is helpful.
27
+
21
28
  ## Exports
22
29
 
23
30
  | Entry | Description |
@@ -1,9 +1,9 @@
1
1
  /**
2
- * A lightweight module container providing per-request service resolution.
2
+ * A lightweight shared app/runtime container for explicit service resolution.
3
3
  *
4
- * Modules register services at app boot; routes resolve them per request.
5
- * The container is intentionally minimal (Map-based) — for richer DI
6
- * (scoping, factory lifetimes) a template can wrap or replace it.
4
+ * Routes, workflows, subscribers, and bootstraps use this container to resolve
5
+ * app-owned runtime services. It is intentionally minimal (Map-based) — for
6
+ * richer DI (scoping, factory lifetimes) a template can wrap or replace it.
7
7
  */
8
8
  export interface ModuleContainer {
9
9
  /** Register a service by name. Overwrites any existing registration. */
package/dist/events.d.ts CHANGED
@@ -1,7 +1,49 @@
1
+ /**
2
+ * High-level classification for public event consumers.
3
+ *
4
+ * - `domain` events represent business milestones that other modules or
5
+ * external integrations may reasonably care about.
6
+ * - `internal` events are service/process signals that remain useful for
7
+ * subscribers, diagnostics, and automation, but are not part of the core
8
+ * business language.
9
+ */
10
+ export type EventCategory = "domain" | "internal";
11
+ /**
12
+ * Where an event was emitted from. This helps consumers understand whether
13
+ * an event originated from a workflow boundary, a lower-level service, or a
14
+ * transport/runtime edge.
15
+ */
16
+ export type EventSource = "workflow" | "service" | "route" | "subscriber" | "system";
17
+ /**
18
+ * Optional metadata attached to an emitted event.
19
+ *
20
+ * Templates and adapters may extend this with runtime-specific fields such as
21
+ * correlation identifiers or delivery handles.
22
+ */
23
+ export interface EventMetadata {
24
+ category?: EventCategory;
25
+ source?: EventSource;
26
+ correlationId?: string;
27
+ causationId?: string;
28
+ [key: string]: unknown;
29
+ }
30
+ /**
31
+ * Standard event envelope delivered to subscribers.
32
+ */
33
+ export interface EventEnvelope<TData = unknown, TMetadata extends EventMetadata | undefined = EventMetadata | undefined> {
34
+ /** Event name, following the `<resource>.<pastTenseAction>` convention. */
35
+ name: string;
36
+ /** Business payload emitted by the caller. */
37
+ data: TData;
38
+ /** Optional metadata for source/taxonomy/tracing. */
39
+ metadata?: TMetadata;
40
+ /** ISO timestamp indicating when the event was emitted. */
41
+ emittedAt: string;
42
+ }
1
43
  /**
2
44
  * Event handler callback invoked when a subscribed event is emitted.
3
45
  */
4
- export type EventHandler<TData = unknown> = (data: TData) => Promise<void> | void;
46
+ export type EventHandler<TData = unknown, TMetadata extends EventMetadata | undefined = EventMetadata | undefined> = (event: EventEnvelope<TData, TMetadata>) => Promise<void> | void;
5
47
  /**
6
48
  * Subscription handle returned from {@link EventBus.subscribe}.
7
49
  *
@@ -23,9 +65,9 @@ export interface Subscription {
23
65
  */
24
66
  export interface EventBus {
25
67
  /** Emit an event. Fire-and-forget; subscribers cannot affect the emitter. */
26
- emit(event: string, data: unknown): Promise<void>;
68
+ emit<TData, TMetadata extends EventMetadata | undefined = EventMetadata | undefined>(event: string, data: TData, metadata?: TMetadata): Promise<void>;
27
69
  /** Subscribe to an event by name. Returns an unsubscribe handle. */
28
- subscribe(event: string, handler: EventHandler): Subscription;
70
+ subscribe<TData, TMetadata extends EventMetadata | undefined = EventMetadata | undefined>(event: string, handler: EventHandler<TData, TMetadata>): Subscription;
29
71
  }
30
72
  /**
31
73
  * Create an in-process event bus.
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAEjF;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,IAAI,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjD,oEAAoE;IACpE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAAA;CAC9D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA8BzC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEjD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAA;AAEpF;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAC5B,KAAK,GAAG,OAAO,EACf,SAAS,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS;IAEvE,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,EAAE,KAAK,CAAA;IACX,qDAAqD;IACrD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CACtB,KAAK,GAAG,OAAO,EACf,SAAS,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,IACrE,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,IAAI,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,IAAI,CAAC,KAAK,EAAE,SAAS,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,EACjF,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,KAAK,EACX,QAAQ,CAAC,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB,oEAAoE;IACpE,SAAS,CAAC,KAAK,EAAE,SAAS,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,EACtF,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,GACtC,YAAY,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA2CzC"}
package/dist/events.js CHANGED
@@ -9,13 +9,19 @@
9
9
  export function createEventBus() {
10
10
  const handlers = new Map();
11
11
  return {
12
- async emit(event, data) {
12
+ async emit(event, data, metadata) {
13
13
  const set = handlers.get(event);
14
14
  if (!set)
15
15
  return;
16
+ const envelope = {
17
+ name: event,
18
+ data,
19
+ emittedAt: new Date().toISOString(),
20
+ ...(metadata === undefined ? {} : { metadata }),
21
+ };
16
22
  for (const handler of set) {
17
23
  try {
18
- await handler(data);
24
+ await handler(envelope);
19
25
  }
20
26
  catch (err) {
21
27
  // Subscribers are fire-and-forget — log and continue.
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAiCA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;IAErD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI;YACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAM;YAChB,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;gBACrB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sDAAsD;oBACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAA;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QACD,SAAS,CAAC,KAAK,EAAE,OAAO;YACtB,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;gBACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC1B,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAChB,OAAO;gBACL,WAAW;oBACT,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;gBACtB,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AA4FA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;IAErD,OAAO;QACL,KAAK,CAAC,IAAI,CACR,KAAa,EACb,IAAW,EACX,QAAoB;YAEpB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAM;YAChB,MAAM,QAAQ,GAAoC;gBAChD,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;aAChD,CAAA;YACD,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sDAAsD;oBACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,IAAI,EAAE,GAAG,CAAC,CAAA;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QACD,SAAS,CACP,KAAa,EACb,OAAuC;YAEvC,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;gBACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC1B,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,OAAuB,CAAC,CAAA;YAChC,OAAO;gBACL,WAAW;oBACT,GAAG,EAAE,MAAM,CAAC,OAAuB,CAAC,CAAA;gBACtC,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,17 +3,17 @@ export { defineVoyantConfig, resolveEntry, validateVoyantConfig } from "./config
3
3
  export type { ModuleContainer } from "./container.js";
4
4
  export { createContainer } from "./container.js";
5
5
  export type { Actor, VoyantAuthContext, VoyantCallerType, VoyantPermission, VoyantVariables, } from "./env.js";
6
- export type { EventBus, EventHandler, Subscription } from "./events.js";
6
+ export type { EventBus, EventCategory, EventEnvelope, EventHandler, EventMetadata, EventSource, Subscription, } from "./events.js";
7
7
  export { createEventBus } from "./events.js";
8
8
  export { hooks } from "./hooks.js";
9
9
  export type { LinkableDefinition, LinkCardinality, LinkDefinition, LinkDefinitionOptions, LinkKeyRecord, LinkRow, LinkService, LinkSide, LinkSideInput, LinkSpec, LinkTableSql, ResolvedLinkSpec, } from "./links.js";
10
10
  export { defineLink, generateLinkTableSql, resolveLinkFromSpec } from "./links.js";
11
- export type { Extension, Module } from "./module.js";
11
+ export type { BootstrapContext, BootstrapHandler, Extension, Module } from "./module.js";
12
12
  export type { JobOptions, JobRunner } from "./orchestration.js";
13
13
  export type { Plugin, RegisteredPlugins, RegisterPluginsOptions, Subscriber, } from "./plugin.js";
14
14
  export { definePlugin, registerPlugins } from "./plugin.js";
15
- export type { EntityFetcher, EntityFetcherArgs, EntityRecord, QueryFilters, QueryGraphConfig, QueryGraphContext, QueryGraphResult, QueryPagination, } from "./query.js";
16
- export { createQueryContext, queryGraph } from "./query.js";
15
+ export type { EntityFetcher, EntityFetcherArgs, EntityRecord, QueryContextValue, QueryFilters, QueryGraphConfig, QueryGraphContext, QueryGraphResult, QueryPagination, QueryRunner, } from "./query.js";
16
+ export { createQueryContext, createQueryRunner, queryGraph } from "./query.js";
17
17
  export type { RegistryOptions } from "./registry.js";
18
18
  export { createRegistry } from "./registry.js";
19
19
  export type { StepBuilder, StepCompensateFn, StepDefinition, StepRunFn, WorkflowContext, WorkflowDefinition, WorkflowResult, WorkflowRunOptions, } from "./workflows.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,YAAY,EACV,KAAK,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC/D,YAAY,EACV,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC3D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,YAAY,EACV,KAAK,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA;AACjB,YAAY,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAClF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACxF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC/D,YAAY,EACV,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC3D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC9E,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ export { createEventBus } from "./events.js";
4
4
  export { hooks } from "./hooks.js";
5
5
  export { defineLink, generateLinkTableSql, resolveLinkFromSpec } from "./links.js";
6
6
  export { definePlugin, registerPlugins } from "./plugin.js";
7
- export { createQueryContext, queryGraph } from "./query.js";
7
+ export { createQueryContext, createQueryRunner, queryGraph } from "./query.js";
8
8
  export { createRegistry } from "./registry.js";
9
9
  export { createWorkflow, step, WorkflowError } from "./workflows.js";
10
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAShD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAelC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AASlF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAW3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAW9C,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAiBhD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAelC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AASlF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAa3D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAW9C,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/links.d.ts CHANGED
@@ -50,6 +50,19 @@ export interface LinkDefinitionOptions {
50
50
  /** Override the auto-generated right-side ID column name. */
51
51
  rightColumn?: string;
52
52
  };
53
+ /**
54
+ * Mark the link as externally-owned and non-materialized.
55
+ *
56
+ * Read-only links participate in cross-module query traversal, but they do
57
+ * not create a neutral-territory pivot table and cannot be mutated through
58
+ * the runtime link service.
59
+ */
60
+ readOnly?: {
61
+ list(filter?: {
62
+ leftId?: string;
63
+ rightId?: string;
64
+ }): Promise<LinkRow[]>;
65
+ };
53
66
  }
54
67
  export type LinkCardinality = "one-to-one" | "one-to-many" | "many-to-one" | "many-to-many";
55
68
  /**
@@ -68,6 +81,16 @@ export interface LinkDefinition {
68
81
  /** Inferred cardinality from the `isList` flags on each side. */
69
82
  cardinality: LinkCardinality;
70
83
  deleteCascade: boolean;
84
+ /**
85
+ * Read-only links are resolved from an externally-owned relation instead of
86
+ * a generated pivot table.
87
+ */
88
+ readOnly?: {
89
+ list(filter?: {
90
+ leftId?: string;
91
+ rightId?: string;
92
+ }): Promise<LinkRow[]>;
93
+ };
71
94
  }
72
95
  /**
73
96
  * Declare a link between two linkable entities.
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AAEzD,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE;QACT,oDAAoD;QACpD,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,4DAA4D;QAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KACzE,CAAA;CACF;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAA;AAE3F;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,QAAQ,CAAA;IACf,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,WAAW,EAAE,eAAe,CAAA;IAC5B,aAAa,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KACzE,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,cAAc,CAyBhB;AAwBD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,YAAY,CAmDtE;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAClD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,cAAc,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAgC5F;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1E,qDAAqD;IACrD,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAExC,8CAA8C;IAC9C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtC,8BAA8B;IAC9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAErC,wEAAwE;IACxE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CAC1F"}
package/dist/links.js CHANGED
@@ -46,6 +46,7 @@ export function defineLink(left, right, options) {
46
46
  rightColumn,
47
47
  cardinality: cardinalityFor(leftSide, rightSide),
48
48
  deleteCascade: options?.deleteCascade ?? false,
49
+ readOnly: options?.readOnly,
49
50
  };
50
51
  }
51
52
  function normalizeSide(input) {
@@ -77,6 +78,9 @@ function cardinalityFor(left, right) {
77
78
  * link's cardinality so the database enforces the relationship shape.
78
79
  */
79
80
  export function generateLinkTableSql(def) {
81
+ if (def.readOnly) {
82
+ throw new Error(`generateLinkTableSql: read-only link "${def.tableName}" is externally owned and does not materialize a pivot table`);
83
+ }
80
84
  const { tableName, leftColumn, rightColumn } = def;
81
85
  const createTable = [
82
86
  `CREATE TABLE IF NOT EXISTS "${tableName}" (`,
package/dist/links.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"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"}
package/dist/module.d.ts CHANGED
@@ -1,4 +1,15 @@
1
+ import type { ModuleContainer } from "./container.js";
2
+ import type { EventBus } from "./events.js";
1
3
  import type { LinkableDefinition } from "./links.js";
4
+ export interface BootstrapContext<TBindings = unknown> {
5
+ /** Runtime bindings/environment available to the current app/isolate. */
6
+ bindings: TBindings;
7
+ /** Shared app container used for explicit runtime registrations. */
8
+ container: ModuleContainer;
9
+ /** Canonical event bus for the current app runtime. */
10
+ eventBus: EventBus;
11
+ }
12
+ export type BootstrapHandler<TBindings = unknown> = (ctx: BootstrapContext<TBindings>) => Promise<void> | void;
2
13
  /**
3
14
  * A Voyant module provides domain identity and lifecycle hooks.
4
15
  *
@@ -11,10 +22,25 @@ export interface Module {
11
22
  /** Hook handlers keyed by event name (e.g., "contacts.beforeCreate") */
12
23
  hooks?: Record<string, (...args: unknown[]) => Promise<void> | void>;
13
24
  /**
14
- * Optional service instance registered in the container under {@link name}.
15
- * Other modules resolve it via `container.resolve<T>(name)`.
25
+ * Optional service instance registered in the shared app/runtime container
26
+ * under {@link name}.
27
+ *
28
+ * This is intended for explicit runtime wiring in routes, workflows,
29
+ * subscribers, or bootstrap-time registrations. Modules should prefer links
30
+ * and query for cross-module data, and workflows/orchestration for
31
+ * cross-module behavior, rather than treating the container as their default
32
+ * module-to-module integration surface.
16
33
  */
17
34
  service?: unknown;
35
+ /**
36
+ * Optional lazy runtime bootstrap executed once per app/isolate, on the
37
+ * first request where bindings are available.
38
+ *
39
+ * Use this to validate runtime configuration, register app-owned provider
40
+ * instances, or perform other lightweight startup wiring. Do not use it for
41
+ * long-running syncs or scheduled background work.
42
+ */
43
+ bootstrap?: BootstrapHandler;
18
44
  /**
19
45
  * Entities this module exposes for cross-module linking via `defineLink`.
20
46
  * Keyed by entity name (e.g. `{ person: ..., organization: ... }`).
@@ -32,5 +58,10 @@ export interface Extension {
32
58
  module: string;
33
59
  /** Hook handlers keyed by event name */
34
60
  hooks?: Record<string, (...args: unknown[]) => Promise<void> | void>;
61
+ /**
62
+ * Optional lazy runtime bootstrap executed once per app/isolate, on the
63
+ * first request where bindings are available.
64
+ */
65
+ bootstrap?: BootstrapHandler;
35
66
  }
36
67
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IAEZ,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IAEpE;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IAEZ,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IAEd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;CACrE"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,WAAW,gBAAgB,CAAC,SAAS,GAAG,OAAO;IACnD,yEAAyE;IACzE,QAAQ,EAAE,SAAS,CAAA;IACnB,oEAAoE;IACpE,SAAS,EAAE,eAAe,CAAA;IAC1B,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,MAAM,gBAAgB,CAAC,SAAS,GAAG,OAAO,IAAI,CAClD,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC,KAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAEzB;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IAEZ,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IAEpE;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IAEZ,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IAEd,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IAEpE;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B"}
@@ -20,8 +20,9 @@ export interface JobOptions {
20
20
  * step delegation — a Hatchet adapter can bridge enqueue/schedule calls to
21
21
  * the Hatchet API.
22
22
  *
23
- * Templates wire their chosen adapter into the container as `"jobs"`.
24
- * Framework code that needs to kick off async work does so via
23
+ * Templates wire their chosen adapter into the shared app/runtime container as
24
+ * `"jobs"`. Framework code that needs to kick off async work does so via
25
+ * explicit runtime resolution such as
25
26
  * `container.resolve<JobRunner>("jobs").enqueue(...)`.
26
27
  */
27
28
  export interface JobRunner {
@@ -1 +1 @@
1
- {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../src/orchestration.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEjF,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE"}
1
+ {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../src/orchestration.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEjF,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzE"}
package/dist/plugin.d.ts CHANGED
@@ -1,30 +1,32 @@
1
1
  /**
2
- * Plugins — distributable bundles that group modules, extensions, event
3
- * subscribers, and link definitions into a single unit.
2
+ * Plugins — optional distributable bundles that group modules, extensions,
3
+ * event subscribers, and link definitions into a single unit.
4
4
  *
5
5
  * A plugin is the unit of "distribution" in Voyant: a customer, vendor, or
6
6
  * integrator ships a plugin package and it can be registered alongside core
7
- * modules without touching the framework itself.
7
+ * modules without touching the framework itself. It is not the default runtime
8
+ * customization unit — modules, providers, extensions, and workflows should be
9
+ * preferred when a smaller seam fits.
8
10
  *
9
11
  * Core plugins are transport-agnostic — they contain {@link Module} and
10
12
  * {@link Extension} values (no HTTP routes). Transport adapters (such as
11
13
  * `@voyantjs/hono`) layer their own plugin shape on top of this
12
14
  * contract to carry route bundles.
13
15
  */
14
- import type { EventBus, EventHandler } from "./events.js";
16
+ import type { EventBus, EventHandler, EventMetadata } from "./events.js";
15
17
  import type { LinkDefinition } from "./links.js";
16
- import type { Extension, Module } from "./module.js";
18
+ import type { BootstrapHandler, Extension, Module } from "./module.js";
17
19
  /**
18
20
  * A single event subscription contributed by a plugin.
19
21
  *
20
22
  * When the plugin is registered, `handler` is attached to the provided
21
23
  * {@link EventBus} for the given `event` name.
22
24
  */
23
- export interface Subscriber<TData = unknown> {
25
+ export interface Subscriber<TData = unknown, TMetadata extends EventMetadata | undefined = EventMetadata | undefined> {
24
26
  /** Event name, following `<resource>.<pastTenseAction>` convention. */
25
27
  event: string;
26
28
  /** Callback invoked when the event is emitted. */
27
- handler: EventHandler<TData>;
29
+ handler: EventHandler<TData, TMetadata>;
28
30
  }
29
31
  /**
30
32
  * A transport-agnostic plugin bundle.
@@ -43,6 +45,11 @@ export interface Plugin {
43
45
  name: string;
44
46
  /** Optional version tag for diagnostics. */
45
47
  version?: string;
48
+ /**
49
+ * Optional lazy runtime bootstrap executed once per app/isolate, on the
50
+ * first request where bindings are available.
51
+ */
52
+ bootstrap?: BootstrapHandler;
46
53
  /** Modules contributed by the plugin. */
47
54
  modules?: Module[];
48
55
  /** Extensions contributed by the plugin. */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACzC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,gFAAgF;IAChF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,kDAAkD;IAClD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAE3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,0DAA0D;IAC1D,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,gEAAgE;IAChE,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,0DAA0D;IAC1D,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,sEAAsE;IACtE,aAAa,EAAE,KAAK,CAAC;QAAE,WAAW,IAAI,IAAI,CAAA;KAAE,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,GAAE,sBAA2B,GACnC,iBAAiB,CA4BnB"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,UAAU,CACzB,KAAK,GAAG,OAAO,EACf,SAAS,SAAS,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS;IAEvE,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,gFAAgF;IAChF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,kDAAkD;IAClD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAE3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,0DAA0D;IAC1D,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,gEAAgE;IAChE,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,0DAA0D;IAC1D,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,sEAAsE;IACtE,aAAa,EAAE,KAAK,CAAC;QAAE,WAAW,IAAI,IAAI,CAAA;KAAE,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,GAAE,sBAA2B,GACnC,iBAAiB,CA4BnB"}
package/dist/plugin.js CHANGED
@@ -1,10 +1,12 @@
1
1
  /**
2
- * Plugins — distributable bundles that group modules, extensions, event
3
- * subscribers, and link definitions into a single unit.
2
+ * Plugins — optional distributable bundles that group modules, extensions,
3
+ * event subscribers, and link definitions into a single unit.
4
4
  *
5
5
  * A plugin is the unit of "distribution" in Voyant: a customer, vendor, or
6
6
  * integrator ships a plugin package and it can be registered alongside core
7
- * modules without touching the framework itself.
7
+ * modules without touching the framework itself. It is not the default runtime
8
+ * customization unit — modules, providers, extensions, and workflows should be
9
+ * preferred when a smaller seam fits.
8
10
  *
9
11
  * Core plugins are transport-agnostic — they contain {@link Module} and
10
12
  * {@link Extension} values (no HTTP routes). Transport adapters (such as
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8CH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAmB,MAAS;IACtD,OAAO,MAAM,CAAA;AACf,CAAC;AAuBD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA8B,EAC9B,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,aAAa,GAAmC,EAAE,CAAA;IAExD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAErB,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QACnD,IAAI,MAAM,CAAC,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAC5D,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AACnE,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsDH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAmB,MAAS;IACtD,OAAO,MAAM,CAAA;AACf,CAAC;AAuBD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA8B,EAC9B,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,aAAa,GAAmC,EAAE,CAAA;IAExD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAErB,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QACnD,IAAI,MAAM,CAAC,UAAU;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAC5D,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AACnE,CAAC"}
package/dist/query.d.ts CHANGED
@@ -13,6 +13,8 @@
13
13
  import type { LinkDefinition, LinkService } from "./links.js";
14
14
  /** Filters applied to the underlying entity fetcher. */
15
15
  export type QueryFilters = Record<string, unknown>;
16
+ /** Per-request hints threaded through cross-module reads. */
17
+ export type QueryContextValue = Record<string, unknown>;
16
18
  export interface QueryPagination {
17
19
  skip?: number;
18
20
  take?: number;
@@ -22,6 +24,7 @@ export interface EntityFetcherArgs {
22
24
  filters?: QueryFilters;
23
25
  ids?: string[];
24
26
  pagination?: QueryPagination;
27
+ context?: QueryContextValue;
25
28
  }
26
29
  /**
27
30
  * A minimal record shape. Concrete module records can extend this with
@@ -56,10 +59,23 @@ export interface QueryGraphConfig {
56
59
  fields: string[];
57
60
  filters?: QueryFilters;
58
61
  pagination?: QueryPagination;
62
+ /**
63
+ * Per-request runtime hints such as locale, market, actor, or pricing
64
+ * context. The query planner passes this through unchanged to every
65
+ * participating entity fetcher.
66
+ */
67
+ context?: QueryContextValue;
59
68
  }
60
69
  export interface QueryGraphResult {
61
70
  data: EntityRecord[];
62
71
  }
72
+ /**
73
+ * Callable query runtime exposed to routes and workflows.
74
+ *
75
+ * It wraps a fixed {@link QueryGraphContext} so callers only supply the
76
+ * per-request graph config.
77
+ */
78
+ export type QueryRunner = (config: QueryGraphConfig) => Promise<QueryGraphResult>;
63
79
  export interface QueryGraphContext {
64
80
  /** Entity name → fetcher. */
65
81
  fetchers: Map<string, EntityFetcher>;
@@ -72,6 +88,10 @@ export interface QueryGraphContext {
72
88
  * Build a {@link QueryGraphContext} from plain records.
73
89
  */
74
90
  export declare function createQueryContext(fetchers: Record<string, EntityFetcher>, links: LinkDefinition[], linkService: LinkService): QueryGraphContext;
91
+ /**
92
+ * Wrap a fixed {@link QueryGraphContext} in a callable runtime.
93
+ */
94
+ export declare function createQueryRunner(ctx: QueryGraphContext): QueryRunner;
75
95
  /**
76
96
  * Execute a cross-module read.
77
97
  *
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7D,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,2CAA2C;IAC3C,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,gDAAgD;IAChD,WAAW,EAAE,WAAW,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,WAAW,GACvB,iBAAiB,CAEnB;AA2CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAoE3B"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7D,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAClD,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,EAAE,CAAA;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAEjF,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,2CAA2C;IAC3C,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,gDAAgD;IAChD,WAAW,EAAE,WAAW,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,WAAW,GACvB,iBAAiB,CAEnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,WAAW,CAErE;AA2CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAoE3B"}
package/dist/query.js CHANGED
@@ -16,6 +16,12 @@
16
16
  export function createQueryContext(fetchers, links, linkService) {
17
17
  return { fetchers: new Map(Object.entries(fetchers)), links, linkService };
18
18
  }
19
+ /**
20
+ * Wrap a fixed {@link QueryGraphContext} in a callable runtime.
21
+ */
22
+ export function createQueryRunner(ctx) {
23
+ return (config) => queryGraph(ctx, config);
24
+ }
19
25
  function parseRelations(fields) {
20
26
  const map = new Map();
21
27
  for (const field of fields) {
@@ -63,13 +69,13 @@ function unique(xs) {
63
69
  */
64
70
  export async function queryGraph(ctx, config) {
65
71
  const { fetchers, links, linkService } = ctx;
66
- const { entity, fields, filters, pagination } = config;
72
+ const { entity, fields, filters, pagination, context } = config;
67
73
  const baseFetcher = fetchers.get(entity);
68
74
  if (!baseFetcher) {
69
75
  throw new Error(`queryGraph: no fetcher registered for entity "${entity}"`);
70
76
  }
71
77
  const plans = parseRelations(fields);
72
- const baseRecords = await baseFetcher.list({ filters, pagination });
78
+ const baseRecords = await baseFetcher.list({ filters, pagination, context });
73
79
  if (baseRecords.length === 0)
74
80
  return { data: [] };
75
81
  for (const { relation } of plans) {
@@ -101,7 +107,7 @@ export async function queryGraph(ctx, config) {
101
107
  });
102
108
  // Hydrate all target records in one call.
103
109
  const allTargetIds = unique(Array.from(idMap.values()).flat());
104
- const targetRecords = allTargetIds.length > 0 ? await targetFetcher.list({ ids: allTargetIds }) : [];
110
+ const targetRecords = allTargetIds.length > 0 ? await targetFetcher.list({ ids: allTargetIds, context }) : [];
105
111
  const byTargetId = new Map(targetRecords.map((r) => [r.id, r]));
106
112
  // Attach to each base record.
107
113
  for (const record of baseRecords) {
package/dist/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/core",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "license": "FSL-1.1-Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {