framefields 2.13.1 → 2.15.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 (339) hide show
  1. package/NOTICE.md +5 -1
  2. package/dist/audio/index.d.mts +5 -5
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DIvi6hTD.mjs → audio-6TfPlfl4.mjs} +3 -3
  5. package/dist/{audio-DIvi6hTD.mjs.map → audio-6TfPlfl4.mjs.map} +1 -1
  6. package/dist/{audio-C4B9p_yq.d.mts → audio-7oqTUi4G.d.mts} +3 -3
  7. package/dist/{audio-C4B9p_yq.d.mts.map → audio-7oqTUi4G.d.mts.map} +1 -1
  8. package/dist/cli/check-worker.mjs +44 -44
  9. package/dist/cli.mjs +1 -1
  10. package/dist/cloud/index.d.mts.map +1 -1
  11. package/dist/cloud/index.mjs +1 -1
  12. package/dist/{cloud-Cj1TIme8.mjs → cloud-jnk1hPYf.mjs} +2 -2
  13. package/dist/{cloud-Cj1TIme8.mjs.map → cloud-jnk1hPYf.mjs.map} +1 -1
  14. package/dist/components/index.d.mts +13 -13
  15. package/dist/components/index.mjs +43 -43
  16. package/dist/{dist-Kbf-JTry.mjs → dist-BtI6ukB5.mjs} +2 -2
  17. package/dist/{dist-Kbf-JTry.mjs.map → dist-BtI6ukB5.mjs.map} +1 -1
  18. package/dist/{dist-CCrYOkcc.mjs → dist-COOpgG9G.mjs} +4 -3
  19. package/dist/{dist-CCrYOkcc.mjs.map → dist-COOpgG9G.mjs.map} +1 -1
  20. package/dist/{dist-DtPPPsZV.mjs → dist-XqlFM2a8.mjs} +14063 -5308
  21. package/dist/dist-XqlFM2a8.mjs.map +1 -0
  22. package/dist/{dist-CiTgmfUw.mjs → dist-f1zkl69f.mjs} +4 -4
  23. package/dist/dist-f1zkl69f.mjs.map +1 -0
  24. package/dist/{dist-B_rSWeOz.mjs → dist-umQOWz0a.mjs} +1 -1
  25. package/dist/effects/index.d.mts +5 -5
  26. package/dist/effects/index.mjs +35 -35
  27. package/dist/{effects-B-L3rLs6.mjs → effects-DlRMovU5.mjs} +2 -2
  28. package/dist/{effects-B-L3rLs6.mjs.map → effects-DlRMovU5.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +2 -2
  31. package/dist/{fonts-k5ll8NTE.mjs → fonts-BWYcXjyK.mjs} +3 -3
  32. package/dist/fonts-BWYcXjyK.mjs.map +1 -0
  33. package/dist/{gpu-D2HT3KcE.mjs → gpu-CH1PdM4T.mjs} +2 -2
  34. package/dist/{gpu-D2HT3KcE.mjs.map → gpu-CH1PdM4T.mjs.map} +1 -1
  35. package/dist/{index-rtCXNxGO.d.mts → index-BHTycml5.d.mts} +2 -2
  36. package/dist/{index-rtCXNxGO.d.mts.map → index-BHTycml5.d.mts.map} +1 -1
  37. package/dist/{index-BFTtXosj.d.mts → index-BVd6nXd5.d.mts} +2 -2
  38. package/dist/{index-BFTtXosj.d.mts.map → index-BVd6nXd5.d.mts.map} +1 -1
  39. package/dist/{index-ByhlTwxh.d.mts → index-BcxxxwhV.d.mts} +5 -5
  40. package/dist/{index-ByhlTwxh.d.mts.map → index-BcxxxwhV.d.mts.map} +1 -1
  41. package/dist/{index-CnZhBlob.d.mts → index-BnB_Ou2y.d.mts} +2 -2
  42. package/dist/index-BnB_Ou2y.d.mts.map +1 -0
  43. package/dist/{index-a6JrbAK0.d.mts → index-C-V6CAhP.d.mts} +32 -2
  44. package/dist/index-C-V6CAhP.d.mts.map +1 -0
  45. package/dist/{index-DBh3WphX.d.mts → index-CMhkkc56.d.mts} +44 -12
  46. package/dist/index-CMhkkc56.d.mts.map +1 -0
  47. package/dist/{index-BGlaws7-.d.mts → index-CYVpYGM-.d.mts} +3 -3
  48. package/dist/{index-BGlaws7-.d.mts.map → index-CYVpYGM-.d.mts.map} +1 -1
  49. package/dist/{index-DQ1U3HC3.d.mts → index-DhL7ckvs.d.mts} +7 -7
  50. package/dist/index-DhL7ckvs.d.mts.map +1 -0
  51. package/dist/{index-CtKUQ2VG.d.mts → index-DkAjKnhW.d.mts} +1487 -533
  52. package/dist/index-DkAjKnhW.d.mts.map +1 -0
  53. package/dist/{index-B08eSpaI.d.mts → index-RILu3ULT.d.mts} +2 -2
  54. package/dist/{index-B08eSpaI.d.mts.map → index-RILu3ULT.d.mts.map} +1 -1
  55. package/dist/{index-C5sgRLlG.d.mts → index-TCtdSXd7.d.mts} +3 -1
  56. package/dist/index-TCtdSXd7.d.mts.map +1 -0
  57. package/dist/{index-C2yaponf.d.mts → index-s2qQ8ifZ.d.mts} +911 -57
  58. package/dist/index-s2qQ8ifZ.d.mts.map +1 -0
  59. package/dist/index.d.mts +15 -15
  60. package/dist/index.mjs +52 -52
  61. package/dist/preview/index.d.mts +5 -5
  62. package/dist/preview/index.mjs +10 -10
  63. package/dist/preview-BeGF1Bb1.mjs +1002 -0
  64. package/dist/preview-BeGF1Bb1.mjs.map +1 -0
  65. package/dist/preview-engine/audio.mjs +1 -1
  66. package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-4F3DG6YB.mjs} +2 -2
  67. package/dist/preview-engine/chunk-A2OTOW3B.mjs +4694 -0
  68. package/dist/preview-engine/chunk-BR56TQBP.mjs +5 -0
  69. package/dist/preview-engine/{chunk-ADLIF544.mjs → chunk-H2XKXXAU.mjs} +1 -1
  70. package/dist/preview-engine/chunk-NDUODAY2.mjs +3 -0
  71. package/dist/preview-engine/{chunk-FZ4RD7HV.mjs → chunk-QAQJSWUT.mjs} +1 -1
  72. package/dist/preview-engine/chunk-SWRGQTVC.mjs +138 -0
  73. package/dist/preview-engine/{chunk-52X7SURQ.mjs → chunk-TEA3GVBJ.mjs} +1 -1
  74. package/dist/preview-engine/chunk-VM2ZBPLM.mjs +644 -0
  75. package/dist/preview-engine/{chunk-UBY2UYEL.mjs → chunk-XSHNQJ7L.mjs} +1 -1
  76. package/dist/preview-engine/components.mjs +1 -1
  77. package/dist/preview-engine/effects.mjs +1 -1
  78. package/dist/preview-engine/fonts.mjs +1 -1
  79. package/dist/preview-engine/framefields.mjs +1 -1
  80. package/dist/preview-engine/player.mjs +2 -2
  81. package/dist/preview-engine/{renderers-DU7KPFVV.mjs → renderers-6C7NWWDX.mjs} +1 -1
  82. package/dist/preview-engine/renderers-HHVGNMSJ.mjs +206 -0
  83. package/dist/preview-engine/{src-YXNX4MLK.mjs → src-RCNEKIRP.mjs} +1 -1
  84. package/dist/preview-page/index.html +19 -0
  85. package/dist/preview-page/main.css +1 -0
  86. package/dist/preview-page/main.js +327 -0
  87. package/dist/{program-BfiB9ttP.mjs → program-CMigyfso.mjs} +919 -58
  88. package/dist/program-CMigyfso.mjs.map +1 -0
  89. package/dist/renderer/index.d.mts +4 -4
  90. package/dist/renderer/index.mjs +2 -2
  91. package/dist/{renderer-CoC64eam.mjs → renderer-0GMEL_Zi.mjs} +3 -3
  92. package/dist/{renderer-CoC64eam.mjs.map → renderer-0GMEL_Zi.mjs.map} +1 -1
  93. package/dist/{renderer-CSu_vYPn.mjs → renderer-3Wv2ZBJG.mjs} +3 -3
  94. package/dist/{renderer-CSu_vYPn.mjs.map → renderer-3Wv2ZBJG.mjs.map} +1 -1
  95. package/dist/{renderer-Dv_iRIyx.mjs → renderer-4nXkaAWu.mjs} +1280 -285
  96. package/dist/renderer-4nXkaAWu.mjs.map +1 -0
  97. package/dist/{renderer-TfeohPxt.mjs → renderer-6SnfLXeg.mjs} +3 -3
  98. package/dist/{renderer-TfeohPxt.mjs.map → renderer-6SnfLXeg.mjs.map} +1 -1
  99. package/dist/{renderer-D0xM67cK.mjs → renderer-8gHw3O0P.mjs} +2 -2
  100. package/dist/{renderer-D0xM67cK.mjs.map → renderer-8gHw3O0P.mjs.map} +1 -1
  101. package/dist/{renderer-C64_B8It.mjs → renderer-AOBglZHC.mjs} +2 -2
  102. package/dist/{renderer-B10HDC13.mjs → renderer-B0bSARK3.mjs} +3 -3
  103. package/dist/{renderer-B10HDC13.mjs.map → renderer-B0bSARK3.mjs.map} +1 -1
  104. package/dist/{renderer-DWYmJSrl.mjs → renderer-B2_tuRfl.mjs} +2 -2
  105. package/dist/{renderer-DWYmJSrl.mjs.map → renderer-B2_tuRfl.mjs.map} +1 -1
  106. package/dist/{renderer-mDBoz0zT.mjs → renderer-B82FhkEr.mjs} +3 -3
  107. package/dist/{renderer-mDBoz0zT.mjs.map → renderer-B82FhkEr.mjs.map} +1 -1
  108. package/dist/{renderer-DYeNNc_G.mjs → renderer-B9lzA0PY.mjs} +3 -3
  109. package/dist/{renderer-DYeNNc_G.mjs.map → renderer-B9lzA0PY.mjs.map} +1 -1
  110. package/dist/{renderer-BGchUBW_.mjs → renderer-BBSIWSry.mjs} +2 -2
  111. package/dist/{renderer-BGchUBW_.mjs.map → renderer-BBSIWSry.mjs.map} +1 -1
  112. package/dist/{renderer-GIlQ9lZq.mjs → renderer-BEKDMxbi.mjs} +2 -2
  113. package/dist/{renderer-GIlQ9lZq.mjs.map → renderer-BEKDMxbi.mjs.map} +1 -1
  114. package/dist/renderer-BERGAxqA.mjs +5 -0
  115. package/dist/{renderer-Bw0O--gW.mjs → renderer-BF960HY8.mjs} +3 -3
  116. package/dist/{renderer-Bw0O--gW.mjs.map → renderer-BF960HY8.mjs.map} +1 -1
  117. package/dist/{renderer-BhcTYhaP.mjs → renderer-BFwyVxCu.mjs} +3 -3
  118. package/dist/{renderer-BhcTYhaP.mjs.map → renderer-BFwyVxCu.mjs.map} +1 -1
  119. package/dist/{renderer-DYlx7VHo.mjs → renderer-BNiwcI3-.mjs} +2 -2
  120. package/dist/{renderer-DYlx7VHo.mjs.map → renderer-BNiwcI3-.mjs.map} +1 -1
  121. package/dist/{renderer-B3_GddgJ.mjs → renderer-BPbVb2Q4.mjs} +2 -2
  122. package/dist/{renderer-B3_GddgJ.mjs.map → renderer-BPbVb2Q4.mjs.map} +1 -1
  123. package/dist/renderer-BQ_YkBMt.mjs +6 -0
  124. package/dist/{renderer-Y1kjtOto.mjs → renderer-BUWxlA8T.mjs} +3 -3
  125. package/dist/{renderer-Y1kjtOto.mjs.map → renderer-BUWxlA8T.mjs.map} +1 -1
  126. package/dist/renderer-BW0Tjsv9.mjs +5 -0
  127. package/dist/{renderer-DtFZbE1j.mjs → renderer-BX8liu-e.mjs} +2 -2
  128. package/dist/{renderer-BOlHW3Mi.mjs → renderer-BXIwDAr_.mjs} +2 -2
  129. package/dist/{renderer-BOlHW3Mi.mjs.map → renderer-BXIwDAr_.mjs.map} +1 -1
  130. package/dist/{renderer-DzON3wDZ.mjs → renderer-B_Hy1W-g.mjs} +3 -3
  131. package/dist/{renderer-DzON3wDZ.mjs.map → renderer-B_Hy1W-g.mjs.map} +1 -1
  132. package/dist/{renderer-BM19iK8v.mjs → renderer-Bb6cvSgh.mjs} +2 -2
  133. package/dist/{renderer-BM19iK8v.mjs.map → renderer-Bb6cvSgh.mjs.map} +1 -1
  134. package/dist/{renderer-D0h1hTOo.mjs → renderer-BdppwWC9.mjs} +2 -2
  135. package/dist/{renderer-D0h1hTOo.mjs.map → renderer-BdppwWC9.mjs.map} +1 -1
  136. package/dist/{renderer-BTwuM9u-.mjs → renderer-Bhc24HVe.mjs} +3 -3
  137. package/dist/{renderer-BTwuM9u-.mjs.map → renderer-Bhc24HVe.mjs.map} +1 -1
  138. package/dist/{renderer-BZX932Lj.mjs → renderer-BiNA2wF0.mjs} +2 -2
  139. package/dist/{renderer-BZX932Lj.mjs.map → renderer-BiNA2wF0.mjs.map} +1 -1
  140. package/dist/{renderer-CkTehyRX.mjs → renderer-BmoBgTp5.mjs} +3 -3
  141. package/dist/{renderer-CkTehyRX.mjs.map → renderer-BmoBgTp5.mjs.map} +1 -1
  142. package/dist/{renderer-B3un4Pdi.mjs → renderer-BmqFmCWS.mjs} +3 -3
  143. package/dist/{renderer-B3un4Pdi.mjs.map → renderer-BmqFmCWS.mjs.map} +1 -1
  144. package/dist/{renderer-CHCRcCKw.mjs → renderer-BnVwAObV.mjs} +2 -2
  145. package/dist/{renderer-CHCRcCKw.mjs.map → renderer-BnVwAObV.mjs.map} +1 -1
  146. package/dist/{renderer-Cv9CKKWG.mjs → renderer-BxttZHme.mjs} +2 -2
  147. package/dist/{renderer-Cv9CKKWG.mjs.map → renderer-BxttZHme.mjs.map} +1 -1
  148. package/dist/renderer-BzyPdUD1.mjs +5 -0
  149. package/dist/renderer-C0hM-mtY.mjs +5 -0
  150. package/dist/renderer-C6cyUTvk.mjs +5 -0
  151. package/dist/{renderer-B6bK9rXm.mjs → renderer-C8E4XsSg.mjs} +2 -2
  152. package/dist/{renderer-B6bK9rXm.mjs.map → renderer-C8E4XsSg.mjs.map} +1 -1
  153. package/dist/renderer-C8zY3pzk.mjs +5 -0
  154. package/dist/{renderer-4nsuReW2.mjs → renderer-C9U-LY50.mjs} +3 -3
  155. package/dist/{renderer-4nsuReW2.mjs.map → renderer-C9U-LY50.mjs.map} +1 -1
  156. package/dist/{renderer-BvBqTAtk.mjs → renderer-CB2JVu5x.mjs} +3 -3
  157. package/dist/{renderer-BvBqTAtk.mjs.map → renderer-CB2JVu5x.mjs.map} +1 -1
  158. package/dist/{renderer-CQ4h8n7p.mjs → renderer-CC4YBJ8Z.mjs} +3 -3
  159. package/dist/{renderer-CQ4h8n7p.mjs.map → renderer-CC4YBJ8Z.mjs.map} +1 -1
  160. package/dist/renderer-CEkSOyKu.mjs +5 -0
  161. package/dist/{renderer-zLi2qFGT.mjs → renderer-CIycc5O-.mjs} +2 -2
  162. package/dist/{renderer-zLi2qFGT.mjs.map → renderer-CIycc5O-.mjs.map} +1 -1
  163. package/dist/renderer-CJYtfa4x.mjs +5 -0
  164. package/dist/{renderer-yNWYqvvq.mjs → renderer-CJraQlV-.mjs} +2 -2
  165. package/dist/{renderer-yNWYqvvq.mjs.map → renderer-CJraQlV-.mjs.map} +1 -1
  166. package/dist/renderer-CKMtHGZh.mjs +5 -0
  167. package/dist/renderer-CLzicoiy.mjs +5 -0
  168. package/dist/renderer-CM2A4BHd.mjs +5 -0
  169. package/dist/{renderer-BrEeUw7T.mjs → renderer-COWGWtob.mjs} +2 -2
  170. package/dist/{renderer-BrEeUw7T.mjs.map → renderer-COWGWtob.mjs.map} +1 -1
  171. package/dist/{renderer-uER8kn7f.mjs → renderer-COxG2XGf.mjs} +2 -2
  172. package/dist/{renderer-uER8kn7f.mjs.map → renderer-COxG2XGf.mjs.map} +1 -1
  173. package/dist/{renderer-C4hd6Cqi.mjs → renderer-CQDCIsQm.mjs} +2 -2
  174. package/dist/{renderer-C4hd6Cqi.mjs.map → renderer-CQDCIsQm.mjs.map} +1 -1
  175. package/dist/{renderer-Cfx_FCSf.mjs → renderer-CRUeag8i.mjs} +3 -3
  176. package/dist/{renderer-Cfx_FCSf.mjs.map → renderer-CRUeag8i.mjs.map} +1 -1
  177. package/dist/{renderer-CXrnzihz.mjs → renderer-CWVput06.mjs} +3 -3
  178. package/dist/{renderer-CXrnzihz.mjs.map → renderer-CWVput06.mjs.map} +1 -1
  179. package/dist/renderer-CZlHjcxr.mjs +5 -0
  180. package/dist/{renderer-BmyFfvVA.mjs → renderer-CbbnBLOB.mjs} +3 -3
  181. package/dist/{renderer-BmyFfvVA.mjs.map → renderer-CbbnBLOB.mjs.map} +1 -1
  182. package/dist/renderer-CbimvSU8.mjs +5 -0
  183. package/dist/renderer-Ccvc63yd.mjs +5 -0
  184. package/dist/renderer-Cdp-SGfq.mjs +5 -0
  185. package/dist/renderer-CeTcSs3e.mjs +5 -0
  186. package/dist/{renderer-_J9JcCMR.mjs → renderer-CfLZein2.mjs} +3 -3
  187. package/dist/{renderer-_J9JcCMR.mjs.map → renderer-CfLZein2.mjs.map} +1 -1
  188. package/dist/{renderer-D-mX1EVA.mjs → renderer-Ch-q1O-q.mjs} +3 -3
  189. package/dist/{renderer-D-mX1EVA.mjs.map → renderer-Ch-q1O-q.mjs.map} +1 -1
  190. package/dist/{renderer-uzU6dsdR.mjs → renderer-Ch5JvJWl.mjs} +2 -2
  191. package/dist/{renderer-uzU6dsdR.mjs.map → renderer-Ch5JvJWl.mjs.map} +1 -1
  192. package/dist/{renderer-BZMh2io2.mjs → renderer-ChtEzq-R.mjs} +2 -2
  193. package/dist/{renderer-BZMh2io2.mjs.map → renderer-ChtEzq-R.mjs.map} +1 -1
  194. package/dist/{renderer-B2IUPjhw.mjs → renderer-Cj9nTC5l.mjs} +3 -3
  195. package/dist/{renderer-B2IUPjhw.mjs.map → renderer-Cj9nTC5l.mjs.map} +1 -1
  196. package/dist/{renderer-CdXBRdFf.mjs → renderer-CqT8HsSS.mjs} +2 -2
  197. package/dist/{renderer-CdXBRdFf.mjs.map → renderer-CqT8HsSS.mjs.map} +1 -1
  198. package/dist/{renderer-CldjJmRR.mjs → renderer-CuQjMhdV.mjs} +2 -2
  199. package/dist/renderer-CvNuu52U.mjs +5 -0
  200. package/dist/renderer-CwciC0oI.mjs +5 -0
  201. package/dist/renderer-CysLUbIr.mjs +5 -0
  202. package/dist/{renderer-BsrKj6Td.mjs → renderer-Cz30EVws.mjs} +2 -2
  203. package/dist/{renderer-BsrKj6Td.mjs.map → renderer-Cz30EVws.mjs.map} +1 -1
  204. package/dist/renderer-D3A22Vxb.mjs +5 -0
  205. package/dist/renderer-D5SY9EmA.mjs +5 -0
  206. package/dist/renderer-D8h3ZvaE.mjs +5 -0
  207. package/dist/renderer-DE-B6N9n.mjs +5 -0
  208. package/dist/renderer-DETZTI7t.mjs +5 -0
  209. package/dist/{renderer-CC22Djgi.mjs → renderer-DHoX-5U_.mjs} +3 -3
  210. package/dist/{renderer-CC22Djgi.mjs.map → renderer-DHoX-5U_.mjs.map} +1 -1
  211. package/dist/{renderer-HKv5cBdp.mjs → renderer-DOkm0Ycd.mjs} +2 -2
  212. package/dist/{renderer-HKv5cBdp.mjs.map → renderer-DOkm0Ycd.mjs.map} +1 -1
  213. package/dist/{renderer-fG8Jy8Rx.d.mts → renderer-DU3f6ZrS.d.mts} +2 -2
  214. package/dist/{renderer-fG8Jy8Rx.d.mts.map → renderer-DU3f6ZrS.d.mts.map} +1 -1
  215. package/dist/{renderer-C98XwEIr.mjs → renderer-DUzv-shq.mjs} +2 -2
  216. package/dist/{renderer-C98XwEIr.mjs.map → renderer-DUzv-shq.mjs.map} +1 -1
  217. package/dist/renderer-DWnDj0IM.mjs +5 -0
  218. package/dist/renderer-DcGUIbQF.mjs +5 -0
  219. package/dist/renderer-Dfq6FoNO.mjs +5 -0
  220. package/dist/renderer-DhasXW6S.mjs +3 -0
  221. package/dist/{renderer-BEuXJY-C.mjs → renderer-DhnOWnEA.mjs} +3 -3
  222. package/dist/{renderer-BEuXJY-C.mjs.map → renderer-DhnOWnEA.mjs.map} +1 -1
  223. package/dist/{renderer-BIKkxw_Z.mjs → renderer-Dhy1XHzz.mjs} +3 -3
  224. package/dist/{renderer-BIKkxw_Z.mjs.map → renderer-Dhy1XHzz.mjs.map} +1 -1
  225. package/dist/renderer-DjCvpsV_.mjs +5 -0
  226. package/dist/{renderer-pn52dzZz.mjs → renderer-DjJshz9Y.mjs} +2 -2
  227. package/dist/{renderer-pn52dzZz.mjs.map → renderer-DjJshz9Y.mjs.map} +1 -1
  228. package/dist/{renderer-DhGZ41hQ.mjs → renderer-DmTUIdus.mjs} +3 -3
  229. package/dist/{renderer-DhGZ41hQ.mjs.map → renderer-DmTUIdus.mjs.map} +1 -1
  230. package/dist/{renderer-D_m6Qbsi.mjs → renderer-Dq7AioJa.mjs} +2 -2
  231. package/dist/{renderer-D_m6Qbsi.mjs.map → renderer-Dq7AioJa.mjs.map} +1 -1
  232. package/dist/renderer-DrAaM6JD.mjs +5 -0
  233. package/dist/{renderer-D-GWBoVT.mjs → renderer-Dt4sqNEu.mjs} +2 -2
  234. package/dist/{renderer-D-GWBoVT.mjs.map → renderer-Dt4sqNEu.mjs.map} +1 -1
  235. package/dist/{renderer-DCrKEVjb.mjs → renderer-Dtcs4idV.mjs} +3 -3
  236. package/dist/{renderer-DCrKEVjb.mjs.map → renderer-Dtcs4idV.mjs.map} +1 -1
  237. package/dist/renderer-Dxlv8LYm.mjs +5 -0
  238. package/dist/{renderer-CO9vE3sd.mjs → renderer-Gj8SrE2W.mjs} +2 -2
  239. package/dist/{renderer-CO9vE3sd.mjs.map → renderer-Gj8SrE2W.mjs.map} +1 -1
  240. package/dist/{renderer-DvHi_wXE.mjs → renderer-KfnXDJS0.mjs} +3 -3
  241. package/dist/{renderer-DvHi_wXE.mjs.map → renderer-KfnXDJS0.mjs.map} +1 -1
  242. package/dist/{renderer-7xQmXXMH.mjs → renderer-MXVlg4p5.mjs} +3 -3
  243. package/dist/{renderer-7xQmXXMH.mjs.map → renderer-MXVlg4p5.mjs.map} +1 -1
  244. package/dist/{renderer-YONlI6W-.mjs → renderer-N2b6QZ1E.mjs} +3 -3
  245. package/dist/{renderer-YONlI6W-.mjs.map → renderer-N2b6QZ1E.mjs.map} +1 -1
  246. package/dist/renderer-Pb43OO2t.mjs +5 -0
  247. package/dist/{renderer-DNynPM6X.mjs → renderer-Q7gDzm8c.mjs} +2 -2
  248. package/dist/{renderer-DNynPM6X.mjs.map → renderer-Q7gDzm8c.mjs.map} +1 -1
  249. package/dist/{renderer-BEhZiOT4.mjs → renderer-RCiANtRV.mjs} +2 -2
  250. package/dist/{renderer-BEhZiOT4.mjs.map → renderer-RCiANtRV.mjs.map} +1 -1
  251. package/dist/{renderer-Dm57W73p.mjs → renderer-Sig9nZcI.mjs} +2 -2
  252. package/dist/renderer-VQbm-cGr.mjs +5 -0
  253. package/dist/{renderer-DiZkZ0Pr.mjs → renderer-fabBgwQX.mjs} +3 -3
  254. package/dist/{renderer-DiZkZ0Pr.mjs.map → renderer-fabBgwQX.mjs.map} +1 -1
  255. package/dist/{renderer-Bw-_GZVw.mjs → renderer-g-0PCNoo.mjs} +3 -3
  256. package/dist/{renderer-Bw-_GZVw.mjs.map → renderer-g-0PCNoo.mjs.map} +1 -1
  257. package/dist/{renderer-QbSrnPZU.mjs → renderer-gmHKIbKI.mjs} +3 -3
  258. package/dist/{renderer-QbSrnPZU.mjs.map → renderer-gmHKIbKI.mjs.map} +1 -1
  259. package/dist/{renderer-CU6WT5jW.mjs → renderer-kVZwiRoK.mjs} +3 -3
  260. package/dist/{renderer-CU6WT5jW.mjs.map → renderer-kVZwiRoK.mjs.map} +1 -1
  261. package/dist/renderer-oPMypDM1.mjs +5 -0
  262. package/dist/{renderer-CRhEGqW4.mjs → renderer-p7tgxP-A.mjs} +3 -3
  263. package/dist/{renderer-CRhEGqW4.mjs.map → renderer-p7tgxP-A.mjs.map} +1 -1
  264. package/dist/{renderer-CO4NGvAh.mjs → renderer-tvYj306A.mjs} +81 -78
  265. package/dist/renderer-tvYj306A.mjs.map +1 -0
  266. package/dist/renderer-xvWGpVyp.mjs +5 -0
  267. package/dist/renderer-zafZbD6Q.mjs +5 -0
  268. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs → renderers-CP8CFWDs-DLjtjrwx.mjs} +2 -2
  269. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs.map → renderers-CP8CFWDs-DLjtjrwx.mjs.map} +1 -1
  270. package/dist/sam/index.d.mts +3 -3
  271. package/dist/sam/index.mjs +1 -1
  272. package/dist/signals/index.d.mts +5 -5
  273. package/dist/signals/index.mjs +4 -4
  274. package/dist/{src-BU6vm9sP-DdTHmCr4.mjs → src-B23p_eh7-Cj6-lvV6.mjs} +293 -6
  275. package/dist/src-B23p_eh7-Cj6-lvV6.mjs.map +1 -0
  276. package/dist/{src-DrP7fGJX.mjs → src-CoHAjviq.mjs} +1355 -178
  277. package/dist/src-CoHAjviq.mjs.map +1 -0
  278. package/dist/storage/index.mjs +1 -1
  279. package/package.json +63 -60
  280. package/dist/dist-CiTgmfUw.mjs.map +0 -1
  281. package/dist/dist-DtPPPsZV.mjs.map +0 -1
  282. package/dist/fonts-k5ll8NTE.mjs.map +0 -1
  283. package/dist/index-C2yaponf.d.mts.map +0 -1
  284. package/dist/index-C5sgRLlG.d.mts.map +0 -1
  285. package/dist/index-CnZhBlob.d.mts.map +0 -1
  286. package/dist/index-CtKUQ2VG.d.mts.map +0 -1
  287. package/dist/index-DBh3WphX.d.mts.map +0 -1
  288. package/dist/index-DQ1U3HC3.d.mts.map +0 -1
  289. package/dist/index-a6JrbAK0.d.mts.map +0 -1
  290. package/dist/preview-engine/chunk-5ZS46EFB.mjs +0 -5
  291. package/dist/preview-engine/chunk-N3XTDAL6.mjs +0 -2227
  292. package/dist/preview-engine/chunk-NCQHOGZK.mjs +0 -3
  293. package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
  294. package/dist/preview-engine/chunk-XCPRRMMW.mjs +0 -2462
  295. package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +0 -228
  296. package/dist/preview-lHH8Tv4j.mjs +0 -2446
  297. package/dist/preview-lHH8Tv4j.mjs.map +0 -1
  298. package/dist/program-BfiB9ttP.mjs.map +0 -1
  299. package/dist/renderer-0rLmztAv.mjs +0 -5
  300. package/dist/renderer-B0pjOXFY.mjs +0 -5
  301. package/dist/renderer-B7J13reL.mjs +0 -5
  302. package/dist/renderer-BPGIKGgl.mjs +0 -5
  303. package/dist/renderer-Bv-Artj1.mjs +0 -5
  304. package/dist/renderer-BvLjbhcL.mjs +0 -5
  305. package/dist/renderer-By6awWaf.mjs +0 -5
  306. package/dist/renderer-C0rvsz7m.mjs +0 -5
  307. package/dist/renderer-CDgud_HB.mjs +0 -5
  308. package/dist/renderer-CDiRF3bG.mjs +0 -6
  309. package/dist/renderer-CIIEQd4B.mjs +0 -5
  310. package/dist/renderer-CJblwOA9.mjs +0 -5
  311. package/dist/renderer-CNMOXtXE.mjs +0 -5
  312. package/dist/renderer-CO4NGvAh.mjs.map +0 -1
  313. package/dist/renderer-COeSeNGg.mjs +0 -5
  314. package/dist/renderer-CUfElmtZ.mjs +0 -5
  315. package/dist/renderer-CYh2lFoJ.mjs +0 -5
  316. package/dist/renderer-CYtVZYMH.mjs +0 -5
  317. package/dist/renderer-CjxZlkjb.mjs +0 -5
  318. package/dist/renderer-Cpd6TvTC.mjs +0 -5
  319. package/dist/renderer-D3ziOPhX.mjs +0 -5
  320. package/dist/renderer-D5yp74NL.mjs +0 -3
  321. package/dist/renderer-DL-phtL5.mjs +0 -5
  322. package/dist/renderer-DSnmYnHg.mjs +0 -5
  323. package/dist/renderer-DUGfsT-E.mjs +0 -5
  324. package/dist/renderer-DW5af9x1.mjs +0 -5
  325. package/dist/renderer-DYMrol1t.mjs +0 -5
  326. package/dist/renderer-DekeUHaz.mjs +0 -5
  327. package/dist/renderer-Dt5uyJdZ.mjs +0 -5
  328. package/dist/renderer-Dv_iRIyx.mjs.map +0 -1
  329. package/dist/renderer-DwLQAnaK.mjs +0 -5
  330. package/dist/renderer-IXQP2CWM.mjs +0 -5
  331. package/dist/renderer-K-Pkw63O.mjs +0 -5
  332. package/dist/renderer-MPw2KH9P.mjs +0 -5
  333. package/dist/renderer-RPu8RMav.mjs +0 -5
  334. package/dist/renderer-dCqxd5N2.mjs +0 -5
  335. package/dist/renderer-lhjmE-Fp.mjs +0 -5
  336. package/dist/renderer-u9cmBuvM.mjs +0 -5
  337. package/dist/renderer-vH12jcpz.mjs +0 -5
  338. package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +0 -1
  339. package/dist/src-DrP7fGJX.mjs.map +0 -1
@@ -1,3 +1,3 @@
1
- import { S as redactQuery, _ as parseStorage, a as SHA256, b as readProjectManifest, c as credentialEnvNames, d as findProjectDir, f as hashFile, g as parseAssets, h as openAssetLocator, i as REMOTE_NAME, l as credentialsFromEnv, m as objectKey, n as Bucket, o as StorageError, p as isAssetPath, r as ManifestError, s as contentType, t as AssetError, u as downloadVerified, v as pickRemote, x as readUrl, y as publicUrl } from "../dist-CiTgmfUw.mjs";
1
+ import { S as redactQuery, _ as parseStorage, a as SHA256, b as readProjectManifest, c as credentialEnvNames, d as findProjectDir, f as hashFile, g as parseAssets, h as openAssetLocator, i as REMOTE_NAME, l as credentialsFromEnv, m as objectKey, n as Bucket, o as StorageError, p as isAssetPath, r as ManifestError, s as contentType, t as AssetError, u as downloadVerified, v as pickRemote, x as readUrl, y as publicUrl } from "../dist-f1zkl69f.mjs";
2
2
 
3
3
  export { AssetError, Bucket, ManifestError, REMOTE_NAME, SHA256, StorageError, contentType, credentialEnvNames, credentialsFromEnv, downloadVerified, findProjectDir, hashFile, isAssetPath, objectKey, openAssetLocator, parseAssets, parseStorage, pickRemote, publicUrl, readProjectManifest, readUrl, redactQuery };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "framefields",
3
- "version": "2.13.1",
3
+ "version": "2.15.0",
4
4
  "private": false,
5
5
  "description": "High-performance WebGPU rendering SDK for video composition, Photoshop-grade 2D VFX, audio DSP, and reactive signals. Built for AI Agents.",
6
6
  "license": "Apache-2.0",
@@ -142,68 +142,71 @@
142
142
  "@types/d3-shape": "^3.2.0",
143
143
  "@types/fontkit": "^2.0.9",
144
144
  "@types/node": "^24.1.0",
145
+ "jsdom": "^29.1.0",
146
+ "lit": "^3.3.3",
145
147
  "tsdown": "^0.19.0",
146
148
  "typescript": "^5.8.3",
147
149
  "vitest": "4.1.5",
148
- "@framefields/ai": "2.13.1",
149
- "@framefields/components": "2.13.1",
150
- "@framefields/client-utils": "2.13.1",
151
- "@framefields/core": "2.13.1",
152
- "@framefields/compositions": "2.13.1",
153
- "@framefields/node-audio-compressor": "2.13.1",
154
- "@framefields/node-audio-delay": "2.13.1",
155
- "@framefields/node-audio-fade": "2.13.1",
156
- "@framefields/node-audio-reverb": "2.13.1",
157
- "@framefields/node-audio-signal-extractor": "2.13.1",
158
- "@framefields/node-blur": "2.13.1",
159
- "@framefields/node-colorkey": "2.13.1",
160
- "@framefields/node-color-balance": "2.13.1",
161
- "@framefields/node-corner-pin": "2.13.1",
162
- "@framefields/node-crop": "2.13.1",
163
- "@framefields/node-audio-parametric-eq": "2.13.1",
164
- "@framefields/node-curves": "2.13.1",
165
- "@framefields/node-deflicker": "2.13.1",
166
- "@framefields/node-displacement-map": "2.13.1",
167
- "@framefields/node-flip": "2.13.1",
168
- "@framefields/node-gradient-map": "2.13.1",
169
- "@framefields/node-halftone-screen": "2.13.1",
170
- "@framefields/node-film-grain": "2.13.1",
171
- "@framefields/node-kenburns": "2.13.1",
172
- "@framefields/node-levels": "2.13.1",
173
- "@framefields/node-layer-style": "2.13.1",
174
- "@framefields/node-liquify": "2.13.1",
175
- "@framefields/node-mask-math": "2.13.1",
176
- "@framefields/node-mesh-warp": "2.13.1",
177
- "@framefields/node-lut": "2.13.1",
178
- "@framefields/node-paint": "2.13.1",
179
- "@framefields/node-high-pass": "2.13.1",
180
- "@framefields/node-audio-noise-gate": "2.13.1",
181
- "@framefields/node-particles": "2.13.1",
182
- "@framefields/node-patch-heal": "2.13.1",
183
- "@framefields/node-refine-edge": "2.13.1",
184
- "@framefields/node-relight-3d": "2.13.1",
185
- "@framefields/node-refraction-caustics": "2.13.1",
186
- "@framefields/node-sdk": "2.13.1",
187
- "@framefields/node-shadows-highlights": "2.13.1",
188
- "@framefields/node-signal": "2.13.1",
189
- "@framefields/node-signal-gate": "2.13.1",
190
- "@framefields/node-signal-math": "2.13.1",
191
- "@framefields/node-stereo-panning": "2.13.1",
192
- "@framefields/node-tile-offset": "2.13.1",
193
- "@framefields/node-unsharp-mask": "2.13.1",
194
- "@framefields/node-selective-color": "2.13.1",
195
- "@framefields/node-vignette": "2.13.1",
196
- "@framefields/node-vision": "2.13.1",
197
- "@framefields/renderer": "2.13.1",
198
- "@framefields/node-rotate": "2.13.1",
199
- "@framefields/renderers": "2.13.1",
200
- "@framefields/tensor-webgpu": "2.13.1",
201
- "@framefields/vision": "2.13.1",
202
- "@framefields/tsconfig": "2.13.1",
203
- "@framefields/vision-sam": "2.13.1",
204
- "@framefields/webgpu-renderers": "2.13.1",
205
- "@framefields/node-modulate": "2.13.1",
206
- "@framefields/storage": "2.13.1"
150
+ "@framefields/ai": "2.15.0",
151
+ "@framefields/components": "2.15.0",
152
+ "@framefields/client-utils": "2.15.0",
153
+ "@framefields/compositions": "2.15.0",
154
+ "@framefields/gltf-fixtures": "2.15.0",
155
+ "@framefields/node-audio-compressor": "2.15.0",
156
+ "@framefields/node-audio-fade": "2.15.0",
157
+ "@framefields/node-audio-noise-gate": "2.15.0",
158
+ "@framefields/node-audio-parametric-eq": "2.15.0",
159
+ "@framefields/node-audio-reverb": "2.15.0",
160
+ "@framefields/core": "2.15.0",
161
+ "@framefields/node-audio-signal-extractor": "2.15.0",
162
+ "@framefields/node-color-balance": "2.15.0",
163
+ "@framefields/node-crop": "2.15.0",
164
+ "@framefields/node-curves": "2.15.0",
165
+ "@framefields/node-colorkey": "2.15.0",
166
+ "@framefields/node-displacement-map": "2.15.0",
167
+ "@framefields/node-film-grain": "2.15.0",
168
+ "@framefields/node-corner-pin": "2.15.0",
169
+ "@framefields/node-deflicker": "2.15.0",
170
+ "@framefields/node-flip": "2.15.0",
171
+ "@framefields/node-high-pass": "2.15.0",
172
+ "@framefields/node-kenburns": "2.15.0",
173
+ "@framefields/node-halftone-screen": "2.15.0",
174
+ "@framefields/node-gradient-map": "2.15.0",
175
+ "@framefields/node-levels": "2.15.0",
176
+ "@framefields/node-lut": "2.15.0",
177
+ "@framefields/node-mask-math": "2.15.0",
178
+ "@framefields/node-mesh-warp": "2.15.0",
179
+ "@framefields/node-modulate": "2.15.0",
180
+ "@framefields/node-paint": "2.15.0",
181
+ "@framefields/node-patch-heal": "2.15.0",
182
+ "@framefields/node-layer-style": "2.15.0",
183
+ "@framefields/node-relight-3d": "2.15.0",
184
+ "@framefields/node-audio-delay": "2.15.0",
185
+ "@framefields/node-rotate": "2.15.0",
186
+ "@framefields/node-sdk": "2.15.0",
187
+ "@framefields/node-selective-color": "2.15.0",
188
+ "@framefields/node-shadows-highlights": "2.15.0",
189
+ "@framefields/node-signal": "2.15.0",
190
+ "@framefields/node-signal-gate": "2.15.0",
191
+ "@framefields/node-signal-math": "2.15.0",
192
+ "@framefields/node-stereo-panning": "2.15.0",
193
+ "@framefields/node-tile-offset": "2.15.0",
194
+ "@framefields/node-vignette": "2.15.0",
195
+ "@framefields/node-vision": "2.15.0",
196
+ "@framefields/renderer": "2.15.0",
197
+ "@framefields/storage": "2.15.0",
198
+ "@framefields/node-blur": "2.15.0",
199
+ "@framefields/renderers": "2.15.0",
200
+ "@framefields/tensor-webgpu": "2.15.0",
201
+ "@framefields/tsconfig": "2.15.0",
202
+ "@framefields/vision": "2.15.0",
203
+ "@framefields/webgpu-renderers": "2.15.0",
204
+ "@framefields/vision-sam": "2.15.0",
205
+ "@framefields/node-refraction-caustics": "2.15.0",
206
+ "@framefields/node-unsharp-mask": "2.15.0",
207
+ "@framefields/node-particles": "2.15.0",
208
+ "@framefields/node-refine-edge": "2.15.0",
209
+ "@framefields/node-liquify": "2.15.0"
207
210
  },
208
211
  "scripts": {
209
212
  "build": "tsdown && node ../../scripts/sync-readme.mjs && node scripts/check-bundled-imports.mjs && node scripts/check-components-treeshake.mjs && node scripts/check-registry-types.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"dist-CiTgmfUw.mjs","names":["path"],"sources":["../../storage/dist/index.mjs"],"sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport { mkdir, open, readFile, rename, rm } from \"node:fs/promises\";\nimport { AwsClient } from \"aws4fetch\";\nimport { createReadStream, createWriteStream, existsSync } from \"node:fs\";\nimport { dirname, join, relative, sep } from \"node:path\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\n\n//#region src/files.ts\n/**\n* Hashing and verified downloads: every byte an asset contributes is checked\n* against the sha256 its manifest entry pins.\n*/\nvar AssetError = class extends Error {\n\tname = \"AssetError\";\n\tconstructor(code, message, options) {\n\t\tsuper(message, options);\n\t\tthis.code = code;\n\t}\n};\nasync function hashFile(path) {\n\tconst hash = createHash(\"sha256\");\n\tlet size = 0;\n\tfor await (const chunk of createReadStream(path)) {\n\t\thash.update(chunk);\n\t\tsize += chunk.length;\n\t}\n\treturn {\n\t\tsha256: hash.digest(\"hex\"),\n\t\tsize\n\t};\n}\n/**\n* Downloads `url` to `dest` through a temporary file, and only renames it\n* into place once its size and sha256 match `expected`.\n*/\nasync function downloadVerified(url, dest, expected, options = {}) {\n\tconst attempts = options.attempts ?? 3;\n\tfor (let attempt = 1;; attempt++) try {\n\t\tawait downloadOnce(url, dest, expected, options);\n\t\treturn;\n\t} catch (err) {\n\t\tif (!(err instanceof AssetError ? err.code === \"ASSET_DOWNLOAD_FAILED\" : !options.signal?.aborted) || attempt >= attempts) throw err;\n\t\tawait new Promise((r) => setTimeout(r, 500 * 2 ** attempt));\n\t}\n}\nasync function downloadOnce(url, dest, expected, options) {\n\tconst shown = redactQuery(url);\n\tconst res = await (options.fetch ?? fetch)(url, { signal: options.signal });\n\tif (!res.ok || !res.body) {\n\t\tawait res.body?.cancel();\n\t\tif (res.status === 404) throw new AssetError(\"ASSET_NOT_FOUND\", `${shown} returned 404`);\n\t\tif (res.status === 401 || res.status === 403) throw new AssetError(\"ASSET_FORBIDDEN\", `${shown} returned ${res.status}: the bucket isn't public there, or the signed URL expired`);\n\t\tthrow new AssetError(\"ASSET_DOWNLOAD_FAILED\", `${shown} returned ${res.status}`);\n\t}\n\tawait mkdir(dirname(dest), { recursive: true });\n\tconst temp = `${dest}.${randomBytes(4).toString(\"hex\")}.part`;\n\tconst hash = createHash(\"sha256\");\n\tlet size = 0;\n\tconst tap = new Transform({ transform(chunk, _encoding, done) {\n\t\tsize += chunk.length;\n\t\tif (size > expected.size) return done(new AssetError(\"ASSET_HASH_MISMATCH\", `${shown} is larger than the ${expected.size} bytes framefields.json pins`));\n\t\thash.update(chunk);\n\t\tdone(null, chunk);\n\t} });\n\ttry {\n\t\tawait pipeline(Readable.fromWeb(res.body), tap, createWriteStream(temp), { signal: options.signal }).catch((err) => {\n\t\t\tif (err instanceof AssetError || options.signal?.aborted) throw err;\n\t\t\tthrow new AssetError(\"ASSET_DOWNLOAD_FAILED\", `${shown}: ${err.message}`, { cause: err });\n\t\t});\n\t\tconst sha256 = hash.digest(\"hex\");\n\t\tif (size !== expected.size || sha256 !== expected.sha256) throw new AssetError(\"ASSET_HASH_MISMATCH\", `${shown} is not the file framefields.json pins (got ${size} bytes, sha256 ${sha256.slice(0, 12)}…; expected ${expected.size} bytes, ${expected.sha256.slice(0, 12)}…)`);\n\t\tawait rename(temp, dest);\n\t} finally {\n\t\tawait rm(temp, { force: true });\n\t}\n}\n/** Signed URLs carry credentials in the query: never print them. */\nfunction redactQuery(url) {\n\tconst q = url.indexOf(\"?\");\n\treturn q < 0 ? url : `${url.slice(0, q)}?…`;\n}\nconst TYPES = {\n\tmp4: \"video/mp4\",\n\tm4v: \"video/mp4\",\n\tmov: \"video/quicktime\",\n\twebm: \"video/webm\",\n\tmkv: \"video/x-matroska\",\n\tmp3: \"audio/mpeg\",\n\tm4a: \"audio/mp4\",\n\taac: \"audio/aac\",\n\twav: \"audio/wav\",\n\tflac: \"audio/flac\",\n\togg: \"audio/ogg\",\n\tpng: \"image/png\",\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\twebp: \"image/webp\",\n\tavif: \"image/avif\",\n\tgif: \"image/gif\",\n\tsvg: \"image/svg+xml\",\n\tjson: \"application/json\",\n\tlottie: \"application/zip\",\n\tglb: \"model/gltf-binary\",\n\tgltf: \"model/gltf+json\",\n\tttf: \"font/ttf\",\n\totf: \"font/otf\",\n\twoff2: \"font/woff2\",\n\tcube: \"text/plain\",\n\tsrt: \"text/plain\",\n\tvtt: \"text/vtt\"\n};\n/** The Content-Type a CDN serves the file with. */\nfunction contentType(path) {\n\treturn TYPES[path.slice(path.lastIndexOf(\".\") + 1).toLowerCase()] ?? \"application/octet-stream\";\n}\n\n//#endregion\n//#region src/manifest.ts\nconst REMOTE_NAME = /^[A-Za-z0-9][\\w-]{0,63}$/;\nconst SHA256 = /^[0-9a-f]{64}$/;\nconst FILE$1 = \"framefields.json\";\nvar ManifestError = class extends Error {\n\tname = \"ManifestError\";\n};\n/** Validates `storage`; errors name the remote and field at fault. */\nfunction parseStorage(value) {\n\tif (!isRecord(value) || !isRecord(value.remotes)) throw new ManifestError(`${FILE$1}: \"storage\" needs \"remotes\", e.g. { \"remotes\": { \"media\": { \"endpoint\": \"https://<account>.r2.cloudflarestorage.com\", \"bucket\": \"films\" } } }`);\n\tconst remotes = {};\n\tfor (const [name, spec] of Object.entries(value.remotes)) remotes[name] = parseRemote(name, spec);\n\tconst names = Object.keys(remotes);\n\tif (names.length === 0) throw new ManifestError(`${FILE$1}: \"storage.remotes\" is empty`);\n\tif (value.default !== void 0 && !names.includes(value.default)) throw new ManifestError(`${FILE$1}: \"storage.default\" must name a remote (${names.join(\", \")})`);\n\treturn {\n\t\t...typeof value.default === \"string\" && { default: value.default },\n\t\tremotes\n\t};\n}\nfunction parseRemote(name, spec) {\n\tconst fail = (message) => {\n\t\tthrow new ManifestError(`${FILE$1}: storage.remotes.${name} ${message}`);\n\t};\n\tif (!REMOTE_NAME.test(name)) fail(\"has an invalid name: use letters, digits, - and _ (at most 64)\");\n\tif (!isRecord(spec)) fail(\"must be an object with an endpoint and a bucket\");\n\tconst s = spec;\n\tif (!isHttpUrl(s.endpoint)) fail(\"needs \\\"endpoint\\\": the S3 API URL, e.g. \\\"https://<account>.r2.cloudflarestorage.com\\\"\");\n\tif (typeof s.bucket !== \"string\" || !/^[a-z0-9][a-z0-9.-]{1,62}$/.test(s.bucket)) fail(\"needs \\\"bucket\\\": the bucket name\");\n\tif (s.region !== void 0 && typeof s.region !== \"string\") fail(\"\\\"region\\\" must be a string\");\n\tif (s.prefix !== void 0 && (typeof s.prefix !== \"string\" || s.prefix.startsWith(\"/\") || s.prefix.split(\"/\").includes(\"..\"))) fail(\"\\\"prefix\\\" must be a key prefix such as \\\"films/launch/\\\"\");\n\tif (s.publicUrl !== void 0 && !isHttpUrl(s.publicUrl)) fail(\"\\\"publicUrl\\\" must be an http(s) URL, e.g. \\\"https://media.example.com\\\"\");\n\treturn {\n\t\tendpoint: s.endpoint,\n\t\tbucket: s.bucket,\n\t\t...s.region !== void 0 && { region: s.region },\n\t\t...typeof s.prefix === \"string\" && s.prefix && { prefix: normalizePrefix(s.prefix) },\n\t\t...s.publicUrl !== void 0 && { publicUrl: s.publicUrl }\n\t};\n}\n/** Validates `assets`; errors name the path and field at fault. */\nfunction parseAssets(value, storage) {\n\tif (!isRecord(value)) throw new ManifestError(`${FILE$1}: \"assets\" must map project paths to { \"sha256\", \"size\" }`);\n\tconst out = {};\n\tfor (const [path, entry] of Object.entries(value)) {\n\t\tconst fail = (message) => {\n\t\t\tthrow new ManifestError(`${FILE$1}: assets[\"${path}\"] ${message}`);\n\t\t};\n\t\tif (!isAssetPath(path)) fail(\"must be a path inside the project, e.g. assets/footage/intro.mp4\");\n\t\tif (!isRecord(entry)) fail(\"must be { \\\"sha256\\\", \\\"size\\\" }\");\n\t\tconst e = entry;\n\t\tif (typeof e.sha256 !== \"string\" || !SHA256.test(e.sha256)) fail(\"needs \\\"sha256\\\": 64 lowercase hex digits\");\n\t\tif (typeof e.size !== \"number\" || !Number.isSafeInteger(e.size) || e.size < 0) fail(\"needs \\\"size\\\" in bytes\");\n\t\tif (e.url !== void 0 && !isHttpUrl(e.url)) fail(\"\\\"url\\\" must be an http(s) URL\");\n\t\tif (e.remote !== void 0) {\n\t\t\tif (typeof e.remote !== \"string\" || !storage?.remotes[e.remote]) fail(`\"remote\" must name a remote in \"storage.remotes\"`);\n\t\t} else if (e.url === void 0 && !storage) fail(\"needs a \\\"url\\\", or a \\\"storage\\\" section with a remote to hold it\");\n\t\tout[path] = {\n\t\t\tsha256: e.sha256,\n\t\t\tsize: e.size,\n\t\t\t...e.remote !== void 0 && { remote: e.remote },\n\t\t\t...e.url !== void 0 && { url: e.url }\n\t\t};\n\t}\n\treturn out;\n}\n/** The remote an asset (or a new one, without `name`) belongs to. */\nfunction pickRemote(storage, name) {\n\tconst names = Object.keys(storage?.remotes ?? {});\n\tconst chosen = name ?? storage?.default ?? (names.length === 1 ? names[0] : void 0);\n\tif (!storage || names.length === 0) throw new ManifestError(`${FILE$1} has no \"storage\" remotes: add one (an R2 or S3 bucket) first`);\n\tif (!chosen) throw new ManifestError(`${FILE$1}: name the remote (${names.join(\", \")}), or set \"storage.default\"`);\n\tconst remote = storage.remotes[chosen];\n\tif (!remote) throw new ManifestError(`${FILE$1}: no remote named \"${chosen}\" (${names.join(\", \")})`);\n\treturn {\n\t\tname: chosen,\n\t\tremote\n\t};\n}\n/** The object key holding `sha256`: `<prefix>sha256/ab/<hash>`. */\nfunction objectKey(sha256, prefix = \"\") {\n\treturn `${prefix}sha256/${sha256.slice(0, 2)}/${sha256}`;\n}\n/** The asset's URL on the remote's public domain, if it has one. */\nfunction publicUrl(remote, sha256) {\n\tif (!remote.publicUrl) return void 0;\n\treturn `${remote.publicUrl.replace(/\\/+$/, \"\")}/${objectKey(sha256, remote.prefix)}`;\n}\n/**\n* Where to download an asset without credentials: a signed URL handed in\n* (`signed`, by sha256), its own `url`, or its remote's public domain.\n* Undefined means the asset is on a private remote and needs a signature.\n*/\nfunction readUrl(entry, storage, signed) {\n\tconst given = signed?.[entry.sha256];\n\tif (given) return given;\n\tif (entry.url) return entry.url;\n\tif (!storage) return void 0;\n\treturn publicUrl(pickRemote(storage, entry.remote).remote, entry.sha256);\n}\nfunction isAssetPath(path) {\n\treturn path.length > 0 && path.length <= 1024 && !path.startsWith(\"/\") && !path.includes(\"\\\\\") && !path.split(\"/\").some((part) => part === \"\" || part === \".\" || part === \"..\");\n}\nfunction normalizePrefix(prefix) {\n\treturn prefix.endsWith(\"/\") ? prefix : `${prefix}/`;\n}\nfunction isHttpUrl(value) {\n\tif (typeof value !== \"string\") return false;\n\ttry {\n\t\tconst { protocol } = new URL(value);\n\t\treturn protocol === \"https:\" || protocol === \"http:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n//#endregion\n//#region src/bucket.ts\n/**\n* The few S3 calls asset storage needs (HEAD, PUT, multipart upload,\n* presigned GET), signed with SigV4 by aws4fetch. Works with any\n* S3-compatible service; R2 is the one to pick, since it charges no egress.\n*/\n/**\n* Keys for `remote` from the environment:\n* `FRAMEFIELDS_STORAGE_<REMOTE>_ACCESS_KEY_ID` / `…_SECRET_ACCESS_KEY`\n* (the remote's name upper-cased, `-` as `_`), else the standard\n* `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`.\n*/\nfunction credentialsFromEnv(remote, env = process.env) {\n\tconst scope = `FRAMEFIELDS_STORAGE_${remote.toUpperCase().replace(/-/g, \"_\")}`;\n\tconst own = env[`${scope}_ACCESS_KEY_ID`];\n\tconst ownSecret = env[`${scope}_SECRET_ACCESS_KEY`];\n\tif (own && ownSecret) return {\n\t\taccessKeyId: own,\n\t\tsecretAccessKey: ownSecret\n\t};\n\tconst id = env.AWS_ACCESS_KEY_ID;\n\tconst secret = env.AWS_SECRET_ACCESS_KEY;\n\tif (!id || !secret) return void 0;\n\treturn {\n\t\taccessKeyId: id,\n\t\tsecretAccessKey: secret,\n\t\t...env.AWS_SESSION_TOKEN && { sessionToken: env.AWS_SESSION_TOKEN }\n\t};\n}\n/** The env vars `credentialsFromEnv` reads for `remote`, for messages. */\nfunction credentialEnvNames(remote) {\n\tconst scope = `FRAMEFIELDS_STORAGE_${remote.toUpperCase().replace(/-/g, \"_\")}`;\n\treturn [`${scope}_ACCESS_KEY_ID`, `${scope}_SECRET_ACCESS_KEY`];\n}\nvar StorageError = class extends Error {\n\tname = \"StorageError\";\n\tconstructor(message, status) {\n\t\tsuper(message);\n\t\tthis.status = status;\n\t}\n};\nconst MiB = 1024 * 1024;\n/**\n* Content-addressed objects never change: CDNs and browsers may keep them\n* forever, which is what makes a custom domain in front of the bucket cheap.\n*/\nconst IMMUTABLE = \"public, max-age=31536000, immutable\";\n/** One remote's bucket, signed with `credentials`. */\nvar Bucket = class {\n\taws;\n\tfetch;\n\tconstructor(remote, credentials, options = {}) {\n\t\tthis.remote = remote;\n\t\tthis.options = options;\n\t\tthis.aws = new AwsClient({\n\t\t\t...credentials,\n\t\t\tservice: \"s3\",\n\t\t\tregion: remote.region ?? \"auto\",\n\t\t\tretries: 3\n\t\t});\n\t\tthis.fetch = options.fetch ?? fetch;\n\t}\n\tkeyFor(sha256) {\n\t\treturn objectKey(sha256, this.remote.prefix);\n\t}\n\t/** Whether the bucket holds `sha256` at the expected size. */\n\tasync has(sha256, size) {\n\t\tconst res = await this.send(this.keyFor(sha256), { method: \"HEAD\" });\n\t\tif (res.status === 404) return false;\n\t\tif (!res.ok) throw await this.failure(\"HEAD\", res);\n\t\treturn Number(res.headers.get(\"content-length\")) === size;\n\t}\n\t/**\n\t* Uploads `file` (already hashed) under its content key. The bucket\n\t* checks every byte against the sha256 sent with it.\n\t*/\n\tasync upload(file, digest, onProgress) {\n\t\tconst key = this.keyFor(digest.sha256);\n\t\tconst headers = {\n\t\t\t\"content-type\": contentType(file),\n\t\t\t\"cache-control\": IMMUTABLE\n\t\t};\n\t\tconst threshold = this.options.multipartThreshold ?? 64 * MiB;\n\t\tif (digest.size <= threshold) {\n\t\t\tconst handle = await open(file);\n\t\t\ttry {\n\t\t\t\tconst body = await handle.readFile();\n\t\t\t\tawait this.put(key, body, digest.sha256, headers);\n\t\t\t} finally {\n\t\t\t\tawait handle.close();\n\t\t\t}\n\t\t\tonProgress?.({\n\t\t\t\tsent: digest.size,\n\t\t\t\ttotal: digest.size\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait this.uploadParts(file, key, digest.size, headers, onProgress);\n\t}\n\t/** A GET URL anyone can use until it expires (at most 7 days). */\n\tasync presign(sha256, expiresSec = 86400) {\n\t\tconst url = new URL(this.url(this.keyFor(sha256)));\n\t\turl.searchParams.set(\"X-Amz-Expires\", String(Math.min(expiresSec, 604800)));\n\t\treturn (await this.aws.sign(url, {\n\t\t\tmethod: \"GET\",\n\t\t\taws: { signQuery: true }\n\t\t})).url;\n\t}\n\tasync put(key, body, sha256, headers, query = \"\") {\n\t\tconst res = await this.send(key, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody,\n\t\t\theaders: {\n\t\t\t\t...headers,\n\t\t\t\t\"x-amz-content-sha256\": sha256\n\t\t\t},\n\t\t\tquery\n\t\t});\n\t\tif (!res.ok) throw await this.failure(\"PUT\", res);\n\t\treturn res;\n\t}\n\tasync uploadParts(file, key, size, headers, onProgress) {\n\t\tconst partSize = Math.max(this.options.partSize ?? 16 * MiB, Math.ceil(size / 1e4), 5 * MiB);\n\t\tconst created = await this.send(key, {\n\t\t\tmethod: \"POST\",\n\t\t\tquery: \"uploads=\",\n\t\t\theaders\n\t\t});\n\t\tif (!created.ok) throw await this.failure(\"CreateMultipartUpload\", created);\n\t\tconst uploadId = /<UploadId>([^<]+)<\\/UploadId>/.exec(await created.text())?.[1];\n\t\tif (!uploadId) throw new StorageError(\"CreateMultipartUpload returned no UploadId\");\n\t\tconst id = encodeURIComponent(uploadId);\n\t\tconst count = Math.ceil(size / partSize);\n\t\tconst etags = new Array(count);\n\t\tconst handle = await open(file);\n\t\tlet next = 0;\n\t\tlet sent = 0;\n\t\tconst worker = async () => {\n\t\t\twhile (next < count) {\n\t\t\t\tconst index = next++;\n\t\t\t\tconst length = Math.min(partSize, size - index * partSize);\n\t\t\t\tconst chunk = Buffer.alloc(length);\n\t\t\t\tawait handle.read(chunk, 0, length, index * partSize);\n\t\t\t\tconst sha = createHash(\"sha256\").update(chunk).digest(\"hex\");\n\t\t\t\tetags[index] = (await this.put(key, chunk, sha, {}, `partNumber=${index + 1}&uploadId=${id}`)).headers.get(\"etag\") ?? \"\";\n\t\t\t\tsent += length;\n\t\t\t\tonProgress?.({\n\t\t\t\t\tsent,\n\t\t\t\t\ttotal: size\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tawait Promise.all(Array.from({ length: Math.min(this.options.concurrency ?? 4, count) }, worker));\n\t\t\tconst body = `<CompleteMultipartUpload>${etags.map((etag, i) => `<Part><PartNumber>${i + 1}</PartNumber><ETag>${escapeXml(etag)}</ETag></Part>`).join(\"\")}</CompleteMultipartUpload>`;\n\t\t\tconst done = await this.send(key, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tquery: `uploadId=${id}`,\n\t\t\t\tbody,\n\t\t\t\theaders: { \"content-type\": \"application/xml\" }\n\t\t\t});\n\t\t\tconst text = await done.text();\n\t\t\tif (!done.ok || text.includes(\"<Error>\")) throw new StorageError(`CompleteMultipartUpload failed (${done.status}): ${errorCode(text)}`, done.status);\n\t\t} catch (err) {\n\t\t\tawait this.send(key, {\n\t\t\t\tmethod: \"DELETE\",\n\t\t\t\tquery: `uploadId=${id}`\n\t\t\t}).catch(() => void 0);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tawait handle.close();\n\t\t}\n\t}\n\turl(key, query = \"\") {\n\t\tconst base = this.remote.endpoint.replace(/\\/+$/, \"\");\n\t\tconst path = key.split(\"/\").map(encodeURIComponent).join(\"/\");\n\t\treturn `${base}/${this.remote.bucket}/${path}${query ? `?${query}` : \"\"}`;\n\t}\n\tasync send(key, init) {\n\t\tconst signed = await this.aws.sign(this.url(key, init.query), {\n\t\t\tmethod: init.method,\n\t\t\theaders: init.headers,\n\t\t\tbody: init.body\n\t\t});\n\t\treturn this.fetch(signed);\n\t}\n\tasync failure(what, res) {\n\t\tconst text = await res.text().catch(() => \"\");\n\t\tconst hint = res.status === 403 ? \": check the remote's keys and that they may write to the bucket\" : res.status === 404 ? \": check the remote's endpoint and bucket\" : \"\";\n\t\treturn new StorageError(`${what} ${this.remote.bucket} failed (${res.status} ${errorCode(text)})${hint}`, res.status);\n\t}\n};\nfunction errorCode(xml) {\n\treturn /<Code>([^<]+)<\\/Code>/.exec(xml)?.[1] ?? \"no error code\";\n}\nfunction escapeXml(text) {\n\treturn text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/\"/g, \"&quot;\");\n}\n\n//#endregion\n//#region src/locate.ts\n/**\n* Finding a project's pinned assets from file paths: what a preview or an\n* engine asks for is an absolute path, and a pinned file that isn't on disk\n* is read from its bucket instead.\n*/\nconst FILE = \"framefields.json\";\n/** The nearest folder at or above `dir` holding a framefields.json. */\nfunction findProjectDir(dir) {\n\tfor (let at = dir;; at = dirname(at)) {\n\t\tif (existsSync(join(at, FILE))) return at;\n\t\tif (dirname(at) === at) return void 0;\n\t}\n}\n/** The `storage` and `assets` of the project at `dir`; undefined without assets. */\nasync function readProjectManifest(dir) {\n\tconst file = join(dir, FILE);\n\tif (!existsSync(file)) return void 0;\n\tlet raw;\n\ttry {\n\t\traw = JSON.parse(await readFile(file, \"utf8\"));\n\t} catch (err) {\n\t\tthrow new ManifestError(`${FILE} is not valid JSON: ${err.message}`);\n\t}\n\tif (raw.assets === void 0) return void 0;\n\tconst storage = raw.storage === void 0 ? void 0 : parseStorage(raw.storage);\n\treturn {\n\t\tstorage,\n\t\tassets: parseAssets(raw.assets, storage)\n\t};\n}\n/** Signatures last 6 h and are reused for 5, so long sessions keep working. */\nconst SIGNED_SEC = 6 * 3600;\nconst REUSE_MS = 5 * 3600 * 1e3;\n/**\n* Pinned-asset lookup for the project at or above `dir`, or undefined when\n* it pins none.\n*/\nasync function openAssetLocator(dir, options = {}) {\n\tconst root = findProjectDir(dir);\n\tconst manifest = root && await readProjectManifest(root);\n\tif (!root || !manifest) return void 0;\n\tconst signed = /* @__PURE__ */ new Map();\n\tconst entry = (file) => {\n\t\tconst rel = relative(root, file).split(sep).join(\"/\");\n\t\treturn rel.startsWith(\"../\") ? void 0 : manifest.assets[rel];\n\t};\n\treturn {\n\t\troot,\n\t\tentry,\n\t\tasync url(file) {\n\t\t\tconst pinned = entry(file);\n\t\t\tif (!pinned) return void 0;\n\t\t\tconst open$1 = readUrl(pinned, manifest.storage);\n\t\t\tif (open$1) return open$1;\n\t\t\tconst cached = signed.get(pinned.sha256);\n\t\t\tif (cached && Date.now() - cached.at < REUSE_MS) return cached.url;\n\t\t\tconst { name, remote } = pickRemote(manifest.storage, pinned.remote);\n\t\t\tconst keys = credentialsFromEnv(name, options.env);\n\t\t\tif (!keys) return void 0;\n\t\t\tconst url = await new Bucket(remote, keys, { fetch: options.fetch }).presign(pinned.sha256, SIGNED_SEC);\n\t\t\tsigned.set(pinned.sha256, {\n\t\t\t\turl,\n\t\t\t\tat: Date.now()\n\t\t\t});\n\t\t\treturn url;\n\t\t}\n\t};\n}\n\n//#endregion\nexport { AssetError, Bucket, ManifestError, REMOTE_NAME, SHA256, StorageError, contentType, credentialEnvNames, credentialsFromEnv, downloadVerified, findProjectDir, hashFile, isAssetPath, objectKey, openAssetLocator, parseAssets, parseStorage, pickRemote, publicUrl, readProjectManifest, readUrl, redactQuery };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}