@buoy-gg/redux 7.0.30 → 7.0.31

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.
Files changed (44) hide show
  1. package/lib/commonjs/index.js +25 -0
  2. package/lib/commonjs/redux/components/ReduxActionButton.js +3 -1
  3. package/lib/commonjs/redux/components/ReduxActionDetailContent.js +60 -6
  4. package/lib/commonjs/redux/components/ReduxActionInfoView.js +61 -12
  5. package/lib/commonjs/redux/components/ReduxActionItem.js +20 -5
  6. package/lib/commonjs/redux/components/ReduxDetailViewToggle.js +7 -0
  7. package/lib/commonjs/redux/components/ReduxModal.js +168 -32
  8. package/lib/commonjs/redux/utils/activeStoreRegistry.js +31 -0
  9. package/lib/commonjs/redux/utils/autoInstrument.js +23 -40
  10. package/lib/commonjs/redux/utils/buoyReduxMiddleware.js +36 -9
  11. package/lib/commonjs/redux/utils/devtoolsHook.js +4 -0
  12. package/lib/commonjs/redux/utils/testIDs.js +75 -0
  13. package/lib/module/index.js +5 -0
  14. package/lib/module/redux/components/ReduxActionButton.js +3 -1
  15. package/lib/module/redux/components/ReduxActionDetailContent.js +60 -6
  16. package/lib/module/redux/components/ReduxActionInfoView.js +63 -14
  17. package/lib/module/redux/components/ReduxActionItem.js +20 -5
  18. package/lib/module/redux/components/ReduxDetailViewToggle.js +7 -0
  19. package/lib/module/redux/components/ReduxModal.js +170 -33
  20. package/lib/module/redux/utils/activeStoreRegistry.js +29 -0
  21. package/lib/module/redux/utils/autoInstrument.js +8 -40
  22. package/lib/module/redux/utils/buoyReduxMiddleware.js +32 -10
  23. package/lib/module/redux/utils/devtoolsHook.js +5 -1
  24. package/lib/module/redux/utils/testIDs.js +68 -0
  25. package/lib/typescript/index.d.ts +1 -0
  26. package/lib/typescript/index.d.ts.map +1 -1
  27. package/lib/typescript/redux/components/ReduxActionButton.d.ts +2 -1
  28. package/lib/typescript/redux/components/ReduxActionButton.d.ts.map +1 -1
  29. package/lib/typescript/redux/components/ReduxActionDetailContent.d.ts.map +1 -1
  30. package/lib/typescript/redux/components/ReduxActionInfoView.d.ts.map +1 -1
  31. package/lib/typescript/redux/components/ReduxActionItem.d.ts +15 -0
  32. package/lib/typescript/redux/components/ReduxActionItem.d.ts.map +1 -1
  33. package/lib/typescript/redux/components/ReduxDetailViewToggle.d.ts.map +1 -1
  34. package/lib/typescript/redux/components/ReduxModal.d.ts.map +1 -1
  35. package/lib/typescript/redux/utils/activeStoreRegistry.d.ts +27 -0
  36. package/lib/typescript/redux/utils/activeStoreRegistry.d.ts.map +1 -1
  37. package/lib/typescript/redux/utils/autoInstrument.d.ts +7 -11
  38. package/lib/typescript/redux/utils/autoInstrument.d.ts.map +1 -1
  39. package/lib/typescript/redux/utils/buoyReduxMiddleware.d.ts +17 -3
  40. package/lib/typescript/redux/utils/buoyReduxMiddleware.d.ts.map +1 -1
  41. package/lib/typescript/redux/utils/devtoolsHook.d.ts.map +1 -1
  42. package/lib/typescript/redux/utils/testIDs.d.ts +51 -0
  43. package/lib/typescript/redux/utils/testIDs.d.ts.map +1 -0
  44. package/package.json +4 -4
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Redux tool test handles.
5
+ *
6
+ * Every tappable and every value the e2e suite reads back is addressed
7
+ * `buoy-redux-<thing>`. One rule in here needs explaining, because it is the
8
+ * opposite of what the Events tool does and the difference is not cosmetic:
9
+ *
10
+ * **A redux row's handle carries an ORDINAL.** The Events tool can address a
11
+ * row by what it is about, because an event is a thing that happened to a
12
+ * named subject — one key, one URL, one atom. A redux action is not: an app
13
+ * dispatches `counter/increment` fifty times and every one of them is a
14
+ * separate, equally real row. Addressing them by type alone would give fifty
15
+ * views one handle, and Detox fails a *matcher* that hits more than one
16
+ * element — so the suite would break on `toExist()`, before any assertion,
17
+ * with an error that says nothing about duplicate actions.
18
+ *
19
+ * So the handle is `buoy-redux-row-<slug(type)>-<n>`, where n counts back from
20
+ * the newest row of that type (1 = newest). It is deliberately relative to the
21
+ * list rather than absolute: an action has no identity of its own that a host
22
+ * could know in advance — `id` is a timestamp plus a per-process counter, and
23
+ * the counter's value depends on how many actions the app happened to dispatch
24
+ * before the test looked. What a test CAN know is "the increment I just fired
25
+ * is the newest increment", which is exactly what `-1` means.
26
+ *
27
+ * The consequence, and it is the same one the Events tool documents for its
28
+ * positional-free handles: read and tap in one beat. A row's ordinal changes
29
+ * the moment another action of that type arrives.
30
+ *
31
+ * The suite mirrors these rules in CommonJS (`example-dev-build/utils/
32
+ * reduxBench.js`) and asserts the two agree — Detox runs in Node on the host
33
+ * and cannot import TypeScript.
34
+ */
35
+
36
+ /** Prefix every handle in this tool shares. */
37
+ export const REDUX_TEST_ID = "buoy-redux";
38
+
39
+ /** `counter/increment` → `counter-increment`. Shared with every Buoy tool. */
40
+ export function slugForTestID(value) {
41
+ return String(value ?? "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
42
+ }
43
+
44
+ /**
45
+ * Handle for one action row: `buoy-redux-row-counter-increment-1`.
46
+ *
47
+ * `ordinal` is 1-based and counts back from the newest row of this type.
48
+ */
49
+ export function actionRowTestID(type, ordinal) {
50
+ return `${REDUX_TEST_ID}-row-${slugForTestID(type)}-${ordinal}`;
51
+ }
52
+
53
+ /**
54
+ * Row handle per action id for one rendered list, newest-first.
55
+ *
56
+ * Built once for the whole list rather than per row, because an ordinal is a
57
+ * fact about the list and a row cannot compute its own.
58
+ */
59
+ export function buildActionRowTestIDs(actions) {
60
+ const seen = new Map();
61
+ const handles = new Map();
62
+ for (const action of actions) {
63
+ const ordinal = (seen.get(action.type) ?? 0) + 1;
64
+ seen.set(action.type, ordinal);
65
+ handles.set(action.id, actionRowTestID(action.type, ordinal));
66
+ }
67
+ return handles;
68
+ }
@@ -69,6 +69,7 @@ export { ReduxActionDetailView } from "./redux/components/ReduxActionDetailView"
69
69
  export { ReduxActionDetailContent, ReduxActionDetailFooter, } from "./redux/components/ReduxActionDetailContent";
70
70
  export { ReduxIcon } from "./redux/components/ReduxIcon";
71
71
  export { ReduxAutoInstrument } from "./redux/components/ReduxAutoInstrument";
72
+ export { REDUX_TEST_ID, actionRowTestID, buildActionRowTestIDs, slugForTestID, } from "./redux/utils/testIDs";
72
73
  export type { ActionCategory, ActionMeta, ReduxAction, ReduxFilter, ReduxConnectorOptions, ReduxStoreMinimal, BuoyReduxMiddlewareOptions, } from "./redux/types";
73
74
  /** @internal */
74
75
  export { reduxActionStore } from "./redux/utils/reduxActionStore";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAGH,OAAO,gCAAgC,CAAC;AAKxC,OAAO,4BAA4B,CAAC;AAKpC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK5D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAK3C,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,yCAAyC,CAAC;AAKjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,sCAAsC,CAAC;AAO9C,OAAO,EACL,UAAU,EACV,aAAa,EACb,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAK7E,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAKvB,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAGH,OAAO,gCAAgC,CAAC;AAKxC,OAAO,4BAA4B,CAAC;AAKpC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK5D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAK3C,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,yCAAyC,CAAC;AAKjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,sCAAsC,CAAC;AAO9C,OAAO,EACL,UAAU,EACV,aAAa,EACb,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAK7E,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAK/B,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAKvB,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -48,7 +48,8 @@ interface ReduxActionButtonProps {
48
48
  text: string;
49
49
  type: ButtonType;
50
50
  disabled?: boolean;
51
+ testID?: string;
51
52
  }
52
- export declare function ReduxActionButton({ onPress, text, type, disabled, }: ReduxActionButtonProps): import("react").JSX.Element;
53
+ export declare function ReduxActionButton({ onPress, text, type, disabled, testID, }: ReduxActionButtonProps): import("react").JSX.Element;
53
54
  export {};
54
55
  //# sourceMappingURL=ReduxActionButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxActionButton.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,aAAa,CAAC;AAEpD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAgB,GACjB,EAAE,sBAAsB,+BAwCxB"}
1
+ {"version":3,"file":"ReduxActionButton.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,aAAa,CAAC;AAEpD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAgB,EAChB,MAAM,GACP,EAAE,sBAAsB,+BAyCxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxActionDetailContent.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionDetailContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAIjC,UAAU,6BAA6B;IACrC,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,iCAAiC;IACjC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAwDD,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,qBAA6B,EAC7B,WAAsB,GACvB,EAAE,6BAA6B,+BA0M/B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,GACd,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,sCAiBA"}
1
+ {"version":3,"file":"ReduxActionDetailContent.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionDetailContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AASjC,UAAU,6BAA6B;IACrC,qCAAqC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,iCAAiC;IACjC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAwDD,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,qBAA6B,EAC7B,WAAsB,GACvB,EAAE,6BAA6B,+BA+P/B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,GACd,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,sCAiBA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxActionInfoView.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionInfoView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAmB/E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAK5D,UAAU,wBAAwB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACpD;AAoID,eAAO,MAAM,mBAAmB,sDAqb9B,CAAC"}
1
+ {"version":3,"file":"ReduxActionInfoView.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionInfoView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAC;AAmB/E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAU5D,UAAU,wBAAwB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACpD;AA4ID,eAAO,MAAM,mBAAmB,sDAsgB9B,CAAC"}
@@ -6,6 +6,21 @@ import type { ReduxAction } from "../types";
6
6
  interface ReduxActionItemProps {
7
7
  action: ReduxAction;
8
8
  onPress: (action: ReduxAction) => void;
9
+ /**
10
+ * How many captured actions share this action's requestId, supplied by the
11
+ * list. A row cannot derive this and stay correct: it is a fact about OTHER
12
+ * rows, and this component is memoized on props whose identity never changes
13
+ * — so a `pending` row drawn before its `fulfilled` partner existed would
14
+ * keep saying it is alone forever. Passing it as a prop is what brings the
15
+ * row back when the partner lands.
16
+ */
17
+ linkedCount?: number;
18
+ /**
19
+ * Row handle, built by the list (see ../utils/testIDs.ts). A row cannot
20
+ * build its own: the handle carries an ordinal among rows of the same action
21
+ * type, which is a fact about the list.
22
+ */
23
+ testID?: string;
9
24
  }
10
25
  export declare const ReduxActionItem: import("react").NamedExoticComponent<ReduxActionItemProps>;
11
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxActionItem.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionItem.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAG5D,UAAU,oBAAoB;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACxC;AAmKD,eAAO,MAAM,eAAe,4DAkG1B,CAAC"}
1
+ {"version":3,"file":"ReduxActionItem.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxActionItem.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAG5D,UAAU,oBAAoB;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmKD,eAAO,MAAM,eAAe,4DAiI1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxDetailViewToggle.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxDetailViewToggle.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAe,MAAM,OAAO,CAAC;AAIpC,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAW9D,UAAU,0BAA0B;IAClC,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4BD,eAAO,MAAM,qBAAqB,wDA8DhC,CAAC"}
1
+ {"version":3,"file":"ReduxDetailViewToggle.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxDetailViewToggle.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAe,MAAM,OAAO,CAAC;AAIpC,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAW9D,UAAU,0BAA0B;IAClC,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4BD,eAAO,MAAM,qBAAqB,wDAkEhC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReduxModal.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxModal.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAoC,CAAC;AAExE,UAAU,eAAe;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C;;;;;;;OAOG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACzC;AAgBD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,EAAE,eAAe,sCAocjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAGpE"}
1
+ {"version":3,"file":"ReduxModal.d.ts","sourceRoot":"","sources":["../../../../src/redux/components/ReduxModal.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAoC,CAAC;AAExE,UAAU,eAAe;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C;;;;;;;OAOG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACzC;AAiCD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,EAAE,eAAe,sCAslBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAGpE"}
@@ -29,6 +29,27 @@ export declare function registerActiveStore(store: ActiveReduxStore, mech: Captu
29
29
  export declare function unregisterActiveStore(store: ActiveReduxStore): void;
30
30
  export declare function getActiveStore(): ActiveReduxStore | null;
31
31
  export declare function getCaptureMechanism(): CaptureMechanism | null;
32
+ /**
33
+ * Record that a reducer able to serve `BUOY_JUMP_TO_STATE` is in the store.
34
+ *
35
+ * Called by the devtools-hook enhancer and by `withBuoyDevTools` — the only
36
+ * two things that wrap the root reducer. Capture and time travel are separate
37
+ * capabilities and they are wired separately: a store can be fully captured
38
+ * through `buoyReduxMiddleware` and still have no way to restore a state,
39
+ * because middleware sits ABOVE the reducer and cannot replace what it
40
+ * returns.
41
+ */
42
+ export declare function markTimeTravelReducer(): void;
43
+ /**
44
+ * Whether pressing JUMP can actually do anything.
45
+ *
46
+ * Worth a first-class answer rather than a try-and-see, because the failure is
47
+ * invisible: `jumpToState` dispatches into a store that simply does not
48
+ * recognise the action, the reducer returns the state it already had, and the
49
+ * screen does not move. From the outside that is indistinguishable from a
50
+ * devtool that is broken.
51
+ */
52
+ export declare function isTimeTravelAvailable(): boolean;
32
53
  /**
33
54
  * Recorded by the auto-instrument hook so non-React surfaces (sync adapter,
34
55
  * MCP) can report WHY there's no store instead of a generic failure.
@@ -40,6 +61,12 @@ export interface InstrumentationStatus {
40
61
  /** What the bound mechanism can see. */
41
62
  capture: "full" | "top-level-only" | "none";
42
63
  hasStore: boolean;
64
+ /**
65
+ * Whether a state JUMP would do anything. Independent of `capture`: the
66
+ * middleware path is full capture with no time travel unless the root
67
+ * reducer was also wrapped. See markTimeTravelReducer.
68
+ */
69
+ timeTravel: boolean;
43
70
  /** Why there's no store, when known (from the auto-instrument hook). */
44
71
  diagnostic: ReduxDiagnostic;
45
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"activeStoreRegistry.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/activeStoreRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;IAIxB,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AAEnE,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAAC;AAEtE,oEAAoE;AACpE,eAAO,MAAM,eAAe,eAA4C,CAAC;AAMzE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAIN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAKnE;AAED,wBAAgB,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAExD;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,wCAAwC;IACxC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAYhE"}
1
+ {"version":3,"file":"activeStoreRegistry.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/activeStoreRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;IAIxB,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AAEnE,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAAC;AAEtE,oEAAoE;AACpE,eAAO,MAAM,eAAe,eAA4C,CAAC;AAOzE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAIN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAKnE;AAED,wBAAgB,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAExD;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,wCAAwC;IACxC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAahE"}
@@ -12,7 +12,7 @@
12
12
  * rejected, RTK Query) bypass the patch. That's why this mechanism reports
13
13
  * capture as "top-level-only" — see activeStoreRegistry.getInstrumentationStatus.
14
14
  */
15
- import type { Store, UnknownAction } from "@reduxjs/toolkit";
15
+ import type { Store } from "@reduxjs/toolkit";
16
16
  import { type ActiveReduxStore } from "./activeStoreRegistry";
17
17
  export { getInstrumentationStatus, type InstrumentationStatus, type CaptureMechanism, } from "./activeStoreRegistry";
18
18
  export interface AutoInstrumentOptions {
@@ -58,18 +58,14 @@ export declare function uninstrumentStore(store: Store): void;
58
58
  */
59
59
  export declare function registerReduxStore(store: Store, options?: AutoInstrumentOptions): () => void;
60
60
  /**
61
- * Jump to a specific state (time-travel).
61
+ * Time travel lives in buoyReduxMiddleware.ts and is re-exported here.
62
62
  *
63
- * Real on the enhancer path (reducer is wrapped from creation) and on the
64
- * middleware path when the app used `withBuoyDevTools`. On the bare patch
65
- * path there's no reducer wrapper, so the jump action is ignored — we detect
66
- * that and warn once instead of pretending it worked.
63
+ * It used to be reimplemented in this file, and the two copies drifted: this
64
+ * one learned to notice that a jump had been ignored, the one the modal's JUMP
65
+ * button actually calls never did. So the detection existed and no user could
66
+ * ever have seen it. One implementation, one behaviour.
67
67
  */
68
- export declare function jumpToState(state: unknown): void;
69
- /**
70
- * Replay an action (dispatch it again)
71
- */
72
- export declare function replayAction(action: UnknownAction): void;
68
+ export { jumpToState, replayAction, isTimeTravelAvailable, } from "./buoyReduxMiddleware";
73
69
  /**
74
70
  * Get the currently active (instrumented) store.
75
71
  *
@@ -1 +1 @@
1
- {"version":3,"file":"autoInstrument.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/autoInstrument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAsB/B,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAGzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,qBAA0B,GAClC,MAAM,IAAI,CAuFZ;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAapD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,qBAA0B,GAClC,MAAM,IAAI,CAEZ;AASD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA0BhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAOxD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
1
+ {"version":3,"file":"autoInstrument.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/autoInstrument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAsB/B,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAGzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,qBAA0B,GAClC,MAAM,IAAI,CAuFZ;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAapD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,qBAA0B,GAClC,MAAM,IAAI,CAEZ;AAMD;;;;;;;GAOG;AACH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
@@ -25,11 +25,25 @@ export declare const BUOY_REPLAY_ACTION = "@@buoy/REPLAY_ACTION";
25
25
  /**
26
26
  * Jump to a specific state (time-travel).
27
27
  *
28
- * Registry-backed, so it works on EVERY capture path (enhancer, middleware,
29
- * patch) — previously this only worked when the middleware was installed,
30
- * which silently broke the modal's Jump button on the zero-config path.
28
+ * Registry-backed, so it reaches the store on every capture path — but
29
+ * REACHING the store is not the same as being able to jump, and conflating the
30
+ * two is what made this fail invisibly. A jump is an action like any other: it
31
+ * only does something if a reducer handles it, and the only two things that
32
+ * install such a reducer are the devtools-hook enhancer and `withBuoyDevTools`.
33
+ * An app that captures through `buoyReduxMiddleware` alone dispatches the jump
34
+ * into a store that has never heard of it, gets its own state back, and shows
35
+ * a screen that does not move — with no error, because nothing went wrong.
36
+ *
37
+ * So the capability is checked up front and refused out loud. The UI asks the
38
+ * same question (`isTimeTravelAvailable`) and disables the button, which is the
39
+ * half a warning cannot do.
31
40
  */
32
41
  export declare function jumpToState(state: unknown): void;
42
+ /**
43
+ * Whether the JUMP affordance can do anything in this app. Re-exported from
44
+ * the registry so hosts have one import for the whole time-travel surface.
45
+ */
46
+ export { isTimeTravelAvailable } from "./activeStoreRegistry";
33
47
  /**
34
48
  * Replay an action (dispatch it again)
35
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"buoyReduxMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/buoyReduxMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAc3D;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAMD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAczD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAahD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAOxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWnE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA4BjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,UAAU,CAoCZ"}
1
+ {"version":3,"file":"buoyReduxMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/buoyReduxMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAgB3D;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAMD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAczD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAsBhD;AAED;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAOxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAcnE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA4BjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,UAAU,CAoCZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"devtoolsHook.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/devtoolsHook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;AACnD,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;AA+B7E;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC9B,aAAa,cAAc,MAC3B,SAAS,UAAU,EAAE,iBAAiB,OAAO,QAgC7C,CAAC;AAuBJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
1
+ {"version":3,"file":"devtoolsHook.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/devtoolsHook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;AACnD,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;AAmC7E;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC9B,aAAa,cAAc,MAC3B,SAAS,UAAU,EAAE,iBAAiB,OAAO,QAgC7C,CAAC;AAuBJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Redux tool test handles.
3
+ *
4
+ * Every tappable and every value the e2e suite reads back is addressed
5
+ * `buoy-redux-<thing>`. One rule in here needs explaining, because it is the
6
+ * opposite of what the Events tool does and the difference is not cosmetic:
7
+ *
8
+ * **A redux row's handle carries an ORDINAL.** The Events tool can address a
9
+ * row by what it is about, because an event is a thing that happened to a
10
+ * named subject — one key, one URL, one atom. A redux action is not: an app
11
+ * dispatches `counter/increment` fifty times and every one of them is a
12
+ * separate, equally real row. Addressing them by type alone would give fifty
13
+ * views one handle, and Detox fails a *matcher* that hits more than one
14
+ * element — so the suite would break on `toExist()`, before any assertion,
15
+ * with an error that says nothing about duplicate actions.
16
+ *
17
+ * So the handle is `buoy-redux-row-<slug(type)>-<n>`, where n counts back from
18
+ * the newest row of that type (1 = newest). It is deliberately relative to the
19
+ * list rather than absolute: an action has no identity of its own that a host
20
+ * could know in advance — `id` is a timestamp plus a per-process counter, and
21
+ * the counter's value depends on how many actions the app happened to dispatch
22
+ * before the test looked. What a test CAN know is "the increment I just fired
23
+ * is the newest increment", which is exactly what `-1` means.
24
+ *
25
+ * The consequence, and it is the same one the Events tool documents for its
26
+ * positional-free handles: read and tap in one beat. A row's ordinal changes
27
+ * the moment another action of that type arrives.
28
+ *
29
+ * The suite mirrors these rules in CommonJS (`example-dev-build/utils/
30
+ * reduxBench.js`) and asserts the two agree — Detox runs in Node on the host
31
+ * and cannot import TypeScript.
32
+ */
33
+ import type { ReduxAction } from "../types";
34
+ /** Prefix every handle in this tool shares. */
35
+ export declare const REDUX_TEST_ID = "buoy-redux";
36
+ /** `counter/increment` → `counter-increment`. Shared with every Buoy tool. */
37
+ export declare function slugForTestID(value: unknown): string;
38
+ /**
39
+ * Handle for one action row: `buoy-redux-row-counter-increment-1`.
40
+ *
41
+ * `ordinal` is 1-based and counts back from the newest row of this type.
42
+ */
43
+ export declare function actionRowTestID(type: string, ordinal: number): string;
44
+ /**
45
+ * Row handle per action id for one rendered list, newest-first.
46
+ *
47
+ * Built once for the whole list rather than per row, because an ordinal is a
48
+ * fact about the list and a row cannot compute its own.
49
+ */
50
+ export declare function buildActionRowTestIDs(actions: ReduxAction[]): Map<string, string>;
51
+ //# sourceMappingURL=testIDs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testIDs.d.ts","sourceRoot":"","sources":["../../../../src/redux/utils/testIDs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,+CAA+C;AAC/C,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,GACrB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/redux",
3
- "version": "7.0.30",
3
+ "version": "7.0.31",
4
4
  "description": "Redux DevTools inside your React Native app — action log, state diffs & time travel with zero store changes. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -31,9 +31,9 @@
31
31
  "**/snapshotProvider.ts"
32
32
  ],
33
33
  "dependencies": {
34
- "@buoy-gg/shared-ui": "^7.0.30",
35
- "@buoy-gg/floating-tools-core": "^7.0.30",
36
- "@buoy-gg/license": "^7.0.30"
34
+ "@buoy-gg/shared-ui": "^7.0.31",
35
+ "@buoy-gg/floating-tools-core": "^7.0.31",
36
+ "@buoy-gg/license": "^7.0.31"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@reduxjs/toolkit": ">=1.9.0",