@shakenbake/react-native 0.0.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.
Files changed (73) hide show
  1. package/dist/ShakeNbakeProvider.d.ts +26 -0
  2. package/dist/ShakeNbakeProvider.d.ts.map +1 -0
  3. package/dist/ShakeNbakeProvider.js +338 -0
  4. package/dist/ShakeNbakeProvider.js.map +1 -0
  5. package/dist/__tests__/capture.test.d.ts +2 -0
  6. package/dist/__tests__/capture.test.d.ts.map +1 -0
  7. package/dist/__tests__/capture.test.js +93 -0
  8. package/dist/__tests__/capture.test.js.map +1 -0
  9. package/dist/__tests__/collectors.test.d.ts +2 -0
  10. package/dist/__tests__/collectors.test.d.ts.map +1 -0
  11. package/dist/__tests__/collectors.test.js +212 -0
  12. package/dist/__tests__/collectors.test.js.map +1 -0
  13. package/dist/__tests__/drawing-canvas.test.d.ts +2 -0
  14. package/dist/__tests__/drawing-canvas.test.d.ts.map +1 -0
  15. package/dist/__tests__/drawing-canvas.test.js +503 -0
  16. package/dist/__tests__/drawing-canvas.test.js.map +1 -0
  17. package/dist/__tests__/provider.test.d.ts +2 -0
  18. package/dist/__tests__/provider.test.d.ts.map +1 -0
  19. package/dist/__tests__/provider.test.js +431 -0
  20. package/dist/__tests__/provider.test.js.map +1 -0
  21. package/dist/__tests__/report-form.test.d.ts +2 -0
  22. package/dist/__tests__/report-form.test.d.ts.map +1 -0
  23. package/dist/__tests__/report-form.test.js +178 -0
  24. package/dist/__tests__/report-form.test.js.map +1 -0
  25. package/dist/__tests__/triggers.test.d.ts +2 -0
  26. package/dist/__tests__/triggers.test.d.ts.map +1 -0
  27. package/dist/__tests__/triggers.test.js +53 -0
  28. package/dist/__tests__/triggers.test.js.map +1 -0
  29. package/dist/annotate/DrawingCanvas.d.ts +13 -0
  30. package/dist/annotate/DrawingCanvas.d.ts.map +1 -0
  31. package/dist/annotate/DrawingCanvas.js +475 -0
  32. package/dist/annotate/DrawingCanvas.js.map +1 -0
  33. package/dist/annotate/types.d.ts +72 -0
  34. package/dist/annotate/types.d.ts.map +1 -0
  35. package/dist/annotate/types.js +34 -0
  36. package/dist/annotate/types.js.map +1 -0
  37. package/dist/annotate/useDrawingOperations.d.ts +88 -0
  38. package/dist/annotate/useDrawingOperations.d.ts.map +1 -0
  39. package/dist/annotate/useDrawingOperations.js +186 -0
  40. package/dist/annotate/useDrawingOperations.js.map +1 -0
  41. package/dist/capture/screenshot.d.ts +31 -0
  42. package/dist/capture/screenshot.d.ts.map +1 -0
  43. package/dist/capture/screenshot.js +90 -0
  44. package/dist/capture/screenshot.js.map +1 -0
  45. package/dist/context/collectors.d.ts +25 -0
  46. package/dist/context/collectors.d.ts.map +1 -0
  47. package/dist/context/collectors.js +244 -0
  48. package/dist/context/collectors.js.map +1 -0
  49. package/dist/hooks/useShakeNbake.d.ts +28 -0
  50. package/dist/hooks/useShakeNbake.d.ts.map +1 -0
  51. package/dist/hooks/useShakeNbake.js +30 -0
  52. package/dist/hooks/useShakeNbake.js.map +1 -0
  53. package/dist/index.d.ts +19 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +49 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/triggers/shake.d.ts +16 -0
  58. package/dist/triggers/shake.d.ts.map +1 -0
  59. package/dist/triggers/shake.js +41 -0
  60. package/dist/triggers/shake.js.map +1 -0
  61. package/dist/ui/ReportForm.d.ts +33 -0
  62. package/dist/ui/ReportForm.d.ts.map +1 -0
  63. package/dist/ui/ReportForm.js +608 -0
  64. package/dist/ui/ReportForm.js.map +1 -0
  65. package/dist/ui/form-validation.d.ts +26 -0
  66. package/dist/ui/form-validation.d.ts.map +1 -0
  67. package/dist/ui/form-validation.js +44 -0
  68. package/dist/ui/form-validation.js.map +1 -0
  69. package/dist/ui/state-machine.d.ts +70 -0
  70. package/dist/ui/state-machine.d.ts.map +1 -0
  71. package/dist/ui/state-machine.js +107 -0
  72. package/dist/ui/state-machine.js.map +1 -0
  73. package/package.json +57 -0
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import type { ShakeNbakeConfig } from '@shakenbake/core';
3
+ import type { UseShakeNbakeResult } from './hooks/useShakeNbake.js';
4
+ export declare const ShakeNbakeContext: React.Context<UseShakeNbakeResult | null>;
5
+ export interface ShakeNbakeProviderProps {
6
+ config: ShakeNbakeConfig;
7
+ children: React.ReactNode;
8
+ }
9
+ /**
10
+ * Wraps the host app and manages the bug-reporting flow.
11
+ *
12
+ * 1. On mount: creates PluginRegistry, registers ShakeTrigger + ViewShotCapture +
13
+ * DeviceContextCollector, activates triggers.
14
+ * 2. On trigger: captures screenshot, opens annotation canvas, then report form.
15
+ * 3. On submit: builds BugReport and submits via the DestinationAdapter.
16
+ * 4. On unmount: deactivates all triggers.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <ShakeNbakeProvider config={{ enabled: true, destination: myAdapter }}>
21
+ * <App />
22
+ * </ShakeNbakeProvider>
23
+ * ```
24
+ */
25
+ export declare function ShakeNbakeProvider(props: ShakeNbakeProviderProps): React.ReactNode;
26
+ //# sourceMappingURL=ShakeNbakeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShakeNbakeProvider.d.ts","sourceRoot":"","sources":["../src/ShakeNbakeProvider.tsx"],"names":[],"mappings":"AAeA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAmBpE,eAAO,MAAM,iBAAiB,2CAAkD,CAAC;AAMjF,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,KAAK,CAAC,SAAS,CAqUjB"}
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // @shakenbake/react-native — ShakeNbakeProvider
4
+ //
5
+ // Top-level React context provider that wraps the host app and manages the
6
+ // entire bug-reporting lifecycle:
7
+ // idle -> triggered -> capturing -> annotating -> form -> submitting -> success/error -> idle
8
+ //
9
+ // On mount it registers the default plugins (ShakeTrigger, ViewShotCapture,
10
+ // DeviceContextCollector), activates triggers, and wraps children in a
11
+ // capturable View for react-native-view-shot.
12
+ //
13
+ // Since `react-native` is a peer dependency, all RN components are loaded
14
+ // dynamically at runtime using the established pattern.
15
+ // ---------------------------------------------------------------------------
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.ShakeNbakeContext = void 0;
51
+ exports.ShakeNbakeProvider = ShakeNbakeProvider;
52
+ const react_1 = __importStar(require("react"));
53
+ const core_1 = require("@shakenbake/core");
54
+ const shake_js_1 = require("./triggers/shake.js");
55
+ const screenshot_js_1 = require("./capture/screenshot.js");
56
+ const collectors_js_1 = require("./context/collectors.js");
57
+ const DrawingCanvas_js_1 = require("./annotate/DrawingCanvas.js");
58
+ const ReportForm_js_1 = require("./ui/ReportForm.js");
59
+ const state_machine_js_1 = require("./ui/state-machine.js");
60
+ // ---------------------------------------------------------------------------
61
+ // Context
62
+ // ---------------------------------------------------------------------------
63
+ exports.ShakeNbakeContext = (0, react_1.createContext)(null);
64
+ // ---------------------------------------------------------------------------
65
+ // ShakeNbakeProvider component
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Wraps the host app and manages the bug-reporting flow.
69
+ *
70
+ * 1. On mount: creates PluginRegistry, registers ShakeTrigger + ViewShotCapture +
71
+ * DeviceContextCollector, activates triggers.
72
+ * 2. On trigger: captures screenshot, opens annotation canvas, then report form.
73
+ * 3. On submit: builds BugReport and submits via the DestinationAdapter.
74
+ * 4. On unmount: deactivates all triggers.
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * <ShakeNbakeProvider config={{ enabled: true, destination: myAdapter }}>
79
+ * <App />
80
+ * </ShakeNbakeProvider>
81
+ * ```
82
+ */
83
+ function ShakeNbakeProvider(props) {
84
+ const { config, children } = props;
85
+ // ---- Module loading ----
86
+ const [rn, setRn] = (0, react_1.useState)(null);
87
+ (0, react_1.useEffect)(() => {
88
+ let cancelled = false;
89
+ async function load() {
90
+ try {
91
+ const mod = await import('react-native');
92
+ if (!cancelled)
93
+ setRn(mod);
94
+ }
95
+ catch {
96
+ // react-native not available — provider still renders children
97
+ }
98
+ }
99
+ void load();
100
+ return () => {
101
+ cancelled = true;
102
+ };
103
+ }, []);
104
+ // ---- Plugin system ----
105
+ const registryRef = (0, react_1.useRef)(null);
106
+ const builderRef = (0, react_1.useRef)(null);
107
+ const capturePluginRef = (0, react_1.useRef)(null);
108
+ const viewRef = (0, react_1.useRef)(null);
109
+ // ---- Flow state ----
110
+ const [flowState, setFlowState] = (0, react_1.useState)(state_machine_js_1.createFlowState);
111
+ const dispatch = (0, react_1.useCallback)((action) => {
112
+ setFlowState((prev) => (0, state_machine_js_1.flowReducer)(prev, action));
113
+ }, []);
114
+ // ---- Initialize plugins on mount ----
115
+ (0, react_1.useEffect)(() => {
116
+ if (!config.enabled)
117
+ return;
118
+ const registry = new core_1.PluginRegistry();
119
+ const capturePlugin = new screenshot_js_1.ViewShotCapture();
120
+ capturePluginRef.current = capturePlugin;
121
+ // Register defaults
122
+ const shakeTrigger = new shake_js_1.ShakeTrigger();
123
+ registry.registerTrigger(shakeTrigger);
124
+ registry.registerCapture(capturePlugin);
125
+ registry.registerCollector(new collectors_js_1.DeviceContextCollector({
126
+ redactFields: config.privacy?.redactFields,
127
+ }));
128
+ // Register additional triggers from config
129
+ if (config.triggers) {
130
+ for (const trigger of config.triggers) {
131
+ registry.registerTrigger(trigger);
132
+ }
133
+ }
134
+ // Register additional collectors from config
135
+ if (config.contextCollectors) {
136
+ for (const collector of config.contextCollectors) {
137
+ registry.registerCollector(collector);
138
+ }
139
+ }
140
+ const builder = new core_1.ReportBuilder(registry, config.destination);
141
+ registryRef.current = registry;
142
+ builderRef.current = builder;
143
+ return () => {
144
+ registry.deactivateTriggers();
145
+ registry.clear();
146
+ registryRef.current = null;
147
+ builderRef.current = null;
148
+ };
149
+ }, [config]);
150
+ // ---- Trigger handler ----
151
+ const handleTrigger = (0, react_1.useCallback)(() => {
152
+ if (!config.enabled)
153
+ return;
154
+ setFlowState((prev) => {
155
+ if (prev.step !== 'idle')
156
+ return prev;
157
+ return (0, state_machine_js_1.flowReducer)(prev, { type: 'TRIGGER' });
158
+ });
159
+ }, [config.enabled]);
160
+ // ---- Activate triggers with the handler ----
161
+ (0, react_1.useEffect)(() => {
162
+ if (!config.enabled || !registryRef.current)
163
+ return;
164
+ registryRef.current.activateTriggers(handleTrigger);
165
+ return () => {
166
+ registryRef.current?.deactivateTriggers();
167
+ };
168
+ }, [config.enabled, handleTrigger]);
169
+ // ---- Set capture ref when viewRef becomes available ----
170
+ (0, react_1.useEffect)(() => {
171
+ if (capturePluginRef.current && viewRef.current) {
172
+ capturePluginRef.current.setRef(viewRef);
173
+ }
174
+ });
175
+ // ---- Auto-capture when triggered ----
176
+ (0, react_1.useEffect)(() => {
177
+ if (flowState.step !== 'triggered')
178
+ return;
179
+ let cancelled = false;
180
+ async function captureAndCollect() {
181
+ dispatch({ type: 'CAPTURE_START' });
182
+ try {
183
+ const builder = builderRef.current;
184
+ if (!builder) {
185
+ dispatch({ type: 'CAPTURE_ERROR', error: 'ReportBuilder not initialized' });
186
+ return;
187
+ }
188
+ const [captureResult, context] = await Promise.all([
189
+ builder.startCapture(),
190
+ builder.collectContext(),
191
+ ]);
192
+ if (cancelled)
193
+ return;
194
+ dispatch({
195
+ type: 'CAPTURE_DONE',
196
+ captureResult,
197
+ context,
198
+ });
199
+ }
200
+ catch (err) {
201
+ if (cancelled)
202
+ return;
203
+ dispatch({
204
+ type: 'CAPTURE_ERROR',
205
+ error: err instanceof Error ? err.message : 'Capture failed',
206
+ });
207
+ }
208
+ }
209
+ void captureAndCollect();
210
+ return () => {
211
+ cancelled = true;
212
+ };
213
+ }, [flowState.step, dispatch]);
214
+ // ---- Annotation done handler ----
215
+ const handleAnnotationDone = (0, react_1.useCallback)((annotatedBase64, originalBase64) => {
216
+ dispatch({
217
+ type: 'ANNOTATE_DONE',
218
+ annotatedScreenshot: annotatedBase64,
219
+ originalScreenshot: originalBase64,
220
+ });
221
+ }, [dispatch]);
222
+ const handleAnnotationCancel = (0, react_1.useCallback)(() => {
223
+ dispatch({ type: 'ANNOTATE_CANCEL' });
224
+ }, [dispatch]);
225
+ const handleReAnnotate = (0, react_1.useCallback)(() => {
226
+ dispatch({ type: 'RE_ANNOTATE' });
227
+ }, [dispatch]);
228
+ // ---- Form submit handler ----
229
+ const handleFormSubmit = (0, react_1.useCallback)(async (input) => {
230
+ dispatch({ type: 'SUBMIT_START' });
231
+ try {
232
+ const builder = builderRef.current;
233
+ if (!builder) {
234
+ throw new Error('ReportBuilder not initialized');
235
+ }
236
+ const context = (flowState.data.context ?? {});
237
+ const report = builder.build(input, context);
238
+ // Attach custom metadata if configured
239
+ if (config.customMetadata) {
240
+ report.customMetadata = config.customMetadata();
241
+ }
242
+ // Set proper dimensions
243
+ if (flowState.data.captureResult) {
244
+ report.screenshot.dimensions = flowState.data.captureResult.dimensions;
245
+ }
246
+ const result = await builder.submit(report);
247
+ dispatch({ type: 'SUBMIT_DONE', result });
248
+ return result;
249
+ }
250
+ catch (err) {
251
+ const errorMsg = err instanceof Error ? err.message : 'Submit failed';
252
+ dispatch({ type: 'SUBMIT_ERROR', error: errorMsg });
253
+ throw err;
254
+ }
255
+ }, [dispatch, flowState.data, config]);
256
+ // ---- Form cancel handler ----
257
+ const handleFormCancel = (0, react_1.useCallback)(() => {
258
+ dispatch({ type: 'RESET' });
259
+ }, [dispatch]);
260
+ // ---- Handle success dismiss ----
261
+ const handleSuccessDismiss = (0, react_1.useCallback)(() => {
262
+ dispatch({ type: 'RESET' });
263
+ }, [dispatch]);
264
+ // ---- Handle error ----
265
+ (0, react_1.useEffect)(() => {
266
+ if (flowState.step !== 'error' || !rn)
267
+ return;
268
+ const errorMsg = flowState.data.error ?? 'An unexpected error occurred';
269
+ const hasFormData = Boolean(flowState.data.annotatedScreenshot);
270
+ rn.Alert.alert('Error', errorMsg, [
271
+ ...(hasFormData
272
+ ? [{ text: 'Retry', onPress: () => dispatch({ type: 'RETRY' }) }]
273
+ : []),
274
+ {
275
+ text: 'Dismiss',
276
+ style: 'cancel',
277
+ onPress: () => dispatch({ type: 'RESET' }),
278
+ },
279
+ ]);
280
+ }, [flowState.step, flowState.data, rn, dispatch]);
281
+ // ---- Handle success alert ----
282
+ (0, react_1.useEffect)(() => {
283
+ if (flowState.step !== 'success' || !rn)
284
+ return;
285
+ const result = flowState.data.submitResult;
286
+ rn.Alert.alert('Report Submitted', result?.url ? `Issue created: ${result.url}` : 'Your bug report has been submitted.', [{ text: 'OK', onPress: handleSuccessDismiss }]);
287
+ }, [flowState.step, flowState.data, rn, handleSuccessDismiss]);
288
+ // ---- Resolve theme ----
289
+ const theme = (0, react_1.useMemo)(() => {
290
+ const configTheme = config.ui?.theme;
291
+ if (configTheme === 'light' || configTheme === 'dark')
292
+ return configTheme;
293
+ // For 'auto' or undefined, default to dark
294
+ return 'dark';
295
+ }, [config.ui?.theme]);
296
+ // ---- Context value ----
297
+ const contextValue = (0, react_1.useMemo)(() => ({
298
+ trigger: handleTrigger,
299
+ isOpen: flowState.step !== 'idle',
300
+ currentStep: flowState.step,
301
+ config,
302
+ }), [handleTrigger, flowState.step, config]);
303
+ // ---- Render ----
304
+ // If react-native is not loaded yet, just render children in a fragment
305
+ const wrapperElement = rn
306
+ ? react_1.default.createElement(rn.View, { ref: viewRef, style: { flex: 1 }, collapsable: false }, children)
307
+ : react_1.default.createElement(react_1.default.Fragment, null, children);
308
+ // Overlay components based on flow state
309
+ let overlay = null;
310
+ if (flowState.step === 'annotating' && flowState.data.captureResult) {
311
+ overlay = react_1.default.createElement(DrawingCanvas_js_1.DrawingCanvas, {
312
+ screenshot: flowState.data.captureResult.imageData,
313
+ dimensions: flowState.data.captureResult.dimensions,
314
+ onDone: handleAnnotationDone,
315
+ onCancel: handleAnnotationCancel,
316
+ });
317
+ }
318
+ if ((flowState.step === 'form' || flowState.step === 'submitting') &&
319
+ flowState.data.annotatedScreenshot &&
320
+ flowState.data.originalScreenshot) {
321
+ overlay = react_1.default.createElement(ReportForm_js_1.ReportForm, {
322
+ annotatedScreenshot: flowState.data.annotatedScreenshot,
323
+ originalScreenshot: flowState.data.originalScreenshot,
324
+ dimensions: flowState.data.captureResult?.dimensions ?? {
325
+ width: 0,
326
+ height: 0,
327
+ },
328
+ context: flowState.data.context ?? {},
329
+ onSubmit: handleFormSubmit,
330
+ onCancel: handleFormCancel,
331
+ onReAnnotate: handleReAnnotate,
332
+ theme,
333
+ accentColor: config.ui?.accentColor,
334
+ });
335
+ }
336
+ return react_1.default.createElement(exports.ShakeNbakeContext.Provider, { value: contextValue }, wrapperElement, overlay);
337
+ }
338
+ //# sourceMappingURL=ShakeNbakeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShakeNbakeProvider.js","sourceRoot":"","sources":["../src/ShakeNbakeProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capture.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/capture.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // Tests for ViewShotCapture
4
+ // ---------------------------------------------------------------------------
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const core_1 = require("@shakenbake/core");
8
+ // Mock react-native-view-shot
9
+ const mockCaptureRef = vitest_1.vi.fn().mockResolvedValue('base64-image-data');
10
+ vitest_1.vi.mock('react-native-view-shot', () => ({
11
+ captureRef: mockCaptureRef,
12
+ }));
13
+ // Mock react-native
14
+ vitest_1.vi.mock('react-native', () => ({
15
+ Dimensions: {
16
+ get: vitest_1.vi.fn(() => ({
17
+ width: 390,
18
+ height: 844,
19
+ scale: 3,
20
+ fontScale: 1,
21
+ })),
22
+ },
23
+ PixelRatio: {
24
+ get: vitest_1.vi.fn(() => 3),
25
+ getFontScale: vitest_1.vi.fn(() => 1),
26
+ },
27
+ Platform: {
28
+ OS: 'ios',
29
+ Version: '17.0',
30
+ },
31
+ AccessibilityInfo: {
32
+ isScreenReaderEnabled: vitest_1.vi.fn().mockResolvedValue(false),
33
+ isReduceMotionEnabled: vitest_1.vi.fn().mockResolvedValue(false),
34
+ },
35
+ }));
36
+ const screenshot_js_1 = require("../capture/screenshot.js");
37
+ (0, vitest_1.describe)('ViewShotCapture', () => {
38
+ let capture;
39
+ const mockRef = { current: {} };
40
+ (0, vitest_1.beforeEach)(() => {
41
+ capture = new screenshot_js_1.ViewShotCapture();
42
+ vitest_1.vi.clearAllMocks();
43
+ mockCaptureRef.mockResolvedValue('base64-image-data');
44
+ });
45
+ (0, vitest_1.it)('has correct name and platform', () => {
46
+ (0, vitest_1.expect)(capture.name).toBe('viewshot');
47
+ (0, vitest_1.expect)(capture.platform).toBe('react-native');
48
+ });
49
+ (0, vitest_1.it)('captures a screenshot with correct options', async () => {
50
+ capture.setRef(mockRef);
51
+ const result = await capture.capture();
52
+ (0, vitest_1.expect)(mockCaptureRef).toHaveBeenCalledWith(mockRef, {
53
+ format: 'png',
54
+ quality: 1,
55
+ result: 'base64',
56
+ });
57
+ (0, vitest_1.expect)(result).toEqual({
58
+ imageData: 'base64-image-data',
59
+ dimensions: { width: 390, height: 844 },
60
+ mimeType: 'image/png',
61
+ });
62
+ });
63
+ (0, vitest_1.it)('throws ShakeNbakeError when no ref is set', async () => {
64
+ await (0, vitest_1.expect)(capture.capture()).rejects.toThrow(core_1.ShakeNbakeError);
65
+ await (0, vitest_1.expect)(capture.capture()).rejects.toThrow('No view ref set');
66
+ });
67
+ (0, vitest_1.it)('throws ShakeNbakeError when captureRef fails', async () => {
68
+ capture.setRef(mockRef);
69
+ mockCaptureRef.mockRejectedValue(new Error('Capture failed'));
70
+ await (0, vitest_1.expect)(capture.capture()).rejects.toThrow(core_1.ShakeNbakeError);
71
+ await (0, vitest_1.expect)(capture.capture()).rejects.toThrow('Screenshot capture failed');
72
+ });
73
+ (0, vitest_1.it)('accepts a ref in the constructor', async () => {
74
+ const captureWithRef = new screenshot_js_1.ViewShotCapture(mockRef);
75
+ const result = await captureWithRef.capture();
76
+ (0, vitest_1.expect)(mockCaptureRef).toHaveBeenCalledWith(mockRef, {
77
+ format: 'png',
78
+ quality: 1,
79
+ result: 'base64',
80
+ });
81
+ (0, vitest_1.expect)(result.imageData).toBe('base64-image-data');
82
+ });
83
+ (0, vitest_1.it)('returns the correct UPLOAD_FAILED error code', async () => {
84
+ try {
85
+ await capture.capture();
86
+ }
87
+ catch (err) {
88
+ (0, vitest_1.expect)(err).toBeInstanceOf(core_1.ShakeNbakeError);
89
+ (0, vitest_1.expect)(err.code).toBe('UPLOAD_FAILED');
90
+ }
91
+ });
92
+ });
93
+ //# sourceMappingURL=capture.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.test.js","sourceRoot":"","sources":["../../src/__tests__/capture.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=collectors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/collectors.test.ts"],"names":[],"mappings":""}