hyperframes 0.8.142 → 0.8.144

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 (222) hide show
  1. package/dist/{add-YS2RCWEK.js → add-CWRTVGDB.js} +18 -17
  2. package/dist/{animatedGifPrep-SAMCDT7T.js → animatedGifPrep-JTOHIWI4.js} +15 -14
  3. package/dist/{asset-BLWC2NWB.js → asset-KU2Z4UFM.js} +4 -4
  4. package/dist/{assetCataloger-FVNBBRP3.js → assetCataloger-3CS2P7PA.js} +8 -7
  5. package/dist/{auth-DRZB7OAC.js → auth-IDSOIQWG.js} +1 -1
  6. package/dist/{autoUpdate-I5I3BOJK.js → autoUpdate-373B4BA2.js} +2 -2
  7. package/dist/{backgroundChecks-VR2QHGNY.js → backgroundChecks-53Q3NAMG.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-4YUHQI6X.js → batchRender-UKZA6BME.js} +11 -10
  10. package/dist/{beats-7OT7ALV3.js → beats-N5JGEOFR.js} +33 -28
  11. package/dist/{benchmark-Q2XQCRTR.js → benchmark-CUN3LN4V.js} +15 -14
  12. package/dist/{browser-7VAWQQZC.js → browser-NCZT5AP6.js} +40 -56
  13. package/dist/{bundleWithLocalizedFonts-DDMLLL2R.js → bundleWithLocalizedFonts-FWC7PE2D.js} +2 -2
  14. package/dist/{capture-HEJS6M5A.js → capture-QBLG3VJR.js} +26 -25
  15. package/dist/{capture-U7ABPKS5.js → capture-YLS32UHT.js} +2 -2
  16. package/dist/{catalog-DVJ3XPDN.js → catalog-HIWNAFHW.js} +19 -18
  17. package/dist/{catch-up-DF6AVSN2.js → catch-up-HGS7KIAC.js} +5 -5
  18. package/dist/{check-KXORRWAE.js → check-FH6UYYLO.js} +78 -66
  19. package/dist/{checkBrowser-J7HZJTRH.js → checkBrowser-RNWNOMCZ.js} +93 -41
  20. package/dist/{chunk-R2JEKLDZ.js → chunk-2DA2BBNY.js} +3 -3
  21. package/dist/{chunk-TQFG7HTI.js → chunk-3RM2ETQT.js} +0 -168
  22. package/dist/{chunk-YFT3BL7N.js → chunk-3VYNNWVA.js} +30 -12
  23. package/dist/{chunk-7FCDA4RH.js → chunk-3XTEXWNN.js} +8 -5
  24. package/dist/{chunk-PFCFR3KZ.js → chunk-442JNXRM.js} +1 -1
  25. package/dist/{chunk-BPZVDBHY.js → chunk-4LAR447G.js} +1 -1
  26. package/dist/{chunk-AM5L5YIA.js → chunk-4OA4LDTU.js} +1 -1
  27. package/dist/{chunk-DZEVA7DI.js → chunk-4OC7MQNB.js} +2 -2
  28. package/dist/{chunk-75JJVANE.js → chunk-54QISXOC.js} +3 -3
  29. package/dist/{chunk-FZK35GT4.js → chunk-5HJ343GH.js} +1 -1
  30. package/dist/{chunk-IDX52YJN.js → chunk-5VMR4WBS.js} +458 -159
  31. package/dist/{chunk-OSUKETIH.js → chunk-5WADG7PR.js} +1 -1
  32. package/dist/{chunk-JYYOAKHS.js → chunk-6IIGT7BX.js} +1 -1
  33. package/dist/{chunk-6UYZB4TY.js → chunk-7RAYSCYT.js} +4 -4
  34. package/dist/{chunk-WTMUCJ6Z.js → chunk-7SDCIWHQ.js} +11 -2
  35. package/dist/{chunk-LAOCA3MQ.js → chunk-A4Q7W4LV.js} +13 -8
  36. package/dist/{chunk-B6SMSALD.js → chunk-A53CBD24.js} +18 -12
  37. package/dist/{chunk-4PFZPP2N.js → chunk-A6S35NYA.js} +54 -16
  38. package/dist/{chunk-JOTLPC6S.js → chunk-AUBOF2PN.js} +1 -1
  39. package/dist/{chunk-WCJGTLPF.js → chunk-BHVFTYSI.js} +6 -3
  40. package/dist/chunk-BSQ7XANM.js +210 -0
  41. package/dist/{chunk-LCSMOLGX.js → chunk-BYSBRF24.js} +69 -8
  42. package/dist/{chunk-U7E736AJ.js → chunk-DDIVWXN7.js} +32 -14
  43. package/dist/{chunk-KOEWEFHK.js → chunk-DIRJ322I.js} +10 -5
  44. package/dist/{chunk-HMUF7FEO.js → chunk-EX6C672Y.js} +2 -2
  45. package/dist/{chunk-QGRFOOLE.js → chunk-F2SMS24Q.js} +288 -85
  46. package/dist/{chunk-5Z63TBTX.js → chunk-FH7WODJH.js} +1 -1
  47. package/dist/{chunk-XTLBLWOV.js → chunk-GEWKFRFI.js} +1 -1
  48. package/dist/{chunk-RVCWIIZ7.js → chunk-GV5R5B7Q.js} +1 -1
  49. package/dist/{chunk-TY6XOHEM.js → chunk-GZM2EFOE.js} +3 -3
  50. package/dist/chunk-GZVP4TWN.js +76 -0
  51. package/dist/{chunk-QXPCARFE.js → chunk-I5KY7EZP.js} +1 -1
  52. package/dist/{chunk-IW2CKH6A.js → chunk-IEIJRMLZ.js} +94 -59
  53. package/dist/chunk-IR35BCLK.js +13 -0
  54. package/dist/{chunk-JFKL3WAE.js → chunk-IWFLMU2N.js} +104 -19
  55. package/dist/{chunk-EFDXGAAD.js → chunk-JEHFZQYT.js} +1 -1
  56. package/dist/{chunk-IHFUKJOR.js → chunk-K2FLNJVB.js} +8 -2
  57. package/dist/{chunk-KDPYVTEU.js → chunk-KBB4RG6F.js} +6 -1
  58. package/dist/{chunk-LJAU4TPS.js → chunk-KFKZ3ISO.js} +2 -2
  59. package/dist/{sherpa-ZYTNFHD5.js → chunk-L5TUCXWR.js} +11 -44
  60. package/dist/{chunk-KYN364DU.js → chunk-LC3RQURJ.js} +7 -9
  61. package/dist/{chunk-IMY4QQTQ.js → chunk-LFX2HEYP.js} +8 -8
  62. package/dist/{chunk-PXSM4HPB.js → chunk-MAYCCGMQ.js} +12 -3
  63. package/dist/{chunk-OZUQF4NB.js → chunk-MQZVBHEY.js} +123 -8
  64. package/dist/{chunk-FWRNQOLT.js → chunk-MXNDKDFT.js} +3 -3
  65. package/dist/{chunk-A4KQZXZI.js → chunk-NE55C6S5.js} +4 -2
  66. package/dist/{chunk-GYE63V4P.js → chunk-NOPBBSLA.js} +24 -19
  67. package/dist/{chunk-H2X52H2N.js → chunk-NV4RXIQ7.js} +3 -3
  68. package/dist/{chunk-WGVOWWVK.js → chunk-OIDN7G42.js} +3 -3
  69. package/dist/{chunk-DPHJKWP5.js → chunk-OUSLVRO4.js} +107 -108
  70. package/dist/{chunk-JLKMWY2T.js → chunk-P6WH6QTV.js} +8 -5
  71. package/dist/{chunk-7M4KAPAA.js → chunk-PUGIRFPX.js} +2 -2
  72. package/dist/{chunk-6RAD4BCC.js → chunk-QATWIE4K.js} +2 -2
  73. package/dist/{chunk-D2KNWIQ6.js → chunk-QFSCCQIR.js} +1 -1
  74. package/dist/{chunk-XGMNQQTJ.js → chunk-RG3QWWIE.js} +1 -1
  75. package/dist/{chunk-MVTUV4TP.js → chunk-RI53TS2Y.js} +14 -6
  76. package/dist/{chunk-LQASVU3I.js → chunk-RVFEDAUV.js} +12 -4
  77. package/dist/{chunk-GK4AIFIH.js → chunk-SDYDNHEE.js} +34 -3
  78. package/dist/{chunk-WSGY5CDQ.js → chunk-SLCFKB3Y.js} +14 -10
  79. package/dist/{chunk-2NCHQUPX.js → chunk-SQLK7SJL.js} +1 -1
  80. package/dist/{chunk-PMRBLBUP.js → chunk-T42U2W2R.js} +14 -2
  81. package/dist/chunk-UPFUC4DB.js +136 -0
  82. package/dist/{chunk-IXCTG2WY.js → chunk-VYSUZEJG.js} +5 -5
  83. package/dist/chunk-WJB7WI4J.js +3753 -0
  84. package/dist/{chunk-YEIFI443.js → chunk-WPNE5NEP.js} +1 -1
  85. package/dist/{chunk-YHRZQJXH.js → chunk-XGFHYAYN.js} +265 -68
  86. package/dist/{chunk-LBKDQKWV.js → chunk-XU5GGV6R.js} +1 -1
  87. package/dist/{chunk-LTGGTEMA.js → chunk-Y6UPYWJS.js} +2 -2
  88. package/dist/{chunk-OKCR3JTO.js → chunk-YJXHMIZA.js} +13 -10
  89. package/dist/{chunk-JU6Y5TTZ.js → chunk-YUAXFWSQ.js} +3 -3
  90. package/dist/{chunk-TVCRUG2S.js → chunk-ZEUONDQG.js} +1 -1
  91. package/dist/{chunk-THXFSPLV.js → chunk-ZIRIDSDB.js} +1 -1
  92. package/dist/{chunk-6UM3R7PP.js → chunk-ZOA2SC4P.js} +129 -60
  93. package/dist/{clean-KTHTV5G5.js → clean-KPX27IKJ.js} +27 -26
  94. package/dist/cli.js +70 -160
  95. package/dist/{cloud-ARSZWALC.js → cloud-P7DAOISN.js} +4 -4
  96. package/dist/{cloudrun-NM7RXOCL.js → cloudrun-XM56TBOH.js} +13 -12
  97. package/dist/commands/contrast-audit.browser.js +60 -4
  98. package/dist/commands/layout-audit.browser.js +68 -0
  99. package/dist/{compare-CY4UO3RW.js → compare-F6YAFZZM.js} +37 -36
  100. package/dist/{compiler-VTH2D3ID.js → compiler-JZ4GNFMG.js} +16 -10
  101. package/dist/{component-FRUIAXIR.js → component-3CFOGIQA.js} +5 -5
  102. package/dist/{compositions-CUSY6ZYY.js → compositions-CPCMWF24.js} +38 -33
  103. package/dist/{delete-KT3VHP4L.js → delete-GYVKOKB6.js} +4 -4
  104. package/dist/{deterministicFonts-F6WIVL2W.js → deterministicFonts-U2BIMGPG.js} +3 -3
  105. package/dist/{dist-7SZU7MA7.js → dist-KDJTFJHA.js} +7 -6
  106. package/dist/{dist-2GC6XKRQ.js → dist-YPWQDWJ4.js} +42 -40
  107. package/dist/{doctor-4ROTBL5U.js → doctor-GWI3B6JT.js} +21 -20
  108. package/dist/{dom-IROKGVJI.js → dom-37K6YOH4.js} +2 -2
  109. package/dist/{events-QJDVMKSR.js → events-BRRUDPPT.js} +3 -3
  110. package/dist/{events-Q5PXT5UC.js → events-V2QFN4YM.js} +2 -2
  111. package/dist/{feedback-PQ7TWESA.js → feedback-CXMD7FWL.js} +14 -13
  112. package/dist/{ffmpeg-QIUFEFTY.js → ffmpeg-T5SH2EFJ.js} +3 -2
  113. package/dist/{figma-JN5DDBDS.js → figma-YABDWD66.js} +3 -3
  114. package/dist/fontLocalizeCli.js +18 -17
  115. package/dist/{get-KT6OTERO.js → get-L2SOQKHX.js} +4 -4
  116. package/dist/{gpuPolicy-LCBWVGEH.js → gpuPolicy-NBJNWHYS.js} +19 -16
  117. package/dist/{grade-compare-VS3RP73G.js → grade-compare-STXQPKYQ.js} +39 -38
  118. package/dist/{help-AD6FIZIO.js → help-4H6BSFLB.js} +2 -2
  119. package/dist/{history-ZRWYRY7R.js → history-4IQOLTHJ.js} +6 -6
  120. package/dist/hyperframe-runtime.js +56 -56
  121. package/dist/hyperframe.manifest.json +1 -1
  122. package/dist/hyperframe.runtime.iife.js +56 -56
  123. package/dist/hyperframes-player.global.js +3 -3
  124. package/dist/hyperframes-slideshow.global.js +23 -23
  125. package/dist/{info-WBBQA2AX.js → info-2CZOTNBC.js} +17 -16
  126. package/dist/{init-A2XBDFGF.js → init-6BXK42VS.js} +46 -46
  127. package/dist/{inspect-CLTZHA5O.js → inspect-VKU47TBH.js} +38 -37
  128. package/dist/{installer-WQDRVXH4.js → installer-T2BSSUDY.js} +11 -10
  129. package/dist/{keyframes-3FYOK6H6.js → keyframes-IEYVHRPI.js} +10 -10
  130. package/dist/{lambda-Y2PA2BGS.js → lambda-TIKG25CK.js} +12 -11
  131. package/dist/{layout-4KP5O7IJ.js → layout-XOI4PT7A.js} +38 -37
  132. package/dist/{lint-V4GRFHOJ.js → lint-DWCMVIX5.js} +14 -13
  133. package/dist/{lintProject-RG2KGAXB.js → lintProject-UBZ3TDHU.js} +7 -6
  134. package/dist/{list-OQ4VED6E.js → list-7GXKG5QM.js} +5 -5
  135. package/dist/{login-W47NKN5S.js → login-BQ5L2UHX.js} +4 -4
  136. package/dist/{manager-CT3D67CG.js → manager-BPSR6D3V.js} +2 -2
  137. package/dist/{manager-524RPYO7.js → manager-RFZNG5YT.js} +2 -2
  138. package/dist/{manager-DXB7JDHU.js → manager-YKMHR6LN.js} +9 -6
  139. package/dist/{media-treatment-HJYL3EME.js → media-treatment-IFB7OSZ3.js} +24 -22
  140. package/dist/{models-DYBAD2GQ.js → models-TY4PJ545.js} +68 -27
  141. package/dist/{motionShot-7NE2YBB3.js → motionShot-WXMFHICW.js} +33 -33
  142. package/dist/{normalize-IGLHCWTF.js → normalize-U3SL5VG3.js} +19 -8
  143. package/dist/{normalize-audio-INKCLMS2.js → normalize-audio-RFD776HQ.js} +10 -6
  144. package/dist/{open-TYC5THVY.js → open-7IXXGO2E.js} +5 -5
  145. package/dist/parakeetRunner-IHLYYMTZ.js +67 -0
  146. package/dist/{pipeline-EVKEPQEW.js → pipeline-TXKPLL2U.js} +20 -18
  147. package/dist/{play-QMZEM6X3.js → play-J2KP64UK.js} +31 -29
  148. package/dist/{preflight-Y5DN5D37.js → preflight-B4AFK3RG.js} +4 -4
  149. package/dist/{present-Y7IK3C4W.js → present-MHHNRVRA.js} +26 -25
  150. package/dist/{preview-5OQRYE6A.js → preview-CONUOFFQ.js} +28 -27
  151. package/dist/{producer-Q6G6JU7B.js → producer-ZI46K7HH.js} +1 -1
  152. package/dist/{projectConfig-RJN3DKDB.js → projectConfig-FGGVG5MV.js} +13 -12
  153. package/dist/{publication-QCPGGN3U.js → publication-TXFBMW6B.js} +8 -7
  154. package/dist/{publish-VZLFIGYY.js → publish-YZSPBFRD.js} +18 -17
  155. package/dist/{remove-background-TKOEHBA5.js → remove-background-4ATVLHLG.js} +22 -20
  156. package/dist/{render-KIIIF6PS.js → render-6FBYLYGJ.js} +20 -19
  157. package/dist/{render-XTXE5CRU.js → render-GFW5BPES.js} +13 -12
  158. package/dist/{render-X3NFNVEQ.js → render-MH4IUPWB.js} +41 -40
  159. package/dist/{render-batch-M55YZLZ5.js → render-batch-XUCZ2PUJ.js} +13 -12
  160. package/dist/{renderCancellation-X5BEHAZU.js → renderCancellation-XF7M7IUP.js} +18 -16
  161. package/dist/renderSetupWorker.js +37 -48
  162. package/dist/{resolver-GAMXRA42.js → resolver-W7AYCQGS.js} +10 -9
  163. package/dist/sherpa-LDUB5NLY.js +75 -0
  164. package/dist/sherpaWorker.js +2 -1
  165. package/dist/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  166. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
  167. package/dist/skills/media-use/scripts/lib/cache.mjs +28 -14
  168. package/dist/skills/media-use/scripts/lib/cache.test.mjs +110 -0
  169. package/dist/skills/media-use/scripts/lib/duck.mjs +2 -1
  170. package/dist/skills/media-use/scripts/lib/duck.test.mjs +87 -0
  171. package/dist/skills/media-use/scripts/lib/probe.mjs +6 -1
  172. package/dist/skills/media-use/scripts/lib/probe.test.mjs +73 -0
  173. package/dist/skills/media-use/scripts/lib/words.mjs +1 -1
  174. package/dist/{skills-CZHVAD3J.js → skills-VENERS5X.js} +7 -7
  175. package/dist/{skillsUpdateCheck-6WLLX53A.js → skillsUpdateCheck-UXFYTACG.js} +3 -3
  176. package/dist/{slideshow-EJ4IMY6P.js → slideshow-4OJEPWNZ.js} +1 -1
  177. package/dist/{snapshot-K7BTJPYQ.js → snapshot-C6T74HTI.js} +44 -40
  178. package/dist/{src-YUW26JU5.js → src-FS5RSVEI.js} +17 -16
  179. package/dist/{src-3I3RH3V5.js → src-VUJ2FUFK.js} +18 -13
  180. package/dist/{staticProjectServer-IKCSGN2B.js → staticProjectServer-V2RZ4DWD.js} +23 -22
  181. package/dist/studio/assets/hyperframes-player-Bw_jIaSX.js +473 -0
  182. package/dist/studio/assets/{index-B-wffzRH.js → index-BVM9NuWl.js} +153 -153
  183. package/dist/studio/assets/{index-D3Vij9t1.js → index-Cj7W_c7p.js} +1 -1
  184. package/dist/studio/assets/{index-D5q2_7Gw.js → index-DyH9dT7b.js} +1 -1
  185. package/dist/studio/{chunk-TFLU2MGI.js → chunk-3GHTHPZD.js} +8 -1
  186. package/dist/studio/chunk-3GHTHPZD.js.map +1 -0
  187. package/dist/studio/{chunk-H2DUOXTF.js → chunk-G3EDKRZH.js} +3 -3
  188. package/dist/studio/{chunk-UYWON5AX.js → chunk-PEAKCOUW.js} +7 -3
  189. package/dist/studio/chunk-PEAKCOUW.js.map +1 -0
  190. package/dist/studio/{chunk-LOVBLSMR.js → chunk-Y2OHHNM2.js} +35 -19
  191. package/dist/studio/chunk-Y2OHHNM2.js.map +1 -0
  192. package/dist/studio/{domEditingLayers-KBTPQKGA.js → domEditingLayers-PYST4G45.js} +3 -3
  193. package/dist/studio/index.html +1 -1
  194. package/dist/studio/index.js +261 -230
  195. package/dist/studio/index.js.map +1 -1
  196. package/dist/studio/player.js +3 -3
  197. package/dist/studio/ui.d.ts +4 -5
  198. package/dist/studio/ui.js +1 -1
  199. package/dist/{studio-api-SQ3NXFSM.js → studio-api-TQE7KWKO.js} +22 -17
  200. package/dist/{studioServer-VVEO7XCH.js → studioServer-CYKSQK7L.js} +81 -64
  201. package/dist/{synthesize-77PTU6C5.js → synthesize-UCI4X5O7.js} +6 -6
  202. package/dist/{telemetry-FQDKR5XA.js → telemetry-A23PPRD6.js} +3 -3
  203. package/dist/{timeline-N6ZASFNE.js → timeline-T3QSGT3A.js} +143 -99
  204. package/dist/{tokens-2OIIBBCW.js → tokens-RT5HWA6C.js} +4 -4
  205. package/dist/{transcribe-7YTUCXDX.js → transcribe-FOLNOC5G.js} +116 -52
  206. package/dist/{transcribe-4F6MK73N.js → transcribe-HCF64LQK.js} +23 -20
  207. package/dist/{tts-TOHSPWEG.js → tts-B6AHFQEO.js} +6 -6
  208. package/dist/{updateCheck-AZ2COZFR.js → updateCheck-27PIP3AA.js} +2 -2
  209. package/dist/{upgrade-QAJEYB4X.js → upgrade-TVGXBUPJ.js} +2 -2
  210. package/dist/{urlDownloader-LSMFEO3R.js → urlDownloader-KBLBJKRL.js} +14 -13
  211. package/dist/{validate-GW5MDL36.js → validate-ZMYGK4QI.js} +40 -27
  212. package/dist/{video-PRNOKUK3.js → video-AVE5GIGM.js} +15 -14
  213. package/package.json +1 -1
  214. package/dist/chunk-J4UX3RS3.js +0 -3717
  215. package/dist/studio/assets/hyperframes-player-sAsRuV73.js +0 -473
  216. package/dist/studio/chunk-LOVBLSMR.js.map +0 -1
  217. package/dist/studio/chunk-TFLU2MGI.js.map +0 -1
  218. package/dist/studio/chunk-UYWON5AX.js.map +0 -1
  219. package/dist/{chunk-HBBJFK6I.js → chunk-APDLWWFG.js} +0 -0
  220. package/dist/{screenshotCapture-TEUIWXWN.js → screenshotCapture-3JXXUZND.js} +3 -3
  221. /package/dist/studio/{chunk-H2DUOXTF.js.map → chunk-G3EDKRZH.js.map} +0 -0
  222. /package/dist/studio/{domEditingLayers-KBTPQKGA.js.map → domEditingLayers-PYST4G45.js.map} +0 -0
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  ensureDOMParser
9
- } from "./chunk-PFCFR3KZ.js";
9
+ } from "./chunk-442JNXRM.js";
10
10
 
11
11
  // src/utils/compositionViewport.ts
12
12
  var DEFAULT_VIEWPORT = { width: 1920, height: 1080 };
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/utils/producer.ts
9
9
  async function loadProducer() {
10
- return await import("./src-YUW26JU5.js");
10
+ return await import("./src-FS5RSVEI.js");
11
11
  }
12
12
 
13
13
  export {
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  errorBox
9
- } from "./chunk-IHFUKJOR.js";
9
+ } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  failUsage
12
12
  } from "./chunk-PBN6GBJE.js";
@@ -6,16 +6,16 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  readCompositionFps
9
- } from "./chunk-YEIFI443.js";
9
+ } from "./chunk-WPNE5NEP.js";
10
10
  import {
11
11
  errorBox
12
- } from "./chunk-IHFUKJOR.js";
12
+ } from "./chunk-K2FLNJVB.js";
13
13
  import {
14
14
  failUsage
15
15
  } from "./chunk-PBN6GBJE.js";
16
16
  import {
17
17
  parseFps
18
- } from "./chunk-YFT3BL7N.js";
18
+ } from "./chunk-3VYNNWVA.js";
19
19
 
20
20
  // src/browser/windowsCrash.ts
21
21
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -0,0 +1,76 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ isTextFile
9
+ } from "./chunk-K4WKGXRC.js";
10
+ import {
11
+ CliUsageError
12
+ } from "./chunk-PBN6GBJE.js";
13
+
14
+ // src/utils/reject-extra-positionals.ts
15
+ var ACCEPTS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set([
16
+ "compare",
17
+ "figma asset",
18
+ "skills update",
19
+ "timeline set"
20
+ ]);
21
+ var JOINS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set(["catalog", "tts"]);
22
+ var EXTRA_POSITIONAL_HINTS = {
23
+ add: "Run add once per item, or pass a single tag to install every item tagged with it."
24
+ };
25
+ function wantsJson(value) {
26
+ return value === true || typeof value === "string" && value !== "false" && value !== "0";
27
+ }
28
+ function declaredArgs(cmd) {
29
+ const raw = cmd.args;
30
+ return raw && typeof raw === "object" ? raw : {};
31
+ }
32
+ function usageLine(path, args) {
33
+ const parts = ["hyperframes", path];
34
+ let hasOptions = false;
35
+ for (const [name, def] of Object.entries(args)) {
36
+ if (def.type !== "positional") {
37
+ hasOptions = true;
38
+ continue;
39
+ }
40
+ const optional = def.required === false || def.default !== void 0;
41
+ parts.push(optional ? `[${name.toUpperCase()}]` : `<${name.toUpperCase()}>`);
42
+ }
43
+ if (hasOptions) parts.push("[OPTIONS]");
44
+ return parts.join(" ");
45
+ }
46
+ function resolveExtraPositionals(cmd, path, parsed) {
47
+ if (ACCEPTS_EXTRA_POSITIONALS.has(path)) return;
48
+ const args = declaredArgs(cmd);
49
+ const positionals = Object.entries(args).filter(([, def]) => def.type === "positional");
50
+ const given = (Array.isArray(parsed?._) ? parsed._ : []).map(String);
51
+ const extra = given.slice(positionals.length);
52
+ if (extra.length === 0) return;
53
+ const last = positionals.at(-1)?.[0];
54
+ const words = given.slice(positionals.length - 1);
55
+ const ttsFile = path === "tts" && isTextFile(words[0]);
56
+ if (parsed && last && JOINS_EXTRA_POSITIONALS.has(path) && !ttsFile) {
57
+ parsed[last] = words.join(" ");
58
+ return;
59
+ }
60
+ const plural = extra.length === 1 ? "" : "s";
61
+ const message = `Unexpected extra argument${plural} for hyperframes ${path}: ${extra.join(", ")}
62
+ Usage: ${usageLine(path, args)}` + (EXTRA_POSITIONAL_HINTS[path] ? `
63
+ ${EXTRA_POSITIONAL_HINTS[path]}` : "");
64
+ if (wantsJson(parsed?.json)) console.log(JSON.stringify({ ok: false, error: message }));
65
+ else console.error(message);
66
+ throw new CliUsageError(
67
+ `${extra.length} unexpected extra argument${plural} for hyperframes ${path}`,
68
+ {
69
+ presented: true
70
+ }
71
+ );
72
+ }
73
+
74
+ export {
75
+ resolveExtraPositionals
76
+ };
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-GMECXFAN.js";
28
28
  import {
29
29
  ITEM_TYPE_DIRS
30
- } from "./chunk-YFT3BL7N.js";
30
+ } from "./chunk-3VYNNWVA.js";
31
31
  import {
32
32
  realProjectRoot
33
33
  } from "./chunk-OFQWTKPW.js";
@@ -15,7 +15,7 @@ import {
15
15
  resolveExistingLocalAsset,
16
16
  resolveLocalAssetCandidates,
17
17
  resolveProjectRelativeSrc
18
- } from "./chunk-JFKL3WAE.js";
18
+ } from "./chunk-IWFLMU2N.js";
19
19
  import {
20
20
  COMPOSITION_VARIABLE_TYPES,
21
21
  FONT_ALIAS_KEYS,
@@ -25,7 +25,7 @@ import {
25
25
  extractMediaSrcMutations,
26
26
  isSafeMediaUrl,
27
27
  resolveAliasDisplayName
28
- } from "./chunk-HBBJFK6I.js";
28
+ } from "./chunk-APDLWWFG.js";
29
29
  import {
30
30
  findFfBinary
31
31
  } from "./chunk-PJ3HDUCY.js";
@@ -33,17 +33,19 @@ import {
33
33
  COMPOSITION_ATTRIBUTES,
34
34
  checkSubCompositionUsability,
35
35
  parseNumeric,
36
- readAuthoredDurationSeconds,
37
36
  readClipTiming,
37
+ validateColorGradingContract
38
+ } from "./chunk-3RM2ETQT.js";
39
+ import {
40
+ readAuthoredDurationSeconds,
38
41
  readDataDurationSeconds,
39
42
  resolveMediaDuration,
40
- rewriteAssetPath,
41
- validateColorGradingContract
42
- } from "./chunk-TQFG7HTI.js";
43
+ rewriteAssetPath
44
+ } from "./chunk-BSQ7XANM.js";
43
45
  import {
44
46
  Parser,
45
47
  parseHTML
46
- } from "./chunk-GK4AIFIH.js";
48
+ } from "./chunk-SDYDNHEE.js";
47
49
  import {
48
50
  parse,
49
51
  simple
@@ -52,7 +54,7 @@ import {
52
54
  isSceneLikeCompositionId,
53
55
  parseSlideshowManifest,
54
56
  resolveSlideshow
55
- } from "./chunk-PMRBLBUP.js";
57
+ } from "./chunk-T42U2W2R.js";
56
58
  import {
57
59
  __commonJS,
58
60
  __require,
@@ -3832,12 +3834,13 @@ function parseHtmlStructure(source) {
3832
3834
  function findHtmlTag(tags) {
3833
3835
  return tags.find((tag) => tag.name === "html") ?? null;
3834
3836
  }
3837
+ var hasCompositionMarker = (tag) => Boolean(
3838
+ readDecodedAttr(tag.raw, "data-composition-id") || readAttr(tag.raw, "data-width") || readAttr(tag.raw, "data-height")
3839
+ );
3835
3840
  function findRootTag(source, parsedTags) {
3836
3841
  const tags = parsedTags ?? parseHtmlStructure(source).tags;
3837
3842
  const bodyTag = tags.find((tag) => tag.name === "body");
3838
- if (bodyTag && (readDecodedAttr(bodyTag.raw, "data-composition-id") || readAttr(bodyTag.raw, "data-width") || readAttr(bodyTag.raw, "data-height"))) {
3839
- return bodyTag;
3840
- }
3843
+ if (bodyTag && hasCompositionMarker(bodyTag)) return bodyTag;
3841
3844
  const bodyStart = bodyTag ? bodyTag.index + bodyTag.raw.length : 0;
3842
3845
  const bodyEnd = bodyTag?.closeIndex ?? source.length;
3843
3846
  const bodyTags = tags.filter((tag) => tag.index >= bodyStart && tag.index < bodyEnd);
@@ -3845,7 +3848,8 @@ function findRootTag(source, parsedTags) {
3845
3848
  for (const tag of bodyTags) {
3846
3849
  if (tag.index < skipBefore) continue;
3847
3850
  if (["script", "style", "meta", "link", "title"].includes(tag.name)) continue;
3848
- if (tag.name === "svg" && !readDecodedAttr(tag.raw, "data-composition-id") && !readAttr(tag.raw, "data-width") && !readAttr(tag.raw, "data-height")) {
3851
+ if ((tag.name === "html" || tag.name === "head") && !hasCompositionMarker(tag)) continue;
3852
+ if (tag.name === "svg" && !hasCompositionMarker(tag)) {
3849
3853
  skipBefore = tag.endIndex ?? Infinity;
3850
3854
  continue;
3851
3855
  }
@@ -3869,10 +3873,7 @@ function hasUnquotedLessThan(attrs) {
3869
3873
  return false;
3870
3874
  }
3871
3875
  function readAttr(tagSource, attr) {
3872
- if (!tagSource) return null;
3873
- const escaped = attr.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3874
- const match = tagSource.match(new RegExp(`(?<![\\w-])${escaped}\\s*=\\s*["']([^"']+)["']`, "i"));
3875
- return match?.[1] || null;
3876
+ return readAttributeValue(tagSource, attr, false) || null;
3876
3877
  }
3877
3878
  function hasAttrName(tagSource, attr) {
3878
3879
  return readDecodedAttr(tagSource, attr) !== null;
@@ -3895,15 +3896,18 @@ function mediaWindowsOverlap(a, b) {
3895
3896
  return a.start < b.end && b.start < a.end;
3896
3897
  }
3897
3898
  function readDecodedAttr(tagSource, attr) {
3899
+ return readAttributeValue(tagSource, attr, true);
3900
+ }
3901
+ function readAttributeValue(tagSource, attr, decodeEntities) {
3898
3902
  if (!tagSource) return null;
3899
3903
  let value = null;
3900
3904
  const parser = new Parser(
3901
3905
  {
3902
- onattribute(name, decodedValue) {
3903
- if (value === null && name.toLowerCase() === attr.toLowerCase()) value = decodedValue;
3906
+ onattribute(name, attributeValue) {
3907
+ if (value === null && name.toLowerCase() === attr.toLowerCase()) value = attributeValue;
3904
3908
  }
3905
3909
  },
3906
- { decodeEntities: true, lowerCaseAttributeNames: false, lowerCaseTags: true }
3910
+ { decodeEntities, lowerCaseAttributeNames: false, lowerCaseTags: true }
3907
3911
  );
3908
3912
  parser.end(tagSource);
3909
3913
  return value;
@@ -4467,7 +4471,8 @@ function buildLintContext(html, options = {}) {
4467
4471
  content: style.content,
4468
4472
  raw: style.content,
4469
4473
  index: -1,
4470
- file: style.file ?? style.href
4474
+ file: style.file ?? style.href,
4475
+ rootRelativePath: style.rootRelativePath
4471
4476
  }))
4472
4477
  ];
4473
4478
  const scripts = structure.scripts;
@@ -4494,6 +4499,12 @@ function buildLintContext(html, options = {}) {
4494
4499
  options
4495
4500
  };
4496
4501
  }
4502
+ var SCRIPT_SYNTAX_EXEMPT_TYPES = /* @__PURE__ */ new Set([
4503
+ "application/json",
4504
+ "application/hyperframes-slideshow+json",
4505
+ "importmap",
4506
+ "module"
4507
+ ]);
4497
4508
  function repeatedDescendantId(selector) {
4498
4509
  let repeated = null;
4499
4510
  const requiredPseudoIds = (pseudo) => {
@@ -4850,7 +4861,7 @@ var coreRules = [
4850
4861
  },
4851
4862
  // root_missing_composition_id + root_missing_dimensions
4852
4863
  // fallow-ignore-next-line complexity
4853
- ({ rootTag }) => {
4864
+ ({ rootTag, options }) => {
4854
4865
  const findings = [];
4855
4866
  if (!rootTag || !readDecodedAttr(rootTag.raw, "data-composition-id")) {
4856
4867
  findings.push({
@@ -4862,7 +4873,7 @@ var coreRules = [
4862
4873
  snippet: truncateSnippet(rootTag?.raw || "")
4863
4874
  });
4864
4875
  }
4865
- if (!rootTag || !readAttr(rootTag.raw, "data-width") || !readAttr(rootTag.raw, "data-height")) {
4876
+ if (!options.isSubComposition && (!rootTag || !readAttr(rootTag.raw, "data-width") || !readAttr(rootTag.raw, "data-height"))) {
4866
4877
  findings.push({
4867
4878
  code: "root_missing_dimensions",
4868
4879
  severity: "error",
@@ -5112,10 +5123,8 @@ var coreRules = [
5112
5123
  ({ scripts, locate }) => {
5113
5124
  const findings = [];
5114
5125
  for (const script of scripts) {
5115
- const attrs = script.attrs || "";
5116
- if (/\bsrc\s*=/.test(attrs) || /\btype\s*=\s*["'](?:application\/json|application\/hyperframes-slideshow\+json|importmap|module)["']/.test(
5117
- attrs
5118
- ))
5126
+ const type = readDecodedAttr(script.raw, "type")?.trim().toLowerCase() ?? "";
5127
+ if (readDecodedAttr(script.raw, "src") !== null || SCRIPT_SYNTAX_EXEMPT_TYPES.has(type))
5119
5128
  continue;
5120
5129
  const syntaxError = getInlineScriptSyntaxError(script.content);
5121
5130
  if (!syntaxError) continue;
@@ -5523,6 +5532,7 @@ function findImperativeMediaControlFindings(ctx) {
5523
5532
  };
5524
5533
  if (mediaTags.length === 0 || ctx.scripts.length === 0) return findings;
5525
5534
  for (const script of ctx.scripts) {
5535
+ const code = stripJsCode(script.content);
5526
5536
  const mediaVars = /* @__PURE__ */ new Map();
5527
5537
  const assignmentPatterns = [
5528
5538
  {
@@ -5539,6 +5549,7 @@ function findImperativeMediaControlFindings(ctx) {
5539
5549
  for (const { pattern, variableIndex, targetIndex } of assignmentPatterns) {
5540
5550
  let match;
5541
5551
  while ((match = pattern.exec(script.content)) !== null) {
5552
+ if (code[match.index] !== script.content[match.index]) continue;
5542
5553
  const variableName = match[variableIndex];
5543
5554
  const target = match[targetIndex];
5544
5555
  if (!variableName || !target) continue;
@@ -5549,12 +5560,12 @@ function findImperativeMediaControlFindings(ctx) {
5549
5560
  }
5550
5561
  const directIdPatterns = [
5551
5562
  {
5552
- pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.play\s*\(/g,
5563
+ pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\s*(?:\?\.|\.)\s*play\s*(?:\?\.\s*)?\(/g,
5553
5564
  kind: "play()",
5554
5565
  targetIndex: 1
5555
5566
  },
5556
5567
  {
5557
- pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.pause\s*\(/g,
5568
+ pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\s*(?:\?\.|\.)\s*pause\s*(?:\?\.\s*)?\(/g,
5558
5569
  kind: "pause()",
5559
5570
  targetIndex: 1
5560
5571
  },
@@ -5569,12 +5580,12 @@ function findImperativeMediaControlFindings(ctx) {
5569
5580
  targetIndex: 1
5570
5581
  },
5571
5582
  {
5572
- pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.play\s*\(/g,
5583
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\s*(?:\?\.|\.)\s*play\s*(?:\?\.\s*)?\(/g,
5573
5584
  kind: "play()",
5574
5585
  targetIndex: 2
5575
5586
  },
5576
5587
  {
5577
- pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.pause\s*\(/g,
5588
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\s*(?:\?\.|\.)\s*pause\s*(?:\?\.\s*)?\(/g,
5578
5589
  kind: "pause()",
5579
5590
  targetIndex: 2
5580
5591
  },
@@ -5592,6 +5603,7 @@ function findImperativeMediaControlFindings(ctx) {
5592
5603
  for (const { pattern, kind, targetIndex } of directIdPatterns) {
5593
5604
  let match;
5594
5605
  while ((match = pattern.exec(script.content)) !== null) {
5606
+ if (code[match.index] !== script.content[match.index]) continue;
5595
5607
  const target = match[targetIndex];
5596
5608
  if (!target) continue;
5597
5609
  const elementId = mediaIndex.ids.has(target) ? target : selectorTargetsManagedMedia(target, mediaIndex) ? void 0 : null;
@@ -5609,8 +5621,20 @@ function findImperativeMediaControlFindings(ctx) {
5609
5621
  for (const [variableName, elementId] of mediaVars) {
5610
5622
  const escapedVar = escapeRegExp(variableName);
5611
5623
  const variablePatterns = [
5612
- { pattern: new RegExp(`\\b${escapedVar}\\.play\\s*\\(`, "g"), kind: "play()" },
5613
- { pattern: new RegExp(`\\b${escapedVar}\\.pause\\s*\\(`, "g"), kind: "pause()" },
5624
+ {
5625
+ pattern: new RegExp(
5626
+ `\\b${escapedVar}\\s*(?:\\?\\.|\\.)\\s*play\\s*(?:\\?\\.\\s*)?\\(`,
5627
+ "g"
5628
+ ),
5629
+ kind: "play()"
5630
+ },
5631
+ {
5632
+ pattern: new RegExp(
5633
+ `\\b${escapedVar}\\s*(?:\\?\\.|\\.)\\s*pause\\s*(?:\\?\\.\\s*)?\\(`,
5634
+ "g"
5635
+ ),
5636
+ kind: "pause()"
5637
+ },
5614
5638
  { pattern: new RegExp(`\\b${escapedVar}\\.currentTime\\s*=`, "g"), kind: "currentTime" },
5615
5639
  {
5616
5640
  pattern: new RegExp(`\\b${escapedVar}\\.muted\\s*=`, "g"),
@@ -5620,6 +5644,7 @@ function findImperativeMediaControlFindings(ctx) {
5620
5644
  for (const { pattern, kind } of variablePatterns) {
5621
5645
  let match;
5622
5646
  while ((match = pattern.exec(script.content)) !== null) {
5647
+ if (code[match.index] !== script.content[match.index]) continue;
5623
5648
  findings.push({
5624
5649
  code: "imperative_media_control",
5625
5650
  severity: "error",
@@ -6309,6 +6334,24 @@ function extractCssUrlReferences(css) {
6309
6334
  }
6310
6335
  return out;
6311
6336
  }
6337
+ function folderDepth(filePath) {
6338
+ if (/^(?:[a-z]:)?[\\/]/i.test(filePath)) return 0;
6339
+ let depth = 0;
6340
+ for (const segment of filePath.split(/[\\/]/).slice(0, -1)) {
6341
+ if (segment === "..") depth = Math.max(0, depth - 1);
6342
+ else if (segment && segment !== ".") depth += 1;
6343
+ }
6344
+ return depth;
6345
+ }
6346
+ function climbsAboveRoot(fileDepth, path) {
6347
+ let depth = fileDepth;
6348
+ for (const segment of path.split("/")) {
6349
+ if (segment === "..") depth -= 1;
6350
+ else if (segment && segment !== ".") depth += 1;
6351
+ if (depth < 0) return true;
6352
+ }
6353
+ return false;
6354
+ }
6312
6355
  function extractCssSelectors(css) {
6313
6356
  const out = [];
6314
6357
  const noComments = css.replace(/\/\*[\s\S]*?\*\//g, "");
@@ -6622,42 +6665,31 @@ var compositionRules = [
6622
6665
  }
6623
6666
  return findings;
6624
6667
  },
6625
- // invalid_parent_traversal_in_asset_path — catches `../` traversal in src,
6626
- // href, inline-style url(), and <style> url() asset references on
6627
- // compositions. Sub-compositions live under compositions/ but are served
6628
- // with the project root as their base URL, so any `../`-traversing path
6629
- // climbs above the project root and 404s in Studio preview. Renders
6630
- // tolerate it because the server-side bundler rewrites `../foo` against
6631
- // each sub-composition's source path; the runtime now mirrors that fallback
6632
- // (see rewriteSubCompositionAssetPaths in runtime/compositionLoader.ts), but
6633
- // the authoring-time signal is still wrong — flag it at lint time so the
6634
- // baked path is plain root-relative and matches what the bundler emits.
6635
- //
6636
- // Mirrors the runtime fallback's surface: `[src]` / `[href]` attribute
6637
- // values, `[style]` inline url(), and `<style>` block url() references.
6638
- // Skips absolute URLs (http(s)://, //, data:, /-prefixed root-relative),
6639
- // hash anchors, and plain relative paths (`assets/x.mp4`) — only `../`
6640
- // traversal is flagged. Subsumes the older `../capture/`-specific rule.
6668
+ // invalid_parent_traversal_in_asset_path — a `../` path in src, href or a CSS url() that leaves
6669
+ // the project once resolved from the file's own folder, as the bundler, producer and runtime
6670
+ // resolve it. "../assets/x" from compositions/ stays inside and passes.
6641
6671
  // fallow-ignore-next-line complexity
6642
6672
  ({ tags, styles, rawSource, options }) => {
6643
6673
  if (isRegistrySourceFile(options.filePath) || isRegistryInstalledFile(rawSource)) return [];
6644
6674
  const offenders = [];
6645
- const collect = (value) => {
6646
- if (!value) return;
6647
- const trimmed = value.trim();
6648
- if (!trimmed.startsWith("../") && trimmed !== "..") return;
6649
- offenders.push(trimmed);
6675
+ const fileDepth = folderDepth(options.compSrcPath ?? "index.html");
6676
+ const collect = (value, depth = fileDepth) => {
6677
+ const trimmed = value?.trim() ?? "";
6678
+ if (/^(?:[a-z][a-z0-9+.-]*:|[\\/#])/i.test(trimmed)) return;
6679
+ const path = (trimmed.split(/[?#]/, 1)[0] ?? "").replace(/\\|%2f/gi, "/").replace(/%2e/gi, ".");
6680
+ if (climbsAboveRoot(depth, path)) offenders.push(trimmed);
6650
6681
  };
6651
6682
  for (const tag of tags) {
6652
- collect(readAttr(tag.raw, "src"));
6653
- collect(readAttr(tag.raw, "href"));
6683
+ collect(readDecodedAttr(tag.raw, "src"));
6684
+ collect(readDecodedAttr(tag.raw, "href"));
6654
6685
  const styleAttr = readJsonAttr(tag.raw, "style");
6655
6686
  if (styleAttr) {
6656
6687
  for (const url of extractCssUrlReferences(styleAttr)) collect(url);
6657
6688
  }
6658
6689
  }
6659
6690
  for (const style of styles) {
6660
- for (const url of extractCssUrlReferences(style.content)) collect(url);
6691
+ const depth = style.rootRelativePath ? folderDepth(style.rootRelativePath) : fileDepth;
6692
+ for (const url of extractCssUrlReferences(style.content)) collect(url, depth);
6661
6693
  }
6662
6694
  if (offenders.length === 0) return [];
6663
6695
  const prefixCounts = /* @__PURE__ */ new Map();
@@ -6670,8 +6702,8 @@ var compositionRules = [
6670
6702
  {
6671
6703
  code: "invalid_parent_traversal_in_asset_path",
6672
6704
  severity: "error",
6673
- message: `Found ${offenders.length} asset path(s) traversing above the project root with "../" (${prefixSummary}). Renders rewrite this against each sub-composition's source path, but Studio preview and other live consumers resolve against the project root and 404.`,
6674
- fixHint: 'Use plain root-relative paths (e.g. "assets/...", "capture/...", "fonts/...") \u2014 compositions are served with the project root as their base URL, so paths must be root-relative, not relative to the compositions/ directory.'
6705
+ message: `Found ${offenders.length} asset path(s) traversing above the project root with "../" (${prefixSummary}), resolved from the folder of the file that holds them. Render and preview clamp them to the project root or resolve them outside it, so they load a different file than written, or none.`,
6706
+ fixHint: `Point the path at a file inside the project: from compositions/scene.html, "../assets/x.png" and "assets/x.png" both reach the project's assets folder.`
6675
6707
  }
6676
6708
  ];
6677
6709
  },
@@ -10381,7 +10413,7 @@ function collectExternalStyles(projectDir, html, compSrcPath) {
10381
10413
  document,
10382
10414
  compSrcPath
10383
10415
  )) {
10384
- styles.push({ href, content, file: join2(projectDir, rootRelativePath) });
10416
+ styles.push({ href, content, file: join2(projectDir, rootRelativePath), rootRelativePath });
10385
10417
  }
10386
10418
  return styles;
10387
10419
  }
@@ -10433,6 +10465,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10433
10465
  const rootResult = await lintHyperframeHtml(rootHtml, {
10434
10466
  ...hostOptions,
10435
10467
  filePath: indexPath,
10468
+ compSrcPath: rootFile,
10436
10469
  externalStyles: collectExternalStyles(projectDir, rootHtml, rootCompSrcPath)
10437
10470
  });
10438
10471
  results.push({ file: rootFile, result: rootResult, contentHash: contentDigest(rootHtml) });
@@ -10466,6 +10499,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10466
10499
  ...hostOptions,
10467
10500
  filePath,
10468
10501
  isSubComposition: true,
10502
+ compSrcPath,
10469
10503
  externalStyles: collectExternalStyles(projectDir, html, compSrcPath)
10470
10504
  });
10471
10505
  results.push({
@@ -10798,6 +10832,7 @@ function isSnippetFragment(html) {
10798
10832
 
10799
10833
  export {
10800
10834
  require_dist,
10835
+ resolveCompositionDuration,
10801
10836
  LINT_RULE_COUNT,
10802
10837
  LINT_RULE_GROUP_COUNTS,
10803
10838
  lintHyperframeHtml,
@@ -0,0 +1,13 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+
8
+ // src/whisper/transcriptFile.ts
9
+ var TRANSCRIPT_FILE = "transcript.json";
10
+
11
+ export {
12
+ TRANSCRIPT_FILE
13
+ };
@@ -4,18 +4,110 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ decodeHTMLAttribute
9
+ } from "./chunk-SDYDNHEE.js";
7
10
 
8
11
  // ../parsers/dist/assetResolution.js
9
12
  import { closeSync, constants, existsSync, fstatSync, openSync, readFileSync } from "fs";
10
13
  import { isAbsolute, join, posix, relative, resolve, sep } from "path";
11
- function decodeUrlPathVariants(path) {
12
- const variants = [path];
13
- try {
14
- const decoded = decodeURIComponent(path);
15
- if (decoded !== path) variants.unshift(decoded);
16
- } catch {
14
+ function readAttributeValue(html, at) {
15
+ while (/[\t\n\f\r ]/.test(html.charAt(at))) at++;
16
+ const quote = ['"', "'"].includes(html.charAt(at)) ? html.charAt(at) : "";
17
+ if (quote) at++;
18
+ const valueStart = at;
19
+ if (quote) {
20
+ const closing = html.indexOf(quote, at);
21
+ at = closing === -1 ? html.length : closing;
22
+ } else {
23
+ while (at < html.length && !/[\t\n\f\r >]/.test(html[at])) at++;
24
+ }
25
+ const valueEnd = at;
26
+ const end = quote ? Math.min(valueEnd + 1, html.length) : valueEnd;
27
+ return { value: html.slice(valueStart, valueEnd), valueStart, valueEnd, quote, end };
28
+ }
29
+ function readAttribute(html, start) {
30
+ let at = start;
31
+ while (at < html.length && !/[\t\n\f\r =/>]/.test(html[at])) at++;
32
+ if (at === start) return null;
33
+ const name = html.slice(start, at).toLowerCase();
34
+ const nameEnd = at;
35
+ while (/[\t\n\f\r ]/.test(html[at] ?? "")) at++;
36
+ if (html[at] !== "=") return { kind: "boolean", name, start, end: nameEnd };
37
+ return { kind: "value", name, start, ...readAttributeValue(html, at + 1) };
38
+ }
39
+ function readOpeningTag(html, start, name, at) {
40
+ const attributes = [];
41
+ while (at < html.length) {
42
+ while (/[\t\n\f\r /]/.test(html[at] ?? "")) at++;
43
+ if (at >= html.length || html[at] === ">") break;
44
+ const attribute = readAttribute(html, at);
45
+ if (attribute === null) {
46
+ at++;
47
+ continue;
48
+ }
49
+ attributes.push(attribute);
50
+ at = attribute.end;
51
+ }
52
+ const closed = html[at] === ">";
53
+ return {
54
+ name: name.toLowerCase(),
55
+ start,
56
+ bodyEnd: at,
57
+ end: closed ? at + 1 : at,
58
+ closed,
59
+ rawTextEnd: null,
60
+ attributes
61
+ };
62
+ }
63
+ function scanHtmlOpeningTags(html) {
64
+ const tags = [];
65
+ const opening = /<!--[\s\S]*?(?:--!?>|$)|<([a-z][^\t\n\f\r />]*)/gi;
66
+ let match;
67
+ while ((match = opening.exec(html)) !== null) {
68
+ if (!match[1]) continue;
69
+ const tag = readOpeningTag(html, match.index, match[1], opening.lastIndex);
70
+ tags.push(tag);
71
+ opening.lastIndex = tag.end;
72
+ if ([
73
+ "script",
74
+ "style",
75
+ "textarea",
76
+ "title",
77
+ "xmp",
78
+ "iframe",
79
+ "noembed",
80
+ "noframes",
81
+ "plaintext"
82
+ ].includes(tag.name)) {
83
+ if (tag.name === "plaintext") {
84
+ tag.rawTextEnd = html.length;
85
+ break;
86
+ }
87
+ const closing = new RegExp(`</${tag.name}(?=[\\t\\n\\f\\r />])`, "gi");
88
+ closing.lastIndex = tag.end;
89
+ const end = closing.exec(html);
90
+ tag.rawTextEnd = end?.index ?? html.length;
91
+ opening.lastIndex = tag.rawTextEnd;
92
+ }
17
93
  }
18
- return variants;
94
+ return tags;
95
+ }
96
+ function decodeAuthoredAttribute(value) {
97
+ return decodeHTMLAttribute(value);
98
+ }
99
+ function decodeUrlPathVariants(path) {
100
+ const decoded = decodeWellFormedEscapes(path);
101
+ return decoded === path ? [path] : [decoded, path];
102
+ }
103
+ function decodeWellFormedEscapes(path) {
104
+ return path.replace(/(?:%[0-9A-Fa-f]{2})+/g, (run) => {
105
+ try {
106
+ return decodeURIComponent(run);
107
+ } catch {
108
+ return run;
109
+ }
110
+ });
19
111
  }
20
112
  function isRemoteOrInlineUrl(url) {
21
113
  return /^(https?:|data:|blob:|\/\/|#)/i.test(url);
@@ -26,21 +118,14 @@ function hasUnresolvedTemplatingToken(url) {
26
118
  function isUnresolvedAssetPlaceholder(rawSrc) {
27
119
  return /^__[A-Z_]+__$/.test(rawSrc.trim()) || hasUnresolvedTemplatingToken(rawSrc);
28
120
  }
29
- var COMPOSITION_SRC_ATTR = /\bdata-composition-src\s*=\s*["']([^"']+)["']/i;
30
121
  function collectSubCompositionSrcs(html) {
31
- const scannable = maskNonScannableRanges(html);
32
122
  const srcs = [];
33
123
  const seen = /* @__PURE__ */ new Set();
34
- let cursor = 0;
35
- while (cursor < scannable.length) {
36
- const open = scannable.indexOf("<", cursor);
37
- if (open === -1) break;
38
- const close = scannable.indexOf(">", open + 1);
39
- if (close === -1) break;
40
- cursor = close + 1;
41
- const match = COMPOSITION_SRC_ATTR.exec(scannable.slice(open, cursor));
42
- if (!match) continue;
43
- const src = (match[1] ?? "").trim();
124
+ for (const tag of scanHtmlOpeningTags(html)) {
125
+ if (!tag.closed) continue;
126
+ const attribute = tag.attributes.find((attr) => attr.name === "data-composition-src");
127
+ if (attribute?.kind !== "value") continue;
128
+ const src = decodeAuthoredAttribute(attribute.value).trim();
44
129
  if (!src || seen.has(src)) continue;
45
130
  if (isUnresolvedAssetPlaceholder(src)) continue;
46
131
  if (isRemoteOrInlineUrl(src)) continue;