@reactra/behaviours 0.1.0-alpha.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Akhil Shastri and the Reactra contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @reactra/behaviours
2
+
3
+ > Reactra behaviour plugins — replayable, undoable, traceable, observable, persistent, and the plugin HOF contract.
4
+
5
+ **Alpha** — published under the npm dist-tag `alpha`. APIs may change before 1.0.
6
+
7
+ ```bash
8
+ npm install @reactra/behaviours@alpha
9
+ ```
10
+
11
+ Part of [Reactra](https://github.com/akhilshastri/reactra) — a compiler-first,
12
+ React-19-compatible framework. See the [documentation](https://reactra-docs.vercel.app) to get
13
+ started.
14
+
15
+ ## License
16
+
17
+ MIT
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ export declare const observable: <P>(component: ComponentType<P>) => ComponentType<P>;
3
+ export default observable;
4
+ //# sourceMappingURL=observable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,eAAO,MAAM,UAAU,GAAI,CAAC,EAAG,WAAW,aAAa,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,CAAc,CAAA;AAC1F,eAAe,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const observable = (component) => component;
2
+ export default observable;
3
+ //# sourceMappingURL=observable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAK,SAA2B,EAAoB,EAAE,CAAC,SAAS,CAAA;AAC1F,eAAe,UAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ export declare const persistent: <P>(component: ComponentType<P>) => ComponentType<P>;
3
+ export default persistent;
4
+ //# sourceMappingURL=persistent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent.d.ts","sourceRoot":"","sources":["../src/persistent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,eAAO,MAAM,UAAU,GAAI,CAAC,EAAG,WAAW,aAAa,CAAC,CAAC,CAAC,KAAG,aAAa,CAAC,CAAC,CAAc,CAAA;AAC1F,eAAe,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const persistent = (component) => component;
2
+ export default persistent;
3
+ //# sourceMappingURL=persistent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent.js","sourceRoot":"","sources":["../src/persistent.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAK,SAA2B,EAAoB,EAAE,CAAC,SAAS,CAAA;AAC1F,eAAe,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ComponentType } from "react";
2
+ /**
3
+ * The plugin-behaviour contract (Behaviour Plugin spec §2): take a component,
4
+ * return a component of the SAME props type. Props pass through verbatim; the
5
+ * wrapped component renders on every non-error path; no reaching into the
6
+ * component's internals. See §2's laws for the full normative list.
7
+ */
8
+ export type ReactraBehaviour = <P>(Component: ComponentType<P>) => ComponentType<P>;
9
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAA"}
package/dist/plugin.js ADDED
@@ -0,0 +1,9 @@
1
+ // @reactra/behaviours/plugin — the plugin-behaviour contract type.
2
+ //
3
+ // Owner spec: reactra-behaviour-plugin-spec.md §2. A plugin behaviour (the
4
+ // `uses` class that wraps, vs the compiler-native class that instruments the
5
+ // body) is a props-preserving higher-order component. Behaviour authors import
6
+ // this type to satisfy the contract; the compiler never imports it (the wrap
7
+ // emission is plain JS — Behaviour Plugin §4).
8
+ export {};
9
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,+CAA+C"}
@@ -0,0 +1,240 @@
1
+ /** A user-action boundary event — name + payload + body duration (§3). */
2
+ export interface ActionEvent {
3
+ type: "action";
4
+ name: string;
5
+ /** The call arguments — or the sentinel `["[redacted]"]` when payload redaction fires (§5). */
6
+ payload: unknown[];
7
+ /** Machine-readable redaction signal (§3, v1.2). Present only when redaction fired — never `false`. */
8
+ payloadRedacted?: true;
9
+ componentId: string;
10
+ timestamp: number;
11
+ /** ms spent in the action body; filled by the post-body `snapshot(_, t0)` call. */
12
+ duration: number;
13
+ }
14
+ /** A post-action state capture; PII fields are excluded before it lands (§3 / RLIM-01). */
15
+ export interface StateSnapshotEvent {
16
+ type: "state_snapshot";
17
+ componentId: string;
18
+ /** Full state on a keyframe; ONLY the changed keys on a delta (v1.6 — §3). */
19
+ state: Record<string, unknown>;
20
+ timestamp: number;
21
+ /** v1.6: present = a fold-start point (full state); absent = a delta. */
22
+ keyframe?: true;
23
+ }
24
+ /** A resource lifecycle transition (§3). Stage 1 records `pending`/`resolved` (§4.3 rule 5). */
25
+ export interface ResourceEvent {
26
+ type: "resource";
27
+ name: string;
28
+ status: "pending" | "resolved" | "rejected";
29
+ data?: unknown;
30
+ error?: string;
31
+ componentId: string;
32
+ timestamp: number;
33
+ }
34
+ /** A component mount/unmount bracket (§3). */
35
+ export interface MountEvent {
36
+ type: "mount";
37
+ componentId: string;
38
+ phase: "mount" | "unmount";
39
+ timestamp: number;
40
+ }
41
+ /** v1.5 — the rate guard's honest marker: N events were dropped before this point (§5). */
42
+ export interface GapEvent {
43
+ type: "gap";
44
+ /** The instance whose event tripped the guard. */
45
+ componentId: string;
46
+ /** Events dropped since the budget was exceeded. */
47
+ dropped: number;
48
+ /** When capacity returned. */
49
+ timestamp: number;
50
+ }
51
+ /**
52
+ * A command-transaction marker (forms / `command` primitive). NON-FOLDING by
53
+ * design: `ReplayPlayer.statesAt` folds only `state_snapshot`, so an "optimistic"
54
+ * mark is never returned as committed state — scrub/re-drive can't land on the
55
+ * optimistic transient. A "committed"/"rolledback" mark is emitted ALONGSIDE a
56
+ * real `state_snapshot` (the settle), which IS folded. New event type; old
57
+ * players ignore it (§3 forward-compat) — NO format-version bump.
58
+ */
59
+ export interface TxMarkEvent {
60
+ type: "tx_mark";
61
+ componentId: string;
62
+ /** Groups the marks of one transaction (begin → optimistic → committed|rolledback). */
63
+ txId: string;
64
+ phase: "optimistic" | "committed" | "rolledback";
65
+ /** The optimistic delta (mark) or the settled state (commit/rollback), PII-filtered. */
66
+ state: Record<string, unknown>;
67
+ timestamp: number;
68
+ }
69
+ /** The recorded event stream union (§3). Unknown types must be IGNORED by players (§3 forward-compat). */
70
+ export type ReplayEvent = ActionEvent | StateSnapshotEvent | ResourceEvent | MountEvent | GapEvent | TxMarkEvent;
71
+ /** A finalized, serializable session — the upload/inspection unit (§3). */
72
+ export interface SessionBundle {
73
+ /** "2.1" = delta-aware (v1.6); players read "2.0" as all-keyframes. */
74
+ version: "2.0" | "2.1";
75
+ mode: "state-snapshot";
76
+ startTime: number;
77
+ duration: number;
78
+ sessionId: string;
79
+ /** Static component names that emitted into the session (no `#instance` suffix). */
80
+ components: string[];
81
+ events: ReplayEvent[];
82
+ }
83
+ /**
84
+ * The live-streaming tap (§5, v1.3). `event` fires synchronously from the emit
85
+ * path — post-redaction, after the ring push — only while enabled; `finalize?`
86
+ * fires when `finalizeReplay()` produces a bundle. Transport concerns (WS
87
+ * framing, seq, beacon) are user-space code, never the runtime's.
88
+ */
89
+ export interface ReplaySink {
90
+ /** Every recorded event, post-redaction, in recording order. `session` identity is stable per session; `meta` is the §5 v1.7 label set (never in the bundle). */
91
+ event(e: ReplayEvent, session: {
92
+ sessionId: string;
93
+ startTime: number;
94
+ meta?: Readonly<Record<string, string>>;
95
+ }): void;
96
+ /** End-of-session signal; never called on the disabled/null path. */
97
+ finalize?(bundle: SessionBundle): void;
98
+ }
99
+ /**
100
+ * Enable/configure session recording (Replay spec §5). `enabled` defaults to
101
+ * `false` — keep it off in production unless behind a sampling flag or a
102
+ * "report a bug" action. v1.5 adds the recording controls: exclusion
103
+ * (`excludeActions`/`excludeComponents`/`includeStateKeys`), coalescing
104
+ * (`coalesceMs`), session sampling (`sample`), and the per-second rate guard
105
+ * (`maxEventsPerSecond` → `gap` events).
106
+ */
107
+ export declare const configureReplay: (opts: {
108
+ enabled?: boolean;
109
+ redactKeys?: readonly string[];
110
+ maxEvents?: number;
111
+ sink?: ReplaySink;
112
+ excludeActions?: readonly string[];
113
+ excludeComponents?: readonly string[];
114
+ includeStateKeys?: readonly string[];
115
+ coalesceMs?: number;
116
+ sample?: number;
117
+ maxEventsPerSecond?: number;
118
+ keyframeEvery?: number;
119
+ meta?: Readonly<Record<string, string>>;
120
+ }) => void;
121
+ /** A mounted instance's registered setters, keyed by state name (§4.3 rule 1). */
122
+ type SetterMap = Record<string, (value: unknown) => void>;
123
+ /**
124
+ * Suspend recording while a replay is being driven (§5). Without the gate,
125
+ * driving setters would pollute a session with feedback events — the driven
126
+ * state fires the per-resource status effects. Explicit pair: the mode
127
+ * outlives a single drive call while the user scrubs.
128
+ */
129
+ export declare const enterReplayMode: () => void;
130
+ /** Resume recording after a replay drive (§5). */
131
+ export declare const exitReplayMode: () => void;
132
+ /**
133
+ * Streamed-mode ring trimming (§5 v1.6 — Stage R2). The TRANSPORT calls this
134
+ * with a durability watermark when the server acks: events at or below the
135
+ * watermark are dropped from the local ring, EXCEPT the newest keyframe per
136
+ * instance ≤ the watermark is retained as the local fold-start. An instance
137
+ * with no keyframe at/below the watermark keeps its oldest in-ring keyframe
138
+ * (above it) untrimmed naturally — its tail-start (C2). `finalizeReplay()`
139
+ * afterwards returns the TAIL bundle; the server is the durable store. The
140
+ * runtime stays ack-agnostic: this is a timestamp, never protocol detail.
141
+ */
142
+ export declare const acknowledgeReplay: (uptoTimestamp: number) => void;
143
+ /**
144
+ * Drive every currently mounted instance of `componentName` to `state` through
145
+ * its registered setters (§5). Keys without a registered setter are ignored
146
+ * (cross-version bundles degrade gracefully); React 19 auto-batches the set
147
+ * calls into one re-render. Returns the number of instances driven.
148
+ *
149
+ * Per-key setter-drift warn (B4 §5): when a MOUNTED instance has no setter for
150
+ * a bundle key, the key silently won't re-drive — the recorded session is from a
151
+ * different component shape (renamed/removed `state`). We surface that per (component,
152
+ * key) once per session, dev-only. The whole-component zero-drive case is already
153
+ * surfaced by the caller via the returned count (timeTravel.ts), so this catches the
154
+ * partial-drift case: the component drives but a SUBSET of its keys have no setter.
155
+ */
156
+ export declare const applyReplayState: (state: Record<string, unknown>, componentName: string) => number;
157
+ /** The per-component channel the compiler-emitted preamble binds as `__replay` (§4.1). */
158
+ export interface ReplayChannel {
159
+ /**
160
+ * Emit a `mount` event (driven by the emitted mount `useEffect`). `setters`
161
+ * is the compiler-emitted state→setter map (§4.3 rule 1, v1.4) — registering
162
+ * it makes the instance driveable by `applyReplayState`; omitting it is legal
163
+ * (a non-driveable instance).
164
+ */
165
+ mount(setters?: SetterMap): void;
166
+ /** Emit an `unmount` event (the emitted effect's teardown) and deregister the instance. */
167
+ unmount(): void;
168
+ /**
169
+ * Emit an `action` event before the user body runs. `writes` is the action's
170
+ * compiler-emitted straight-line write-set (state-writers only — §4.3 rule 2);
171
+ * when it intersects `redactKeys` the payload is recorded as `["[redacted]"]`
172
+ * with `payloadRedacted: true` (§5).
173
+ */
174
+ action(name: string, payload: unknown[], writes?: readonly string[]): void;
175
+ /** Emit a post-body `state_snapshot` and backfill the preceding action's duration (`t0` = pre-body `performance.now()`). */
176
+ snapshot(state: Record<string, unknown>, t0: number): void;
177
+ /** Emit a `resource` status transition. */
178
+ resource(name: string, status: "pending" | "resolved" | "rejected"): void;
179
+ /**
180
+ * Begin a command transaction (forms / `command` primitive). Records the
181
+ * invocation as an `action` event and returns a handle: `mark` records an
182
+ * optimistic apply as a NON-FOLDING `tx_mark` (never a snapshot); `commit` /
183
+ * `rollback` settle it as ONE recorded unit (a `tx_mark` + a real
184
+ * `state_snapshot`). The optimistic transient therefore never folds — only the
185
+ * settle does. `base` is the pre-transaction filtered state (informational).
186
+ */
187
+ begin(name: string, payload: unknown[], base: Record<string, unknown>): CommandTransaction;
188
+ }
189
+ /** Handle for a command transaction — see `ReplayChannel.begin`. */
190
+ export interface CommandTransaction {
191
+ /** Optimistic apply — recorded as a non-folding `tx_mark`; never a `state_snapshot`. */
192
+ mark(state: Record<string, unknown>): void;
193
+ /** Settle success — `tx_mark` (committed) + a `state_snapshot` at the settled state (ONE undo/replay unit). */
194
+ commit(state: Record<string, unknown>): void;
195
+ /** Settle failure — `tx_mark` (rolledback) + a `state_snapshot` at base (empty delta → records nothing). */
196
+ rollback(state: Record<string, unknown>): void;
197
+ }
198
+ /**
199
+ * Create a replay channel bound to a freshly-minted `Name#N` instance id — the
200
+ * non-hook primitive `useReplayChannel` wraps. Useful for imperative/non-React
201
+ * contexts and for testing the recording pieces without a renderer.
202
+ */
203
+ export declare const createReplayChannel: (componentName: string) => ReplayChannel;
204
+ /**
205
+ * Bind a per-instance replay channel (Replay spec §4.1). The compiler emits
206
+ * `const __replay = useReplayChannel("<ComponentName>")`; the runtime mints the
207
+ * stable `Name#N` instance id (the compiler never emits the instance suffix —
208
+ * §4.3 rule 1). The channel is created once per mounted instance (`useRef`), so
209
+ * the mount/unmount `useEffect` (emitted with `[]` deps) captures a stable handle.
210
+ */
211
+ export declare const useReplayChannel: (componentName: string) => ReplayChannel;
212
+ /**
213
+ * Finalize the active session into a `SessionBundle` for upload/inspection
214
+ * (Replay spec §2/§5), then end it. Returns `null` when recording is disabled or
215
+ * no session was started — the documented "disabled = no bundle" contract
216
+ * (§8, RP-05). User-callable from `cleanup { … }` or a "report a bug" handler.
217
+ */
218
+ export declare const finalizeReplay: () => Promise<SessionBundle | null>;
219
+ /** A plain-React value to register with the active session (§6). `redact` excludes it from the bundle. */
220
+ export interface ReplayCaptureField {
221
+ name: string;
222
+ value: unknown;
223
+ redact?: boolean;
224
+ }
225
+ /**
226
+ * Register plain-React state (held outside the DSL) with the active session so
227
+ * it appears in snapshots (Replay spec §6). Ordinary user-called hook code built
228
+ * from `useEffect` — emits a `state_snapshot` of the non-redacted fields whenever
229
+ * a captured value changes (no-op while recording is disabled). Fields marked
230
+ * `redact` (or matching `redactKeys`) are excluded.
231
+ */
232
+ export declare const useReplayCapture: (fields: readonly ReplayCaptureField[]) => void;
233
+ /**
234
+ * Identity HOF kept for type-level `uses` resolution. `uses replayable` is
235
+ * compiler-native (inner-body emission — Replay spec §4), so this wrapper is NOT
236
+ * applied to the component; the real runtime is `useReplayChannel` above.
237
+ */
238
+ export declare const replayable: <T>(component: T) => T;
239
+ export default replayable;
240
+ //# sourceMappingURL=replayable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayable.d.ts","sourceRoot":"","sources":["../src/replayable.ts"],"names":[],"mappings":"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"}