@buoy-gg/network 7.0.41 → 7.0.42

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 (272) hide show
  1. package/README.md +11 -85
  2. package/lib/commonjs/index.js +1 -332
  3. package/lib/commonjs/index.web.js +1 -420
  4. package/lib/commonjs/network/components/DataViewer.web.js +1 -879
  5. package/lib/commonjs/network/components/NetworkCopyScreen.web.js +1 -48
  6. package/lib/commonjs/network/components/NetworkCopySettingsView.js +27 -755
  7. package/lib/commonjs/network/components/NetworkCopySettingsView.web.js +14 -1242
  8. package/lib/commonjs/network/components/NetworkDetailScreen.web.js +1 -101
  9. package/lib/commonjs/network/components/NetworkDetailStepper.js +1 -108
  10. package/lib/commonjs/network/components/NetworkDetailStepper.web.js +1 -298
  11. package/lib/commonjs/network/components/NetworkEventDetailView.js +15 -1130
  12. package/lib/commonjs/network/components/NetworkEventDetailView.web.js +15 -1484
  13. package/lib/commonjs/network/components/NetworkEventItemCompact.js +2 -401
  14. package/lib/commonjs/network/components/NetworkEventItemCompact.web.js +2 -820
  15. package/lib/commonjs/network/components/NetworkFilterScreen.web.js +1 -55
  16. package/lib/commonjs/network/components/NetworkFilterViewV3.js +1 -442
  17. package/lib/commonjs/network/components/NetworkFilterViewV3.web.js +1 -1310
  18. package/lib/commonjs/network/components/NetworkHeaderLive.js +1 -375
  19. package/lib/commonjs/network/components/NetworkHeaderLive.web.js +1 -623
  20. package/lib/commonjs/network/components/NetworkHeaderMenu.js +1 -190
  21. package/lib/commonjs/network/components/NetworkListScreen.js +1 -403
  22. package/lib/commonjs/network/components/NetworkListScreen.web.js +1 -624
  23. package/lib/commonjs/network/components/NetworkModal.js +1 -786
  24. package/lib/commonjs/network/components/NetworkNumberPrompt.js +1 -178
  25. package/lib/commonjs/network/components/NetworkNumberPrompt.web.js +1 -232
  26. package/lib/commonjs/network/components/NetworkOverrideEditor.js +1 -814
  27. package/lib/commonjs/network/components/NetworkOverrideEditor.web.js +1 -942
  28. package/lib/commonjs/network/components/NetworkOverrideHeaderButton.js +1 -107
  29. package/lib/commonjs/network/components/NetworkOverrideHeaderButton.web.js +1 -133
  30. package/lib/commonjs/network/components/NetworkOverridesButton.js +1 -90
  31. package/lib/commonjs/network/components/NetworkOverridesButton.web.js +1 -143
  32. package/lib/commonjs/network/components/NetworkOverridesScreen.js +1 -543
  33. package/lib/commonjs/network/components/NetworkOverridesScreen.web.js +1 -830
  34. package/lib/commonjs/network/components/NetworkSavedScreen.js +1 -226
  35. package/lib/commonjs/network/components/NetworkSavedScreen.web.js +1 -463
  36. package/lib/commonjs/network/components/NetworkUpgradeBanner.js +1 -76
  37. package/lib/commonjs/network/components/response-editor/Explorer.js +1 -973
  38. package/lib/commonjs/network/components/response-editor/Explorer.web.js +1 -1136
  39. package/lib/commonjs/network/components/response-editor/deleteNestedDataByPath.js +1 -56
  40. package/lib/commonjs/network/components/response-editor/editorContext.js +1 -33
  41. package/lib/commonjs/network/components/response-editor/updateNestedDataByPath.js +1 -61
  42. package/lib/commonjs/network/conditions/NetworkConditionsControl.js +1 -235
  43. package/lib/commonjs/network/conditions/NetworkConditionsControl.test.js +1 -136
  44. package/lib/commonjs/network/conditions/NetworkConditionsIcon.js +1 -33
  45. package/lib/commonjs/network/conditions/NetworkFloatingTool.js +1 -310
  46. package/lib/commonjs/network/conditions/NetworkFloatingTool.test.js +1 -219
  47. package/lib/commonjs/network/conditions/store.js +1 -75
  48. package/lib/commonjs/network/conditions/wait.js +1 -43
  49. package/lib/commonjs/network/conditions/xhr.js +1 -135
  50. package/lib/commonjs/network/hooks/useLiveNetworkEvent.js +1 -62
  51. package/lib/commonjs/network/hooks/useNetworkBadgeCounts.js +1 -83
  52. package/lib/commonjs/network/hooks/useNetworkEventList.js +1 -108
  53. package/lib/commonjs/network/hooks/useNetworkEvents.js +1 -318
  54. package/lib/commonjs/network/hooks/useNetworkHasMatches.js +1 -56
  55. package/lib/commonjs/network/hooks/useNetworkSaved.js +1 -38
  56. package/lib/commonjs/network/hooks/useNetworkSelection.js +1 -53
  57. package/lib/commonjs/network/hooks/useOverrideRules.js +1 -36
  58. package/lib/commonjs/network/hooks/useTickEveryMinute.js +1 -21
  59. package/lib/commonjs/network/overrides/applyToFetch.js +1 -80
  60. package/lib/commonjs/network/overrides/applyToXhr.js +2 -510
  61. package/lib/commonjs/network/overrides/engine.js +1 -93
  62. package/lib/commonjs/network/overrides/matchRule.js +1 -87
  63. package/lib/commonjs/network/overrides/overriddenRows.js +1 -37
  64. package/lib/commonjs/network/overrides/overrideRulesStore.js +1 -550
  65. package/lib/commonjs/network/overrides/presets.js +1 -70
  66. package/lib/commonjs/network/overrides/resolveOverride.js +1 -158
  67. package/lib/commonjs/network/overrides/types.js +1 -90
  68. package/lib/commonjs/network/sync/networkBodyResolver.js +1 -39
  69. package/lib/commonjs/network/sync/networkSyncAdapter.js +1 -882
  70. package/lib/commonjs/network/sync/overrideHonesty.release.test.js +1 -36
  71. package/lib/commonjs/network/types/index.js +1 -5
  72. package/lib/commonjs/network/utils/extractOperationName.js +1 -80
  73. package/lib/commonjs/network/utils/filterNetworkEvents.js +1 -96
  74. package/lib/commonjs/network/utils/formatGraphQLVariables.js +1 -219
  75. package/lib/commonjs/network/utils/formatting.js +1 -30
  76. package/lib/commonjs/network/utils/generateCurl.js +2 -71
  77. package/lib/commonjs/network/utils/generateNetworkCopyText.js +37 -166
  78. package/lib/commonjs/network/utils/httpCompletion.js +1 -37
  79. package/lib/commonjs/network/utils/networkEventStore.js +1 -411
  80. package/lib/commonjs/network/utils/networkListener.js +4 -1352
  81. package/lib/commonjs/network/utils/networkSavedStore.js +3 -577
  82. package/lib/commonjs/network/utils/networkSelectionStore.js +1 -193
  83. package/lib/commonjs/network/utils/realNow.js +1 -0
  84. package/lib/commonjs/network/utils/requestId.js +1 -16
  85. package/lib/commonjs/network/utils/resolveRequestUrl.js +1 -15
  86. package/lib/commonjs/network/utils/selectSavedEvents.js +1 -39
  87. package/lib/commonjs/network/utils/startNetworkCapture.js +1 -24
  88. package/lib/commonjs/network/utils/withPinnedFirst.js +1 -32
  89. package/lib/commonjs/preset.js +1 -93
  90. package/lib/module/index.js +1 -104
  91. package/lib/module/index.web.js +1 -82
  92. package/lib/module/network/components/DataViewer.web.js +1 -875
  93. package/lib/module/network/components/NetworkCopyScreen.web.js +1 -44
  94. package/lib/module/network/components/NetworkCopySettingsView.js +27 -750
  95. package/lib/module/network/components/NetworkCopySettingsView.web.js +14 -1237
  96. package/lib/module/network/components/NetworkDetailScreen.web.js +1 -97
  97. package/lib/module/network/components/NetworkDetailStepper.js +1 -104
  98. package/lib/module/network/components/NetworkDetailStepper.web.js +1 -296
  99. package/lib/module/network/components/NetworkEventDetailView.js +15 -1129
  100. package/lib/module/network/components/NetworkEventDetailView.web.js +15 -1482
  101. package/lib/module/network/components/NetworkEventItemCompact.js +2 -398
  102. package/lib/module/network/components/NetworkEventItemCompact.web.js +2 -818
  103. package/lib/module/network/components/NetworkFilterScreen.web.js +1 -51
  104. package/lib/module/network/components/NetworkFilterViewV3.js +1 -438
  105. package/lib/module/network/components/NetworkFilterViewV3.web.js +1 -1306
  106. package/lib/module/network/components/NetworkHeaderLive.js +1 -366
  107. package/lib/module/network/components/NetworkHeaderLive.web.js +1 -617
  108. package/lib/module/network/components/NetworkHeaderMenu.js +1 -184
  109. package/lib/module/network/components/NetworkListScreen.js +1 -399
  110. package/lib/module/network/components/NetworkListScreen.web.js +1 -622
  111. package/lib/module/network/components/NetworkModal.js +1 -781
  112. package/lib/module/network/components/NetworkNumberPrompt.js +1 -174
  113. package/lib/module/network/components/NetworkNumberPrompt.web.js +1 -230
  114. package/lib/module/network/components/NetworkOverrideEditor.js +1 -811
  115. package/lib/module/network/components/NetworkOverrideEditor.web.js +1 -939
  116. package/lib/module/network/components/NetworkOverrideHeaderButton.js +1 -104
  117. package/lib/module/network/components/NetworkOverrideHeaderButton.web.js +1 -131
  118. package/lib/module/network/components/NetworkOverridesButton.js +1 -87
  119. package/lib/module/network/components/NetworkOverridesButton.web.js +1 -141
  120. package/lib/module/network/components/NetworkOverridesScreen.js +1 -539
  121. package/lib/module/network/components/NetworkOverridesScreen.web.js +1 -826
  122. package/lib/module/network/components/NetworkSavedScreen.js +1 -222
  123. package/lib/module/network/components/NetworkSavedScreen.web.js +1 -461
  124. package/lib/module/network/components/NetworkUpgradeBanner.js +1 -72
  125. package/lib/module/network/components/response-editor/Explorer.js +1 -972
  126. package/lib/module/network/components/response-editor/Explorer.web.js +1 -1133
  127. package/lib/module/network/components/response-editor/deleteNestedDataByPath.js +1 -51
  128. package/lib/module/network/components/response-editor/editorContext.js +1 -29
  129. package/lib/module/network/components/response-editor/updateNestedDataByPath.js +1 -56
  130. package/lib/module/network/conditions/NetworkConditionsControl.js +1 -231
  131. package/lib/module/network/conditions/NetworkConditionsControl.test.js +1 -135
  132. package/lib/module/network/conditions/NetworkConditionsIcon.js +1 -29
  133. package/lib/module/network/conditions/NetworkFloatingTool.js +1 -304
  134. package/lib/module/network/conditions/NetworkFloatingTool.test.js +1 -218
  135. package/lib/module/network/conditions/store.js +1 -65
  136. package/lib/module/network/conditions/wait.js +1 -38
  137. package/lib/module/network/conditions/xhr.js +1 -131
  138. package/lib/module/network/hooks/useLiveNetworkEvent.js +1 -58
  139. package/lib/module/network/hooks/useNetworkBadgeCounts.js +1 -79
  140. package/lib/module/network/hooks/useNetworkEventList.js +1 -104
  141. package/lib/module/network/hooks/useNetworkEvents.js +1 -314
  142. package/lib/module/network/hooks/useNetworkHasMatches.js +1 -52
  143. package/lib/module/network/hooks/useNetworkSaved.js +1 -34
  144. package/lib/module/network/hooks/useNetworkSelection.js +1 -46
  145. package/lib/module/network/hooks/useOverrideRules.js +1 -32
  146. package/lib/module/network/hooks/useTickEveryMinute.js +1 -11
  147. package/lib/module/network/overrides/applyToFetch.js +1 -72
  148. package/lib/module/network/overrides/applyToXhr.js +2 -502
  149. package/lib/module/network/overrides/engine.js +1 -85
  150. package/lib/module/network/overrides/matchRule.js +1 -81
  151. package/lib/module/network/overrides/overriddenRows.js +1 -33
  152. package/lib/module/network/overrides/overrideRulesStore.js +1 -547
  153. package/lib/module/network/overrides/presets.js +1 -65
  154. package/lib/module/network/overrides/resolveOverride.js +1 -152
  155. package/lib/module/network/overrides/types.js +1 -86
  156. package/lib/module/network/sync/networkBodyResolver.js +1 -34
  157. package/lib/module/network/sync/networkSyncAdapter.js +1 -880
  158. package/lib/module/network/sync/overrideHonesty.release.test.js +1 -35
  159. package/lib/module/network/types/index.js +1 -3
  160. package/lib/module/network/utils/extractOperationName.js +1 -76
  161. package/lib/module/network/utils/filterNetworkEvents.js +1 -92
  162. package/lib/module/network/utils/formatGraphQLVariables.js +1 -213
  163. package/lib/module/network/utils/formatting.js +1 -9
  164. package/lib/module/network/utils/generateCurl.js +2 -67
  165. package/lib/module/network/utils/generateNetworkCopyText.js +37 -162
  166. package/lib/module/network/utils/httpCompletion.js +1 -32
  167. package/lib/module/network/utils/networkEventStore.js +1 -409
  168. package/lib/module/network/utils/networkListener.js +4 -1341
  169. package/lib/module/network/utils/networkSavedStore.js +3 -572
  170. package/lib/module/network/utils/networkSelectionStore.js +1 -188
  171. package/lib/module/network/utils/realNow.js +1 -0
  172. package/lib/module/network/utils/requestId.js +1 -12
  173. package/lib/module/network/utils/resolveRequestUrl.js +1 -11
  174. package/lib/module/network/utils/selectSavedEvents.js +1 -35
  175. package/lib/module/network/utils/startNetworkCapture.js +1 -21
  176. package/lib/module/network/utils/withPinnedFirst.js +1 -28
  177. package/lib/module/preset.js +1 -91
  178. package/lib/typescript/network/overrides/engine.d.ts +1 -1
  179. package/lib/typescript/network/overrides/matchRule.d.ts +1 -1
  180. package/lib/typescript/network/overrides/resolveOverride.d.ts +2 -2
  181. package/lib/typescript/network/overrides/types.d.ts +9 -0
  182. package/lib/typescript/network/utils/networkListener.d.ts +11 -0
  183. package/lib/typescript/network/utils/realNow.d.ts +18 -0
  184. package/lib/web/index.mjs +73 -74
  185. package/package.json +2 -2
  186. package/lib/typescript/index.d.ts.map +0 -1
  187. package/lib/typescript/index.web.d.ts.map +0 -1
  188. package/lib/typescript/network/components/DataViewer.web.d.ts.map +0 -1
  189. package/lib/typescript/network/components/NetworkCopyScreen.web.d.ts.map +0 -1
  190. package/lib/typescript/network/components/NetworkCopySettingsView.d.ts.map +0 -1
  191. package/lib/typescript/network/components/NetworkCopySettingsView.web.d.ts.map +0 -1
  192. package/lib/typescript/network/components/NetworkDetailScreen.web.d.ts.map +0 -1
  193. package/lib/typescript/network/components/NetworkDetailStepper.d.ts.map +0 -1
  194. package/lib/typescript/network/components/NetworkDetailStepper.web.d.ts.map +0 -1
  195. package/lib/typescript/network/components/NetworkEventDetailView.d.ts.map +0 -1
  196. package/lib/typescript/network/components/NetworkEventDetailView.web.d.ts.map +0 -1
  197. package/lib/typescript/network/components/NetworkEventItemCompact.d.ts.map +0 -1
  198. package/lib/typescript/network/components/NetworkEventItemCompact.web.d.ts.map +0 -1
  199. package/lib/typescript/network/components/NetworkFilterScreen.web.d.ts.map +0 -1
  200. package/lib/typescript/network/components/NetworkFilterViewV3.d.ts.map +0 -1
  201. package/lib/typescript/network/components/NetworkFilterViewV3.web.d.ts.map +0 -1
  202. package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +0 -1
  203. package/lib/typescript/network/components/NetworkHeaderLive.web.d.ts.map +0 -1
  204. package/lib/typescript/network/components/NetworkHeaderMenu.d.ts.map +0 -1
  205. package/lib/typescript/network/components/NetworkListScreen.d.ts.map +0 -1
  206. package/lib/typescript/network/components/NetworkListScreen.web.d.ts.map +0 -1
  207. package/lib/typescript/network/components/NetworkModal.d.ts.map +0 -1
  208. package/lib/typescript/network/components/NetworkNumberPrompt.d.ts.map +0 -1
  209. package/lib/typescript/network/components/NetworkNumberPrompt.web.d.ts.map +0 -1
  210. package/lib/typescript/network/components/NetworkOverrideEditor.d.ts.map +0 -1
  211. package/lib/typescript/network/components/NetworkOverrideEditor.web.d.ts.map +0 -1
  212. package/lib/typescript/network/components/NetworkOverrideHeaderButton.d.ts.map +0 -1
  213. package/lib/typescript/network/components/NetworkOverrideHeaderButton.web.d.ts.map +0 -1
  214. package/lib/typescript/network/components/NetworkOverridesButton.d.ts.map +0 -1
  215. package/lib/typescript/network/components/NetworkOverridesButton.web.d.ts.map +0 -1
  216. package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +0 -1
  217. package/lib/typescript/network/components/NetworkOverridesScreen.web.d.ts.map +0 -1
  218. package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +0 -1
  219. package/lib/typescript/network/components/NetworkSavedScreen.web.d.ts.map +0 -1
  220. package/lib/typescript/network/components/NetworkUpgradeBanner.d.ts.map +0 -1
  221. package/lib/typescript/network/components/response-editor/Explorer.d.ts.map +0 -1
  222. package/lib/typescript/network/components/response-editor/Explorer.web.d.ts.map +0 -1
  223. package/lib/typescript/network/components/response-editor/deleteNestedDataByPath.d.ts.map +0 -1
  224. package/lib/typescript/network/components/response-editor/editorContext.d.ts.map +0 -1
  225. package/lib/typescript/network/components/response-editor/updateNestedDataByPath.d.ts.map +0 -1
  226. package/lib/typescript/network/conditions/NetworkConditionsControl.d.ts.map +0 -1
  227. package/lib/typescript/network/conditions/NetworkConditionsControl.test.d.ts.map +0 -1
  228. package/lib/typescript/network/conditions/NetworkConditionsIcon.d.ts.map +0 -1
  229. package/lib/typescript/network/conditions/NetworkFloatingTool.d.ts.map +0 -1
  230. package/lib/typescript/network/conditions/NetworkFloatingTool.test.d.ts.map +0 -1
  231. package/lib/typescript/network/conditions/store.d.ts.map +0 -1
  232. package/lib/typescript/network/conditions/wait.d.ts.map +0 -1
  233. package/lib/typescript/network/conditions/xhr.d.ts.map +0 -1
  234. package/lib/typescript/network/hooks/useLiveNetworkEvent.d.ts.map +0 -1
  235. package/lib/typescript/network/hooks/useNetworkBadgeCounts.d.ts.map +0 -1
  236. package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +0 -1
  237. package/lib/typescript/network/hooks/useNetworkEvents.d.ts.map +0 -1
  238. package/lib/typescript/network/hooks/useNetworkHasMatches.d.ts.map +0 -1
  239. package/lib/typescript/network/hooks/useNetworkSaved.d.ts.map +0 -1
  240. package/lib/typescript/network/hooks/useNetworkSelection.d.ts.map +0 -1
  241. package/lib/typescript/network/hooks/useOverrideRules.d.ts.map +0 -1
  242. package/lib/typescript/network/hooks/useTickEveryMinute.d.ts.map +0 -1
  243. package/lib/typescript/network/overrides/applyToFetch.d.ts.map +0 -1
  244. package/lib/typescript/network/overrides/applyToXhr.d.ts.map +0 -1
  245. package/lib/typescript/network/overrides/engine.d.ts.map +0 -1
  246. package/lib/typescript/network/overrides/matchRule.d.ts.map +0 -1
  247. package/lib/typescript/network/overrides/overriddenRows.d.ts.map +0 -1
  248. package/lib/typescript/network/overrides/overrideRulesStore.d.ts.map +0 -1
  249. package/lib/typescript/network/overrides/presets.d.ts.map +0 -1
  250. package/lib/typescript/network/overrides/resolveOverride.d.ts.map +0 -1
  251. package/lib/typescript/network/overrides/types.d.ts.map +0 -1
  252. package/lib/typescript/network/sync/networkBodyResolver.d.ts.map +0 -1
  253. package/lib/typescript/network/sync/networkSyncAdapter.d.ts.map +0 -1
  254. package/lib/typescript/network/sync/overrideHonesty.release.test.d.ts.map +0 -1
  255. package/lib/typescript/network/types/index.d.ts.map +0 -1
  256. package/lib/typescript/network/utils/extractOperationName.d.ts.map +0 -1
  257. package/lib/typescript/network/utils/filterNetworkEvents.d.ts.map +0 -1
  258. package/lib/typescript/network/utils/formatGraphQLVariables.d.ts.map +0 -1
  259. package/lib/typescript/network/utils/formatting.d.ts.map +0 -1
  260. package/lib/typescript/network/utils/generateCurl.d.ts.map +0 -1
  261. package/lib/typescript/network/utils/generateNetworkCopyText.d.ts.map +0 -1
  262. package/lib/typescript/network/utils/httpCompletion.d.ts.map +0 -1
  263. package/lib/typescript/network/utils/networkEventStore.d.ts.map +0 -1
  264. package/lib/typescript/network/utils/networkListener.d.ts.map +0 -1
  265. package/lib/typescript/network/utils/networkSavedStore.d.ts.map +0 -1
  266. package/lib/typescript/network/utils/networkSelectionStore.d.ts.map +0 -1
  267. package/lib/typescript/network/utils/requestId.d.ts.map +0 -1
  268. package/lib/typescript/network/utils/resolveRequestUrl.d.ts.map +0 -1
  269. package/lib/typescript/network/utils/selectSavedEvents.d.ts.map +0 -1
  270. package/lib/typescript/network/utils/startNetworkCapture.d.ts.map +0 -1
  271. package/lib/typescript/network/utils/withPinnedFirst.d.ts.map +0 -1
  272. package/lib/typescript/preset.d.ts.map +0 -1
@@ -1,36 +1 @@
1
- "use strict";
2
-
3
- var _vitest = require("vitest");
4
- var _engine = require("../overrides/engine");
5
- /**
6
- * Override write receipts must admit when the rule cannot fire.
7
- *
8
- * Compiled by vitest.release.config.ts with `__DEV__` inlined to false — the
9
- * only lane where this is observable, because `__DEV__` is a build-time
10
- * constant and `vi.stubGlobal` cannot reach it.
11
- *
12
- * The bug this pins: `overrideForRequest` refuses in a release build, but the
13
- * write paths still returned a bare `{ok: true}` and still persisted. A remote
14
- * driver — Buoy MCP, the desktop dashboard, or Ask Buoy — reported "override is
15
- * live" to a QA tester whose next bug report was filed against data that was
16
- * never faked. Saved and inert are different states and the receipt has to say
17
- * which one happened.
18
- */
19
-
20
- (0, _vitest.describe)("override honesty in a release build", () => {
21
- (0, _vitest.it)("is compiled with __DEV__ false", () => {
22
- // Guard the guard: if this lane ever ran with __DEV__ true, every
23
- // assertion below would pass for the wrong reason.
24
- (0, _vitest.expect)(typeof __DEV__ === "undefined" || __DEV__).toBe(false);
25
- });
26
- (0, _vitest.it)("reports that overrides cannot apply", () => {
27
- (0, _vitest.expect)((0, _engine.overridesCanApply)()).toBe(false);
28
- });
29
- (0, _vitest.it)("never applies a rule to a request", () => {
30
- (0, _vitest.expect)((0, _engine.overrideForRequest)("https://api.example.com/menu", "GET")).toBeNull();
31
- });
32
- (0, _vitest.it)("has a reason written for a person, not a log line", () => {
33
- (0, _vitest.expect)(_engine.OVERRIDES_INACTIVE_REASON).toMatch(/release build/i);
34
- (0, _vitest.expect)(_engine.OVERRIDES_INACTIVE_REASON).toMatch(/will not affect/i);
35
- });
36
- });
1
+ "use strict";var _vitest=require("vitest");var _engine=require("../overrides/engine");(0,_vitest.describe)("override honesty in a release build",()=>{(0,_vitest.it)("is compiled with __DEV__ false",()=>{(0,_vitest.expect)(typeof __DEV__==="undefined"||__DEV__).toBe(false)});(0,_vitest.it)("reports that overrides cannot apply",()=>{(0,_vitest.expect)((0,_engine.overridesCanApply)()).toBe(false)});(0,_vitest.it)("never applies a rule to a request",()=>{(0,_vitest.expect)((0,_engine.overrideForRequest)("https://api.example.com/menu","GET")).toBeNull()});(0,_vitest.it)("has a reason written for a person, not a log line",()=>{(0,_vitest.expect)(_engine.OVERRIDES_INACTIVE_REASON).toMatch(/release build/i);(0,_vitest.expect)(_engine.OVERRIDES_INACTIVE_REASON).toMatch(/will not affect/i)})});
@@ -1,5 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
@@ -1,80 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.extractOperationName = extractOperationName;
7
- /**
8
- * Extract GraphQL operation name from request data
9
- *
10
- * This utility extracts the operation name from GraphQL requests to enable
11
- * searching and filtering by operation name rather than just URL paths.
12
- *
13
- * For GraphQL, all requests typically go to the same endpoint (e.g., /graphql),
14
- * making URL-based search ineffective. This function extracts the actual
15
- * operation name (e.g., "GetUser", "CreatePost") from the request payload.
16
- *
17
- * Extraction Methods (tried in order):
18
- * 1. Direct operationName field in request data
19
- * 2. Parse from query string using regex pattern
20
- *
21
- * @param requestData - The request data object (typically GraphQL query payload)
22
- * @returns Operation name string or null if not found
23
- *
24
- * @example
25
- * // Method 1: Explicit operationName field
26
- * const data1 = {
27
- * operationName: "GetUser",
28
- * query: "query GetUser { user { id name } }"
29
- * };
30
- * extractOperationName(data1); // Returns "GetUser"
31
- *
32
- * @example
33
- * // Method 2: Parse from query string
34
- * const data2 = {
35
- * query: "mutation CreatePost { createPost(title: \"Hello\") { id } }"
36
- * };
37
- * extractOperationName(data2); // Returns "CreatePost"
38
- *
39
- * @example
40
- * // No operation name (anonymous query)
41
- * const data3 = {
42
- * query: "{ user { id name } }"
43
- * };
44
- * extractOperationName(data3); // Returns null
45
- */
46
- function extractOperationName(requestData) {
47
- // Validate input is an object
48
- if (!requestData || typeof requestData !== 'object') {
49
- return null;
50
- }
51
-
52
- // Method 1: Check for explicit operationName field
53
- // This is the standard GraphQL request format
54
- if ('operationName' in requestData && requestData.operationName) {
55
- const opName = requestData.operationName;
56
- // Ensure it's a string and not empty
57
- if (typeof opName === 'string' && opName.trim().length > 0) {
58
- return opName.trim();
59
- }
60
- }
61
-
62
- // Method 2: Parse from query string
63
- // Handles cases where operationName field is missing or null
64
- if ('query' in requestData && typeof requestData.query === 'string') {
65
- const query = requestData.query;
66
-
67
- // Match: query OperationName or mutation OperationName or subscription OperationName
68
- // Pattern explanation:
69
- // - (?:query|mutation|subscription) - Match operation type (non-capturing group)
70
- // - \s+ - One or more whitespace characters
71
- // - (\w+) - Capture operation name (letters, numbers, underscore)
72
- const match = query.match(/(?:query|mutation|subscription)\s+(\w+)/);
73
- if (match && match[1]) {
74
- return match[1];
75
- }
76
- }
77
-
78
- // No operation name found
79
- return null;
80
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.extractOperationName=extractOperationName;function extractOperationName(e){if(!e||typeof e!=="object"){return null}if("operationName"in e&&e.operationName){const n=e.operationName;if(typeof n==="string"&&n.trim().length>0){return n.trim()}}if("query"in e&&typeof e.query==="string"){const n=e.query;const r=n.match(/(?:query|mutation|subscription)\s+(\w+)/);if(r&&r[1]){return r[1]}}return null}
@@ -1,96 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.applyIgnoredPatterns = applyIgnoredPatterns;
7
- exports.filterNetworkEvents = filterNetworkEvents;
8
- var _sharedUi = require("@buoy-gg/shared-ui");
9
- var _formatGraphQLVariables = require("./formatGraphQLVariables");
10
- /**
11
- * Pure network-event filtering shared by the list/copy/filter-screen hooks
12
- * (rule3: reusable logic extracted to a pure function). Ported verbatim
13
- * from the filtering previously inlined in `useNetworkEvents` so every
14
- * subscriber applies identical semantics.
15
- */
16
-
17
- /** Apply the user's search/method/status/host/content-type filter. */
18
- function filterNetworkEvents(events, filter) {
19
- const searchLower = filter.searchText ? filter.searchText.toLowerCase() : null;
20
- const methodSet = filter.method && filter.method.length > 0 ? new Set(filter.method) : null;
21
- const contentTypeSet = filter.contentType && filter.contentType.length > 0 ? new Set(filter.contentType) : null;
22
- let filtered = [...events];
23
- if (methodSet) {
24
- filtered = filtered.filter(e => methodSet.has(e.method));
25
- }
26
- if (filter.status && filter.status !== "all") {
27
- switch (filter.status) {
28
- case "success":
29
- filtered = filtered.filter(e => e.status && e.status >= 200 && e.status < 300);
30
- break;
31
- case "error":
32
- filtered = filtered.filter(e => e.error || e.status && e.status >= 400);
33
- break;
34
- case "pending":
35
- filtered = filtered.filter(e => !e.status && !e.error);
36
- break;
37
- }
38
- }
39
- if (searchLower) {
40
- filtered = filtered.filter(e => e.url.toLowerCase().includes(searchLower) || e.method.toLowerCase().includes(searchLower) || e.path?.toLowerCase().includes(searchLower) || e.host?.toLowerCase().includes(searchLower) || e.error && e.error.toLowerCase().includes(searchLower) ||
41
- // Search by GraphQL operation name (e.g., "GetUser", "CreatePost")
42
- e.operationName && e.operationName.toLowerCase().includes(searchLower) ||
43
- // Search by GraphQL variable values (e.g., "Sandshrew", "123")
44
- (0, _formatGraphQLVariables.searchGraphQLVariables)(e.graphqlVariables, searchLower));
45
- }
46
- if (filter.host) {
47
- filtered = filtered.filter(e => e.host === filter.host);
48
- }
49
- if (contentTypeSet) {
50
- filtered = filtered.filter(e => {
51
- const headers = e.responseHeaders || e.requestHeaders;
52
- const contentType = headers?.["content-type"] || headers?.["Content-Type"] || "";
53
- for (const type of contentTypeSet) {
54
- switch (type) {
55
- case "JSON":
56
- if (contentType.includes("json")) return true;
57
- break;
58
- case "XML":
59
- if (contentType.includes("xml")) return true;
60
- break;
61
- case "HTML":
62
- if (contentType.includes("html")) return true;
63
- break;
64
- case "TEXT":
65
- if (contentType.includes("text")) return true;
66
- break;
67
- case "IMAGE":
68
- if (contentType.includes("image")) return true;
69
- break;
70
- case "VIDEO":
71
- if (contentType.includes("video")) return true;
72
- break;
73
- case "AUDIO":
74
- if (contentType.includes("audio")) return true;
75
- break;
76
- case "FORM":
77
- if (contentType.includes("form")) return true;
78
- break;
79
- case "OTHER":
80
- if (!contentType || !contentType.includes("json") && !contentType.includes("xml") && !contentType.includes("html") && !contentType.includes("text") && !contentType.includes("image") && !contentType.includes("video") && !contentType.includes("audio") && !contentType.includes("form")) {
81
- return true;
82
- }
83
- break;
84
- }
85
- }
86
- return false;
87
- });
88
- }
89
- return filtered;
90
- }
91
-
92
- /** Drop events matching the shared ignored-domain/URL patterns. */
93
- function applyIgnoredPatterns(events, ignoredPatterns) {
94
- if (ignoredPatterns.length === 0) return events;
95
- return events.filter(event => !ignoredPatterns.some(pattern => (0, _sharedUi.urlMatchesIgnoredPattern)(event.url, pattern)));
96
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.applyIgnoredPatterns=applyIgnoredPatterns;exports.filterNetworkEvents=filterNetworkEvents;var _sharedUi=require("@buoy-gg/shared-ui");var _formatGraphQLVariables=require("./formatGraphQLVariables");function filterNetworkEvents(n,r){const a=r.searchText?r.searchText.toLowerCase():null;const o=r.method&&r.method.length>0?new Set(r.method):null;const u=r.contentType&&r.contentType.length>0?new Set(r.contentType):null;let s=[...n];if(o){s=s.filter(e=>o.has(e.method))}if(r.status&&r.status!=="all"){switch(r.status){case"success":s=s.filter(e=>e.status&&e.status>=200&&e.status<300);break;case"error":s=s.filter(e=>e.error||e.status&&e.status>=400);break;case"pending":s=s.filter(e=>!e.status&&!e.error);break}}if(a){s=s.filter(e=>e.url.toLowerCase().includes(a)||e.method.toLowerCase().includes(a)||e.path?.toLowerCase().includes(a)||e.host?.toLowerCase().includes(a)||e.error&&e.error.toLowerCase().includes(a)||e.operationName&&e.operationName.toLowerCase().includes(a)||(0,_formatGraphQLVariables.searchGraphQLVariables)(e.graphqlVariables,a))}if(r.host){s=s.filter(e=>e.host===r.host)}if(u){s=s.filter(e=>{const c=e.responseHeaders||e.requestHeaders;const t=c?.["content-type"]||c?.["Content-Type"]||"";for(const i of u){switch(i){case"JSON":if(t.includes("json"))return true;break;case"XML":if(t.includes("xml"))return true;break;case"HTML":if(t.includes("html"))return true;break;case"TEXT":if(t.includes("text"))return true;break;case"IMAGE":if(t.includes("image"))return true;break;case"VIDEO":if(t.includes("video"))return true;break;case"AUDIO":if(t.includes("audio"))return true;break;case"FORM":if(t.includes("form"))return true;break;case"OTHER":if(!t||!t.includes("json")&&!t.includes("xml")&&!t.includes("html")&&!t.includes("text")&&!t.includes("image")&&!t.includes("video")&&!t.includes("audio")&&!t.includes("form")){return true}break}}return false})}return s}function applyIgnoredPatterns(n,r){if(r.length===0)return n;return n.filter(a=>!r.some(o=>(0,_sharedUi.urlMatchesIgnoredPattern)(a.url,o)))}
@@ -1,219 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.formatGraphQLDisplay = formatGraphQLDisplay;
7
- exports.formatGraphQLVariables = formatGraphQLVariables;
8
- exports.searchGraphQLVariables = searchGraphQLVariables;
9
- /**
10
- * Format GraphQL variables for display using arrow notation
11
- *
12
- * Mimics React Query key display format to provide visual consistency:
13
- * - React Query: ["pokemon", "Sandshrew"] → "pokemon › Sandshrew"
14
- * - GraphQL: GetPokemon(id: "Sandshrew") → "GetPokemon › Sandshrew"
15
- *
16
- * Extracts only the values from variables (not keys) and formats them
17
- * for clean, compact display in the network request list.
18
- */
19
-
20
- /**
21
- * Format a single variable value for display
22
- *
23
- * @param value - The variable value to format
24
- * @param maxLength - Maximum length for string values (default: 30)
25
- * @returns Formatted string or null if value should be skipped
26
- */
27
- function formatValue(value, maxLength = 30) {
28
- // Null/undefined - skip
29
- if (value === null || value === undefined) {
30
- return null;
31
- }
32
-
33
- // Boolean
34
- if (typeof value === 'boolean') {
35
- return String(value);
36
- }
37
-
38
- // Number
39
- if (typeof value === 'number') {
40
- return String(value);
41
- }
42
-
43
- // String
44
- if (typeof value === 'string') {
45
- // Truncate long strings
46
- if (value.length > maxLength) {
47
- return value.substring(0, maxLength - 1) + '…';
48
- }
49
- return value;
50
- }
51
-
52
- // Array - take first value or show count
53
- if (Array.isArray(value)) {
54
- if (value.length === 0) return null;
55
- if (value.length === 1) {
56
- return formatValue(value[0], maxLength);
57
- }
58
- // Multiple items - show count
59
- return `${value.length} items`;
60
- }
61
-
62
- // Object - extract first string/number value
63
- if (typeof value === 'object') {
64
- const entries = Object.entries(value);
65
- if (entries.length === 0) return null;
66
-
67
- // Find first meaningful value
68
- for (const [_, v] of entries) {
69
- const formatted = formatValue(v, maxLength);
70
- if (formatted) {
71
- return formatted;
72
- }
73
- }
74
- return null;
75
- }
76
- return null;
77
- }
78
-
79
- /**
80
- * Extract variable values from GraphQL variables object
81
- *
82
- * Returns an array of formatted values for display with arrow notation.
83
- *
84
- * @param variables - GraphQL variables object
85
- * @param maxValues - Maximum number of values to show (default: 3)
86
- * @returns Array of formatted variable values
87
- *
88
- * @example
89
- * formatGraphQLVariables({ id: "pikachu" })
90
- * // Returns: ["pikachu"]
91
- *
92
- * @example
93
- * formatGraphQLVariables({ userId: 123, includeProfile: true })
94
- * // Returns: ["123", "true"]
95
- *
96
- * @example
97
- * formatGraphQLVariables({ filter: { status: "active" }, limit: 10 })
98
- * // Returns: ["active", "10"]
99
- */
100
- function formatGraphQLVariables(variables, maxValues = 3) {
101
- if (!variables || typeof variables !== 'object') {
102
- return null;
103
- }
104
- const values = [];
105
-
106
- // Extract values from variables object
107
- for (const [_, value] of Object.entries(variables)) {
108
- const formatted = formatValue(value);
109
- if (formatted) {
110
- values.push(formatted);
111
- }
112
-
113
- // Stop if we've reached max values
114
- if (values.length >= maxValues) {
115
- break;
116
- }
117
- }
118
- return values.length > 0 ? values : null;
119
- }
120
-
121
- /**
122
- * Combine operation name with variables using arrow notation
123
- *
124
- * Matches React Query display pattern: "pokemon › Sandshrew"
125
- * This provides visual consistency across all dev tools.
126
- *
127
- * @param operationName - GraphQL operation name (e.g., "GetPokemon")
128
- * @param variables - GraphQL variables object
129
- * @returns Formatted string with arrow notation
130
- *
131
- * @example
132
- * formatGraphQLDisplay("GetPokemon", { id: "Sandshrew" })
133
- * // Returns: "GetPokemon › Sandshrew"
134
- *
135
- * @example
136
- * formatGraphQLDisplay("GetUser", { userId: 123, includeProfile: true })
137
- * // Returns: "GetUser › 123 › true"
138
- *
139
- * @example
140
- * formatGraphQLDisplay("GetPosts", { status: "published", limit: 10, offset: 0 })
141
- * // Returns: "GetPosts › published › 10 › 0" (first 3 values by default)
142
- *
143
- * @example
144
- * formatGraphQLDisplay("GetCurrentUser", {})
145
- * // Returns: "GetCurrentUser" (no variables)
146
- */
147
- function formatGraphQLDisplay(operationName, variables) {
148
- const values = formatGraphQLVariables(variables);
149
- if (!values || values.length === 0) {
150
- // No variables - just operation name
151
- return operationName;
152
- }
153
-
154
- // Combine: "GetPokemon › Sandshrew" (matches React Query pattern)
155
- return [operationName, ...values].join(" › ");
156
- }
157
-
158
- /**
159
- * Search GraphQL variables for a given text
160
- *
161
- * Recursively searches through all variable values to find matches.
162
- * Used for filtering GraphQL requests by variable content.
163
- *
164
- * @param variables - GraphQL variables object
165
- * @param searchText - Text to search for (already lowercased)
166
- * @returns true if search text found in any variable value
167
- *
168
- * @example
169
- * searchGraphQLVariables({ id: "pikachu" }, "pika")
170
- * // Returns: true
171
- *
172
- * @example
173
- * searchGraphQLVariables({ userId: 123, name: "John" }, "123")
174
- * // Returns: true
175
- */
176
- function searchGraphQLVariables(variables, searchText) {
177
- if (!variables || typeof variables !== 'object') {
178
- return false;
179
- }
180
-
181
- // Search through all variable values
182
- for (const value of Object.values(variables)) {
183
- if (searchValue(value, searchText)) {
184
- return true;
185
- }
186
- }
187
- return false;
188
- }
189
-
190
- /**
191
- * Recursively search a value for matching text
192
- */
193
- function searchValue(value, searchText) {
194
- // String - direct match
195
- if (typeof value === 'string') {
196
- return value.toLowerCase().includes(searchText);
197
- }
198
-
199
- // Number - convert to string and match
200
- if (typeof value === 'number') {
201
- return String(value).includes(searchText);
202
- }
203
-
204
- // Boolean - convert to string and match
205
- if (typeof value === 'boolean') {
206
- return String(value).includes(searchText);
207
- }
208
-
209
- // Array - search each item
210
- if (Array.isArray(value)) {
211
- return value.some(item => searchValue(item, searchText));
212
- }
213
-
214
- // Object - search nested values
215
- if (typeof value === 'object' && value !== null) {
216
- return Object.values(value).some(v => searchValue(v, searchText));
217
- }
218
- return false;
219
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.formatGraphQLDisplay=formatGraphQLDisplay;exports.formatGraphQLVariables=formatGraphQLVariables;exports.searchGraphQLVariables=searchGraphQLVariables;function formatValue(r,n=30){if(r===null||r===void 0){return null}if(typeof r==="boolean"){return String(r)}if(typeof r==="number"){return String(r)}if(typeof r==="string"){if(r.length>n){return r.substring(0,n-1)+"\u2026"}return r}if(Array.isArray(r)){if(r.length===0)return null;if(r.length===1){return formatValue(r[0],n)}return`${r.length} items`}if(typeof r==="object"){const t=Object.entries(r);if(t.length===0)return null;for(const[o,f]of t){const e=formatValue(f,n);if(e){return e}}return null}return null}function formatGraphQLVariables(r,n=3){if(!r||typeof r!=="object"){return null}const t=[];for(const[o,f]of Object.entries(r)){const e=formatValue(f);if(e){t.push(e)}if(t.length>=n){break}}return t.length>0?t:null}function formatGraphQLDisplay(r,n){const t=formatGraphQLVariables(n);if(!t||t.length===0){return r}return[r,...t].join(" \u203A ")}function searchGraphQLVariables(r,n){if(!r||typeof r!=="object"){return false}for(const t of Object.values(r)){if(searchValue(t,n)){return true}}return false}function searchValue(r,n){if(typeof r==="string"){return r.toLowerCase().includes(n)}if(typeof r==="number"){return String(r).includes(n)}if(typeof r==="boolean"){return String(r).includes(n)}if(Array.isArray(r)){return r.some(t=>searchValue(t,n))}if(typeof r==="object"&&r!==null){return Object.values(r).some(t=>searchValue(t,n))}return false}
@@ -1,30 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "formatBytes", {
7
- enumerable: true,
8
- get: function () {
9
- return _sharedUi.formatBytes;
10
- }
11
- });
12
- Object.defineProperty(exports, "formatDuration", {
13
- enumerable: true,
14
- get: function () {
15
- return _sharedUi.formatDuration;
16
- }
17
- });
18
- Object.defineProperty(exports, "formatHttpStatus", {
19
- enumerable: true,
20
- get: function () {
21
- return _sharedUi.formatHttpStatus;
22
- }
23
- });
24
- Object.defineProperty(exports, "getMethodColor", {
25
- enumerable: true,
26
- get: function () {
27
- return _sharedUi.getMethodColor;
28
- }
29
- });
30
- var _sharedUi = require("@buoy-gg/shared-ui");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"formatBytes",{enumerable:true,get:function(){return _sharedUi.formatBytes}});Object.defineProperty(exports,"formatDuration",{enumerable:true,get:function(){return _sharedUi.formatDuration}});Object.defineProperty(exports,"formatHttpStatus",{enumerable:true,get:function(){return _sharedUi.formatHttpStatus}});Object.defineProperty(exports,"getMethodColor",{enumerable:true,get:function(){return _sharedUi.getMethodColor}});var _sharedUi=require("@buoy-gg/shared-ui");
@@ -1,71 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.generateCurl = generateCurl;
7
- /**
8
- * Render a captured request as a runnable `curl` command.
9
- *
10
- * The point is to get a request OUT of the app and into a terminal, Postman or
11
- * a bug report without retyping it — so the output has to actually run, which
12
- * makes quoting the whole job.
13
- */
14
-
15
- /** Headers that describe the captured hop rather than the request, and would
16
- * either break the replay or lie about it. curl sets these itself. */
17
- const SKIPPED_HEADERS = new Set(["content-length",
18
- // curl recomputes it; a stale value truncates the body
19
- "host",
20
- // implied by the URL
21
- "connection", "accept-encoding" // curl would then have to decode what it asked for
22
- ]);
23
-
24
- /**
25
- * Single-quote for POSIX shells.
26
- *
27
- * Inside single quotes every byte is literal, so the ONLY character needing
28
- * care is the single quote itself — closed, escaped, reopened. Newlines and
29
- * `$`/backtick survive untouched, which is what makes this safe for JSON
30
- * bodies and tokens.
31
- */
32
- function shellQuote(value) {
33
- return `'${value.replace(/'/g, `'\\''`)}'`;
34
- }
35
- function serializeBody(data) {
36
- if (data === undefined || data === null) return null;
37
- if (typeof data === "string") return data;
38
- try {
39
- return JSON.stringify(data);
40
- } catch {
41
- // Circular or otherwise unserializable — better to emit no body than a
42
- // command that silently posts "[object Object]".
43
- return null;
44
- }
45
- }
46
- function generateCurl(event) {
47
- const method = (event.method || "GET").toUpperCase();
48
- const body = serializeBody(event.requestData);
49
-
50
- // Flags are collected as whole `-X PATCH` strings rather than as a flat token
51
- // list, so the line-wrap below can't mis-pair them — an earlier version
52
- // destructured `[cmd, url, ...rest]` and put the URL in the wrong slot the
53
- // moment an -X was present.
54
- const flags = [];
55
-
56
- // curl defaults to GET, and to POST once -d is present, so -X only carries
57
- // information when it disagrees with that.
58
- if (method !== "GET" && !(method === "POST" && body !== null)) {
59
- flags.push(`-X ${method}`);
60
- }
61
- for (const [key, value] of Object.entries(event.requestHeaders || {})) {
62
- if (SKIPPED_HEADERS.has(key.toLowerCase())) continue;
63
- flags.push(`-H ${shellQuote(`${key}: ${value}`)}`);
64
- }
65
- if (body !== null) flags.push(`--data-raw ${shellQuote(body)}`);
66
- const head = `curl ${shellQuote(event.url)}`;
67
- if (flags.length === 0) return head;
68
- // One flag per line — these get long, and a wrapped blob is unreadable in a
69
- // terminal or pasted into a ticket.
70
- return `${head} \\\n ${flags.join(" \\\n ")}`;
71
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateCurl=generateCurl;const SKIPPED_HEADERS=new Set(["content-length","host","connection","accept-encoding"]);function shellQuote(e){return`'${e.replace(/'/g,`'\\''`)}'`}function serializeBody(e){if(e===void 0||e===null)return null;if(typeof e==="string")return e;try{return JSON.stringify(e)}catch{return null}}function generateCurl(e){const t=(e.method||"GET").toUpperCase();const r=serializeBody(e.requestData);const n=[];if(t!=="GET"&&!(t==="POST"&&r!==null)){n.push(`-X ${t}`)}for(const[o,s]of Object.entries(e.requestHeaders||{})){if(SKIPPED_HEADERS.has(o.toLowerCase()))continue;n.push(`-H ${shellQuote(`${o}: ${s}`)}`)}if(r!==null)n.push(`--data-raw ${shellQuote(r)}`);const u=`curl ${shellQuote(e.url)}`;if(n.length===0)return u;return`${u} \\
2
+ ${n.join(" \\\n ")}`}