@rewindkit/runtime 0.1.0-alpha.1
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 +21 -0
- package/README.md +178 -0
- package/dist/bundle-io.d.ts +8 -0
- package/dist/bundle-io.d.ts.map +1 -0
- package/dist/bundle.d.ts +83 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/configure.d.ts +27 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/enhancer.d.ts +10 -0
- package/dist/enhancer.d.ts.map +1 -0
- package/dist/env.d.ts +4 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +736 -0
- package/dist/index.js.map +19 -0
- package/dist/player.d.ts +13 -0
- package/dist/player.d.ts.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +497 -0
- package/dist/react/index.js.map +16 -0
- package/dist/recorder.d.ts +52 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/redaction.d.ts +13 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/replay.d.ts +10 -0
- package/dist/replay.d.ts.map +1 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ashastri
|
|
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,178 @@
|
|
|
1
|
+
# @rewindkit/runtime
|
|
2
|
+
|
|
3
|
+
Record Redux actions and state snapshots from your React app — including across
|
|
4
|
+
Module Federation remotes — into a single origin-tagged session, and time-travel
|
|
5
|
+
through them in-page.
|
|
6
|
+
|
|
7
|
+
**What this adds over Redux DevTools:** zero-config injection (coming in the Vite
|
|
8
|
+
plugin), cross-remote Module Federation capture into one session, component render
|
|
9
|
+
instrumentation, configurable redaction, and shareable session bundles. This is not
|
|
10
|
+
a Redux DevTools replacement — it builds on top of Redux's own store, and
|
|
11
|
+
the DevTools remain the right tool for inspecting individual actions and state diffs.
|
|
12
|
+
|
|
13
|
+
> The "compiler" mentioned in some docs is a Vite plugin + Babel/SWC transform, not
|
|
14
|
+
> a DSL compiler. This alpha is **manual wiring** — the zero-config Vite plugin that
|
|
15
|
+
> auto-injects the enhancer and panel is a future release.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm install @rewindkit/runtime@alpha
|
|
21
|
+
# or
|
|
22
|
+
bun add @rewindkit/runtime@alpha
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Peer dependencies: `redux ^5`, `react ^18 || ^19` (react is optional — only needed
|
|
26
|
+
for the `./react` subpath).
|
|
27
|
+
|
|
28
|
+
## Quickstart
|
|
29
|
+
|
|
30
|
+
### 1. Add the enhancer and configure recording
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { configureStore } from "@reduxjs/toolkit";
|
|
34
|
+
import { replayEnhancer, configureReplay } from "@rewindkit/runtime";
|
|
35
|
+
|
|
36
|
+
export const store = configureStore({
|
|
37
|
+
reducer: {
|
|
38
|
+
orders: ordersReducer,
|
|
39
|
+
trades: tradesReducer,
|
|
40
|
+
positions: positionsReducer,
|
|
41
|
+
watchlist: watchlistReducer,
|
|
42
|
+
},
|
|
43
|
+
// replayEnhancer wraps the store so snapshot-restore round-trips work.
|
|
44
|
+
// Prepend it so it sits closest to the base reducer/dispatch.
|
|
45
|
+
enhancers: (getDefaultEnhancers) =>
|
|
46
|
+
getDefaultEnhancers().prepend(replayEnhancer),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Opt-in recording — OFF by default (privacy-safe).
|
|
50
|
+
const replayHandle = configureReplay({
|
|
51
|
+
store,
|
|
52
|
+
includeStateKeys: ["orders", "trades", "positions", "watchlist"],
|
|
53
|
+
keyframeEvery: 1, // snapshot every action (suitable for low-frequency stores)
|
|
54
|
+
force: true, // enable in dev even though isProd() returns false
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Recording does not auto-start. Call start() when ready.
|
|
58
|
+
replayHandle.start();
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Recording is OFF by default.** Nothing is captured until you call
|
|
62
|
+
`configureReplay()` and `start()`. This is intentional — state may contain PII,
|
|
63
|
+
and opt-in is the safe default. See [Privacy & Redaction](#privacy--redaction).
|
|
64
|
+
|
|
65
|
+
### 2. Time-travel (re-drive)
|
|
66
|
+
|
|
67
|
+
Use the player API to restore the app to any recorded point:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import { createPlayer, seek, returnToLive } from "@rewindkit/runtime";
|
|
71
|
+
|
|
72
|
+
const player = createPlayer(bundle); // a SessionBundle from exportBundle()
|
|
73
|
+
seek(player, 5); // jump to event index 5
|
|
74
|
+
returnToLive(); // back to the live store
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 3. React companion (`./react`)
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { useReplayMode } from "@rewindkit/runtime/react";
|
|
81
|
+
|
|
82
|
+
const MyComponent = () => {
|
|
83
|
+
const mode = useReplayMode(); // "live" | "history"
|
|
84
|
+
// Use mode to show replay chrome, disable inputs, etc.
|
|
85
|
+
};
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`useReplayMode` is for **rendering UI chrome only** (badges, disabled inputs,
|
|
89
|
+
replay overlays). It must NOT be used to gate side-channel handlers like WebSocket
|
|
90
|
+
`onmessage` callbacks — see the next section.
|
|
91
|
+
|
|
92
|
+
## Replaying apps with live data
|
|
93
|
+
|
|
94
|
+
If your app has live data feeds (WebSockets, polling, SSE), a naive replay will be
|
|
95
|
+
stomped within a frame as live data overwrites the restored state. You need an
|
|
96
|
+
**app-owned feed gate**:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
import { getReplayMode } from "@rewindkit/runtime";
|
|
100
|
+
|
|
101
|
+
// In your WebSocket onmessage handler:
|
|
102
|
+
socket.onmessage = (event) => {
|
|
103
|
+
// Read getReplayMode() SYNCHRONOUSLY — not useReplayMode().
|
|
104
|
+
// A React render lags the event loop, so useReplayMode() can read stale "live"
|
|
105
|
+
// and let a tick stomp the re-driven state.
|
|
106
|
+
if (getReplayMode() === "history") return;
|
|
107
|
+
|
|
108
|
+
// Process the tick normally...
|
|
109
|
+
dispatch(updateQuote(JSON.parse(event.data)));
|
|
110
|
+
};
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Why `getReplayMode()` and not `useReplayMode()`?** The hook is a React render
|
|
114
|
+
subscription — it lags the event loop by a frame. A side-channel handler that reads
|
|
115
|
+
the hook's value can see stale `"live"` after a seek and let a live tick overwrite
|
|
116
|
+
restored history. `getReplayMode()` reads the current value synchronously and is the
|
|
117
|
+
correct gate for non-React code paths.
|
|
118
|
+
|
|
119
|
+
## Privacy & Redaction
|
|
120
|
+
|
|
121
|
+
RewindKit captures Redux state, which may contain PII. The privacy posture:
|
|
122
|
+
|
|
123
|
+
- **Client-only by default.** No data leaves the browser unless you add a transport.
|
|
124
|
+
- **Allowlist-first.** Use `includeStateKeys` to capture only the slices you intend.
|
|
125
|
+
In production, an allowlist is required — omitting it logs a warning.
|
|
126
|
+
- **Redaction.** Use `redactKeys` to mask sensitive fields before capture.
|
|
127
|
+
- **No tokens in web storage.** Session bundles never persist auth tokens.
|
|
128
|
+
|
|
129
|
+
See [PRIVACY.md](../../docs/PRIVACY.md) for the full privacy posture.
|
|
130
|
+
|
|
131
|
+
## Session bundles (export / import)
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
import { exportBundle, importBundle } from "@rewindkit/runtime";
|
|
135
|
+
|
|
136
|
+
// Export the current session
|
|
137
|
+
const json = exportBundle();
|
|
138
|
+
|
|
139
|
+
// Import a shared session
|
|
140
|
+
const bundle = importBundle(jsonString);
|
|
141
|
+
const player = createPlayer(bundle);
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Bundles are JSON-serializable and can be saved to a file or shared between
|
|
145
|
+
developers. They contain recorded actions, state snapshots, and metadata — but
|
|
146
|
+
never auth tokens or fields matched by `redactKeys`.
|
|
147
|
+
|
|
148
|
+
## ESM only
|
|
149
|
+
|
|
150
|
+
This package is ESM-only (`"type": "module"`). It works with Vite, esbuild, and
|
|
151
|
+
any bundler that supports ESM. A `require()` call will get `ERR_REQUIRE_ESM` —
|
|
152
|
+
this is intentional to prevent the dual-package hazard (two recorder instances).
|
|
153
|
+
|
|
154
|
+
## API overview
|
|
155
|
+
|
|
156
|
+
### Core (`@rewindkit/runtime`)
|
|
157
|
+
|
|
158
|
+
| Export | Description |
|
|
159
|
+
|---|---|
|
|
160
|
+
| `replayEnhancer` | Redux store enhancer — prepend to your enhancers |
|
|
161
|
+
| `configureReplay(opts)` | Configure and return a `ReplayHandle` (start/stop/export) |
|
|
162
|
+
| `registerStore(name, store)` | Register a remote's store (Module Federation) |
|
|
163
|
+
| `createPlayer(bundle)` | Create a player for time-travel |
|
|
164
|
+
| `seek(player, index)` | Jump to an event index |
|
|
165
|
+
| `returnToLive()` | Return to the live store state |
|
|
166
|
+
| `exportBundle()` / `importBundle(json)` | Session bundle I/O |
|
|
167
|
+
| `getReplayMode()` / `subscribeReplayMode()` | Synchronous replay mode signal |
|
|
168
|
+
| `VERSION`, `SCHEMA_VERSION`, `DELTA_FORMAT_VERSION` | Versioning constants |
|
|
169
|
+
|
|
170
|
+
### React companion (`@rewindkit/runtime/react`)
|
|
171
|
+
|
|
172
|
+
| Export | Description |
|
|
173
|
+
|---|---|
|
|
174
|
+
| `useReplayMode()` | Hook returning `"live"` or `"history"` (render-only) |
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
[MIT](./LICENSE)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SessionBundle } from "./bundle";
|
|
2
|
+
export declare class BundleValidationError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare const validateBundle: (b: unknown) => SessionBundle;
|
|
6
|
+
export declare const exportBundle: () => SessionBundle;
|
|
7
|
+
export declare const importBundle: (json: string | SessionBundle) => SessionBundle;
|
|
8
|
+
//# sourceMappingURL=bundle-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-io.d.ts","sourceRoot":"","sources":["../src/bundle-io.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM9C,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,cAAc,MAAO,OAAO,KAAG,aAsB3C,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,aAG/B,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,MAAM,GAAG,aAAa,KAAG,aAG3D,CAAC"}
|
package/dist/bundle.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export type ReplayEventType = "action" | "state_snapshot" | "component_render" | "route" | "feed_message";
|
|
2
|
+
export interface BaseEvent {
|
|
3
|
+
type: ReplayEventType | (string & {});
|
|
4
|
+
tsMs: number;
|
|
5
|
+
origin: "host" | string;
|
|
6
|
+
storeKey: string;
|
|
7
|
+
seq: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ActionEvent extends BaseEvent {
|
|
10
|
+
type: "action";
|
|
11
|
+
action: {
|
|
12
|
+
type: string;
|
|
13
|
+
payload?: unknown;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface StateSnapshotEvent extends BaseEvent {
|
|
17
|
+
type: "state_snapshot";
|
|
18
|
+
kind: "keyframe" | "delta";
|
|
19
|
+
slices: Record<string, unknown>;
|
|
20
|
+
removedSlices?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ComponentRenderEvent extends BaseEvent {
|
|
23
|
+
type: "component_render";
|
|
24
|
+
componentId: string;
|
|
25
|
+
props?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface RouteEvent extends BaseEvent {
|
|
28
|
+
type: "route";
|
|
29
|
+
path: string;
|
|
30
|
+
search?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface FeedMessageEvent extends BaseEvent {
|
|
33
|
+
type: "feed_message";
|
|
34
|
+
channel: "sow_page" | "tick" | "ack" | "oof";
|
|
35
|
+
topic: string;
|
|
36
|
+
request?: {
|
|
37
|
+
filter?: string;
|
|
38
|
+
orderBy?: string;
|
|
39
|
+
topN?: number;
|
|
40
|
+
skipN?: number;
|
|
41
|
+
};
|
|
42
|
+
rows?: unknown[];
|
|
43
|
+
matched?: number;
|
|
44
|
+
key?: string;
|
|
45
|
+
data?: unknown;
|
|
46
|
+
feedSeq?: number;
|
|
47
|
+
}
|
|
48
|
+
export type ReplayEvent = ActionEvent | StateSnapshotEvent | ComponentRenderEvent | RouteEvent | FeedMessageEvent | BaseEvent;
|
|
49
|
+
export interface RemoteInfo {
|
|
50
|
+
name: string;
|
|
51
|
+
storeKey: string;
|
|
52
|
+
registeredAtMs?: number;
|
|
53
|
+
}
|
|
54
|
+
export interface SessionBundle {
|
|
55
|
+
version: "1.0";
|
|
56
|
+
schemaVersion: number;
|
|
57
|
+
mode: "state-snapshot";
|
|
58
|
+
sessionId: string;
|
|
59
|
+
startTime: number;
|
|
60
|
+
duration: number;
|
|
61
|
+
remotes: RemoteInfo[];
|
|
62
|
+
events: ReplayEvent[];
|
|
63
|
+
}
|
|
64
|
+
export declare const SCHEMA_VERSION = 2;
|
|
65
|
+
export declare const DELTA_FORMAT_VERSION: "1.0";
|
|
66
|
+
export interface RawSnapshot {
|
|
67
|
+
readonly __brand: "raw";
|
|
68
|
+
readonly slices: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
export interface DisplaySnapshot {
|
|
71
|
+
readonly __brand: "display";
|
|
72
|
+
readonly slices: Record<string, unknown>;
|
|
73
|
+
}
|
|
74
|
+
export interface FeedView {
|
|
75
|
+
rows: unknown[];
|
|
76
|
+
matched: number;
|
|
77
|
+
}
|
|
78
|
+
export interface BundleDiff {
|
|
79
|
+
added: ReplayEvent[];
|
|
80
|
+
removed: ReplayEvent[];
|
|
81
|
+
changedStoreKeys: string[];
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Store } from "redux";
|
|
2
|
+
import type { ReplaySink } from "./recorder";
|
|
3
|
+
import type { SessionBundle } from "./bundle";
|
|
4
|
+
export interface ConfigureReplayOptions {
|
|
5
|
+
store?: Store;
|
|
6
|
+
sink?: ReplaySink;
|
|
7
|
+
redactKeys?: string[];
|
|
8
|
+
includeStateKeys?: string[];
|
|
9
|
+
includeFeedTopics?: string[];
|
|
10
|
+
keyframeEvery?: number;
|
|
11
|
+
fullKeyframeRatio?: number;
|
|
12
|
+
sample?: number;
|
|
13
|
+
maxEventsPerSecond?: number;
|
|
14
|
+
origin?: string;
|
|
15
|
+
now?: () => number;
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ReplayHandle {
|
|
19
|
+
start(): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
isRecording(): boolean;
|
|
22
|
+
getBundle(): SessionBundle;
|
|
23
|
+
}
|
|
24
|
+
export declare const configureReplay: (opts?: ConfigureReplayOptions) => ReplayHandle;
|
|
25
|
+
export declare const registerStore: (name: string, store: Store) => void;
|
|
26
|
+
export declare const unregisterStore: (name: string) => void;
|
|
27
|
+
//# sourceMappingURL=configure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI9C,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,WAAW,IAAI,OAAO,CAAC;IACvB,SAAS,IAAI,aAAa,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,UAAU,sBAAsB,KAAQ,YA6CnE,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU,MAAM,SAAS,KAAK,KAAG,IAE1D,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,IAE9C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StoreEnhancer } from "redux";
|
|
2
|
+
export declare const RESTORE_TYPE = "__REPLAYKIT_RESTORE";
|
|
3
|
+
export interface RestoreAction {
|
|
4
|
+
type: typeof RESTORE_TYPE;
|
|
5
|
+
slices: Record<string, unknown>;
|
|
6
|
+
removedSlices?: string[];
|
|
7
|
+
[extra: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare const replayEnhancer: StoreEnhancer;
|
|
10
|
+
//# sourceMappingURL=enhancer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancer.d.ts","sourceRoot":"","sources":["../src/enhancer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAW,aAAa,EAA4C,MAAM,OAAO,CAAC;AAG9F,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,YAAY,CAAC;IAE1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AA+CD,eAAO,MAAM,cAAc,EAAE,aAAyC,CAAC"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,QAAO,OAMzB,CAAC;AAKF,eAAO,MAAM,QAAQ,YAAa,MAAM,KAAG,IAM1C,CAAC;AAGF,eAAO,MAAM,eAAe,QAAO,IAElC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0-alpha.1";
|
|
2
|
+
export type { BaseEvent, ActionEvent, StateSnapshotEvent, ComponentRenderEvent, RouteEvent, FeedMessageEvent, ReplayEvent, ReplayEventType, RemoteInfo, SessionBundle, RawSnapshot, DisplaySnapshot, FeedView, BundleDiff, } from "./bundle";
|
|
3
|
+
export { SCHEMA_VERSION, DELTA_FORMAT_VERSION } from "./bundle";
|
|
4
|
+
export { configureReplay, registerStore, unregisterStore } from "./configure";
|
|
5
|
+
export type { ConfigureReplayOptions, ReplayHandle } from "./configure";
|
|
6
|
+
export { replayEnhancer } from "./enhancer";
|
|
7
|
+
export type { ReplaySink } from "./recorder";
|
|
8
|
+
export { getReplayMode, subscribeReplayMode, applyReplayState, seek, returnToLive, } from "./replay";
|
|
9
|
+
export type { ReplayMode } from "./replay";
|
|
10
|
+
export { createPlayer, foldStateAt, foldFeedAt, routeAt, diffBundles } from "./player";
|
|
11
|
+
export type { ReplayPlayer } from "./player";
|
|
12
|
+
export { exportBundle, importBundle } from "./bundle-io";
|
|
13
|
+
export { __redact, serializeForDisplay } from "./redaction";
|
|
14
|
+
export type { RedactOptions, DisplayOptions } from "./redaction";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAGvC,YAAY,EACV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,UAAU,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9E,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,IAAI,EACJ,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvF,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|