@nwire/forge 0.8.0 → 0.9.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 +132 -71
- package/dist/__tests__/actor-workflow-hooks.test.js +3 -1
- package/dist/__tests__/actor-workflow-hooks.test.js.map +1 -1
- package/dist/__tests__/lifecycle-logging.test.js.map +1 -1
- package/dist/__tests__/plugin-app-narrow.test.d.ts +12 -0
- package/dist/__tests__/plugin-app-narrow.test.d.ts.map +1 -0
- package/dist/__tests__/plugin-app-narrow.test.js +77 -0
- package/dist/__tests__/plugin-app-narrow.test.js.map +1 -0
- package/dist/__tests__/plugin-stress.test.js +9 -9
- package/dist/__tests__/plugin-stress.test.js.map +1 -1
- package/dist/__tests__/public-marker.test.js +7 -3
- package/dist/__tests__/public-marker.test.js.map +1 -1
- package/dist/__tests__/workflow-saga.test.js +26 -0
- package/dist/__tests__/workflow-saga.test.js.map +1 -1
- package/dist/actor-store.d.ts +20 -2
- package/dist/actor-store.d.ts.map +1 -1
- package/dist/actor-store.js +30 -2
- package/dist/actor-store.js.map +1 -1
- package/dist/create-app.d.ts +10 -2
- package/dist/create-app.d.ts.map +1 -1
- package/dist/create-app.js +36 -17
- package/dist/create-app.js.map +1 -1
- package/dist/define-action.d.ts +85 -9
- package/dist/define-action.d.ts.map +1 -1
- package/dist/define-action.js +101 -27
- package/dist/define-action.js.map +1 -1
- package/dist/define-actor.js.map +1 -1
- package/dist/define-handler.d.ts +21 -4
- package/dist/define-handler.d.ts.map +1 -1
- package/dist/define-handler.js +7 -0
- package/dist/define-handler.js.map +1 -1
- package/dist/define-plugin.d.ts +21 -0
- package/dist/define-plugin.d.ts.map +1 -1
- package/dist/define-plugin.js +66 -0
- package/dist/define-plugin.js.map +1 -1
- package/dist/define-query.d.ts +70 -12
- package/dist/define-query.d.ts.map +1 -1
- package/dist/define-query.js +49 -18
- package/dist/define-query.js.map +1 -1
- package/dist/define-upcaster.d.ts +25 -0
- package/dist/define-upcaster.d.ts.map +1 -0
- package/dist/define-upcaster.js +31 -0
- package/dist/define-upcaster.js.map +1 -0
- package/dist/define-workflow.d.ts +4 -4
- package/dist/define-workflow.d.ts.map +1 -1
- package/dist/define-workflow.js +40 -10
- package/dist/define-workflow.js.map +1 -1
- package/dist/dev-logger.d.ts.map +1 -1
- package/dist/dev-logger.js +5 -2
- package/dist/dev-logger.js.map +1 -1
- package/dist/event-message.d.ts +9 -2
- package/dist/event-message.d.ts.map +1 -1
- package/dist/event-message.js +10 -3
- package/dist/event-message.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +53 -123
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +166 -289
- package/dist/runtime.js.map +1 -1
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -10,86 +10,147 @@ them when you want a narrower import; forge stays the default for app code.
|
|
|
10
10
|
pnpm add @nwire/forge zod
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## 5-minute tour
|
|
14
|
+
|
|
15
|
+
Two primitives carry most of an app: `defineSchema` declares the data shape +
|
|
16
|
+
lifecycle, `defineActor` (closure form) declares the methods + transitions
|
|
17
|
+
against it. Everything else (`defineAction`, `defineModule`, `createApp`)
|
|
18
|
+
plugs in around them.
|
|
19
|
+
|
|
20
|
+
### 1. Declare the data + lifecycle with `defineSchema`
|
|
14
21
|
|
|
15
22
|
```ts
|
|
16
23
|
import { z } from "zod";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
import { defineSchema } from "@nwire/forge";
|
|
25
|
+
|
|
26
|
+
export const SubmissionData = defineSchema({
|
|
27
|
+
name: "submission",
|
|
28
|
+
key: "submissionId",
|
|
29
|
+
fields: {
|
|
30
|
+
submissionId: z.string(),
|
|
31
|
+
studentId: z.string(),
|
|
32
|
+
answer: z.string(),
|
|
33
|
+
verdict: z.string().optional(),
|
|
34
|
+
gradedAt: z.string().datetime().optional(),
|
|
35
|
+
},
|
|
36
|
+
states: {
|
|
37
|
+
submitted: { initial: true },
|
|
38
|
+
"under-review": {},
|
|
39
|
+
graded: { final: true },
|
|
40
|
+
},
|
|
30
41
|
});
|
|
42
|
+
```
|
|
31
43
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
The schema is the single source of truth for the data model and the set of
|
|
45
|
+
valid lifecycle states — Studio renders it, persistent stores (`@nwire/store-mongo`,
|
|
46
|
+
`@nwire/store-prisma`) read `storage.indexes` / `storage.unique` from it, and
|
|
47
|
+
`defineActor` borrows `key` + `initial` + the state names off it.
|
|
48
|
+
|
|
49
|
+
### 2. Bind methods + transitions with `defineActor` (closure form)
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { defineActor } from "@nwire/forge";
|
|
53
|
+
import { SubmissionData } from "./submission.schema";
|
|
54
|
+
import { SubmissionWasFlagged, SubmissionWasGraded } from "./events";
|
|
55
|
+
|
|
56
|
+
export const Submission = defineActor(
|
|
57
|
+
SubmissionData,
|
|
58
|
+
({ data, id, validate, recordThat, when, methods, states }) => {
|
|
59
|
+
const { underReview, graded } = states;
|
|
60
|
+
|
|
61
|
+
// Methods enforce invariants and `recordThat` the events. They don't
|
|
62
|
+
// mutate state directly — `when(...)` below folds the recorded events
|
|
63
|
+
// into state.
|
|
64
|
+
const flag = (input: { reason: string }) => {
|
|
65
|
+
validate(input, [(i) => i.reason.length > 0 || "reason required"]);
|
|
66
|
+
recordThat(SubmissionWasFlagged({ submissionId: id, reason: input.reason }));
|
|
67
|
+
};
|
|
68
|
+
const grade = (input: { verdict: string }) => {
|
|
69
|
+
recordThat(SubmissionWasGraded({ submissionId: id, verdict: input.verdict }));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
when(SubmissionWasFlagged, (_e, { assign }) => {
|
|
73
|
+
assign({}); // no field changes — state move only
|
|
74
|
+
return underReview; // transition: submitted → under-review
|
|
75
|
+
});
|
|
76
|
+
when(SubmissionWasGraded, (e, { assign }) => {
|
|
77
|
+
assign({ verdict: e.verdict, gradedAt: new Date().toISOString() });
|
|
78
|
+
return graded; // transition into the final state
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return methods({ flag, grade });
|
|
40
82
|
},
|
|
41
|
-
|
|
83
|
+
);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The closure runs once at define time (to capture transitions + method names)
|
|
87
|
+
and again per `ctx.use(Submission, id)` call (to bind methods over the live
|
|
88
|
+
`data`). `recordThat` collects events the runtime publishes after the method
|
|
89
|
+
returns; `when` is the matching fold — methods never write to state directly,
|
|
90
|
+
so the actor's history is always the event log.
|
|
91
|
+
|
|
92
|
+
> See: [write paths (actor xor direct-DB)](https://nwire.dev/concepts/write-paths) — a handler picks one path per write; never both.
|
|
93
|
+
|
|
94
|
+
**Object form vs. closure form** — both exist. Use the closure form when you
|
|
95
|
+
want typed `states.<name>` refs, want methods and folds in the same file, and
|
|
96
|
+
want invariants on the input shape (`validate(...)`); use the object form
|
|
97
|
+
(`defineActor(name, { schema, key, initial, states, methods })`) when the
|
|
98
|
+
state machine is the whole story and you don't need per-method input
|
|
99
|
+
validation.
|
|
100
|
+
|
|
101
|
+
### 3. Wire it into a module + app
|
|
42
102
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
103
|
+
```ts
|
|
104
|
+
import { defineAction, defineModule, createApp, AppBooted, ActionCompleted } from "@nwire/forge";
|
|
105
|
+
import { z } from "zod";
|
|
106
|
+
|
|
107
|
+
export const flagSubmission = defineAction({
|
|
108
|
+
name: "submissions.flag",
|
|
109
|
+
schema: z.object({ submissionId: z.string(), reason: z.string() }),
|
|
110
|
+
emits: [SubmissionWasFlagged],
|
|
47
111
|
handler: async (input, { use }) => {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
return StudentWasEnrolled(input);
|
|
112
|
+
const sub = await use(Submission, input.submissionId);
|
|
113
|
+
sub.flag({ reason: input.reason }); // recorded event(s) published by runtime
|
|
51
114
|
},
|
|
52
115
|
});
|
|
53
116
|
|
|
54
|
-
export const
|
|
55
|
-
events:
|
|
56
|
-
actors:
|
|
57
|
-
actions: [
|
|
117
|
+
export const submissions = defineModule("submissions", {
|
|
118
|
+
events: [SubmissionWasFlagged, SubmissionWasGraded],
|
|
119
|
+
actors: [Submission],
|
|
120
|
+
actions: [flagSubmission.public()],
|
|
58
121
|
});
|
|
59
122
|
|
|
60
|
-
const app = createApp({ modules: [
|
|
61
|
-
|
|
62
|
-
// Subscribe to lifecycle + dispatch events through the same bus.
|
|
123
|
+
const app = createApp({ modules: [submissions] });
|
|
63
124
|
app.bus.on(AppBooted, ({ appName }) => console.log("booted:", appName));
|
|
64
125
|
app.bus.on(ActionCompleted, ({ action }) => console.log("ran:", action.name));
|
|
65
126
|
|
|
66
127
|
await app.start();
|
|
67
|
-
await app.runtime.dispatch(
|
|
128
|
+
await app.runtime.dispatch(flagSubmission, { submissionId: "s-1", reason: "off-topic" });
|
|
68
129
|
```
|
|
69
130
|
|
|
70
131
|
## Surface
|
|
71
132
|
|
|
72
133
|
### Domain primitives
|
|
73
134
|
|
|
74
|
-
| Export
|
|
75
|
-
|
|
|
76
|
-
| `defineAction`
|
|
77
|
-
| `defineEvent`
|
|
78
|
-
| `defineHandler`
|
|
79
|
-
| `defineActor`
|
|
80
|
-
| `defineSchema`
|
|
81
|
-
| `defineProjection`
|
|
82
|
-
| `defineQuery`
|
|
83
|
-
| `defineWorkflow`
|
|
84
|
-
| `defineModule`
|
|
85
|
-
| `defineApp`
|
|
86
|
-
| `createApp`
|
|
87
|
-
| `definePlugin`
|
|
88
|
-
| `defineResource`
|
|
89
|
-
| `defineError`
|
|
90
|
-
| `defineMiddleware` / `defineHook` / `pipe`
|
|
91
|
-
| `defineCron` / `defineInbox` / `defineOutbox` / `defineExternalCall` / `defineInboundWebhook` | Orchestrator primitives
|
|
92
|
-
| `runCli(app, argv)`
|
|
135
|
+
| Export | Role |
|
|
136
|
+
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
|
|
137
|
+
| `defineAction` | User-visible command — validated input, emits events |
|
|
138
|
+
| `defineEvent` | Past-tense fact (re-exported from `@nwire/messages`) |
|
|
139
|
+
| `defineHandler` | Operation primitive — transport-agnostic |
|
|
140
|
+
| `defineActor` | Aggregate with state, methods, optional state machine |
|
|
141
|
+
| `defineSchema` | Data shape + lifecycle states + storage hints |
|
|
142
|
+
| `defineProjection` | Read-model fold over events |
|
|
143
|
+
| `defineQuery` | Projection-backed read function |
|
|
144
|
+
| `defineWorkflow` | Reaction + saga unified — stateless or stateful |
|
|
145
|
+
| `defineModule` | Bundle of actors + actions + events + projections + queries |
|
|
146
|
+
| `defineApp` | App declaration (multi-wire instantiation) |
|
|
147
|
+
| `createApp` | App runtime — boots modules, owns the bus and runtime |
|
|
148
|
+
| `definePlugin` | Forge-richer plugin: middleware + actor hooks + before/after |
|
|
149
|
+
| `defineResource` | Public response shape (field allowlist + OpenAPI schema) |
|
|
150
|
+
| `defineError` | Typed throwable with status code |
|
|
151
|
+
| `defineMiddleware` / `defineHook` / `pipe` | Reusable resolver chain pieces |
|
|
152
|
+
| `defineCron` / `defineInbox` / `defineOutbox` / `defineExternalCall` / `defineInboundWebhook` | Orchestrator primitives |
|
|
153
|
+
| `runCli(app, argv)` | Argv dispatcher — operator CLI without HTTP |
|
|
93
154
|
|
|
94
155
|
### Framework events
|
|
95
156
|
|
|
@@ -98,14 +159,14 @@ Forge re-exports the app-lifecycle events from `@nwire/app`
|
|
|
98
159
|
`AppShuttingDown` / `AppShutdown`, `PluginRegistered` …, `WireMounting` …)
|
|
99
160
|
and adds its own forge-local events:
|
|
100
161
|
|
|
101
|
-
| Event
|
|
102
|
-
|
|
|
103
|
-
| `ActionDispatching`
|
|
104
|
-
| `ActionCompleted`
|
|
105
|
-
| `ActionFailed`
|
|
106
|
-
| `EventRecording`
|
|
107
|
-
| `EventRecorded`
|
|
108
|
-
| `builtInFrameworkEvents` | —
|
|
162
|
+
| Event | Mode | When |
|
|
163
|
+
| ------------------------ | ----------- | ----------------------------------------------------- |
|
|
164
|
+
| `ActionDispatching` | series-bail | Before handler runs. Return `false` to short-circuit. |
|
|
165
|
+
| `ActionCompleted` | parallel | After handler returns successfully. |
|
|
166
|
+
| `ActionFailed` | parallel | After handler throws. |
|
|
167
|
+
| `EventRecording` | series-bail | Before an event is appended to the store. |
|
|
168
|
+
| `EventRecorded` | parallel | After append succeeds. |
|
|
169
|
+
| `builtInFrameworkEvents` | — | Catalog of every built-in (lifecycle + forge-local). |
|
|
109
170
|
|
|
110
171
|
### Re-exports
|
|
111
172
|
|
|
@@ -115,12 +176,12 @@ and adds its own forge-local events:
|
|
|
115
176
|
|
|
116
177
|
## Picking the right entry point
|
|
117
178
|
|
|
118
|
-
| You want…
|
|
119
|
-
|
|
|
120
|
-
| Full framework DX in one import
|
|
121
|
-
| Just operations (handlers / middleware)
|
|
122
|
-
| Just lifecycle + plugins
|
|
123
|
-
| Just events + envelope
|
|
179
|
+
| You want… | Import from |
|
|
180
|
+
| --------------------------------------- | ----------------- |
|
|
181
|
+
| Full framework DX in one import | `@nwire/forge` |
|
|
182
|
+
| Just operations (handlers / middleware) | `@nwire/handler` |
|
|
183
|
+
| Just lifecycle + plugins | `@nwire/app` |
|
|
184
|
+
| Just events + envelope | `@nwire/messages` |
|
|
124
185
|
|
|
125
186
|
## Related
|
|
126
187
|
|
|
@@ -26,7 +26,9 @@ const Order = defineActor("order", {
|
|
|
26
26
|
key: "orderId",
|
|
27
27
|
initial: "draft",
|
|
28
28
|
states: {
|
|
29
|
-
draft: {
|
|
29
|
+
draft: {
|
|
30
|
+
on: { [Placed.name]: { target: "placed", assign: (_, e) => ({ ...e }) } },
|
|
31
|
+
},
|
|
30
32
|
placed: { on: { [Confirmed.name]: { target: "confirmed" } } },
|
|
31
33
|
confirmed: {},
|
|
32
34
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor-workflow-hooks.test.js","sourceRoot":"","sources":["../../src/__tests__/actor-workflow-hooks.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,sEAAsE;AAEtE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAExE,MAAM,MAAM,GAAG,WAAW,CAAC;IACzB,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC7D,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC1C,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAE/C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE;IACjC,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE;QACN,KAAK,
|
|
1
|
+
{"version":3,"file":"actor-workflow-hooks.test.js","sourceRoot":"","sources":["../../src/__tests__/actor-workflow-hooks.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-logging.test.js","sourceRoot":"","sources":["../../src/__tests__/lifecycle-logging.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,+GAA+G,EAAE,KAAK,IAAI,EAAE;QAC7H,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;SAClE,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/F,yDAAyD;QACzD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC3D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACrC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,OAAO;aACJ,MAAM,CAAC,CAAC,CAAC,EAAkD,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;aACrF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAC3B,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,OAAO,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,2DAA2D;SAC5E,CAAC,CAAC;QACH,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE;YAC3B,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,8CAA8C;QAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjD,sEAAsE;QACtE,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"lifecycle-logging.test.js","sourceRoot":"","sources":["../../src/__tests__/lifecycle-logging.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createApp accepts the narrow `@nwire/app` plugin shape as well as the
|
|
3
|
+
* rich forge `definePlugin`. Verifies the adaptation at the boundary:
|
|
4
|
+
*
|
|
5
|
+
* - `provide(name, lifecycle)` produces a container binding whose value
|
|
6
|
+
* comes from `lifecycle.boot()`.
|
|
7
|
+
* - `boot(fn)` fires during app start.
|
|
8
|
+
* - `shutdown(fn)` fires during app stop.
|
|
9
|
+
* - `lifecycle.shutdown(value)` fires for materialized bindings.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=plugin-app-narrow.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-app-narrow.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/plugin-app-narrow.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createApp accepts the narrow `@nwire/app` plugin shape as well as the
|
|
3
|
+
* rich forge `definePlugin`. Verifies the adaptation at the boundary:
|
|
4
|
+
*
|
|
5
|
+
* - `provide(name, lifecycle)` produces a container binding whose value
|
|
6
|
+
* comes from `lifecycle.boot()`.
|
|
7
|
+
* - `boot(fn)` fires during app start.
|
|
8
|
+
* - `shutdown(fn)` fires during app stop.
|
|
9
|
+
* - `lifecycle.shutdown(value)` fires for materialized bindings.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from "vitest";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { definePlugin as defineAppPlugin } from "@nwire/app";
|
|
14
|
+
import { createApp, defineAction, defineHandler, defineModule } from "../foundation.js";
|
|
15
|
+
const Ping = defineAction({
|
|
16
|
+
name: "test/ping",
|
|
17
|
+
schema: z.object({ n: z.number() }),
|
|
18
|
+
});
|
|
19
|
+
const handler = defineHandler(Ping, async () => undefined);
|
|
20
|
+
const mod = defineModule("test", { actions: [Ping], handlers: [handler] });
|
|
21
|
+
describe("createApp + narrow @nwire/app plugin", () => {
|
|
22
|
+
it("adapts the narrow shape: provide + boot + shutdown all fire", async () => {
|
|
23
|
+
class Conn {
|
|
24
|
+
url;
|
|
25
|
+
constructor(url) {
|
|
26
|
+
this.url = url;
|
|
27
|
+
}
|
|
28
|
+
closed = false;
|
|
29
|
+
}
|
|
30
|
+
const calls = [];
|
|
31
|
+
const plugin = defineAppPlugin("db", ({ provide, boot, shutdown }) => {
|
|
32
|
+
provide("db", {
|
|
33
|
+
boot: () => new Conn("postgres://x"),
|
|
34
|
+
shutdown: (c) => {
|
|
35
|
+
c.closed = true;
|
|
36
|
+
calls.push("binding.shutdown");
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
boot(() => {
|
|
40
|
+
calls.push("plugin.boot");
|
|
41
|
+
});
|
|
42
|
+
shutdown(() => {
|
|
43
|
+
calls.push("plugin.shutdown");
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
const app = createApp({ modules: [mod], plugins: [plugin] });
|
|
47
|
+
await app.start();
|
|
48
|
+
// Force resolution so the binding's shutdown is reached at stop().
|
|
49
|
+
const conn = app.container.resolve("db");
|
|
50
|
+
expect(conn).toBeInstanceOf(Conn);
|
|
51
|
+
expect(conn.url).toBe("postgres://x");
|
|
52
|
+
expect(calls).toContain("plugin.boot");
|
|
53
|
+
await app.stop();
|
|
54
|
+
expect(conn.closed).toBe(true);
|
|
55
|
+
// Plugin shutdown runs BEFORE binding shutdown (matches app-plugin
|
|
56
|
+
// contract: "flush owned work before underlying resources go away").
|
|
57
|
+
expect(calls).toEqual(["plugin.boot", "plugin.shutdown", "binding.shutdown"]);
|
|
58
|
+
});
|
|
59
|
+
it("rich + narrow plugins coexist in the same plugins list", async () => {
|
|
60
|
+
const fired = [];
|
|
61
|
+
const richBoot = (await import("../define-plugin.js")).definePlugin("rich", ({ boot }) => {
|
|
62
|
+
boot(() => {
|
|
63
|
+
fired.push("rich.boot");
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
const narrowBoot = defineAppPlugin("narrow", ({ boot }) => {
|
|
67
|
+
boot(() => {
|
|
68
|
+
fired.push("narrow.boot");
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const app = createApp({ modules: [mod], plugins: [richBoot, narrowBoot] });
|
|
72
|
+
await app.start();
|
|
73
|
+
await app.stop();
|
|
74
|
+
expect(fired).toEqual(["rich.boot", "narrow.boot"]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=plugin-app-narrow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-app-narrow.test.js","sourceRoot":"","sources":["../../src/__tests__/plugin-app-narrow.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* (`runtime.frameworkEvents.onFire(...)`) and per-event subscriptions.
|
|
19
19
|
*/
|
|
20
20
|
import { describe, it, expect } from "vitest";
|
|
21
|
-
import { createApp, defineModule, definePlugin
|
|
22
|
-
import { PluginRegistered, PluginBooted
|
|
23
|
-
import {
|
|
21
|
+
import { createApp, defineModule, definePlugin } from "../foundation.js";
|
|
22
|
+
import { PluginRegistered, PluginBooted } from "../framework-events.js";
|
|
23
|
+
import { createContainer } from "@nwire/container";
|
|
24
24
|
describe("plugin + module lifecycle stress", () => {
|
|
25
25
|
it("cross-plugin DI: plugin B's boot resolves a binding plugin A provided", async () => {
|
|
26
26
|
const pluginA = definePlugin("provider", ({ bind }) => {
|
|
@@ -33,7 +33,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
33
33
|
},
|
|
34
34
|
});
|
|
35
35
|
const app = createApp({
|
|
36
|
-
container:
|
|
36
|
+
container: createContainer(),
|
|
37
37
|
modules: [],
|
|
38
38
|
plugins: [pluginA, pluginB],
|
|
39
39
|
devLogs: false,
|
|
@@ -52,7 +52,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
52
52
|
},
|
|
53
53
|
});
|
|
54
54
|
const app = createApp({
|
|
55
|
-
container:
|
|
55
|
+
container: createContainer(),
|
|
56
56
|
modules: [],
|
|
57
57
|
plugins: [slow],
|
|
58
58
|
devLogs: false,
|
|
@@ -85,7 +85,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
85
85
|
},
|
|
86
86
|
});
|
|
87
87
|
const app = createApp({
|
|
88
|
-
container:
|
|
88
|
+
container: createContainer(),
|
|
89
89
|
modules: [],
|
|
90
90
|
plugins: [pluginA, pluginB, pluginC],
|
|
91
91
|
devLogs: false,
|
|
@@ -138,7 +138,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
138
138
|
},
|
|
139
139
|
});
|
|
140
140
|
const app = createApp({
|
|
141
|
-
container:
|
|
141
|
+
container: createContainer(),
|
|
142
142
|
modules: [],
|
|
143
143
|
plugins: [pluginA, pluginB],
|
|
144
144
|
devLogs: false,
|
|
@@ -165,7 +165,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
167
|
const app = createApp({
|
|
168
|
-
container:
|
|
168
|
+
container: createContainer(),
|
|
169
169
|
modules: [],
|
|
170
170
|
plugins,
|
|
171
171
|
devLogs: false,
|
|
@@ -181,7 +181,7 @@ describe("plugin + module lifecycle stress", () => {
|
|
|
181
181
|
const pluginX = definePlugin("plug-x", {});
|
|
182
182
|
const pluginY = definePlugin("plug-y", {});
|
|
183
183
|
const app = createApp({
|
|
184
|
-
container:
|
|
184
|
+
container: createContainer(),
|
|
185
185
|
modules: [moduleA, moduleB],
|
|
186
186
|
plugins: [pluginX, pluginY],
|
|
187
187
|
devLogs: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-stress.test.js","sourceRoot":"","sources":["../../src/__tests__/plugin-stress.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin-stress.test.js","sourceRoot":"","sources":["../../src/__tests__/plugin-stress.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,10 +45,14 @@ describe(".public() marker", () => {
|
|
|
45
45
|
expect(isPublic(exposed)).toBe(true);
|
|
46
46
|
expect(exposed.name).toBe("audit.on-wash");
|
|
47
47
|
});
|
|
48
|
-
it("$public is non-enumerable (
|
|
48
|
+
it("$public is non-enumerable (own-keys doesn't surface it)", () => {
|
|
49
|
+
// Action is now a callable factory (function), so JSON.stringify on it
|
|
50
|
+
// returns undefined entirely — the relevant invariant is that `$public`
|
|
51
|
+
// is non-enumerable and absent from Object.keys / property iteration.
|
|
49
52
|
const exposed = recordWash.public();
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
expect(Object.keys(exposed).includes("$public")).toBe(false);
|
|
54
|
+
// Same property must still be accessible by direct read.
|
|
55
|
+
expect(exposed.$public).toBe(true);
|
|
52
56
|
});
|
|
53
57
|
});
|
|
54
58
|
//# sourceMappingURL=public-marker.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-marker.test.js","sourceRoot":"","sources":["../../src/__tests__/public-marker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,YAAY,GAAG,WAAW,CAAC;IAC/B,IAAI,EAAE,yBAAyB;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,YAAY,CAAC;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG,UAAU,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,kDAAkD;QAClD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,oCAAoC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACpD,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"public-marker.test.js","sourceRoot":"","sources":["../../src/__tests__/public-marker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -236,4 +236,30 @@ describe("defineWorkflow — stateless still works", () => {
|
|
|
236
236
|
expect(ctx.store.size).toBe(0);
|
|
237
237
|
});
|
|
238
238
|
});
|
|
239
|
+
describe("defineWorkflow — deferred probe pass", () => {
|
|
240
|
+
it("does not read subscribedEvents until accessed (survives late-bound event refs)", () => {
|
|
241
|
+
let eventRef;
|
|
242
|
+
const flow = defineWorkflow("late-bound", ({ on }) => {
|
|
243
|
+
on(eventRef, async () => undefined);
|
|
244
|
+
});
|
|
245
|
+
eventRef = PaymentRequested;
|
|
246
|
+
expect([...flow.subscribedEvents]).toEqual(["billing.payment-requested"]);
|
|
247
|
+
});
|
|
248
|
+
it("throws a helpful error when on() receives undefined at probe time", () => {
|
|
249
|
+
const flow = defineWorkflow("bad-ref", ({ on }) => {
|
|
250
|
+
on(undefined, async () => undefined);
|
|
251
|
+
});
|
|
252
|
+
expect(() => [...flow.subscribedEvents]).toThrow(/undefined.*circular import/i);
|
|
253
|
+
});
|
|
254
|
+
it("registers cross-module-style public event subscriptions after modules load", () => {
|
|
255
|
+
const ExternalEvent = defineEvent({
|
|
256
|
+
name: "users.user-was-created",
|
|
257
|
+
schema: z.object({ userId: z.string() }),
|
|
258
|
+
}).public();
|
|
259
|
+
const flow = defineWorkflow("welcome.notify", ({ on }) => {
|
|
260
|
+
on(ExternalEvent, async () => undefined);
|
|
261
|
+
});
|
|
262
|
+
expect([...flow.subscribedEvents]).toEqual(["users.user-was-created"]);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
239
265
|
//# sourceMappingURL=workflow-saga.test.js.map
|