@voyantjs/core 0.5.0 → 0.6.2
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 +8 -1
- package/dist/container.d.ts +4 -4
- package/dist/events.d.ts +45 -3
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +8 -2
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +23 -0
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +4 -0
- package/dist/links.js.map +1 -1
- package/dist/module.d.ts +33 -2
- package/dist/module.d.ts.map +1 -1
- package/dist/orchestration.d.ts +3 -2
- package/dist/orchestration.d.ts.map +1 -1
- package/dist/plugin.d.ts +14 -7
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +5 -3
- package/dist/plugin.js.map +1 -1
- package/dist/query.d.ts +20 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +9 -3
- package/dist/query.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# @voyantjs/core
|
|
2
2
|
|
|
3
|
-
Module system and framework primitives for Voyant. Transport-agnostic —
|
|
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 |
|
package/dist/container.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A lightweight
|
|
2
|
+
* A lightweight shared app/runtime container for explicit service resolution.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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> = (
|
|
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:
|
|
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.
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA
|
|
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(
|
|
24
|
+
await handler(envelope);
|
|
19
25
|
}
|
|
20
26
|
catch (err) {
|
|
21
27
|
// Subscribers are fire-and-forget — log and continue.
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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.
|
package/dist/links.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;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;
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"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"}
|
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":"AAAA;;;;;;;;GAQG;
|
|
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
|
|
15
|
-
*
|
|
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
|
package/dist/module.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/orchestration.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
|
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. */
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA
|
|
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,
|
|
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
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA
|
|
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
|
*
|
package/dist/query.d.ts.map
CHANGED
|
@@ -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;
|
|
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":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|