hyperframes 0.8.149 → 0.8.151

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 (176) hide show
  1. package/dist/{add-MG53577L.js → add-QKZZG7A2.js} +12 -12
  2. package/dist/{animatedGifPrep-HV4ZFVPV.js → animatedGifPrep-YQDPYGOD.js} +7 -7
  3. package/dist/api.js +17 -17
  4. package/dist/{asset-3GIBXLLL.js → asset-3Q737Y4H.js} +2 -2
  5. package/dist/{assetCataloger-JJQ4JW2P.js → assetCataloger-BTHEBJJB.js} +3 -3
  6. package/dist/{auth-XQMT727H.js → auth-XL7EU3SO.js} +1 -1
  7. package/dist/{autoUpdate-CREZJGMU.js → autoUpdate-PJFLTQ3U.js} +2 -2
  8. package/dist/{backgroundChecks-K3S5QKR3.js → backgroundChecks-T5TIR5WK.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-42AKNX73.js → batchRender-NFLVIDB4.js} +4 -4
  11. package/dist/{beats-Y7IKETUS.js → beats-JU4GZ26R.js} +13 -13
  12. package/dist/{benchmark-22SAXSO5.js → benchmark-7U2YWLTW.js} +9 -9
  13. package/dist/{browser-ABNISCC3.js → browser-D57UPYDA.js} +5 -5
  14. package/dist/{bundleWithLocalizedFonts-OE5ZI4JE.js → bundleWithLocalizedFonts-26MXQOZG.js} +2 -2
  15. package/dist/{capture-DBNHO4WJ.js → capture-47BV25G3.js} +2 -2
  16. package/dist/{capture-HQG5W42I.js → capture-LT252COQ.js} +11 -11
  17. package/dist/{catalog-KICZFIDX.js → catalog-BEZXOV4O.js} +12 -12
  18. package/dist/{catch-up-ZCQUCI45.js → catch-up-KVV5X6BF.js} +4 -4
  19. package/dist/{check-TGXIICEF.js → check-6KQ433E6.js} +191 -55
  20. package/dist/{checkBrowser-3N23I56J.js → checkBrowser-PRDR6XBY.js} +172 -30
  21. package/dist/{chunk-GESJSXFH.js → chunk-35PWWBGZ.js} +1 -1
  22. package/dist/{chunk-62RUQJ5J.js → chunk-3SVC7SW4.js} +47 -21
  23. package/dist/{chunk-KMJLHHBF.js → chunk-3ZPFRDEJ.js} +1 -1
  24. package/dist/{chunk-XHBX7QN6.js → chunk-4LE27ST4.js} +1 -1
  25. package/dist/{chunk-DUUFDLC4.js → chunk-4MLYMDQ4.js} +1 -1
  26. package/dist/{chunk-WX7VCRM7.js → chunk-4PKQEKAI.js} +2 -2
  27. package/dist/{chunk-ZKDKFJCK.js → chunk-4YZYYP7V.js} +5 -5
  28. package/dist/{chunk-XPQSL5VS.js → chunk-54DMWFQZ.js} +8 -1
  29. package/dist/{chunk-NKM53WMI.js → chunk-BRF3O35X.js} +7 -7
  30. package/dist/chunk-DHPFXAUF.js +165 -0
  31. package/dist/{chunk-CT6ZQRLD.js → chunk-DIOBKUBV.js} +2 -2
  32. package/dist/{chunk-SP6XL3NP.js → chunk-FAIYEIZ4.js} +1 -1
  33. package/dist/{chunk-CYFFYK2F.js → chunk-FLVI7FHU.js} +1 -1
  34. package/dist/{chunk-JDB65PPT.js → chunk-GNTVYF7E.js} +8 -7
  35. package/dist/{chunk-KQHJKJ3V.js → chunk-HVXRYMGQ.js} +1 -1
  36. package/dist/{chunk-CNPJHUOX.js → chunk-IP73NMQT.js} +11 -11
  37. package/dist/{chunk-VX4AL2FQ.js → chunk-IPDS2SWI.js} +1 -1
  38. package/dist/{chunk-LACFOFWX.js → chunk-IZ7L6V76.js} +1 -1
  39. package/dist/{chunk-VC7JBNPS.js → chunk-IZPN423R.js} +481 -68
  40. package/dist/{chunk-P7NTODQE.js → chunk-KQGWP4KH.js} +2 -2
  41. package/dist/{chunk-SFUBSJFP.js → chunk-KXX6NLOT.js} +1 -1
  42. package/dist/{chunk-K44HCHZN.js → chunk-L3N7RJHS.js} +3 -3
  43. package/dist/{chunk-MI6U3OIN.js → chunk-L6RIMCMG.js} +3 -3
  44. package/dist/{chunk-7IEGPJ4P.js → chunk-LBT4AMSF.js} +1 -1
  45. package/dist/{chunk-AY2BONTF.js → chunk-LKQS72D5.js} +1 -1
  46. package/dist/{chunk-VXM4BH23.js → chunk-N3I6RAOR.js} +136 -54
  47. package/dist/{chunk-Q2Y5OZCY.js → chunk-N4IXP3MY.js} +2 -2
  48. package/dist/{chunk-LCILS4AF.js → chunk-O3DUX6P2.js} +5 -5
  49. package/dist/{chunk-MXB6CWVH.js → chunk-OSAH7S5M.js} +1 -1
  50. package/dist/{chunk-YDRX42P3.js → chunk-OZ4K46OV.js} +3 -3
  51. package/dist/{chunk-ZK3BQXHC.js → chunk-POEEDPJI.js} +1 -1
  52. package/dist/{chunk-LTJDUBSQ.js → chunk-PUIELIFA.js} +1 -1
  53. package/dist/chunk-QBYHNRHU.js +3795 -0
  54. package/dist/{chunk-KUTT3JXL.js → chunk-QF7AE3DB.js} +3 -3
  55. package/dist/{chunk-BNYRD7PQ.js → chunk-QLGBNGXC.js} +2 -2
  56. package/dist/{chunk-U7SASZC5.js → chunk-RJRGR5KF.js} +10 -10
  57. package/dist/{chunk-4S4VUXW3.js → chunk-RRBKEHST.js} +1 -1
  58. package/dist/{chunk-TPIG7ZBX.js → chunk-RYL6ZIJP.js} +6 -6
  59. package/dist/{chunk-L274XRWA.js → chunk-S22FKF6G.js} +6 -3
  60. package/dist/{chunk-OMBSUO4T.js → chunk-TCWMDCBX.js} +2 -2
  61. package/dist/{chunk-YA62XGXS.js → chunk-UJKQWGFF.js} +1 -1
  62. package/dist/{chunk-M5B42RL5.js → chunk-WUUOFMHU.js} +3 -3
  63. package/dist/{chunk-PR7QQBSC.js → chunk-XGLNQDLN.js} +1 -1
  64. package/dist/{chunk-VGCEMOQA.js → chunk-XKKBIFE5.js} +7 -7
  65. package/dist/{chunk-2HWB4TCI.js → chunk-XNDXENJQ.js} +27 -12
  66. package/dist/{chunk-AHBYQRGI.js → chunk-XQKVEQNY.js} +2 -2
  67. package/dist/{chunk-ZFN6GQU4.js → chunk-XXPYZBZ3.js} +1 -1
  68. package/dist/{chunk-K4RIT6PX.js → chunk-XYHBVSWD.js} +2 -2
  69. package/dist/{chunk-RMIFSBRV.js → chunk-YEBKEWKB.js} +1 -1
  70. package/dist/{chunk-CZQLCBWY.js → chunk-YG2Y55KF.js} +1 -1
  71. package/dist/{chunk-B3XLIBFL.js → chunk-YIJMVFEJ.js} +1 -1
  72. package/dist/{chunk-K35E45SI.js → chunk-YZTVHRJ2.js} +1 -1
  73. package/dist/{chunk-Y475GD4L.js → chunk-ZD3RDNZI.js} +1 -1
  74. package/dist/{chunk-QIJLIULK.js → chunk-ZGCRVM5M.js} +2 -2
  75. package/dist/{clean-6QP7VAV4.js → clean-RLTHFTQA.js} +18 -18
  76. package/dist/cli.js +52 -52
  77. package/dist/{cloud-5TME5ROM.js → cloud-Q5TGBTW3.js} +4 -4
  78. package/dist/{cloudrun-F5VVCVF5.js → cloudrun-4UZF74MV.js} +4 -4
  79. package/dist/{compare-XPY2EXX6.js → compare-Q5UNR2V4.js} +25 -25
  80. package/dist/{compiler-NPD3MYMO.js → compiler-ZXT27Z62.js} +4 -4
  81. package/dist/{component-OPVL3PUX.js → component-H734P32V.js} +3 -3
  82. package/dist/{compositions-WSEOI454.js → compositions-YEHDSTDR.js} +11 -11
  83. package/dist/{delete-SLMH57VH.js → delete-LDBMPWRT.js} +2 -2
  84. package/dist/{dist-CUIR3GFX.js → dist-7JXLFD6U.js} +3 -3
  85. package/dist/{dist-HUMFCJ6T.js → dist-RGE4QASU.js} +1 -1
  86. package/dist/{doctor-QZW3EKIH.js → doctor-XNJFIWJ7.js} +13 -13
  87. package/dist/{events-FIFWFRGC.js → events-G6UFLNXR.js} +2 -2
  88. package/dist/{events-6C3ZG7LS.js → events-UKCPUWMH.js} +3 -3
  89. package/dist/{feedback-VKXM7YJ5.js → feedback-CK3KZ7DE.js} +7 -7
  90. package/dist/{ffmpeg-TZB5WAYE.js → ffmpeg-MJFMBBSF.js} +2 -2
  91. package/dist/{figma-3UYNADNA.js → figma-3D5C737B.js} +3 -3
  92. package/dist/fontLocalizeCli.js +9 -9
  93. package/dist/{get-VH7VMRVX.js → get-QGTQUWFT.js} +2 -2
  94. package/dist/{gpuPolicy-M2JZGGVW.js → gpuPolicy-G5QAQDYF.js} +7 -7
  95. package/dist/{grade-compare-OSC2YQWN.js → grade-compare-XIHOM62P.js} +27 -27
  96. package/dist/{help-DCBFEZPT.js → help-U5UBXT52.js} +1 -1
  97. package/dist/{history-XYJMQE26.js → history-5J73QZSA.js} +5 -5
  98. package/dist/hyperframe-runtime.js +65 -58
  99. package/dist/hyperframe.manifest.json +1 -1
  100. package/dist/hyperframe.runtime.iife.js +65 -58
  101. package/dist/hyperframes-player.global.js +3 -3
  102. package/dist/{info-YEHGENAH.js → info-RJHQQQUP.js} +8 -8
  103. package/dist/{init-64SML7PY.js → init-M6UQOYYC.js} +29 -29
  104. package/dist/{inspect-GFOQKRJI.js → inspect-PRQWDBTP.js} +26 -26
  105. package/dist/{installer-Q4MMZKLA.js → installer-ZL7UKYK5.js} +5 -5
  106. package/dist/{keyframes-ORYFWKBZ.js → keyframes-VMUJYTCQ.js} +6 -6
  107. package/dist/{lambda-DRMOJGTC.js → lambda-ON42DRQD.js} +5 -5
  108. package/dist/{layout-ZEQBE6UQ.js → layout-QKBFVDVY.js} +26 -26
  109. package/dist/{lint-67KGFY63.js → lint-ZQHHL2SV.js} +7 -7
  110. package/dist/{lintProject-SSEXWCH6.js → lintProject-3Z6OJCSO.js} +1 -1
  111. package/dist/{list-T6OU5ARJ.js → list-YBRKIWGF.js} +2 -2
  112. package/dist/{login-2PXIGDP7.js → login-4B2YXGLB.js} +4 -4
  113. package/dist/{manager-ES2UFT4X.js → manager-X44GKUEL.js} +3 -3
  114. package/dist/{manager-GWU5J6RJ.js → manager-ZLJD3EAY.js} +2 -2
  115. package/dist/{media-treatment-NAAHID6M.js → media-treatment-5C5EJAAP.js} +12 -12
  116. package/dist/{models-P6XB6RWK.js → models-R7ZDWBJ6.js} +13 -13
  117. package/dist/{motionShot-7MHRIV6V.js → motionShot-ZHESZNUL.js} +14 -14
  118. package/dist/{normalize-audio-LWNFYR2F.js → normalize-audio-EVWZVTBM.js} +6 -6
  119. package/dist/{open-DAP5C7UD.js → open-TV6HT4UT.js} +4 -4
  120. package/dist/{parakeetRunner-3ZVFPOD4.js → parakeetRunner-YVVF4CG6.js} +14 -14
  121. package/dist/{pipeline-V4YJCPUX.js → pipeline-ETR5SEBS.js} +9 -9
  122. package/dist/{play-UDCESJO3.js → play-C6WONRZV.js} +19 -19
  123. package/dist/{preflight-JOD4OXGC.js → preflight-JYOX64YP.js} +4 -4
  124. package/dist/{present-DXTHBH3F.js → present-RANXTVPA.js} +15 -15
  125. package/dist/{preview-YHXKRXKB.js → preview-KF6UMBT2.js} +19 -19
  126. package/dist/{producer-343ENLAM.js → producer-CY2GXBWN.js} +1 -1
  127. package/dist/{projectConfig-YXKU3CTB.js → projectConfig-KPXCNMBM.js} +7 -7
  128. package/dist/{publication-ODXP3JI7.js → publication-Y36N4A7E.js} +3 -3
  129. package/dist/{publish-UEFBFGV3.js → publish-RCQJO35C.js} +9 -9
  130. package/dist/{remove-background-FMV6IDOH.js → remove-background-3ZMXVWLB.js} +10 -10
  131. package/dist/{render-ZTXNPRGF.js → render-FKVRCDT2.js} +58 -35
  132. package/dist/{render-N7QGX6RJ.js → render-PTNEFO5U.js} +9 -9
  133. package/dist/{render-SYC4RPGT.js → render-WUSTRMUD.js} +4 -4
  134. package/dist/{render-batch-SZRPCRUJ.js → render-batch-AQHU2JWZ.js} +4 -4
  135. package/dist/renderSetupWorker.js +4 -4
  136. package/dist/{resolver-7MYXNEAX.js → resolver-L5BDZJKU.js} +5 -5
  137. package/dist/{sherpa-M4Z2Q5Y2.js → sherpa-3S3ISG7G.js} +13 -13
  138. package/dist/skills/hyperframes/references/frame-worker-core.md +11 -9
  139. package/dist/skills/hyperframes/references/subagent-dispatch.md +1 -1
  140. package/dist/skills/media-use/audio/scripts/lib/tts.cleanup.test.mjs +175 -0
  141. package/dist/skills/media-use/audio/scripts/lib/tts.mjs +24 -19
  142. package/dist/skills/media-use/references/grading.md +1 -2
  143. package/dist/skills/media-use/references/meta.md +17 -17
  144. package/dist/skills/media-use/references/operations.md +6 -6
  145. package/dist/skills/media-use/references/setup-providers.md +3 -4
  146. package/dist/skills/media-use/scripts/lib/cutlist.mjs +9 -2
  147. package/dist/skills/media-use/scripts/lib/cutlist.test.mjs +12 -0
  148. package/dist/skills/media-use/scripts/lib/telemetry.mjs +4 -1
  149. package/dist/skills/media-use/scripts/lib/telemetry.test.mjs +20 -0
  150. package/dist/skills/media-use/scripts/transcript-cut.mjs +23 -4
  151. package/dist/skills/media-use/scripts/transcript-cut.test.mjs +224 -0
  152. package/dist/{skills-NEHNSHZK.js → skills-X4WQEKNF.js} +5 -5
  153. package/dist/{skillsUpdateCheck-O77QR72A.js → skillsUpdateCheck-UYCVHDZ6.js} +3 -3
  154. package/dist/{snapshot-GDVXFBVY.js → snapshot-YEYHQEZQ.js} +252 -141
  155. package/dist/{src-VMTHSARJ.js → src-2NN2WB6X.js} +10 -6
  156. package/dist/{src-PTIV7IVV.js → src-OLBDPEG6.js} +8 -8
  157. package/dist/{staticProjectServer-3D2NXQ6W.js → staticProjectServer-7H35NMWB.js} +15 -15
  158. package/dist/studio/assets/{hyperframes-player-C-2YwYre.js → hyperframes-player-DJt8E7k4.js} +1 -1
  159. package/dist/studio/assets/{index-ByJU5J6n.js → index-BGks9KLI.js} +131 -131
  160. package/dist/studio/assets/{index-BybGk67U.js → index-DWIHrAY2.js} +1 -1
  161. package/dist/studio/assets/{index-Cfs2r3fz.js → index-DgbLblGR.js} +1 -1
  162. package/dist/studio/index.html +1 -1
  163. package/dist/{studio-api-XIBDLRHB.js → studio-api-HGM2A5I3.js} +9 -9
  164. package/dist/{studioServer-QIQK47UN.js → studioServer-M6XFL7N6.js} +45 -45
  165. package/dist/{telemetry-565KDZUW.js → telemetry-KVCZKVTE.js} +3 -3
  166. package/dist/{timeline-E6XB7I6W.js → timeline-VYYKZR4V.js} +68 -15
  167. package/dist/{tokens-3ZAJENSE.js → tokens-B5NFFL55.js} +2 -2
  168. package/dist/{transcribe-XWQQCCBG.js → transcribe-SBETOIWI.js} +12 -12
  169. package/dist/{transcribe-WODP3T77.js → transcribe-WNFRYZAC.js} +18 -18
  170. package/dist/{updateCheck-QPYU4GRL.js → updateCheck-5MM2DFUC.js} +2 -2
  171. package/dist/{upgrade-2FJ5ZEN6.js → upgrade-LWID54R3.js} +2 -2
  172. package/dist/{urlDownloader-352AY25I.js → urlDownloader-CVLNXFDG.js} +6 -6
  173. package/dist/{validate-SP2VGNEI.js → validate-V4CGQ6OF.js} +20 -20
  174. package/dist/{video-RVNPFEA6.js → video-VJB2KRSS.js} +7 -7
  175. package/package.json +1 -1
  176. package/dist/chunk-3WD4JNMU.js +0 -3795
@@ -8,19 +8,19 @@ import {
8
8
  auditClipDurations,
9
9
  shouldIgnoreHttpError,
10
10
  shouldIgnoreRequestFailure
11
- } from "./chunk-CNPJHUOX.js";
11
+ } from "./chunk-IP73NMQT.js";
12
12
  import {
13
13
  rectToBbox
14
14
  } from "./chunk-WBLXWOYK.js";
15
15
  import {
16
16
  ambiguousIssue,
17
17
  loadBrowserScript
18
- } from "./chunk-U7SASZC5.js";
18
+ } from "./chunk-RJRGR5KF.js";
19
19
  import {
20
20
  serveStaticProjectHtml
21
- } from "./chunk-K44HCHZN.js";
21
+ } from "./chunk-L3N7RJHS.js";
22
22
  import "./chunk-XUHOIDKG.js";
23
- import "./chunk-BNYRD7PQ.js";
23
+ import "./chunk-QLGBNGXC.js";
24
24
  import "./chunk-X7MTZ4T2.js";
25
25
  import {
26
26
  AUDIT_SEEK_OPTIONS,
@@ -33,42 +33,42 @@ import {
33
33
  resolveCliChromeGpuMode,
34
34
  seekCompositionTimeline,
35
35
  waitForPreferredSeekTarget
36
- } from "./chunk-TPIG7ZBX.js";
36
+ } from "./chunk-RYL6ZIJP.js";
37
37
  import "./chunk-FH7WODJH.js";
38
- import "./chunk-4S4VUXW3.js";
39
- import "./chunk-KQHJKJ3V.js";
38
+ import "./chunk-RRBKEHST.js";
39
+ import "./chunk-HVXRYMGQ.js";
40
40
  import "./chunk-WPNE5NEP.js";
41
- import "./chunk-NKM53WMI.js";
42
- import "./chunk-2HWB4TCI.js";
41
+ import "./chunk-BRF3O35X.js";
42
+ import "./chunk-XNDXENJQ.js";
43
43
  import "./chunk-FJWEYVEM.js";
44
- import "./chunk-ZFN6GQU4.js";
44
+ import "./chunk-XXPYZBZ3.js";
45
45
  import {
46
46
  FfmpegUnavailableError,
47
47
  decideMediaProxyEligibility,
48
48
  proxyVariantFor,
49
49
  resolveProxies,
50
50
  scanProjectMediaCodecMap
51
- } from "./chunk-KMJLHHBF.js";
51
+ } from "./chunk-3ZPFRDEJ.js";
52
52
  import "./chunk-AIJS74LG.js";
53
- import "./chunk-SFUBSJFP.js";
53
+ import "./chunk-KXX6NLOT.js";
54
54
  import "./chunk-K2FLNJVB.js";
55
- import "./chunk-QIJLIULK.js";
55
+ import "./chunk-ZGCRVM5M.js";
56
56
  import "./chunk-442JNXRM.js";
57
57
  import {
58
58
  resolveAutoProxy
59
- } from "./chunk-SP6XL3NP.js";
59
+ } from "./chunk-FAIYEIZ4.js";
60
60
  import "./chunk-XT7X6QCP.js";
61
61
  import "./chunk-4YYJOFKS.js";
62
62
  import "./chunk-HVW7ABXD.js";
63
- import "./chunk-PR7QQBSC.js";
64
- import "./chunk-Q2Y5OZCY.js";
65
- import "./chunk-K35E45SI.js";
63
+ import "./chunk-XGLNQDLN.js";
64
+ import "./chunk-N4IXP3MY.js";
65
+ import "./chunk-YZTVHRJ2.js";
66
66
  import "./chunk-AWDFDFI3.js";
67
67
  import "./chunk-P6LJ4Y32.js";
68
68
  import "./chunk-GMECXFAN.js";
69
69
  import "./chunk-374QQGBQ.js";
70
- import "./chunk-Y475GD4L.js";
71
- import "./chunk-LACFOFWX.js";
70
+ import "./chunk-ZD3RDNZI.js";
71
+ import "./chunk-IZ7L6V76.js";
72
72
  import "./chunk-VWG7OQKU.js";
73
73
  import "./chunk-XBSPQ52S.js";
74
74
  import "./chunk-S3S4TGEH.js";
@@ -77,22 +77,22 @@ import "./chunk-PBN6GBJE.js";
77
77
  import "./chunk-ZTZA4UWZ.js";
78
78
  import "./chunk-EOOEC32M.js";
79
79
  import "./chunk-TJSTGSAW.js";
80
- import "./chunk-GESJSXFH.js";
80
+ import "./chunk-35PWWBGZ.js";
81
81
  import "./chunk-K4WIOZFP.js";
82
82
  import "./chunk-XUXGIA7H.js";
83
83
  import "./chunk-WERLJGIC.js";
84
84
  import "./chunk-ISN5GRYI.js";
85
- import "./chunk-OMBSUO4T.js";
85
+ import "./chunk-TCWMDCBX.js";
86
86
  import "./chunk-EOVYQ3IG.js";
87
87
  import "./chunk-AMKC3AXA.js";
88
- import "./chunk-VC7JBNPS.js";
89
- import "./chunk-62RUQJ5J.js";
88
+ import "./chunk-IZPN423R.js";
89
+ import "./chunk-3SVC7SW4.js";
90
90
  import "./chunk-NE55C6S5.js";
91
91
  import "./chunk-JYVGYKXG.js";
92
- import "./chunk-AHBYQRGI.js";
93
- import "./chunk-3WD4JNMU.js";
92
+ import "./chunk-XQKVEQNY.js";
93
+ import "./chunk-QBYHNRHU.js";
94
94
  import "./chunk-VC76R6W2.js";
95
- import "./chunk-YA62XGXS.js";
95
+ import "./chunk-UJKQWGFF.js";
96
96
  import "./chunk-LFNQDTSH.js";
97
97
  import "./chunk-OFQWTKPW.js";
98
98
  import "./chunk-DPVXBVLL.js";
@@ -100,7 +100,7 @@ import "./chunk-T76PLPD6.js";
100
100
  import "./chunk-FXMKHHPO.js";
101
101
  import "./chunk-RQVDTPGD.js";
102
102
  import "./chunk-TWWSYAKJ.js";
103
- import "./chunk-JDB65PPT.js";
103
+ import "./chunk-GNTVYF7E.js";
104
104
  import "./chunk-IWFLMU2N.js";
105
105
  import "./chunk-APDLWWFG.js";
106
106
  import "./chunk-VAS6HQX3.js";
@@ -118,6 +118,118 @@ import "./chunk-M2WBOQ2Q.js";
118
118
  // src/utils/checkBrowser.ts
119
119
  import { mkdirSync, writeFileSync } from "fs";
120
120
  import { join, resolve } from "path";
121
+
122
+ // src/utils/gsapTweenTails.ts
123
+ var TWEEN_TAIL_WINDOW = 0.25;
124
+ function findTweenTails(records) {
125
+ return records.flatMap(
126
+ (earlier) => records.flatMap((later) => {
127
+ const tail = tailBetween(earlier, later);
128
+ return tail ? [tail] : [];
129
+ })
130
+ );
131
+ }
132
+ function tailBetween(earlier, later) {
133
+ if (later.target !== earlier.target || later.timeline !== earlier.timeline) return null;
134
+ const overlaps = earlier.start < later.start && later.start < earlier.end;
135
+ const tail = earlier.end - later.end;
136
+ if (!overlaps || tail <= 0 || tail > TWEEN_TAIL_WINDOW) return null;
137
+ const properties = earlier.properties.filter((name) => later.properties.includes(name));
138
+ if (properties.length === 0) return null;
139
+ return {
140
+ timeline: earlier.timeline,
141
+ label: earlier.label,
142
+ properties,
143
+ earlier: { start: earlier.start, end: earlier.end },
144
+ later: { start: later.start, end: later.end }
145
+ };
146
+ }
147
+ function tweenTailMessage(tail) {
148
+ const props = tail.properties.join(", ");
149
+ const seconds = (value) => `${value.toFixed(3)} s`;
150
+ return `In timeline "${tail.timeline}", a tween on ${props} of ${tail.label} ends at ${seconds(tail.earlier.end)}, ${(tail.earlier.end - tail.later.end).toFixed(3)} s after a later tween on ${props} ends at ${seconds(tail.later.end)}. For that tail the earlier tween takes ${props} back and leaves its own end value on screen, so the later tween's end never shows. End the earlier tween by ${seconds(tail.later.start)}, or add overwrite: "auto" to the later tween.`;
151
+ }
152
+ function collectTweenRecords() {
153
+ const NOT_PROPERTIES = /* @__PURE__ */ new Set([
154
+ "duration",
155
+ "delay",
156
+ "ease",
157
+ "repeat",
158
+ "repeatDelay",
159
+ "repeatRefresh",
160
+ "yoyo",
161
+ "yoyoEase",
162
+ "stagger",
163
+ "overwrite",
164
+ "immediateRender",
165
+ "lazy",
166
+ "paused",
167
+ "reversed",
168
+ "runBackwards",
169
+ "startAt",
170
+ "keyframes",
171
+ "inherit",
172
+ "data",
173
+ "id",
174
+ "callbackScope",
175
+ "onStart",
176
+ "onStartParams",
177
+ "onUpdate",
178
+ "onUpdateParams",
179
+ "onComplete",
180
+ "onCompleteParams",
181
+ "onRepeat",
182
+ "onRepeatParams",
183
+ "onReverseComplete",
184
+ "onReverseCompleteParams",
185
+ "parent",
186
+ "onInterrupt",
187
+ "autoRevert",
188
+ "smoothChildTiming"
189
+ ]);
190
+ const registered = window.__timelines ?? {};
191
+ const names = /* @__PURE__ */ new Map();
192
+ for (const [name, timeline] of Object.entries(registered)) {
193
+ if (typeof timeline?.getChildren === "function") names.set(timeline, name);
194
+ }
195
+ const ids = /* @__PURE__ */ new Map();
196
+ function nestedInAnother(timeline) {
197
+ for (let parent = timeline.parent; parent; parent = parent.parent) {
198
+ if (names.has(parent)) return true;
199
+ }
200
+ return false;
201
+ }
202
+ function plainProperties(tween) {
203
+ const vars = tween.vars ?? {};
204
+ const plain = !vars.repeat && !vars.yoyo && !vars.keyframes && !vars.overwrite;
205
+ return plain ? Object.keys(vars).filter((key) => !NOT_PROPERTIES.has(key)) : [];
206
+ }
207
+ function labelOf(target) {
208
+ if (!(target instanceof Element)) return "an object";
209
+ if (target.id) return `#${target.id}`;
210
+ return [target.tagName.toLowerCase(), ...target.classList].join(".");
211
+ }
212
+ function recordsOf(timeline, name) {
213
+ const origin = timeline.globalTime(0);
214
+ return (timeline.getChildren?.(true, true, false) ?? []).flatMap((tween) => {
215
+ const duration = tween.totalDuration();
216
+ const properties = plainProperties(tween);
217
+ if (!(duration > 0) || properties.length === 0) return [];
218
+ const start = tween.globalTime(0) - origin;
219
+ const end = tween.globalTime(duration) - origin;
220
+ return tween.targets().map((target) => {
221
+ if (!ids.has(target)) ids.set(target, ids.size);
222
+ const id = ids.get(target) ?? -1;
223
+ return { timeline: name, target: id, label: labelOf(target), properties, start, end };
224
+ });
225
+ });
226
+ }
227
+ return [...names].flatMap(
228
+ ([timeline, name]) => nestedInAnother(timeline) ? [] : recordsOf(timeline, name)
229
+ );
230
+ }
231
+
232
+ // src/utils/checkBrowser.ts
121
233
  async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride) {
122
234
  const none = { findings: [], failedPaths: /* @__PURE__ */ new Set() };
123
235
  if (!resolveAutoProxy(projectDir, autoProxyOverride)) return none;
@@ -172,7 +284,7 @@ function proxyFailedDraft(message) {
172
284
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
173
285
  }
174
286
  async function runBrowserCheck(project, options, motion, runGrid) {
175
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-OE5ZI4JE.js");
287
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
176
288
  const html = await bundleWithLocalizedFonts(project.dir);
177
289
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
178
290
  project.dir,
@@ -202,10 +314,14 @@ async function runBrowserCheck(project, options, motion, runGrid) {
202
314
  await waitForPreferredSeekTarget(page);
203
315
  const rootAnchor = await resolveRootAnchor(page);
204
316
  const launchSettleMs = Date.now() - launchSettleStart;
205
- const { analyzeClipMediaFit } = await import("./src-VMTHSARJ.js");
317
+ const { analyzeClipMediaFit } = await import("./src-2NN2WB6X.js");
206
318
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
207
319
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
208
320
  }
321
+ for (const tail of findTweenTails(await page.evaluate(collectTweenRecords) ?? [])) {
322
+ const message = tweenTailMessage(tail);
323
+ drafts.push({ code: "gsap_tween_tail", severity: "warning", message, time: tail.later.end });
324
+ }
209
325
  const driver = createPageDriver(page, (time) => {
210
326
  currentTime = time;
211
327
  });
@@ -226,7 +342,7 @@ async function runBrowserCheck(project, options, motion, runGrid) {
226
342
  }
227
343
  async function captureFindingCrops(project, options, requests) {
228
344
  if (requests.length === 0) return [];
229
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-OE5ZI4JE.js");
345
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
230
346
  const html = await bundleWithLocalizedFonts(project.dir);
231
347
  const server = await serveStaticProjectHtml(
232
348
  project.dir,
@@ -438,6 +554,7 @@ function wireNetworkListeners(page, drafts, currentTime) {
438
554
  function createPageDriver(page, setTime) {
439
555
  return {
440
556
  initialize: (contrast) => injectAuditScripts(page, contrast),
557
+ matchComponents: (components, findings) => page.evaluate(matchComponentFindings, { components, findings }),
441
558
  getDuration: () => getCompositionDuration(page),
442
559
  hasNoTimelineDeclaration: () => hasNoTimelineDeclaration(page),
443
560
  getTransitionBoundaries: () => collectTweenBoundaries(page),
@@ -1174,12 +1291,37 @@ function urlPath(url) {
1174
1291
  return url;
1175
1292
  }
1176
1293
  }
1294
+ function matchComponentFindings({
1295
+ components,
1296
+ findings
1297
+ }) {
1298
+ const roots = components.flatMap((selector) => {
1299
+ const matches = [...document.querySelectorAll(selector)];
1300
+ if (!matches.length) throw new Error(`Component selector matched nothing: ${selector}`);
1301
+ return matches;
1302
+ });
1303
+ function matchesSelector(selector) {
1304
+ try {
1305
+ const elements = [...document.querySelectorAll(selector)];
1306
+ if (!elements.length) return null;
1307
+ return elements.some((el) => roots.some((root) => root.contains(el)));
1308
+ } catch {
1309
+ return null;
1310
+ }
1311
+ }
1312
+ return findings.map((finding) => {
1313
+ if (!finding.selector || finding.selector === "[data-composition-id]") return true;
1314
+ const container = Reflect.get(finding, "containerSelector");
1315
+ return matchesSelector(finding.selector) !== false || typeof container === "string" && matchesSelector(container) !== false;
1316
+ });
1317
+ }
1177
1318
  export {
1178
1319
  captureFindingCrops,
1179
1320
  captureOverviewShot,
1180
1321
  collectSeekClock,
1181
1322
  dropFailedProxyEchoes,
1182
1323
  keepBrokenImageAborts,
1324
+ matchComponentFindings,
1183
1325
  preResolveHostileMediaProxies,
1184
1326
  runBrowserCheck
1185
1327
  };
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-OMBSUO4T.js";
20
+ } from "./chunk-TCWMDCBX.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -8,6 +8,7 @@ import {
8
8
  ensureHfIds
9
9
  } from "./chunk-NE55C6S5.js";
10
10
  import {
11
+ HF_AUDIO_FX_ATTR,
11
12
  HF_COLOR_GRADING_ATTR,
12
13
  INLINED_FILE_ATTR,
13
14
  RUNTIME_BOOTSTRAP_ATTR,
@@ -38,7 +39,7 @@ import {
38
39
  stripEmbeddedRuntimeScripts,
39
40
  styleElementsFor,
40
41
  warnUnknownEnumValues
41
- } from "./chunk-3WD4JNMU.js";
42
+ } from "./chunk-QBYHNRHU.js";
42
43
  import {
43
44
  cssVariableName
44
45
  } from "./chunk-VC76R6W2.js";
@@ -48,7 +49,7 @@ import {
48
49
  } from "./chunk-OFQWTKPW.js";
49
50
  import {
50
51
  lintHyperframeHtml
51
- } from "./chunk-JDB65PPT.js";
52
+ } from "./chunk-GNTVYF7E.js";
52
53
  import {
53
54
  checkSubCompositionUsability,
54
55
  resolveSubCompositionContent
@@ -126,6 +127,9 @@ async function clampProbedMedia(html, projectDir, probeMediaDuration) {
126
127
  return html;
127
128
  }
128
129
 
130
+ // ../core/dist/compiler/htmlBundler.js
131
+ import { createHash } from "crypto";
132
+
129
133
  // ../core/dist/sceneParts.js
130
134
  var SCENE_PART_ATTR = "data-hf-scene";
131
135
  var SCENE_PARTS_META = "hf-scene-parts";
@@ -275,26 +279,35 @@ function isTemplateEntry(html) {
275
279
  function normalizeCompositionSrcPath(srcPath) {
276
280
  return srcPath.replace(/\\/g, "/").replace(/^\.\//, "");
277
281
  }
278
- function readSceneRootDuration(entryHtml) {
282
+ function readSceneRoot(entryHtml) {
279
283
  if (!entryHtml)
280
284
  return null;
281
285
  const { document } = parseHTML(entryHtml);
282
286
  const template = document.querySelector("template");
283
287
  const scope = template ? parseHTML(template.innerHTML).document : document;
284
- const root = scope.querySelector("[data-composition-id]");
285
- return root?.getAttribute("data-duration") ?? null;
288
+ return scope.querySelector("[data-composition-id]");
289
+ }
290
+ function setSceneFxChain(el, sceneFxChain) {
291
+ if (sceneFxChain) {
292
+ el.setAttribute(HF_AUDIO_FX_ATTR, sceneFxChain);
293
+ } else {
294
+ el.removeAttribute(HF_AUDIO_FX_ATTR);
295
+ }
286
296
  }
287
- function createStandaloneEntryRenderClone(root, host, sceneDuration) {
297
+ function createStandaloneEntryRenderClone(root, host, sceneDuration, sceneFxChain) {
288
298
  const hostClone = host.cloneNode(true);
289
299
  hostClone.setAttribute("data-start", "0");
290
- if (root === host)
300
+ if (root === host) {
301
+ setSceneFxChain(hostClone, sceneFxChain);
291
302
  return hostClone;
303
+ }
292
304
  const rootClone = root.cloneNode(false);
293
305
  if (sceneDuration != null) {
294
306
  rootClone.setAttribute("data-duration", sceneDuration);
295
307
  } else {
296
308
  rootClone.removeAttribute("data-duration");
297
309
  }
310
+ setSceneFxChain(rootClone, sceneFxChain);
298
311
  rootClone.appendChild(hostClone);
299
312
  return rootClone;
300
313
  }
@@ -320,8 +333,10 @@ function extractStandaloneEntryFromIndex(indexHtml, entryFile, entryHtml) {
320
333
  const root = Array.from(body.children).find((candidate) => candidate.hasAttribute("data-composition-id")) ?? null;
321
334
  if (!root)
322
335
  return null;
323
- const sceneDuration = readSceneRootDuration(entryHtml) ?? host.getAttribute("data-duration");
324
- const renderClone = createStandaloneEntryRenderClone(root, host, sceneDuration);
336
+ const sceneRoot = readSceneRoot(entryHtml);
337
+ const sceneDuration = sceneRoot?.getAttribute("data-duration") ?? host.getAttribute("data-duration");
338
+ const sceneFxChain = sceneRoot?.getAttribute(HF_AUDIO_FX_ATTR) || null;
339
+ const renderClone = createStandaloneEntryRenderClone(root, host, sceneDuration, sceneFxChain);
325
340
  replaceBodyWithRenderClone(body, renderClone);
326
341
  return document.toString();
327
342
  }
@@ -2396,7 +2411,7 @@ function pushRun(runs, scene, chunk) {
2396
2411
  else
2397
2412
  runs.push({ scene, chunks: [chunk] });
2398
2413
  }
2399
- function coalesceHeadStylesAndBodyScripts(document) {
2414
+ function coalesceHeadStylesAndBodyScripts(document, provenance) {
2400
2415
  const allHeadStyles = [...document.querySelectorAll("head style")];
2401
2416
  const isScenePart = (el) => el.hasAttribute(SCENE_PART_ATTR);
2402
2417
  for (const run of allHeadStyles.length > 1 ? headStyleRuns(allHeadStyles, isScenePart) : []) {
@@ -2414,7 +2429,7 @@ function coalesceHeadStylesAndBodyScripts(document) {
2414
2429
  const mergedJs = joinJsChunks(members.map((el) => el.textContent || ""));
2415
2430
  if (mergedJs && !parsesAsScript(mergedJs)) {
2416
2431
  for (const el of members)
2417
- el.textContent = inlineScriptSource(el.textContent || "");
2432
+ el.textContent = inlineScriptSource(el.textContent || "", provenance);
2418
2433
  continue;
2419
2434
  }
2420
2435
  for (const el of members)
@@ -2422,7 +2437,7 @@ function coalesceHeadStylesAndBodyScripts(document) {
2422
2437
  if (!mergedJs)
2423
2438
  continue;
2424
2439
  const inlineScript = document.createElement("script");
2425
- inlineScript.textContent = inlineScriptSource(mergedJs);
2440
+ inlineScript.textContent = inlineScriptSource(mergedJs, provenance);
2426
2441
  if (anchor)
2427
2442
  anchor.before(inlineScript);
2428
2443
  else
@@ -2451,18 +2466,29 @@ function parsesAsScript(source) {
2451
2466
  return false;
2452
2467
  }
2453
2468
  }
2454
- function stripJsCommentsParserSafe(source) {
2469
+ function stripJsCommentsParserSafe(source, provenance) {
2455
2470
  if (!source)
2456
2471
  return source;
2457
2472
  try {
2458
- const result = transformSync(source, { loader: "js", minify: false, legalComments: "none" });
2473
+ const result = transformSync(source, {
2474
+ loader: "js",
2475
+ minify: false,
2476
+ legalComments: "none",
2477
+ ...provenance ? { sourcemap: "external", sourcefile: "hf-authored-bundle.js" } : {}
2478
+ });
2479
+ if (provenance) {
2480
+ const sourceURL = `hf-inspect-${createHash("sha256").update(source).digest("hex")}.js`;
2481
+ provenance({ input: source, output: result.code.trim(), sourceMap: result.map, sourceURL });
2482
+ return `${result.code.trim()}
2483
+ //# sourceURL=${sourceURL}`;
2484
+ }
2459
2485
  return result.code.trim();
2460
2486
  } catch {
2461
2487
  return source;
2462
2488
  }
2463
2489
  }
2464
- function inlineScriptSource(js) {
2465
- return escapeInlineScriptSource(stripJsCommentsParserSafe(js));
2490
+ function inlineScriptSource(js, provenance) {
2491
+ return escapeInlineScriptSource(stripJsCommentsParserSafe(js, provenance));
2466
2492
  }
2467
2493
  function preserveLocalScriptIntegrity(doc, src, resolvePath) {
2468
2494
  const path = resolvePath(src);
@@ -2792,7 +2818,7 @@ async function bundleProject(projectDir, options) {
2792
2818
  const script = document.createElement("script");
2793
2819
  if (scene)
2794
2820
  script.setAttribute(SCENE_PART_ATTR, scene);
2795
- script.textContent = skipsRunMerge ? inlineScriptSource(text) : text;
2821
+ script.textContent = skipsRunMerge ? inlineScriptSource(text, options?.scriptProvenance) : text;
2796
2822
  document.body.appendChild(script);
2797
2823
  }
2798
2824
  }
@@ -2800,10 +2826,10 @@ async function bundleProject(projectDir, options) {
2800
2826
  emitRootCompositionVariableStyles(document, compVariablesByComp);
2801
2827
  enforceCompositionPixelSizing(document);
2802
2828
  autoHealMissingCompositionIds(document);
2803
- coalesceHeadStylesAndBodyScripts(document);
2829
+ coalesceHeadStylesAndBodyScripts(document, options?.scriptProvenance);
2804
2830
  for (const el of document.querySelectorAll(`script[${INLINED_FILE_ATTR}]`)) {
2805
2831
  const js = el.textContent ?? "";
2806
- el.textContent = escapeInlineScriptSource(isJavaScriptType(el) ? stripJsCommentsParserSafe(js) : js);
2832
+ el.textContent = escapeInlineScriptSource(isJavaScriptType(el) ? stripJsCommentsParserSafe(js, options?.scriptProvenance) : js);
2807
2833
  }
2808
2834
  deferScriptsUntilFonts(document, (el) => el.hasAttribute(RUNTIME_BOOTSTRAP_ATTR));
2809
2835
  injectTextRenderingRule(document);
@@ -3056,8 +3082,8 @@ function extractCompiledHtmlParityContract(html) {
3056
3082
  }
3057
3083
 
3058
3084
  // ../core/dist/compiler/scenePartsManifest.js
3059
- import { createHash } from "crypto";
3060
- var hash = (text) => createHash("sha1").update(text).digest("hex").slice(0, 16);
3085
+ import { createHash as createHash2 } from "crypto";
3086
+ var hash = (text) => createHash2("sha1").update(text).digest("hex").slice(0, 16);
3061
3087
  function addScenePartsManifest(html, ignore = []) {
3062
3088
  const doc = parseHTMLContent(html);
3063
3089
  const parts = [...doc.querySelectorAll(`[${SCENE_PART_ATTR}]`)];
@@ -9,7 +9,7 @@ import {
9
9
  formatPreviewProxyBox,
10
10
  hdrToSdrToneMapFilter,
11
11
  parseFirstFrameColour
12
- } from "./chunk-AHBYQRGI.js";
12
+ } from "./chunk-XQKVEQNY.js";
13
13
  import {
14
14
  decodeAuthoredAttribute,
15
15
  scanHtmlOpeningTags
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  formatVariableValidationIssue,
21
21
  validateVariables
22
- } from "./chunk-AHBYQRGI.js";
22
+ } from "./chunk-XQKVEQNY.js";
23
23
  import {
24
24
  extractCompositionMetadata
25
25
  } from "./chunk-LFNQDTSH.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-AMKC3AXA.js";
10
10
  import {
11
11
  runCancellableProcess
12
- } from "./chunk-XPQSL5VS.js";
12
+ } from "./chunk-54DMWFQZ.js";
13
13
  import {
14
14
  findFfBinary
15
15
  } from "./chunk-VAS6HQX3.js";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-RMIFSBRV.js";
23
+ } from "./chunk-YEBKEWKB.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -229,7 +229,7 @@ var asset_default = defineCommand({
229
229
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
230
230
  );
231
231
  }
232
- const { trackFigmaImport } = await import("./telemetry-565KDZUW.js");
232
+ const { trackFigmaImport } = await import("./telemetry-KVCZKVTE.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-5ETJX6WM.js";
17
17
  import {
18
18
  runEnvironmentChecks
19
- } from "./chunk-M5B42RL5.js";
19
+ } from "./chunk-WUUOFMHU.js";
20
20
  import {
21
21
  getAvailableMemoryMb,
22
22
  getFreeDiskMb,
@@ -32,21 +32,21 @@ import {
32
32
  import {
33
33
  getUpdateMeta,
34
34
  withMeta
35
- } from "./chunk-GESJSXFH.js";
35
+ } from "./chunk-35PWWBGZ.js";
36
36
  import {
37
37
  CONFIG_PATH,
38
38
  withFileLock
39
39
  } from "./chunk-XUXGIA7H.js";
40
40
  import {
41
41
  VERSION
42
- } from "./chunk-OMBSUO4T.js";
42
+ } from "./chunk-TCWMDCBX.js";
43
43
  import {
44
44
  OPTIONAL_PACKAGES,
45
45
  installedOptionalPackageVersion
46
46
  } from "./chunk-3DKN5WKL.js";
47
47
  import {
48
48
  resolveExtractCacheDir
49
- } from "./chunk-VC7JBNPS.js";
49
+ } from "./chunk-IZPN423R.js";
50
50
  import {
51
51
  normalizeErrorMessage
52
52
  } from "./chunk-KNU5COPB.js";
@@ -232,7 +232,7 @@ function checkEnvironment() {
232
232
  return { ok: true, detail: parts.join(" \xB7 ") };
233
233
  }
234
234
  async function checkWhisper() {
235
- const { findWhisper, getInstallInstructions } = await import("./manager-ES2UFT4X.js");
235
+ const { findWhisper, getInstallInstructions } = await import("./manager-X44GKUEL.js");
236
236
  const result = findWhisper();
237
237
  if (result) {
238
238
  return { ok: true, detail: result.executablePath };
@@ -218,13 +218,20 @@ function renderSetupError(error) {
218
218
  const reason = failure?.reason ?? error.stderr.trim();
219
219
  return reason ? new Error(reason, { cause: error }) : error;
220
220
  }
221
+ function tsxLoaderFromCliInstall() {
222
+ try {
223
+ return import.meta.resolve("tsx");
224
+ } catch {
225
+ return "tsx";
226
+ }
227
+ }
221
228
  async function runRenderSetupWorker(mode, input, options) {
222
229
  const sourceMode = import.meta.url.endsWith(".ts");
223
230
  const workerUrl = new URL(
224
231
  sourceMode ? "../renderSetupWorker.ts" : "./renderSetupWorker.js",
225
232
  import.meta.url
226
233
  );
227
- const execArgv = sourceMode ? ["--import", "tsx"] : [];
234
+ const execArgv = sourceMode && !process.versions.bun ? ["--import", tsxLoaderFromCliInstall()] : [];
228
235
  let result;
229
236
  try {
230
237
  result = await runCancellableProcess(