@heojeongbo/wirestage 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES.md +21 -0
  3. package/README.md +150 -2
  4. package/dist/app/playwright/index.d.ts +3 -0
  5. package/dist/app/playwright/index.d.ts.map +1 -0
  6. package/dist/app/playwright/index.js +2 -0
  7. package/dist/app/playwright/index.js.map +1 -0
  8. package/dist/app/playwright/lib/fixture.d.ts +61 -0
  9. package/dist/app/playwright/lib/fixture.d.ts.map +1 -0
  10. package/dist/app/playwright/lib/fixture.js +110 -0
  11. package/dist/app/playwright/lib/fixture.js.map +1 -0
  12. package/dist/connect.d.ts +7 -0
  13. package/dist/connect.d.ts.map +1 -0
  14. package/dist/connect.js +7 -0
  15. package/dist/connect.js.map +1 -0
  16. package/dist/entities/frame/@x/plugin.d.ts +9 -0
  17. package/dist/entities/frame/@x/plugin.d.ts.map +1 -0
  18. package/dist/entities/frame/@x/plugin.js +2 -0
  19. package/dist/entities/frame/@x/plugin.js.map +1 -0
  20. package/dist/entities/frame/index.d.ts +6 -0
  21. package/dist/entities/frame/index.d.ts.map +1 -0
  22. package/dist/entities/frame/index.js +4 -0
  23. package/dist/entities/frame/index.js.map +1 -0
  24. package/dist/entities/frame/lib/filter.d.ts +8 -0
  25. package/dist/entities/frame/lib/filter.d.ts.map +1 -0
  26. package/dist/entities/frame/lib/filter.js +62 -0
  27. package/dist/entities/frame/lib/filter.js.map +1 -0
  28. package/dist/entities/frame/lib/payload.d.ts +8 -0
  29. package/dist/entities/frame/lib/payload.d.ts.map +1 -0
  30. package/dist/entities/frame/lib/payload.js +42 -0
  31. package/dist/entities/frame/lib/payload.js.map +1 -0
  32. package/dist/entities/frame/lib/snapshot.d.ts +15 -0
  33. package/dist/entities/frame/lib/snapshot.d.ts.map +1 -0
  34. package/dist/entities/frame/lib/snapshot.js +90 -0
  35. package/dist/entities/frame/lib/snapshot.js.map +1 -0
  36. package/dist/entities/frame/lib/timeline.d.ts +23 -0
  37. package/dist/entities/frame/lib/timeline.d.ts.map +1 -0
  38. package/dist/entities/frame/lib/timeline.js +122 -0
  39. package/dist/entities/frame/lib/timeline.js.map +1 -0
  40. package/dist/entities/frame/model/frame.d.ts +182 -0
  41. package/dist/entities/frame/model/frame.d.ts.map +1 -0
  42. package/dist/entities/frame/model/frame.js +2 -0
  43. package/dist/entities/frame/model/frame.js.map +1 -0
  44. package/dist/entities/plugin/index.d.ts +9 -0
  45. package/dist/entities/plugin/index.d.ts.map +1 -0
  46. package/dist/entities/plugin/index.js +3 -0
  47. package/dist/entities/plugin/index.js.map +1 -0
  48. package/dist/entities/plugin/lib/define-plugin.d.ts +8 -0
  49. package/dist/entities/plugin/lib/define-plugin.d.ts.map +1 -0
  50. package/dist/entities/plugin/lib/define-plugin.js +9 -0
  51. package/dist/entities/plugin/lib/define-plugin.js.map +1 -0
  52. package/dist/entities/plugin/lib/named.d.ts +10 -0
  53. package/dist/entities/plugin/lib/named.d.ts.map +1 -0
  54. package/dist/entities/plugin/lib/named.js +17 -0
  55. package/dist/entities/plugin/lib/named.js.map +1 -0
  56. package/dist/entities/plugin/model/attachment.d.ts +18 -0
  57. package/dist/entities/plugin/model/attachment.d.ts.map +1 -0
  58. package/dist/entities/plugin/model/attachment.js +2 -0
  59. package/dist/entities/plugin/model/attachment.js.map +1 -0
  60. package/dist/entities/plugin/model/http.d.ts +126 -0
  61. package/dist/entities/plugin/model/http.d.ts.map +1 -0
  62. package/dist/entities/plugin/model/http.js +2 -0
  63. package/dist/entities/plugin/model/http.js.map +1 -0
  64. package/dist/entities/plugin/model/page.d.ts +100 -0
  65. package/dist/entities/plugin/model/page.d.ts.map +1 -0
  66. package/dist/entities/plugin/model/page.js +2 -0
  67. package/dist/entities/plugin/model/page.js.map +1 -0
  68. package/dist/entities/plugin/model/plugin.d.ts +83 -0
  69. package/dist/entities/plugin/model/plugin.d.ts.map +1 -0
  70. package/dist/entities/plugin/model/plugin.js +2 -0
  71. package/dist/entities/plugin/model/plugin.js.map +1 -0
  72. package/dist/entities/plugin/model/socket.d.ts +102 -0
  73. package/dist/entities/plugin/model/socket.d.ts.map +1 -0
  74. package/dist/entities/plugin/model/socket.js +2 -0
  75. package/dist/entities/plugin/model/socket.js.map +1 -0
  76. package/dist/entities/plugin/model/stream.d.ts +43 -0
  77. package/dist/entities/plugin/model/stream.d.ts.map +1 -0
  78. package/dist/entities/plugin/model/stream.js +2 -0
  79. package/dist/entities/plugin/model/stream.js.map +1 -0
  80. package/dist/features/connect/index.d.ts +5 -0
  81. package/dist/features/connect/index.d.ts.map +1 -0
  82. package/dist/features/connect/index.js +4 -0
  83. package/dist/features/connect/index.js.map +1 -0
  84. package/dist/features/connect/lib/calls.d.ts +9 -0
  85. package/dist/features/connect/lib/calls.d.ts.map +1 -0
  86. package/dist/features/connect/lib/calls.js +46 -0
  87. package/dist/features/connect/lib/calls.js.map +1 -0
  88. package/dist/features/connect/lib/client.d.ts +33 -0
  89. package/dist/features/connect/lib/client.d.ts.map +1 -0
  90. package/dist/features/connect/lib/client.js +147 -0
  91. package/dist/features/connect/lib/client.js.map +1 -0
  92. package/dist/features/connect/lib/create-connect.d.ts +14 -0
  93. package/dist/features/connect/lib/create-connect.d.ts.map +1 -0
  94. package/dist/features/connect/lib/create-connect.js +124 -0
  95. package/dist/features/connect/lib/create-connect.js.map +1 -0
  96. package/dist/features/connect/lib/faults.d.ts +18 -0
  97. package/dist/features/connect/lib/faults.d.ts.map +1 -0
  98. package/dist/features/connect/lib/faults.js +85 -0
  99. package/dist/features/connect/lib/faults.js.map +1 -0
  100. package/dist/features/connect/lib/protocol.d.ts +42 -0
  101. package/dist/features/connect/lib/protocol.d.ts.map +1 -0
  102. package/dist/features/connect/lib/protocol.js +228 -0
  103. package/dist/features/connect/lib/protocol.js.map +1 -0
  104. package/dist/features/connect/lib/record.d.ts +14 -0
  105. package/dist/features/connect/lib/record.d.ts.map +1 -0
  106. package/dist/features/connect/lib/record.js +36 -0
  107. package/dist/features/connect/lib/record.js.map +1 -0
  108. package/dist/features/connect/lib/recorder.d.ts +77 -0
  109. package/dist/features/connect/lib/recorder.d.ts.map +1 -0
  110. package/dist/features/connect/lib/recorder.js +209 -0
  111. package/dist/features/connect/lib/recorder.js.map +1 -0
  112. package/dist/features/connect/lib/rules.d.ts +51 -0
  113. package/dist/features/connect/lib/rules.d.ts.map +1 -0
  114. package/dist/features/connect/lib/rules.js +222 -0
  115. package/dist/features/connect/lib/rules.js.map +1 -0
  116. package/dist/features/connect/lib/serve.d.ts +10 -0
  117. package/dist/features/connect/lib/serve.d.ts.map +1 -0
  118. package/dist/features/connect/lib/serve.js +78 -0
  119. package/dist/features/connect/lib/serve.js.map +1 -0
  120. package/dist/features/connect/lib/status-of.d.ts +11 -0
  121. package/dist/features/connect/lib/status-of.d.ts.map +1 -0
  122. package/dist/features/connect/lib/status-of.js +22 -0
  123. package/dist/features/connect/lib/status-of.js.map +1 -0
  124. package/dist/features/connect/lib/stubs.d.ts +18 -0
  125. package/dist/features/connect/lib/stubs.d.ts.map +1 -0
  126. package/dist/features/connect/lib/stubs.js +174 -0
  127. package/dist/features/connect/lib/stubs.js.map +1 -0
  128. package/dist/features/connect/lib/universal.d.ts +19 -0
  129. package/dist/features/connect/lib/universal.d.ts.map +1 -0
  130. package/dist/features/connect/lib/universal.js +71 -0
  131. package/dist/features/connect/lib/universal.js.map +1 -0
  132. package/dist/features/connect/model/types.d.ts +247 -0
  133. package/dist/features/connect/model/types.d.ts.map +1 -0
  134. package/dist/features/connect/model/types.js +2 -0
  135. package/dist/features/connect/model/types.js.map +1 -0
  136. package/dist/features/rest/index.d.ts +5 -0
  137. package/dist/features/rest/index.d.ts.map +1 -0
  138. package/dist/features/rest/index.js +3 -0
  139. package/dist/features/rest/index.js.map +1 -0
  140. package/dist/features/rest/lib/calls.d.ts +8 -0
  141. package/dist/features/rest/lib/calls.d.ts.map +1 -0
  142. package/dist/features/rest/lib/calls.js +32 -0
  143. package/dist/features/rest/lib/calls.js.map +1 -0
  144. package/dist/features/rest/lib/create-rest.d.ts +8 -0
  145. package/dist/features/rest/lib/create-rest.d.ts.map +1 -0
  146. package/dist/features/rest/lib/create-rest.js +136 -0
  147. package/dist/features/rest/lib/create-rest.js.map +1 -0
  148. package/dist/features/rest/lib/path.d.ts +14 -0
  149. package/dist/features/rest/lib/path.d.ts.map +1 -0
  150. package/dist/features/rest/lib/path.js +58 -0
  151. package/dist/features/rest/lib/path.js.map +1 -0
  152. package/dist/features/rest/lib/reply.d.ts +25 -0
  153. package/dist/features/rest/lib/reply.d.ts.map +1 -0
  154. package/dist/features/rest/lib/reply.js +40 -0
  155. package/dist/features/rest/lib/reply.js.map +1 -0
  156. package/dist/features/rest/model/types.d.ts +74 -0
  157. package/dist/features/rest/model/types.d.ts.map +1 -0
  158. package/dist/features/rest/model/types.js +2 -0
  159. package/dist/features/rest/model/types.js.map +1 -0
  160. package/dist/features/sse/index.d.ts +4 -0
  161. package/dist/features/sse/index.d.ts.map +1 -0
  162. package/dist/features/sse/index.js +3 -0
  163. package/dist/features/sse/index.js.map +1 -0
  164. package/dist/features/sse/lib/create-sse.d.ts +9 -0
  165. package/dist/features/sse/lib/create-sse.d.ts.map +1 -0
  166. package/dist/features/sse/lib/create-sse.js +120 -0
  167. package/dist/features/sse/lib/create-sse.js.map +1 -0
  168. package/dist/features/sse/lib/encode.d.ts +8 -0
  169. package/dist/features/sse/lib/encode.d.ts.map +1 -0
  170. package/dist/features/sse/lib/encode.js +29 -0
  171. package/dist/features/sse/lib/encode.js.map +1 -0
  172. package/dist/features/sse/model/types.d.ts +62 -0
  173. package/dist/features/sse/model/types.d.ts.map +1 -0
  174. package/dist/features/sse/model/types.js +2 -0
  175. package/dist/features/sse/model/types.js.map +1 -0
  176. package/dist/features/webrtc/index.d.ts +3 -0
  177. package/dist/features/webrtc/index.d.ts.map +1 -0
  178. package/dist/features/webrtc/index.js +2 -0
  179. package/dist/features/webrtc/index.js.map +1 -0
  180. package/dist/features/webrtc/lib/create-webrtc.d.ts +9 -0
  181. package/dist/features/webrtc/lib/create-webrtc.d.ts.map +1 -0
  182. package/dist/features/webrtc/lib/create-webrtc.js +123 -0
  183. package/dist/features/webrtc/lib/create-webrtc.js.map +1 -0
  184. package/dist/features/webrtc/lib/rtc-page-module.d.ts +22 -0
  185. package/dist/features/webrtc/lib/rtc-page-module.d.ts.map +1 -0
  186. package/dist/features/webrtc/lib/rtc-page-module.js +161 -0
  187. package/dist/features/webrtc/lib/rtc-page-module.js.map +1 -0
  188. package/dist/features/webrtc/lib/to-frame.d.ts +9 -0
  189. package/dist/features/webrtc/lib/to-frame.d.ts.map +1 -0
  190. package/dist/features/webrtc/lib/to-frame.js +43 -0
  191. package/dist/features/webrtc/lib/to-frame.js.map +1 -0
  192. package/dist/features/webrtc/model/types.d.ts +70 -0
  193. package/dist/features/webrtc/model/types.d.ts.map +1 -0
  194. package/dist/features/webrtc/model/types.js +2 -0
  195. package/dist/features/webrtc/model/types.js.map +1 -0
  196. package/dist/features/websocket/index.d.ts +3 -0
  197. package/dist/features/websocket/index.d.ts.map +1 -0
  198. package/dist/features/websocket/index.js +2 -0
  199. package/dist/features/websocket/index.js.map +1 -0
  200. package/dist/features/websocket/lib/create-websocket.d.ts +9 -0
  201. package/dist/features/websocket/lib/create-websocket.d.ts.map +1 -0
  202. package/dist/features/websocket/lib/create-websocket.js +34 -0
  203. package/dist/features/websocket/lib/create-websocket.js.map +1 -0
  204. package/dist/features/websocket/lib/mock.d.ts +6 -0
  205. package/dist/features/websocket/lib/mock.d.ts.map +1 -0
  206. package/dist/features/websocket/lib/mock.js +96 -0
  207. package/dist/features/websocket/lib/mock.js.map +1 -0
  208. package/dist/features/websocket/lib/proxy.d.ts +9 -0
  209. package/dist/features/websocket/lib/proxy.d.ts.map +1 -0
  210. package/dist/features/websocket/lib/proxy.js +107 -0
  211. package/dist/features/websocket/lib/proxy.js.map +1 -0
  212. package/dist/features/websocket/lib/wire.d.ts +16 -0
  213. package/dist/features/websocket/lib/wire.d.ts.map +1 -0
  214. package/dist/features/websocket/lib/wire.js +46 -0
  215. package/dist/features/websocket/lib/wire.js.map +1 -0
  216. package/dist/features/websocket/model/types.d.ts +129 -0
  217. package/dist/features/websocket/model/types.d.ts.map +1 -0
  218. package/dist/features/websocket/model/types.js +2 -0
  219. package/dist/features/websocket/model/types.js.map +1 -0
  220. package/dist/index.d.ts +27 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +16 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/playwright.d.ts +4 -0
  225. package/dist/playwright.d.ts.map +1 -0
  226. package/dist/playwright.js +2 -0
  227. package/dist/playwright.js.map +1 -0
  228. package/dist/rest.d.ts +3 -0
  229. package/dist/rest.d.ts.map +1 -0
  230. package/dist/rest.js +3 -0
  231. package/dist/rest.js.map +1 -0
  232. package/dist/shared/api/http-server/index.d.ts +3 -0
  233. package/dist/shared/api/http-server/index.d.ts.map +1 -0
  234. package/dist/shared/api/http-server/index.js +2 -0
  235. package/dist/shared/api/http-server/index.js.map +1 -0
  236. package/dist/shared/api/http-server/listen.d.ts +25 -0
  237. package/dist/shared/api/http-server/listen.d.ts.map +1 -0
  238. package/dist/shared/api/http-server/listen.js +44 -0
  239. package/dist/shared/api/http-server/listen.js.map +1 -0
  240. package/dist/shared/api/playwright/index.d.ts +2 -0
  241. package/dist/shared/api/playwright/index.d.ts.map +1 -0
  242. package/dist/shared/api/playwright/index.js +2 -0
  243. package/dist/shared/api/playwright/index.js.map +1 -0
  244. package/dist/shared/api/playwright/ports.d.ts +117 -0
  245. package/dist/shared/api/playwright/ports.d.ts.map +1 -0
  246. package/dist/shared/api/playwright/ports.js +11 -0
  247. package/dist/shared/api/playwright/ports.js.map +1 -0
  248. package/dist/shared/api/stream-server/index.d.ts +3 -0
  249. package/dist/shared/api/stream-server/index.d.ts.map +1 -0
  250. package/dist/shared/api/stream-server/index.js +2 -0
  251. package/dist/shared/api/stream-server/index.js.map +1 -0
  252. package/dist/shared/api/stream-server/stream-server.d.ts +43 -0
  253. package/dist/shared/api/stream-server/stream-server.d.ts.map +1 -0
  254. package/dist/shared/api/stream-server/stream-server.js +160 -0
  255. package/dist/shared/api/stream-server/stream-server.js.map +1 -0
  256. package/dist/shared/lib/async/arrivals.d.ts +31 -0
  257. package/dist/shared/lib/async/arrivals.d.ts.map +1 -0
  258. package/dist/shared/lib/async/arrivals.js +57 -0
  259. package/dist/shared/lib/async/arrivals.js.map +1 -0
  260. package/dist/shared/lib/async/async-queue.d.ts +23 -0
  261. package/dist/shared/lib/async/async-queue.d.ts.map +1 -0
  262. package/dist/shared/lib/async/async-queue.js +80 -0
  263. package/dist/shared/lib/async/async-queue.js.map +1 -0
  264. package/dist/shared/lib/async/deferred.d.ts +12 -0
  265. package/dist/shared/lib/async/deferred.d.ts.map +1 -0
  266. package/dist/shared/lib/async/deferred.js +34 -0
  267. package/dist/shared/lib/async/deferred.js.map +1 -0
  268. package/dist/shared/lib/async/index.d.ts +8 -0
  269. package/dist/shared/lib/async/index.d.ts.map +1 -0
  270. package/dist/shared/lib/async/index.js +5 -0
  271. package/dist/shared/lib/async/index.js.map +1 -0
  272. package/dist/shared/lib/async/run-all.d.ts +8 -0
  273. package/dist/shared/lib/async/run-all.d.ts.map +1 -0
  274. package/dist/shared/lib/async/run-all.js +22 -0
  275. package/dist/shared/lib/async/run-all.js.map +1 -0
  276. package/dist/shared/lib/bytes/bytes.d.ts +18 -0
  277. package/dist/shared/lib/bytes/bytes.d.ts.map +1 -0
  278. package/dist/shared/lib/bytes/bytes.js +48 -0
  279. package/dist/shared/lib/bytes/bytes.js.map +1 -0
  280. package/dist/shared/lib/bytes/index.d.ts +3 -0
  281. package/dist/shared/lib/bytes/index.d.ts.map +1 -0
  282. package/dist/shared/lib/bytes/index.js +2 -0
  283. package/dist/shared/lib/bytes/index.js.map +1 -0
  284. package/dist/shared/lib/clock/clock.d.ts +29 -0
  285. package/dist/shared/lib/clock/clock.d.ts.map +1 -0
  286. package/dist/shared/lib/clock/clock.js +85 -0
  287. package/dist/shared/lib/clock/clock.js.map +1 -0
  288. package/dist/shared/lib/clock/index.d.ts +3 -0
  289. package/dist/shared/lib/clock/index.d.ts.map +1 -0
  290. package/dist/shared/lib/clock/index.js +2 -0
  291. package/dist/shared/lib/clock/index.js.map +1 -0
  292. package/dist/shared/lib/cookies/index.d.ts +3 -0
  293. package/dist/shared/lib/cookies/index.d.ts.map +1 -0
  294. package/dist/shared/lib/cookies/index.js +2 -0
  295. package/dist/shared/lib/cookies/index.js.map +1 -0
  296. package/dist/shared/lib/cookies/set-cookie.d.ts +22 -0
  297. package/dist/shared/lib/cookies/set-cookie.d.ts.map +1 -0
  298. package/dist/shared/lib/cookies/set-cookie.js +89 -0
  299. package/dist/shared/lib/cookies/set-cookie.js.map +1 -0
  300. package/dist/shared/lib/envelope/envelope.d.ts +50 -0
  301. package/dist/shared/lib/envelope/envelope.d.ts.map +1 -0
  302. package/dist/shared/lib/envelope/envelope.js +111 -0
  303. package/dist/shared/lib/envelope/envelope.js.map +1 -0
  304. package/dist/shared/lib/envelope/index.d.ts +3 -0
  305. package/dist/shared/lib/envelope/index.d.ts.map +1 -0
  306. package/dist/shared/lib/envelope/index.js +2 -0
  307. package/dist/shared/lib/envelope/index.js.map +1 -0
  308. package/dist/shared/lib/errors/index.d.ts +3 -0
  309. package/dist/shared/lib/errors/index.d.ts.map +1 -0
  310. package/dist/shared/lib/errors/index.js +2 -0
  311. package/dist/shared/lib/errors/index.js.map +1 -0
  312. package/dist/shared/lib/errors/wirestage-error.d.ts +28 -0
  313. package/dist/shared/lib/errors/wirestage-error.d.ts.map +1 -0
  314. package/dist/shared/lib/errors/wirestage-error.js +16 -0
  315. package/dist/shared/lib/errors/wirestage-error.js.map +1 -0
  316. package/dist/shared/lib/id/id.d.ts +10 -0
  317. package/dist/shared/lib/id/id.d.ts.map +1 -0
  318. package/dist/shared/lib/id/id.js +26 -0
  319. package/dist/shared/lib/id/id.js.map +1 -0
  320. package/dist/shared/lib/id/index.d.ts +2 -0
  321. package/dist/shared/lib/id/index.d.ts.map +1 -0
  322. package/dist/shared/lib/id/index.js +2 -0
  323. package/dist/shared/lib/id/index.js.map +1 -0
  324. package/dist/shared/lib/logger/index.d.ts +3 -0
  325. package/dist/shared/lib/logger/index.d.ts.map +1 -0
  326. package/dist/shared/lib/logger/index.js +2 -0
  327. package/dist/shared/lib/logger/index.js.map +1 -0
  328. package/dist/shared/lib/logger/logger.d.ts +46 -0
  329. package/dist/shared/lib/logger/logger.d.ts.map +1 -0
  330. package/dist/shared/lib/logger/logger.js +67 -0
  331. package/dist/shared/lib/logger/logger.js.map +1 -0
  332. package/dist/shared/lib/match/index.d.ts +3 -0
  333. package/dist/shared/lib/match/index.d.ts.map +1 -0
  334. package/dist/shared/lib/match/index.js +2 -0
  335. package/dist/shared/lib/match/index.js.map +1 -0
  336. package/dist/shared/lib/match/url-matcher.d.ts +27 -0
  337. package/dist/shared/lib/match/url-matcher.d.ts.map +1 -0
  338. package/dist/shared/lib/match/url-matcher.js +88 -0
  339. package/dist/shared/lib/match/url-matcher.js.map +1 -0
  340. package/dist/sse.d.ts +3 -0
  341. package/dist/sse.d.ts.map +1 -0
  342. package/dist/sse.js +3 -0
  343. package/dist/sse.js.map +1 -0
  344. package/dist/webrtc.d.ts +3 -0
  345. package/dist/webrtc.d.ts.map +1 -0
  346. package/dist/webrtc.js +3 -0
  347. package/dist/webrtc.js.map +1 -0
  348. package/dist/websocket.d.ts +3 -0
  349. package/dist/websocket.d.ts.map +1 -0
  350. package/dist/websocket.js +3 -0
  351. package/dist/websocket.js.map +1 -0
  352. package/dist/widgets/stage/index.d.ts +3 -0
  353. package/dist/widgets/stage/index.d.ts.map +1 -0
  354. package/dist/widgets/stage/index.js +2 -0
  355. package/dist/widgets/stage/index.js.map +1 -0
  356. package/dist/widgets/stage/lib/attached-context.d.ts +10 -0
  357. package/dist/widgets/stage/lib/attached-context.d.ts.map +1 -0
  358. package/dist/widgets/stage/lib/attached-context.js +2 -0
  359. package/dist/widgets/stage/lib/attached-context.js.map +1 -0
  360. package/dist/widgets/stage/lib/create-stage.d.ts +12 -0
  361. package/dist/widgets/stage/lib/create-stage.d.ts.map +1 -0
  362. package/dist/widgets/stage/lib/create-stage.js +248 -0
  363. package/dist/widgets/stage/lib/create-stage.js.map +1 -0
  364. package/dist/widgets/stage/lib/http-router.d.ts +35 -0
  365. package/dist/widgets/stage/lib/http-router.d.ts.map +1 -0
  366. package/dist/widgets/stage/lib/http-router.js +455 -0
  367. package/dist/widgets/stage/lib/http-router.js.map +1 -0
  368. package/dist/widgets/stage/lib/page-host.d.ts +36 -0
  369. package/dist/widgets/stage/lib/page-host.d.ts.map +1 -0
  370. package/dist/widgets/stage/lib/page-host.js +240 -0
  371. package/dist/widgets/stage/lib/page-host.js.map +1 -0
  372. package/dist/widgets/stage/lib/page-runtime.d.ts +93 -0
  373. package/dist/widgets/stage/lib/page-runtime.d.ts.map +1 -0
  374. package/dist/widgets/stage/lib/page-runtime.js +247 -0
  375. package/dist/widgets/stage/lib/page-runtime.js.map +1 -0
  376. package/dist/widgets/stage/lib/reads.d.ts +21 -0
  377. package/dist/widgets/stage/lib/reads.d.ts.map +1 -0
  378. package/dist/widgets/stage/lib/reads.js +97 -0
  379. package/dist/widgets/stage/lib/reads.js.map +1 -0
  380. package/dist/widgets/stage/lib/response-stream.d.ts +9 -0
  381. package/dist/widgets/stage/lib/response-stream.d.ts.map +1 -0
  382. package/dist/widgets/stage/lib/response-stream.js +56 -0
  383. package/dist/widgets/stage/lib/response-stream.js.map +1 -0
  384. package/dist/widgets/stage/lib/socket-router.d.ts +25 -0
  385. package/dist/widgets/stage/lib/socket-router.d.ts.map +1 -0
  386. package/dist/widgets/stage/lib/socket-router.js +204 -0
  387. package/dist/widgets/stage/lib/socket-router.js.map +1 -0
  388. package/dist/widgets/stage/model/stage.d.ts +86 -0
  389. package/dist/widgets/stage/model/stage.d.ts.map +1 -0
  390. package/dist/widgets/stage/model/stage.js +2 -0
  391. package/dist/widgets/stage/model/stage.js.map +1 -0
  392. package/package.json +140 -5
  393. package/src/app/playwright/index.ts +7 -0
  394. package/src/app/playwright/lib/fixture.ts +201 -0
  395. package/src/connect.ts +6 -0
  396. package/src/entities/frame/@x/plugin.ts +8 -0
  397. package/src/entities/frame/index.ts +19 -0
  398. package/src/entities/frame/lib/filter.ts +58 -0
  399. package/src/entities/frame/lib/payload.ts +42 -0
  400. package/src/entities/frame/lib/snapshot.ts +105 -0
  401. package/src/entities/frame/lib/timeline.ts +147 -0
  402. package/src/entities/frame/model/frame.ts +191 -0
  403. package/src/entities/plugin/index.ts +36 -0
  404. package/src/entities/plugin/lib/define-plugin.ts +12 -0
  405. package/src/entities/plugin/lib/named.ts +21 -0
  406. package/src/entities/plugin/model/attachment.ts +18 -0
  407. package/src/entities/plugin/model/http.ts +147 -0
  408. package/src/entities/plugin/model/page.ts +110 -0
  409. package/src/entities/plugin/model/plugin.ts +96 -0
  410. package/src/entities/plugin/model/socket.ts +108 -0
  411. package/src/entities/plugin/model/stream.ts +43 -0
  412. package/src/features/connect/index.ts +23 -0
  413. package/src/features/connect/lib/calls.ts +58 -0
  414. package/src/features/connect/lib/client.ts +203 -0
  415. package/src/features/connect/lib/create-connect.ts +164 -0
  416. package/src/features/connect/lib/faults.ts +132 -0
  417. package/src/features/connect/lib/protocol.ts +321 -0
  418. package/src/features/connect/lib/record.ts +48 -0
  419. package/src/features/connect/lib/recorder.ts +306 -0
  420. package/src/features/connect/lib/rules.ts +385 -0
  421. package/src/features/connect/lib/serve.ts +114 -0
  422. package/src/features/connect/lib/status-of.ts +20 -0
  423. package/src/features/connect/lib/stubs.ts +282 -0
  424. package/src/features/connect/lib/universal.ts +100 -0
  425. package/src/features/connect/model/types.ts +305 -0
  426. package/src/features/rest/index.ts +23 -0
  427. package/src/features/rest/lib/calls.ts +31 -0
  428. package/src/features/rest/lib/create-rest.ts +169 -0
  429. package/src/features/rest/lib/path.ts +70 -0
  430. package/src/features/rest/lib/reply.ts +74 -0
  431. package/src/features/rest/model/types.ts +113 -0
  432. package/src/features/sse/index.ts +10 -0
  433. package/src/features/sse/lib/create-sse.ts +128 -0
  434. package/src/features/sse/lib/encode.ts +28 -0
  435. package/src/features/sse/model/types.ts +66 -0
  436. package/src/features/webrtc/index.ts +6 -0
  437. package/src/features/webrtc/lib/create-webrtc.ts +149 -0
  438. package/src/features/webrtc/lib/rtc-page-module.ts +189 -0
  439. package/src/features/webrtc/lib/to-frame.ts +63 -0
  440. package/src/features/webrtc/model/types.ts +80 -0
  441. package/src/features/websocket/index.ts +15 -0
  442. package/src/features/websocket/lib/create-websocket.ts +41 -0
  443. package/src/features/websocket/lib/mock.ts +114 -0
  444. package/src/features/websocket/lib/proxy.ts +141 -0
  445. package/src/features/websocket/lib/wire.ts +78 -0
  446. package/src/features/websocket/model/types.ts +130 -0
  447. package/src/index.ts +111 -0
  448. package/src/playwright.ts +8 -0
  449. package/src/rest.ts +2 -0
  450. package/src/shared/api/http-server/index.ts +2 -0
  451. package/src/shared/api/http-server/listen.ts +71 -0
  452. package/src/shared/api/playwright/index.ts +17 -0
  453. package/src/shared/api/playwright/ports.ts +145 -0
  454. package/src/shared/api/stream-server/index.ts +7 -0
  455. package/src/shared/api/stream-server/stream-server.ts +246 -0
  456. package/src/shared/lib/async/arrivals.ts +91 -0
  457. package/src/shared/lib/async/async-queue.ts +101 -0
  458. package/src/shared/lib/async/deferred.ts +38 -0
  459. package/src/shared/lib/async/index.ts +11 -0
  460. package/src/shared/lib/async/run-all.ts +19 -0
  461. package/src/shared/lib/bytes/bytes.ts +53 -0
  462. package/src/shared/lib/bytes/index.ts +9 -0
  463. package/src/shared/lib/clock/clock.ts +114 -0
  464. package/src/shared/lib/clock/index.ts +2 -0
  465. package/src/shared/lib/cookies/index.ts +2 -0
  466. package/src/shared/lib/cookies/set-cookie.ts +105 -0
  467. package/src/shared/lib/envelope/envelope.ts +133 -0
  468. package/src/shared/lib/envelope/index.ts +9 -0
  469. package/src/shared/lib/errors/index.ts +5 -0
  470. package/src/shared/lib/errors/wirestage-error.ts +50 -0
  471. package/src/shared/lib/id/id.ts +29 -0
  472. package/src/shared/lib/id/index.ts +1 -0
  473. package/src/shared/lib/logger/index.ts +12 -0
  474. package/src/shared/lib/logger/logger.ts +126 -0
  475. package/src/shared/lib/match/index.ts +6 -0
  476. package/src/shared/lib/match/url-matcher.ts +107 -0
  477. package/src/sse.ts +2 -0
  478. package/src/webrtc.ts +2 -0
  479. package/src/websocket.ts +2 -0
  480. package/src/widgets/stage/index.ts +9 -0
  481. package/src/widgets/stage/lib/attached-context.ts +10 -0
  482. package/src/widgets/stage/lib/create-stage.ts +305 -0
  483. package/src/widgets/stage/lib/http-router.ts +620 -0
  484. package/src/widgets/stage/lib/page-host.ts +375 -0
  485. package/src/widgets/stage/lib/page-runtime.ts +314 -0
  486. package/src/widgets/stage/lib/reads.ts +128 -0
  487. package/src/widgets/stage/lib/response-stream.ts +66 -0
  488. package/src/widgets/stage/lib/socket-router.ts +271 -0
  489. package/src/widgets/stage/model/stage.ts +108 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 heojeongbo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/LICENSES.md ADDED
@@ -0,0 +1,21 @@
1
+ # License and distribution
2
+
3
+ wirestage is distributed under the MIT license in [LICENSE](LICENSE), with
4
+ copyright attributed to heojeongbo. Package metadata declares `MIT`.
5
+
6
+ The npm tarball contains the compiled modules, the TypeScript source (for
7
+ source maps, tests excluded), README, LICENSE and this inventory. It bundles
8
+ no third-party code. Dependencies are installed separately and keep their own
9
+ licenses:
10
+
11
+ | Package | Kind | License |
12
+ | --- | --- | --- |
13
+ | @heojeongbo/log-palette | dependency | MIT |
14
+ | @playwright/test | required peer | Apache-2.0 |
15
+ | @connectrpc/connect | optional peer (`/connect`) | Apache-2.0 |
16
+ | @connectrpc/connect-node | optional peer (`/connect`) | Apache-2.0 |
17
+ | @bufbuild/protobuf | optional peer (`/connect`) | Apache-2.0 AND BSD-3-Clause |
18
+
19
+ The core and the `/rest`, `/sse`, `/websocket` and `/webrtc` entries use only
20
+ Playwright and the platform. Connect and protobuf are imported by `/connect`
21
+ alone, so they may be absent otherwise (`pnpm package:check` proves it).
package/README.md CHANGED
@@ -1,3 +1,151 @@
1
- # Temporary Holding Version
1
+ # wirestage
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Record, fake and fault-inject browser wire traffic in Playwright — REST,
4
+ Connect, gRPC-web, gRPC, SSE, WebSocket and WebRTC data channels — on one
5
+ timeline.
6
+
7
+ ```sh
8
+ pnpm add -D @heojeongbo/wirestage
9
+ ```
10
+
11
+ Playwright can route HTTP and WebSockets, but a modern app talks more than
12
+ that: server-streaming RPCs, event streams, WebRTC data channels. Tests end up
13
+ hand-rolling gRPC-web frames, patching `RTCDataChannel` in init scripts and
14
+ running ad-hoc local servers for streams. wirestage is those pieces, done once,
15
+ behind one API:
16
+
17
+ - **Fake** any protocol, including responses that stay open: a test-driven
18
+ gRPC-web stream or event stream, message by message.
19
+ - **Record** what the page actually sent and received, decoded, on a single
20
+ timeline you can drain, mark and wait on.
21
+ - **Fault-inject**: abort, delay, hold, cut a stream mid-flight, drop messages
22
+ on one data channel while it stays open.
23
+ - **Drive** the real backend from the test, signed in as the page.
24
+
25
+ ## Quick start
26
+
27
+ ```ts
28
+ import { test as base, expect } from "@playwright/test";
29
+ import { withStage } from "@heojeongbo/wirestage/playwright";
30
+ import { json, rest } from "@heojeongbo/wirestage/rest";
31
+ import { webrtc } from "@heojeongbo/wirestage/webrtc";
32
+
33
+ export const test = withStage(base, {
34
+ plugins: [rest({ baseURL: "/api" }), webrtc({ labels: ["room/cursor"] })],
35
+ });
36
+
37
+ test("the room card shows its state", async ({ page, stage }) => {
38
+ await stage.rest.get("/rooms/:id", (request) =>
39
+ json({ id: request.params["id"], state: "idle" }),
40
+ );
41
+ await page.goto("/rooms/r1");
42
+ await expect(page.getByText("idle")).toBeVisible();
43
+
44
+ await stage.mark("before move");
45
+ await page.getByRole("button", { name: "Share cursor" }).click();
46
+ const sent = await stage.since("before move", {
47
+ protocol: "webrtc",
48
+ endpoint: "room/cursor",
49
+ direction: "out",
50
+ });
51
+ expect(sent.length).toBeGreaterThan(0);
52
+ });
53
+ ```
54
+
55
+ A failing test gets the timeline attached to its report, as text and JSON,
56
+ whenever anything is on it.
57
+
58
+ ## Protocols
59
+
60
+ Each protocol is a plugin in its own subpath. Install only the peers of the
61
+ ones you use.
62
+
63
+ | Subpath | Plugin | Fakes | Records | Faults | Extra peers |
64
+ | --- | --- | --- | --- | --- | --- |
65
+ | `/rest` | `rest()` | routes with `:params`, `json`/`text`/`bytes` replies | requests and real responses | abort, delay, status | — |
66
+ | `/connect` | `connect()` | Connect, gRPC-web: unary, server streams, whole services | decoded messages and status | fail, abort, hold, cut | `@connectrpc/connect`, `@connectrpc/connect-node`, `@bufbuild/protobuf` |
67
+ | `/sse` | `sse()` | event streams driven from the test | events sent | end, cut | — |
68
+ | `/websocket` | `websocket()` | a fake server, or a proxy in front of the real one | both directions | drop, close | — |
69
+ | `/webrtc` | `webrtc()` | inject messages as the peer | every data channel message | suppress either direction | — |
70
+
71
+ The `connect` plugin also builds typed clients for the real backend
72
+ (`stage.connect.client(Service)`, cookies included) and serves stubs on a port
73
+ of their own for clients outside the browser — native gRPC over HTTP/2
74
+ included (`stage.connect.serve(...)`).
75
+
76
+ A protocol the library does not ship is a plugin you write against the same
77
+ contract the built-in ones use: [docs/plugins.md](docs/plugins.md).
78
+
79
+ ## The timeline
80
+
81
+ Every plugin writes `Frame`s to the stage's timeline: protocol, direction
82
+ (`out` left the page, `in` reached it), endpoint, payload, who produced it,
83
+ and an id that ties the frames of one exchange together. Reads bring the
84
+ timeline up to date first: they flush what the pages have buffered.
85
+
86
+ ```ts
87
+ import type { Stage } from "@heojeongbo/wirestage";
88
+
89
+ export async function lastCommand(stage: Stage) {
90
+ const frames = await stage.drain({ protocol: "webrtc", direction: "out" });
91
+ return frames.at(-1)?.payload.bytes();
92
+ }
93
+ ```
94
+
95
+ `frames`, `drain`, `mark`, `since`, `between`, `waitFor` and `report` are
96
+ described in [docs/timeline.md](docs/timeline.md).
97
+
98
+ ## Without the fixture
99
+
100
+ Contexts made with `browser.newContext()` attach the same way:
101
+
102
+ ```ts
103
+ import type { Browser } from "@playwright/test";
104
+ import { createStage } from "@heojeongbo/wirestage";
105
+ import { webrtc } from "@heojeongbo/wirestage/webrtc";
106
+
107
+ export async function openSession(browser: Browser) {
108
+ const context = await browser.newContext({ baseURL: "http://localhost:3000" });
109
+ const stage = createStage({ plugins: [webrtc()] });
110
+ // Before the first navigation, so the page hooks are in place.
111
+ await stage.attach(context, { baseURL: "http://localhost:3000" });
112
+ return { context, stage, page: await context.newPage() };
113
+ }
114
+ ```
115
+
116
+ ## Documentation
117
+
118
+ - [Getting started](docs/getting-started.md)
119
+ - [The timeline](docs/timeline.md)
120
+ - Protocols: [Connect / gRPC-web / gRPC](docs/protocols/connect.md),
121
+ [REST](docs/protocols/rest.md), [SSE](docs/protocols/sse.md),
122
+ [WebSocket](docs/protocols/websocket.md), [WebRTC](docs/protocols/webrtc.md)
123
+ - [Writing a protocol plugin](docs/plugins.md)
124
+ - [Architecture](docs/architecture.md) and [design patterns](docs/design-patterns.md)
125
+ - [Testing](docs/testing.md), [performance](docs/performance.md),
126
+ [logging](docs/logging.md), [troubleshooting](docs/troubleshooting.md)
127
+
128
+ ## Compatibility
129
+
130
+ - **Node 22.12 or later.** The package is ES modules. A CommonJS project loads
131
+ it with `require()`, which Node supports from that version; that is how
132
+ Playwright runs the tests of a project without `"type": "module"`.
133
+ - **Playwright 1.50 or later** — the one required peer. The suite runs
134
+ against 1.60 in Chromium.
135
+ - **TypeScript 5.0 or later**, with `moduleResolution` set to `node16`,
136
+ `nodenext` or `bundler` (the entry points are published through `exports`),
137
+ and `@types/node`, as in any Playwright project.
138
+ - Live streams (server streams, SSE) redirect the page's request to a local
139
+ server; see [troubleshooting](docs/troubleshooting.md) for https pages.
140
+
141
+ ## Developing
142
+
143
+ Everything runs in the devcontainer, which is the Playwright image for the
144
+ pinned version: `pnpm check` and `pnpm check:browser`
145
+ ([docs/testing.md](docs/testing.md)). Its `node_modules` is a volume, so the
146
+ host has none: run `pnpm install` on the host as well if you want editor
147
+ type-checking and the git hooks there.
148
+
149
+ ## License
150
+
151
+ MIT
@@ -0,0 +1,3 @@
1
+ export type { ReportMode, StageFixtureArgs, StageFixtureOptions, StageTestInfo, } from "./lib/fixture.js";
2
+ export { createStageFixture, withStage } from "./lib/fixture.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/app/playwright/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createStageFixture, withStage } from "./lib/fixture.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/app/playwright/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { TestType } from "@playwright/test";
2
+ import type { AnyWirePlugin } from "../../../entities/plugin/index.js";
3
+ import type { ContextPort } from "../../../shared/api/playwright/index.js";
4
+ import { type LogThreshold } from "../../../shared/lib/logger/index.js";
5
+ import { type Stage, type StageOptions } from "../../../widgets/stage/index.js";
6
+ /** When the timeline is attached to the test report. */
7
+ export type ReportMode = "on-failure" | "always" | "never";
8
+ export interface StageFixtureOptions<Plugins extends readonly AnyWirePlugin[]> extends Omit<StageOptions<Plugins>, "baseURL" | "clock"> {
9
+ /**
10
+ * Default `on-failure`. `WIRESTAGE_REPORT` overrides it. An empty timeline
11
+ * is never attached.
12
+ */
13
+ readonly report?: ReportMode;
14
+ /**
15
+ * Frames a report holds, counting back from the newest. Default 1,000: a
16
+ * report is read from its end, and one that grows with the test would
17
+ * attach tens of megabytes to a long run.
18
+ */
19
+ readonly reportLimit?: number;
20
+ /** Default `warn`. `WIRESTAGE_LOG` overrides it. */
21
+ readonly log?: LogThreshold;
22
+ /**
23
+ * Attach the test's `context` before the body runs. Default true. Turn it
24
+ * off when tests open their own contexts (`browser.newContext()`, two users
25
+ * at once): the fixture then never asks Playwright for `context`, so no
26
+ * unused one is created, and the test attaches what it opens.
27
+ */
28
+ readonly attach?: boolean;
29
+ }
30
+ export interface StageFixtureArgs {
31
+ /** Absent when the fixture does not attach (`attach: false`). */
32
+ readonly context?: ContextPort;
33
+ readonly baseURL: string | undefined;
34
+ }
35
+ /** The part of Playwright's TestInfo the fixture uses. */
36
+ export interface StageTestInfo {
37
+ readonly status?: string;
38
+ readonly expectedStatus: string;
39
+ attach(name: string, options: {
40
+ readonly body: string;
41
+ readonly contentType: string;
42
+ }): Promise<void>;
43
+ }
44
+ type Environment = Readonly<Record<string, string | undefined>>;
45
+ /**
46
+ * The `stage` fixture as a plain function, so it can be tested without the
47
+ * Playwright runner: one stage per test, attached to the test's context
48
+ * before the test body runs, reported on failure, disposed afterwards.
49
+ */
50
+ export declare function createStageFixture<const Plugins extends readonly AnyWirePlugin[]>(options: StageFixtureOptions<Plugins>, env?: Environment): (args: StageFixtureArgs, use: (stage: Stage<Plugins>) => Promise<void>, testInfo: StageTestInfo) => Promise<void>;
51
+ /**
52
+ * Extend a Playwright `test` with a `stage` fixture:
53
+ *
54
+ * export const test = withStage(base, { plugins: [webrtc(), connect()] });
55
+ * test("...", async ({ page, stage }) => { ... });
56
+ */
57
+ export declare function withStage<Args extends object, Workers extends object, const Plugins extends readonly AnyWirePlugin[]>(test: TestType<Args, Workers>, options: StageFixtureOptions<Plugins>): TestType<Args & {
58
+ stage: Stage<Plugins>;
59
+ }, Workers>;
60
+ export {};
61
+ //# sourceMappingURL=fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../../src/app/playwright/lib/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAEN,KAAK,YAAY,EAGjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAEN,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,MAAM,iCAAiC,CAAC;AAEzC,wDAAwD;AACxD,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,SAAS,aAAa,EAAE,CAC5E,SAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACxD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,MAAM,CACL,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED,KAAK,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAqChE;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,CAAC,OAAO,SAAS,SAAS,aAAa,EAAE,EAE9C,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACrC,GAAG,GAAE,WAAyB,GAC5B,CACF,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7C,QAAQ,EAAE,aAAa,KACnB,OAAO,CAAC,IAAI,CAAC,CAiEjB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACxB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,MAAM,EACtB,KAAK,CAAC,OAAO,SAAS,SAAS,aAAa,EAAE,EAE9C,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACnC,QAAQ,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,EAAE,OAAO,CAAC,CAUrD"}
@@ -0,0 +1,110 @@
1
+ import { createScopedLogger, parseLogThreshold, setLogThreshold, } from "../../../shared/lib/logger/index.js";
2
+ import { createStage, } from "../../../widgets/stage/index.js";
3
+ const REPORT_MODES = ["on-failure", "always", "never"];
4
+ /**
5
+ * The environment's say, read once when the fixture is made. A value it
6
+ * cannot use is ignored with one warning: a typo in CI config must neither
7
+ * turn reports off silently nor fail every test, and saying so once is
8
+ * enough.
9
+ */
10
+ function readEnvironment(env) {
11
+ const warn = (name, value, allowed) => createScopedLogger("Fixture").warn(`ignoring an unknown ${name}`, {
12
+ value,
13
+ allowed,
14
+ });
15
+ const wantedReport = env["WIRESTAGE_REPORT"]?.trim().toLowerCase();
16
+ const report = REPORT_MODES.find((mode) => mode === wantedReport);
17
+ if (wantedReport !== undefined && report === undefined)
18
+ warn("WIRESTAGE_REPORT", wantedReport, REPORT_MODES);
19
+ const wantedLog = env["WIRESTAGE_LOG"];
20
+ const log = parseLogThreshold(wantedLog);
21
+ if (wantedLog !== undefined && log === undefined)
22
+ warn("WIRESTAGE_LOG", wantedLog, [
23
+ "debug",
24
+ "log",
25
+ "info",
26
+ "warn",
27
+ "error",
28
+ "silent",
29
+ ]);
30
+ return { report, log };
31
+ }
32
+ /**
33
+ * The `stage` fixture as a plain function, so it can be tested without the
34
+ * Playwright runner: one stage per test, attached to the test's context
35
+ * before the test body runs, reported on failure, disposed afterwards.
36
+ */
37
+ export function createStageFixture(options, env = process.env) {
38
+ const { report, reportLimit, log, attach = true, ...stageOptions } = options;
39
+ const fromEnv = readEnvironment(env);
40
+ const threshold = fromEnv.log ?? log;
41
+ if (threshold !== undefined)
42
+ setLogThreshold(threshold);
43
+ const mode = fromEnv.report ?? report ?? "on-failure";
44
+ const fixtureLog = createScopedLogger("Fixture");
45
+ /** Attach the timeline to the test's report, when there is one to read. */
46
+ const attachReport = async (stage, testInfo) => {
47
+ const failed = testInfo.status !== testInfo.expectedStatus;
48
+ if (mode === "never" || (mode === "on-failure" && !failed))
49
+ return;
50
+ // What the pages still hold is often the frame the failure is about.
51
+ await stage.sync();
52
+ // Nothing on the timeline is nothing to read: no empty attachment.
53
+ if (stage.timeline.size === 0 && stage.timeline.evicted === 0)
54
+ return;
55
+ const { snapshot, text } = stage.report(undefined, reportLimit === undefined ? {} : { limit: reportLimit });
56
+ await testInfo.attach("wirestage-timeline.txt", {
57
+ body: text,
58
+ contentType: "text/plain",
59
+ });
60
+ await testInfo.attach("wirestage-timeline.json", {
61
+ body: JSON.stringify(snapshot, null, 2),
62
+ contentType: "application/json",
63
+ });
64
+ };
65
+ const run = async (context, baseURL, use, testInfo) => {
66
+ const stage = createStage({
67
+ ...stageOptions,
68
+ ...(baseURL === undefined ? {} : { baseURL }),
69
+ });
70
+ try {
71
+ if (context !== undefined)
72
+ await stage.attach(context);
73
+ await use(stage);
74
+ }
75
+ finally {
76
+ try {
77
+ await attachReport(stage, testInfo);
78
+ }
79
+ catch (error) {
80
+ // The report is a courtesy; failing to write one must not hide
81
+ // the test's own result, nor keep the stage from being disposed.
82
+ fixtureLog.warn("could not attach the timeline", {}, error);
83
+ }
84
+ finally {
85
+ await stage.dispose();
86
+ }
87
+ }
88
+ };
89
+ // Playwright reads a fixture's dependencies off its SOURCE, so each mode
90
+ // is its own literal: naming `context` is what makes Playwright create one.
91
+ return attach
92
+ ? async ({ context, baseURL }, use, testInfo) => run(context, baseURL, use, testInfo)
93
+ : async ({ baseURL }, use, testInfo) => run(undefined, baseURL, use, testInfo);
94
+ }
95
+ /**
96
+ * Extend a Playwright `test` with a `stage` fixture:
97
+ *
98
+ * export const test = withStage(base, { plugins: [webrtc(), connect()] });
99
+ * test("...", async ({ page, stage }) => { ... });
100
+ */
101
+ export function withStage(test, options) {
102
+ // Playwright reads a fixture's dependencies off the SOURCE of its first
103
+ // parameter, so the fixture must be passed as written — with its
104
+ // `({ context, baseURL }, use, testInfo)` destructuring — not wrapped. The
105
+ // cast is only for the generic `extend` signature, which TypeScript cannot
106
+ // resolve against an arbitrary `Args`.
107
+ const extend = test.extend.bind(test);
108
+ return extend({ stage: createStageFixture(options) });
109
+ }
110
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../../src/app/playwright/lib/fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @heojeongbo/wirestage/connect — Connect, gRPC-web and gRPC.
3
+ * Needs the optional peers @connectrpc/connect, @connectrpc/connect-node and
4
+ * @bufbuild/protobuf.
5
+ */
6
+ export * from "./features/connect/index.js";
7
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @heojeongbo/wirestage/connect — Connect, gRPC-web and gRPC.
3
+ * Needs the optional peers @connectrpc/connect, @connectrpc/connect-node and
4
+ * @bufbuild/protobuf.
5
+ */
6
+ export * from "./features/connect/index.js";
7
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The frame types the plugin contract is written in terms of.
3
+ *
4
+ * FSD's cross-import notation: `entities/plugin` may import this file and
5
+ * nothing else from `entities/frame`. It keeps the dependency between the two
6
+ * entities explicit and one-way — the frame model knows nothing of plugins.
7
+ */
8
+ export type { Frame, FrameFilter, Timeline } from "../model/frame.js";
9
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/@x/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/entities/frame/@x/plugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export { compileFilter } from "./lib/filter.js";
2
+ export { createPayload } from "./lib/payload.js";
3
+ export type { TimelineOptions } from "./lib/timeline.js";
4
+ export { createTimeline } from "./lib/timeline.js";
5
+ export type { Direction, Frame, FrameFilter, FrameInit, FrameKind, FrameSource, Payload, PayloadInput, SnapshotFrame, SnapshotOptions, Timeline, TimelineCursor, TimelineSnapshot, } from "./model/frame.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/entities/frame/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,gBAAgB,GAChB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { compileFilter } from "./lib/filter.js";
2
+ export { createPayload } from "./lib/payload.js";
3
+ export { createTimeline } from "./lib/timeline.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/entities/frame/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Frame, FrameFilter } from "../model/frame.js";
2
+ /**
3
+ * Compile a filter into one predicate. Queries run over every frame of a long
4
+ * test, often in a polling loop, so the per-frame work is a handful of
5
+ * comparisons and the `where` callback runs only after the cheap fields pass.
6
+ */
7
+ export declare function compileFilter(filter: FrameFilter | undefined): (frame: Frame) => boolean;
8
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/lib/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI5D;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,WAAW,GAAG,SAAS,GAC7B,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CA8C3B"}
@@ -0,0 +1,62 @@
1
+ const ALWAYS = () => true;
2
+ /**
3
+ * Compile a filter into one predicate. Queries run over every frame of a long
4
+ * test, often in a polling loop, so the per-frame work is a handful of
5
+ * comparisons and the `where` callback runs only after the cheap fields pass.
6
+ */
7
+ export function compileFilter(filter) {
8
+ if (filter === undefined)
9
+ return ALWAYS;
10
+ const checks = [];
11
+ const { protocol, kind, endpoint, where } = filter;
12
+ if (protocol !== undefined) {
13
+ if (typeof protocol === "string")
14
+ checks.push((f) => f.protocol === protocol);
15
+ else {
16
+ const set = new Set(protocol);
17
+ checks.push((f) => set.has(f.protocol));
18
+ }
19
+ }
20
+ if (kind !== undefined) {
21
+ if (typeof kind === "string")
22
+ checks.push((f) => f.kind === kind);
23
+ else {
24
+ const set = new Set(kind);
25
+ checks.push((f) => set.has(f.kind));
26
+ }
27
+ }
28
+ for (const key of [
29
+ "direction",
30
+ "source",
31
+ "page",
32
+ "context",
33
+ "correlation",
34
+ ]) {
35
+ const expected = filter[key];
36
+ if (expected !== undefined)
37
+ checks.push((f) => f[key] === expected);
38
+ }
39
+ if (endpoint !== undefined) {
40
+ if (typeof endpoint === "string")
41
+ checks.push((f) => f.endpoint === endpoint);
42
+ else
43
+ checks.push((f) => {
44
+ endpoint.lastIndex = 0;
45
+ return endpoint.test(f.endpoint);
46
+ });
47
+ }
48
+ const after = filter.after;
49
+ if (after !== undefined)
50
+ checks.push((f) => f.seq > after);
51
+ if (where !== undefined)
52
+ checks.push(where);
53
+ if (checks.length === 0)
54
+ return ALWAYS;
55
+ return (frame) => {
56
+ for (const check of checks)
57
+ if (!check(frame))
58
+ return false;
59
+ return true;
60
+ };
61
+ }
62
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/entities/frame/lib/filter.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC5B,MAA+B;IAE/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;aACxC,CAAC;YACL,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;aAC7D,CAAC;YACL,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IACD,KAAK,MAAM,GAAG,IAAI;QACjB,WAAW;QACX,QAAQ;QACR,MAAM;QACN,SAAS;QACT,aAAa;KACJ,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;;YAE5C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjB,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;gBACvB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC5D,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Payload, PayloadInput } from "../model/frame.js";
2
+ /**
3
+ * A payload that converts lazily and remembers every conversion. Frames are
4
+ * written far more often than read, so nothing is encoded or decoded until a
5
+ * test asks, and asking twice costs once.
6
+ */
7
+ export declare function createPayload(input: PayloadInput | undefined): Payload;
8
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/lib/payload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAI/D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CA+BtE"}
@@ -0,0 +1,42 @@
1
+ import { toBytes, utf8 } from "../../../shared/lib/bytes/index.js";
2
+ const EMPTY = new Uint8Array(0);
3
+ /**
4
+ * A payload that converts lazily and remembers every conversion. Frames are
5
+ * written far more often than read, so nothing is encoded or decoded until a
6
+ * test asks, and asking twice costs once.
7
+ */
8
+ export function createPayload(input) {
9
+ let bytes = input instanceof Uint8Array ? input : undefined;
10
+ let text = typeof input === "string" ? input : undefined;
11
+ let decoded;
12
+ const getBytes = () => {
13
+ if (bytes !== undefined)
14
+ return bytes;
15
+ if (typeof input === "function")
16
+ bytes = input();
17
+ else if (text !== undefined)
18
+ bytes = toBytes(text);
19
+ else
20
+ bytes = EMPTY;
21
+ return bytes;
22
+ };
23
+ const getText = () => {
24
+ text ??= utf8(getBytes());
25
+ return text;
26
+ };
27
+ return {
28
+ empty: input === undefined,
29
+ bytes: getBytes,
30
+ text: getText,
31
+ json: () => JSON.parse(getText()),
32
+ decode(decoder) {
33
+ decoded ??= new WeakMap();
34
+ if (decoded.has(decoder))
35
+ return decoded.get(decoder);
36
+ const value = decoder(getBytes());
37
+ decoded.set(decoder, value);
38
+ return value;
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../src/entities/frame/lib/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAGnE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC5D,IAAI,KAAK,GACR,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,IAAI,IAAI,GAAuB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,IAAI,OAAqE,CAAC;IAE1E,MAAM,QAAQ,GAAG,GAAe,EAAE;QACjC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,OAAO,KAAK,KAAK,UAAU;YAAE,KAAK,GAAG,KAAK,EAAE,CAAC;aAC5C,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;;YAC9C,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,GAAW,EAAE;QAC5B,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACN,KAAK,EAAE,KAAK,KAAK,SAAS;QAC1B,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,GAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAM;QACzC,MAAM,CAAI,OAAiC;YAC1C,OAAO,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAM,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Frame, SnapshotOptions, TimelineSnapshot } from "../model/frame.js";
2
+ /**
3
+ * A JSON-safe copy of `frames`, with payloads cut at `maxBytes` and, given a
4
+ * `limit`, only the newest frames kept: a report is read from its end.
5
+ */
6
+ export declare function snapshotFrames(frames: readonly Frame[], evicted: number, options?: SnapshotOptions): TimelineSnapshot;
7
+ /**
8
+ * One line per frame: `#12 +3.2ms connect out request pkg.Svc/Method 42B`.
9
+ * Times are relative to the first frame listed, which is what a reader of a
10
+ * failure report compares.
11
+ */
12
+ export declare function formatFrames(frames: readonly Frame[], options?: {
13
+ readonly limit?: number;
14
+ }): string;
15
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../../src/entities/frame/lib/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,KAAK,EAEL,eAAe,EACf,gBAAgB,EAChB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,eAAoB,GAC3B,gBAAgB,CAqClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,MAAM,CAgBR"}