framefields 2.11.0 → 2.13.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.
- package/NOTICE.md +4 -0
- package/dist/audio/index.d.mts +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-CYZkDwae.d.mts → audio-CHV33Od9.d.mts} +3 -4
- package/dist/audio-CHV33Od9.d.mts.map +1 -0
- package/dist/{audio-BuCVk1IQ.mjs → audio-DHzLQ_RG.mjs} +4 -4
- package/dist/{audio-BuCVk1IQ.mjs.map → audio-DHzLQ_RG.mjs.map} +1 -1
- package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
- package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +51 -51
- package/dist/cli/check-worker.mjs.map +1 -1
- package/dist/cli/local-worker.d.mts +28 -0
- package/dist/cli/local-worker.d.mts.map +1 -0
- package/dist/cli/local-worker.mjs +83 -0
- package/dist/cli/local-worker.mjs.map +1 -0
- package/dist/cli.mjs +390 -124
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +16 -3
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +2 -2
- package/dist/cloud-Cj1TIme8.mjs +685 -0
- package/dist/cloud-Cj1TIme8.mjs.map +1 -0
- package/dist/components/index.d.mts +15 -14
- package/dist/components/index.mjs +47 -47
- package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
- package/dist/dist-BSKAbyea.mjs.map +1 -0
- package/dist/{dist-CNGv-JTX.mjs → dist-B_rSWeOz.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
- package/dist/{dist-EQX3TUUl.mjs → dist-CUNvNDS3.mjs} +129 -82
- package/dist/dist-CUNvNDS3.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-CWLLnigL.mjs → dist-D3BeAZ7X.mjs} +315 -84
- package/dist/dist-D3BeAZ7X.mjs.map +1 -0
- package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
- package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
- package/dist/{dist-Dg9LMWoX.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-Dg9LMWoX.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
- package/dist/effects/index.d.mts +6 -6
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-DKLbLXF7.mjs → effects-BiDgCK1L.mjs} +3 -3
- package/dist/{effects-DKLbLXF7.mjs.map → effects-BiDgCK1L.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-gPbGbShD.mjs → fonts-DeDPWdvJ.mjs} +2 -2
- package/dist/{fonts-gPbGbShD.mjs.map → fonts-DeDPWdvJ.mjs.map} +1 -1
- package/dist/{gpu-CpkJJLQP.mjs → gpu-CWjgql4C.mjs} +11 -3
- package/dist/gpu-CWjgql4C.mjs.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.d.mts.map +1 -0
- package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
- package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
- package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
- package/dist/index-CnZhBlob.d.mts.map +1 -0
- package/dist/{index-D2i9J9Zq.d.mts → index-D68eGFNE.d.mts} +3 -30
- package/dist/index-D68eGFNE.d.mts.map +1 -0
- package/dist/{index-CEU_Zsb9.d.mts → index-DBh3WphX.d.mts} +25 -23
- package/dist/index-DBh3WphX.d.mts.map +1 -0
- package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
- package/dist/index-DQ1U3HC3.d.mts.map +1 -0
- package/dist/{index-jSDEM-uE.d.mts → index-Dibc_xpC.d.mts} +6 -6
- package/dist/{index-jSDEM-uE.d.mts.map → index-Dibc_xpC.d.mts.map} +1 -1
- package/dist/{index-Cro-818i.d.mts → index-E2IXX0Cz.d.mts} +88 -14
- package/dist/index-E2IXX0Cz.d.mts.map +1 -0
- package/dist/{index-BuiZzc6i.d.mts → index-X2u96TEo.d.mts} +162 -5
- package/dist/index-X2u96TEo.d.mts.map +1 -0
- package/dist/{index-Bly-7YM1.d.mts → index-YB9j9KUx.d.mts} +3 -3
- package/dist/{index-Bly-7YM1.d.mts.map → index-YB9j9KUx.d.mts.map} +1 -1
- package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
- package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
- package/dist/{index-C8YwZ6k1.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-C8YwZ6k1.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -15
- package/dist/index.mjs +58 -58
- package/dist/preview/index.d.mts +5 -4
- package/dist/preview/index.mjs +12 -12
- package/dist/{preview-BToKUTtZ.mjs → preview-PDz7o2xg.mjs} +323 -35
- package/dist/preview-PDz7o2xg.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-QF4JWVO3.mjs → chunk-35XSD4QM.mjs} +15 -15
- package/dist/preview-engine/{chunk-ZF2MEFKO.mjs → chunk-3DOIE4DV.mjs} +1 -1
- package/dist/preview-engine/{chunk-JDB7PMRI.mjs → chunk-3IT7LHWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-DNNGWS2C.mjs → chunk-3MLGWUSK.mjs} +1 -1
- package/dist/preview-engine/{chunk-KVOFO273.mjs → chunk-3QJ5GRBH.mjs} +1 -1
- package/dist/preview-engine/{chunk-54Q5CKSV.mjs → chunk-3QTHW2CD.mjs} +1 -1
- package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
- package/dist/preview-engine/chunk-4P3MMJWD.mjs +1 -0
- package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
- package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
- package/dist/preview-engine/{chunk-UMJ3VGKN.mjs → chunk-6B3NOY5W.mjs} +1 -1
- package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
- package/dist/preview-engine/{chunk-BRV7TQDV.mjs → chunk-77WWW75O.mjs} +1 -1
- package/dist/preview-engine/chunk-7M5LE6EM.mjs +483 -0
- package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
- package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
- package/dist/preview-engine/{chunk-OLB4TQLQ.mjs → chunk-AKVRG7UU.mjs} +1 -1
- package/dist/preview-engine/{chunk-CIVEZJYF.mjs → chunk-CRBOK3JT.mjs} +1 -1
- package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
- package/dist/preview-engine/{chunk-ACBBBOUM.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EPRINA4V.mjs → chunk-E7BKWHOT.mjs} +10 -10
- package/dist/preview-engine/{chunk-NOKPBMIP.mjs → chunk-EWDJMJO5.mjs} +1 -1
- package/dist/preview-engine/{chunk-5KSBS3AL.mjs → chunk-EYE3GNL5.mjs} +1 -1
- package/dist/preview-engine/chunk-FRJPXWAG.mjs +1 -0
- package/dist/preview-engine/{chunk-IKVJ4MW5.mjs → chunk-G4ZTSLZU.mjs} +1 -1
- package/dist/preview-engine/{chunk-VZLIRYAL.mjs → chunk-GAMAKN5L.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZIXPWP2B.mjs → chunk-ICWD36H6.mjs} +1 -1
- package/dist/preview-engine/{chunk-OELPPLML.mjs → chunk-IEEV5RB3.mjs} +1 -1
- package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
- package/dist/preview-engine/{chunk-YVZTRH4Y.mjs → chunk-KDCM7S3S.mjs} +1 -1
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-O63FLYWC.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
- package/dist/preview-engine/{chunk-YKM7JDQY.mjs → chunk-NJO2BIJX.mjs} +1 -1
- package/dist/preview-engine/{chunk-7GMHSTRP.mjs → chunk-NTSALWFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-PKNUTHPI.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-VFQH5KVS.mjs → chunk-ONHY4KNY.mjs} +1 -1
- package/dist/preview-engine/{chunk-Z24UEN4P.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
- package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
- package/dist/preview-engine/{chunk-YHMBGJP6.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-4AGQN53P.mjs → chunk-QXLFTCLC.mjs} +1 -1
- package/dist/preview-engine/{chunk-65NANVQL.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-FQL4IJZN.mjs → chunk-RN7J5TRU.mjs} +1 -1
- package/dist/preview-engine/{chunk-26XWIHW3.mjs → chunk-RVCLMO5Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-VQA4DYZU.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TEWRQKX3.mjs → chunk-SFHWP65D.mjs} +1 -1
- package/dist/preview-engine/{chunk-RDWLLITE.mjs → chunk-SMHEMYCV.mjs} +1 -1
- package/dist/preview-engine/{chunk-EXEO245X.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/chunk-UFPA36D2.mjs +2227 -0
- package/dist/preview-engine/{chunk-EAWJXW4J.mjs → chunk-UVEDFIPN.mjs} +1 -1
- package/dist/preview-engine/{chunk-6LTINEA4.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-IBPYV6HF.mjs → chunk-W4XR6F5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-UI3VH33L.mjs → chunk-WPYWCWWL.mjs} +1 -1
- package/dist/preview-engine/{chunk-GHTG5XV6.mjs → chunk-XYCR3STG.mjs} +84 -25
- package/dist/preview-engine/{chunk-WFMUDL55.mjs → chunk-YAPGJZPI.mjs} +1 -1
- package/dist/preview-engine/{chunk-LMXMBX4J.mjs → chunk-YJ4DSRDY.mjs} +1 -1
- package/dist/preview-engine/{chunk-CCORQLMR.mjs → chunk-YOJKIMU5.mjs} +1 -1
- package/dist/preview-engine/{chunk-UGB6JKVS.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
- package/dist/preview-engine/{chunk-LFNCWMKS.mjs → chunk-ZZMI3WOT.mjs} +1 -1
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/{renderers-53EI26GL.mjs → renderers-3FZVDYRQ.mjs} +1 -1
- package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
- package/dist/preview-engine/{renderers-6YVZUQOH.mjs → renderers-4RPQSUUZ.mjs} +1 -1
- package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
- package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
- package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
- package/dist/preview-engine/{renderers-CCRZNGVK.mjs → renderers-6FENMFSC.mjs} +1 -1
- package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
- package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
- package/dist/preview-engine/renderers-AFTUFMQQ.mjs +1 -0
- package/dist/preview-engine/{renderers-CYJAVWHT.mjs → renderers-AIZRIW2R.mjs} +1 -1
- package/dist/preview-engine/{renderers-OGOW3NA4.mjs → renderers-BDI2BDBA.mjs} +1 -1
- package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
- package/dist/preview-engine/{renderers-EN7LXJLG.mjs → renderers-BUZ67FNZ.mjs} +1 -1
- package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
- package/dist/preview-engine/{renderers-WSABL3QO.mjs → renderers-ECXMT5BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
- package/dist/preview-engine/renderers-EPSF5CSQ.mjs +1 -0
- package/dist/preview-engine/{renderers-X6CORAES.mjs → renderers-EVEWFJ7U.mjs} +1 -1
- package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
- package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
- package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
- package/dist/preview-engine/{renderers-GQM3KMV3.mjs → renderers-FQISHQEN.mjs} +1 -1
- package/dist/preview-engine/{renderers-HKLCB4U6.mjs → renderers-FXAVFNUN.mjs} +1 -1
- package/dist/preview-engine/{renderers-P2HORBZ6.mjs → renderers-GITAVRYZ.mjs} +1 -1
- package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
- package/dist/preview-engine/{renderers-KCGK33Y2.mjs → renderers-HG6JZIZO.mjs} +1 -1
- package/dist/preview-engine/{renderers-I6QKZ7CH.mjs → renderers-HHWMIDN3.mjs} +1 -1
- package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
- package/dist/preview-engine/{renderers-7CAHX35U.mjs → renderers-HXEDI4BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
- package/dist/preview-engine/{renderers-ACUJMDEK.mjs → renderers-I2ZOUFRU.mjs} +1 -1
- package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
- package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
- package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
- package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
- package/dist/preview-engine/{renderers-C7SI3NIE.mjs → renderers-KKULMOV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-HSFQIILN.mjs → renderers-KMVMPYY7.mjs} +1 -1
- package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
- package/dist/preview-engine/{renderers-BOBVXYAA.mjs → renderers-LWW4RF6D.mjs} +1 -1
- package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
- package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
- package/dist/preview-engine/{renderers-VVP5WQOY.mjs → renderers-MPFU74I3.mjs} +1 -1
- package/dist/preview-engine/{renderers-H6PBHEYU.mjs → renderers-MW53LTMB.mjs} +1 -1
- package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
- package/dist/preview-engine/renderers-OJWWIVNW.mjs +1 -0
- package/dist/preview-engine/{renderers-4IBFDW2S.mjs → renderers-PC2GOZDT.mjs} +1 -1
- package/dist/preview-engine/{renderers-UG2C3C7T.mjs → renderers-Q77UPEYE.mjs} +1 -1
- package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
- package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
- package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
- package/dist/preview-engine/renderers-RHMRWX46.mjs +1 -0
- package/dist/preview-engine/{renderers-5XLGCEOA.mjs → renderers-RIPXT4AL.mjs} +1 -1
- package/dist/preview-engine/{renderers-FY2HOQCS.mjs → renderers-SFVFAS3C.mjs} +1 -1
- package/dist/preview-engine/{renderers-VIGZYJYX.mjs → renderers-SWQVCJHB.mjs} +1 -1
- package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
- package/dist/preview-engine/renderers-TTXTV4PC.mjs +228 -0
- package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
- package/dist/preview-engine/{renderers-6LNDAO4B.mjs → renderers-U4IXWMD6.mjs} +1 -1
- package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
- package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
- package/dist/preview-engine/{renderers-33FCFHDR.mjs → renderers-VUQAZ56P.mjs} +1 -1
- package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
- package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
- package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
- package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
- package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
- package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{program-Bc860ko5.mjs → program-Bn6ko_I4.mjs} +44 -17
- package/dist/program-Bn6ko_I4.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-B3Dme2es.mjs → renderer--Q0pM9Vh.mjs} +5 -5
- package/dist/{renderer-B3Dme2es.mjs.map → renderer--Q0pM9Vh.mjs.map} +1 -1
- package/dist/renderer-1aSF5BmY.mjs +5 -0
- package/dist/{renderer-CAWnCsQc.mjs → renderer-45ifiDkn.mjs} +5 -5
- package/dist/{renderer-CAWnCsQc.mjs.map → renderer-45ifiDkn.mjs.map} +1 -1
- package/dist/{renderer-Cz-n883J.mjs → renderer-549d94qG.mjs} +5 -5
- package/dist/{renderer-Cz-n883J.mjs.map → renderer-549d94qG.mjs.map} +1 -1
- package/dist/{renderer-BhsrlGKp.mjs → renderer-B-LUGB9h.mjs} +74 -21
- package/dist/renderer-B-LUGB9h.mjs.map +1 -0
- package/dist/renderer-B2e4Gr9u.mjs +5 -0
- package/dist/{renderer-B1LD29TV.mjs → renderer-B5b-ehRb.mjs} +3 -3
- package/dist/{renderer-B1LD29TV.mjs.map → renderer-B5b-ehRb.mjs.map} +1 -1
- package/dist/renderer-B6fz4j50.mjs +5 -0
- package/dist/{renderer-_9gbYS-3.mjs → renderer-BCTUqJG7.mjs} +5 -5
- package/dist/{renderer-_9gbYS-3.mjs.map → renderer-BCTUqJG7.mjs.map} +1 -1
- package/dist/renderer-BEftIYw-.mjs +5 -0
- package/dist/{renderer-C9BSXyrq.mjs → renderer-BHPgkoEL.mjs} +4 -4
- package/dist/{renderer-C9BSXyrq.mjs.map → renderer-BHPgkoEL.mjs.map} +1 -1
- package/dist/renderer-BHTnO-7e.mjs +5 -0
- package/dist/{renderer-fs8f1QeE.mjs → renderer-BIieU9pY.mjs} +5 -5
- package/dist/{renderer-fs8f1QeE.mjs.map → renderer-BIieU9pY.mjs.map} +1 -1
- package/dist/{renderer-DwK9jsER.mjs → renderer-BKi6jDi_.mjs} +4 -4
- package/dist/{renderer-DwK9jsER.mjs.map → renderer-BKi6jDi_.mjs.map} +1 -1
- package/dist/renderer-BMlnQqTO.mjs +5 -0
- package/dist/{renderer-BNJ6Jk7-.mjs → renderer-BMpmmYOq.mjs} +4 -4
- package/dist/{renderer-BNJ6Jk7-.mjs.map → renderer-BMpmmYOq.mjs.map} +1 -1
- package/dist/{renderer-DkqZmfm8.mjs → renderer-BO_wuUKA.mjs} +5 -5
- package/dist/{renderer-DkqZmfm8.mjs.map → renderer-BO_wuUKA.mjs.map} +1 -1
- package/dist/renderer-BOzcFezY.mjs +5 -0
- package/dist/{renderer-Bxjb0HYU.mjs → renderer-BPOh9x5X.mjs} +4 -4
- package/dist/{renderer-Bxjb0HYU.mjs.map → renderer-BPOh9x5X.mjs.map} +1 -1
- package/dist/{renderer-Ros7XQg2.mjs → renderer-BPiWsrC2.mjs} +3 -3
- package/dist/{renderer-Ros7XQg2.mjs.map → renderer-BPiWsrC2.mjs.map} +1 -1
- package/dist/{renderer-lHNTgiOM.mjs → renderer-BUj7jE6t.mjs} +3 -3
- package/dist/{renderer-lHNTgiOM.mjs.map → renderer-BUj7jE6t.mjs.map} +1 -1
- package/dist/renderer-BVbjJIKJ.mjs +5 -0
- package/dist/renderer-BXsHKf4k.mjs +5 -0
- package/dist/{renderer-D0aAZHC7.mjs → renderer-BZgJj8Cl.mjs} +4 -4
- package/dist/{renderer-D0aAZHC7.mjs.map → renderer-BZgJj8Cl.mjs.map} +1 -1
- package/dist/{renderer-V4dhrf_h.mjs → renderer-BgjPbgbn.mjs} +6 -6
- package/dist/{renderer-V4dhrf_h.mjs.map → renderer-BgjPbgbn.mjs.map} +1 -1
- package/dist/{renderer-BaIJIfJ6.mjs → renderer-BjgFpwVK.mjs} +5 -5
- package/dist/{renderer-BaIJIfJ6.mjs.map → renderer-BjgFpwVK.mjs.map} +1 -1
- package/dist/renderer-Bks49NVl.mjs +5 -0
- package/dist/{renderer-CU8v-LxD.mjs → renderer-BlZgyBSo.mjs} +5 -5
- package/dist/{renderer-CU8v-LxD.mjs.map → renderer-BlZgyBSo.mjs.map} +1 -1
- package/dist/{renderer-B6Oeahe_.mjs → renderer-BqUAyzCZ.mjs} +5 -5
- package/dist/{renderer-B6Oeahe_.mjs.map → renderer-BqUAyzCZ.mjs.map} +1 -1
- package/dist/{renderer-h62QaJYz.mjs → renderer-Br8km655.mjs} +4 -4
- package/dist/{renderer-h62QaJYz.mjs.map → renderer-Br8km655.mjs.map} +1 -1
- package/dist/{renderer-sfqZK6L5.mjs → renderer-BsMZ5Iaq.mjs} +4 -4
- package/dist/{renderer-sfqZK6L5.mjs.map → renderer-BsMZ5Iaq.mjs.map} +1 -1
- package/dist/{renderer-g_1t2je9.mjs → renderer-BtgqTg2K.mjs} +3 -3
- package/dist/{renderer-DcvjSolU.mjs → renderer-BuvKGwk3.mjs} +11 -2
- package/dist/{renderer-DcvjSolU.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/{renderer-BOrMBwQS.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-BOrMBwQS.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/{renderer-CLAvn9c6.mjs → renderer-C-GTxnfv.mjs} +4 -4
- package/dist/{renderer-CLAvn9c6.mjs.map → renderer-C-GTxnfv.mjs.map} +1 -1
- package/dist/renderer-C-t7qFKr.mjs +5 -0
- package/dist/{renderer-BDZC3o3N.mjs → renderer-C1ctHdXl.mjs} +4 -4
- package/dist/{renderer-BDZC3o3N.mjs.map → renderer-C1ctHdXl.mjs.map} +1 -1
- package/dist/renderer-C24n-6CX.mjs +6 -0
- package/dist/{renderer-pNmI-A9o.mjs → renderer-C7m7Yxgc.mjs} +5 -5
- package/dist/{renderer-pNmI-A9o.mjs.map → renderer-C7m7Yxgc.mjs.map} +1 -1
- package/dist/{renderer-Bf4-N7k7.mjs → renderer-C9dqx3U7.mjs} +5 -5
- package/dist/{renderer-Bf4-N7k7.mjs.map → renderer-C9dqx3U7.mjs.map} +1 -1
- package/dist/renderer-CCReX-7M.mjs +5 -0
- package/dist/{renderer-JHByuUNb.mjs → renderer-CE4535aW.mjs} +3 -3
- package/dist/{renderer-JHByuUNb.mjs.map → renderer-CE4535aW.mjs.map} +1 -1
- package/dist/renderer-CIxFQrAm.mjs +5 -0
- package/dist/{renderer-ByjaseAo.mjs → renderer-CL-vyXgX.mjs} +5 -5
- package/dist/{renderer-ByjaseAo.mjs.map → renderer-CL-vyXgX.mjs.map} +1 -1
- package/dist/renderer-CLHBMIqJ.mjs +5 -0
- package/dist/renderer-CMJKi-Ye.mjs +5 -0
- package/dist/{renderer-B-CMRUag.mjs → renderer-CMnlgAGs.mjs} +4 -4
- package/dist/{renderer-B-CMRUag.mjs.map → renderer-CMnlgAGs.mjs.map} +1 -1
- package/dist/{renderer-BNHcwxw9.mjs → renderer-CQFMyC_c.mjs} +4 -4
- package/dist/{renderer-BNHcwxw9.mjs.map → renderer-CQFMyC_c.mjs.map} +1 -1
- package/dist/{renderer-DgPn_SOC.mjs → renderer-CYwVNbUh.mjs} +4 -4
- package/dist/{renderer-DgPn_SOC.mjs.map → renderer-CYwVNbUh.mjs.map} +1 -1
- package/dist/{renderer-DLPhfwbR.mjs → renderer-CZ5mwBW1.mjs} +3 -3
- package/dist/{renderer-DLPhfwbR.mjs.map → renderer-CZ5mwBW1.mjs.map} +1 -1
- package/dist/{renderer-4ZUv3X1I.mjs → renderer-C_1eqfI0.mjs} +5 -5
- package/dist/{renderer-4ZUv3X1I.mjs.map → renderer-C_1eqfI0.mjs.map} +1 -1
- package/dist/renderer-C_H3mHZa.mjs +5 -0
- package/dist/{renderer-B1esRxGy.mjs → renderer-CciiDHuU.mjs} +4 -4
- package/dist/{renderer-B1esRxGy.mjs.map → renderer-CciiDHuU.mjs.map} +1 -1
- package/dist/renderer-CfkTdR5B.mjs +5 -0
- package/dist/{renderer-ynFRJh7G.mjs → renderer-CgK7Q1G8.mjs} +3 -3
- package/dist/{renderer-CR0mDPYY.mjs → renderer-CnL8Cmmr.mjs} +3 -3
- package/dist/renderer-CnhkXJ0R.mjs +5 -0
- package/dist/{renderer-fwKnV9zs.mjs → renderer-Cp_HOmp7.mjs} +5 -5
- package/dist/{renderer-fwKnV9zs.mjs.map → renderer-Cp_HOmp7.mjs.map} +1 -1
- package/dist/renderer-CqpyVsq_.mjs +5 -0
- package/dist/renderer-CtWgIpTE.mjs +5 -0
- package/dist/{renderer-riIFosX6.mjs → renderer-Cu3iKMSJ.mjs} +5 -5
- package/dist/{renderer-riIFosX6.mjs.map → renderer-Cu3iKMSJ.mjs.map} +1 -1
- package/dist/{renderer-D4f8f66C.mjs → renderer-CuPAQjDK.mjs} +4 -4
- package/dist/{renderer-D4f8f66C.mjs.map → renderer-CuPAQjDK.mjs.map} +1 -1
- package/dist/{renderer-CxGx1Lhi.mjs → renderer-CwlY8Tb-.mjs} +3 -3
- package/dist/{renderer-CxGx1Lhi.mjs.map → renderer-CwlY8Tb-.mjs.map} +1 -1
- package/dist/{renderer-o68mVeyk.mjs → renderer-CxSFvKd1.mjs} +4 -4
- package/dist/{renderer-o68mVeyk.mjs.map → renderer-CxSFvKd1.mjs.map} +1 -1
- package/dist/{renderer-CrR8Mpxq.mjs → renderer-CyUiXLRa.mjs} +5 -5
- package/dist/{renderer-CrR8Mpxq.mjs.map → renderer-CyUiXLRa.mjs.map} +1 -1
- package/dist/renderer-CyuKr5ca.mjs +5 -0
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-Bx14Wnxl.mjs → renderer-D-GWBoVT.mjs} +58 -4
- package/dist/renderer-D-GWBoVT.mjs.map +1 -0
- package/dist/{renderer-BwrfKKqw.mjs → renderer-D-fzEZfX.mjs} +4 -4
- package/dist/{renderer-BwrfKKqw.mjs.map → renderer-D-fzEZfX.mjs.map} +1 -1
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-DAn9xiQT.mjs → renderer-D8gN7aqk.mjs} +4 -4
- package/dist/{renderer-DAn9xiQT.mjs.map → renderer-D8gN7aqk.mjs.map} +1 -1
- package/dist/renderer-D9ON_1Hf.mjs +5 -0
- package/dist/renderer-DAnTgh4o.mjs +5 -0
- package/dist/{renderer-Dpl6poqD.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dpl6poqD.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/{renderer-Rw87u1Cr.mjs → renderer-DGb_wgTW.mjs} +6 -6
- package/dist/{renderer-Rw87u1Cr.mjs.map → renderer-DGb_wgTW.mjs.map} +1 -1
- package/dist/{renderer-Co6UFbZB.mjs → renderer-DJPZs_zV.mjs} +5 -5
- package/dist/{renderer-Co6UFbZB.mjs.map → renderer-DJPZs_zV.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/{renderer-DOkbn1ot.mjs → renderer-DOZPZTxe.mjs} +5 -5
- package/dist/{renderer-DOkbn1ot.mjs.map → renderer-DOZPZTxe.mjs.map} +1 -1
- package/dist/{renderer-DaXQgGg3.mjs → renderer-DRal7Goa.mjs} +5 -5
- package/dist/{renderer-DaXQgGg3.mjs.map → renderer-DRal7Goa.mjs.map} +1 -1
- package/dist/renderer-DWgpivA3.mjs +5 -0
- package/dist/{renderer-Bo7shNdU.mjs → renderer-DXFJv_e6.mjs} +4 -4
- package/dist/{renderer-Bo7shNdU.mjs.map → renderer-DXFJv_e6.mjs.map} +1 -1
- package/dist/renderer-Dh_qNNwR.mjs +5 -0
- package/dist/renderer-DkCpXPMP.mjs +5 -0
- package/dist/{renderer-eMCTAa9e.mjs → renderer-Dp5ChuOs.mjs} +4 -4
- package/dist/{renderer-eMCTAa9e.mjs.map → renderer-Dp5ChuOs.mjs.map} +1 -1
- package/dist/{renderer-1uoKiILq.mjs → renderer-DpZballM.mjs} +3 -3
- package/dist/{renderer-1uoKiILq.mjs.map → renderer-DpZballM.mjs.map} +1 -1
- package/dist/renderer-Dre-6cDR.mjs +5 -0
- package/dist/renderer-Ds5z4_HX.mjs +5 -0
- package/dist/{renderer-7ow5Acsg.mjs → renderer-DwGlDNOV.mjs} +3 -3
- package/dist/{renderer-7ow5Acsg.mjs.map → renderer-DwGlDNOV.mjs.map} +1 -1
- package/dist/{renderer-q7q6k_cD.mjs → renderer-DxB_OfLs.mjs} +4 -4
- package/dist/{renderer-q7q6k_cD.mjs.map → renderer-DxB_OfLs.mjs.map} +1 -1
- package/dist/{renderer-DFJWPqOJ.mjs → renderer-Dz6P-rPI.mjs} +3 -3
- package/dist/{renderer-DFJWPqOJ.mjs.map → renderer-Dz6P-rPI.mjs.map} +1 -1
- package/dist/{renderer-BURhYcpA.mjs → renderer-FPiLBwj5.mjs} +4 -4
- package/dist/{renderer-BURhYcpA.mjs.map → renderer-FPiLBwj5.mjs.map} +1 -1
- package/dist/renderer-HGSCOMyP.mjs +5 -0
- package/dist/renderer-KMY8W-cJ.mjs +5 -0
- package/dist/{renderer-D-QVGphn.mjs → renderer-KgsVk9c6.mjs} +4 -4
- package/dist/{renderer-D-QVGphn.mjs.map → renderer-KgsVk9c6.mjs.map} +1 -1
- package/dist/{renderer-COcKhouz.mjs → renderer-LXhEPCmy.mjs} +5 -5
- package/dist/{renderer-COcKhouz.mjs.map → renderer-LXhEPCmy.mjs.map} +1 -1
- package/dist/{renderer-HDj9Zb-O.mjs → renderer-NBMmvqWl.mjs} +20 -7
- package/dist/renderer-NBMmvqWl.mjs.map +1 -0
- package/dist/{renderer-DE9Jik9K.mjs → renderer-Nnu32rqg.mjs} +3 -3
- package/dist/{renderer-DE9Jik9K.mjs.map → renderer-Nnu32rqg.mjs.map} +1 -1
- package/dist/renderer-R21YvXz3.mjs +5 -0
- package/dist/{renderer-celhuAL7.mjs → renderer-RAq3LnNy.mjs} +3 -3
- package/dist/{renderer-celhuAL7.mjs.map → renderer-RAq3LnNy.mjs.map} +1 -1
- package/dist/renderer-RtzCz37W.mjs +5 -0
- package/dist/{renderer-50JEMaVo.mjs → renderer-RzkU_O1i.mjs} +5 -5
- package/dist/{renderer-50JEMaVo.mjs.map → renderer-RzkU_O1i.mjs.map} +1 -1
- package/dist/{renderer-Bbxh4N8Y.mjs → renderer-S9tVGneU.mjs} +95 -80
- package/dist/renderer-S9tVGneU.mjs.map +1 -0
- package/dist/{renderer-BSELd5vU.mjs → renderer-SJyp9-62.mjs} +3 -3
- package/dist/{renderer-BSELd5vU.mjs.map → renderer-SJyp9-62.mjs.map} +1 -1
- package/dist/{renderer-jnAIhWn_.mjs → renderer-_54hiCq0.mjs} +5 -5
- package/dist/{renderer-jnAIhWn_.mjs.map → renderer-_54hiCq0.mjs.map} +1 -1
- package/dist/{renderer-88C3QpKL.d.mts → renderer-aRk849b3.d.mts} +2 -2
- package/dist/{renderer-88C3QpKL.d.mts.map → renderer-aRk849b3.d.mts.map} +1 -1
- package/dist/{renderer-BQetXCcZ.mjs → renderer-dGEMVaZ3.mjs} +4 -4
- package/dist/{renderer-BQetXCcZ.mjs.map → renderer-dGEMVaZ3.mjs.map} +1 -1
- package/dist/{renderer-RvI3qRUI.mjs → renderer-dRXP2dJU.mjs} +5 -5
- package/dist/{renderer-RvI3qRUI.mjs.map → renderer-dRXP2dJU.mjs.map} +1 -1
- package/dist/{renderer-D06HxSXO.mjs → renderer-g9SstkTz.mjs} +3 -3
- package/dist/renderer-iMrqAjix.mjs +5 -0
- package/dist/{renderer-BJ-7WRgO.mjs → renderer-opVuiAQR.mjs} +3 -3
- package/dist/{renderer-BJ-7WRgO.mjs.map → renderer-opVuiAQR.mjs.map} +1 -1
- package/dist/{renderer-KKk7myX1.mjs → renderer-puQhVfDS.mjs} +5 -5
- package/dist/{renderer-KKk7myX1.mjs.map → renderer-puQhVfDS.mjs.map} +1 -1
- package/dist/renderer-sMed1u1O.mjs +5 -0
- package/dist/renderer-tsAuo46l.mjs +5 -0
- package/dist/{renderer-TKZCA0B9.mjs → renderer-vll8LX0I.mjs} +211 -72
- package/dist/renderer-vll8LX0I.mjs.map +1 -0
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs → renderers-CP8CFWDs-BRQyvcut.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs.map → renderers-CP8CFWDs-BRQyvcut.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +7 -7
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
- package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
- package/dist/{src-Bnr8DUC--BRDqRF6I.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +76 -11
- package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +1 -0
- package/dist/{src-BYp6r-cS.mjs → src-BzFGotRc.mjs} +250 -30
- package/dist/src-BzFGotRc.mjs.map +1 -0
- package/dist/storage/index.d.mts +206 -0
- package/dist/storage/index.d.mts.map +1 -0
- package/dist/storage/index.mjs +3 -0
- package/package.json +67 -59
- package/dist/audio-CYZkDwae.d.mts.map +0 -1
- package/dist/cloud-xcfV4J03.mjs +0 -233
- package/dist/cloud-xcfV4J03.mjs.map +0 -1
- package/dist/dist-CWLLnigL.mjs.map +0 -1
- package/dist/dist-CySGkG54.mjs.map +0 -1
- package/dist/dist-EQX3TUUl.mjs.map +0 -1
- package/dist/gpu-CpkJJLQP.mjs.map +0 -1
- package/dist/index-BuiZzc6i.d.mts.map +0 -1
- package/dist/index-CEU_Zsb9.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Cro-818i.d.mts.map +0 -1
- package/dist/index-D2i9J9Zq.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BToKUTtZ.mjs.map +0 -1
- package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
- package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
- package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
- package/dist/preview-engine/chunk-C4M3B2Q2.mjs +0 -1
- package/dist/preview-engine/chunk-CIVJXFWH.mjs +0 -4
- package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
- package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
- package/dist/preview-engine/chunk-M4QANUJI.mjs +0 -480
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-XF6DYP6B.mjs +0 -1974
- package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
- package/dist/preview-engine/renderers-2NGIILMI.mjs +0 -1
- package/dist/preview-engine/renderers-466Z77BH.mjs +0 -1
- package/dist/preview-engine/renderers-4KRENGZA.mjs +0 -1
- package/dist/preview-engine/renderers-4W52BQEU.mjs +0 -1
- package/dist/preview-engine/renderers-55PRAS7G.mjs +0 -1
- package/dist/preview-engine/renderers-5LLYINHW.mjs +0 -1
- package/dist/preview-engine/renderers-63N3Y2XO.mjs +0 -1
- package/dist/preview-engine/renderers-6ROVFDIN.mjs +0 -1
- package/dist/preview-engine/renderers-A4RVLPMG.mjs +0 -1
- package/dist/preview-engine/renderers-A53P4J6O.mjs +0 -1
- package/dist/preview-engine/renderers-AFJ3373L.mjs +0 -1
- package/dist/preview-engine/renderers-ATFWTA3U.mjs +0 -1
- package/dist/preview-engine/renderers-BPYJXHBU.mjs +0 -1
- package/dist/preview-engine/renderers-D3ZF7FXT.mjs +0 -1
- package/dist/preview-engine/renderers-D7YN6B4B.mjs +0 -1
- package/dist/preview-engine/renderers-DBLASKF5.mjs +0 -1
- package/dist/preview-engine/renderers-DC5ZYYHM.mjs +0 -1
- package/dist/preview-engine/renderers-J6ZEXW5L.mjs +0 -1
- package/dist/preview-engine/renderers-JV4MF46Q.mjs +0 -1
- package/dist/preview-engine/renderers-KQKH4ZIX.mjs +0 -1
- package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
- package/dist/preview-engine/renderers-MEITHN4N.mjs +0 -1
- package/dist/preview-engine/renderers-MN3HSBTJ.mjs +0 -1
- package/dist/preview-engine/renderers-NTG3QGNH.mjs +0 -1
- package/dist/preview-engine/renderers-OU4SFMB2.mjs +0 -1
- package/dist/preview-engine/renderers-P6TIBJIG.mjs +0 -1
- package/dist/preview-engine/renderers-POJWQ7L3.mjs +0 -1
- package/dist/preview-engine/renderers-RJ7S6VHD.mjs +0 -1
- package/dist/preview-engine/renderers-RJJAJZYN.mjs +0 -1
- package/dist/preview-engine/renderers-UEQ733VK.mjs +0 -1
- package/dist/preview-engine/renderers-ULO2AW2U.mjs +0 -1
- package/dist/preview-engine/renderers-UPVHGHCK.mjs +0 -1
- package/dist/preview-engine/renderers-UZHSNNIM.mjs +0 -1
- package/dist/preview-engine/renderers-V5KWZL2C.mjs +0 -1
- package/dist/preview-engine/renderers-WL372W36.mjs +0 -228
- package/dist/preview-engine/renderers-YMXKYOHQ.mjs +0 -1
- package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +0 -1
- package/dist/program-Bc860ko5.mjs.map +0 -1
- package/dist/renderer--Ymc_4XJ.mjs +0 -5
- package/dist/renderer-B-OdV-eq.mjs +0 -5
- package/dist/renderer-B65fwoA2.mjs +0 -5
- package/dist/renderer-B92Ahkcv.mjs +0 -5
- package/dist/renderer-B9z2AK31.mjs +0 -5
- package/dist/renderer-BIF3Dg3Z.mjs +0 -5
- package/dist/renderer-BJUVaIAT.mjs +0 -5
- package/dist/renderer-BKRDMbI-.mjs +0 -5
- package/dist/renderer-BSwhyVWa.mjs +0 -5
- package/dist/renderer-BUqSZn2X.mjs +0 -5
- package/dist/renderer-BVKOQarx.d.mts +0 -99
- package/dist/renderer-BVKOQarx.d.mts.map +0 -1
- package/dist/renderer-BbmvjqK9.mjs +0 -3
- package/dist/renderer-Bbxh4N8Y.mjs.map +0 -1
- package/dist/renderer-BhsrlGKp.mjs.map +0 -1
- package/dist/renderer-Bpe4k_x6.mjs +0 -5
- package/dist/renderer-Bx14Wnxl.mjs.map +0 -1
- package/dist/renderer-C1NjG0CJ.mjs +0 -5
- package/dist/renderer-C7Puyst9.mjs +0 -5
- package/dist/renderer-CGA_7320.mjs +0 -5
- package/dist/renderer-CLnFkXO7.mjs +0 -5
- package/dist/renderer-CMQIT1Kh.mjs +0 -5
- package/dist/renderer-CQ1rwjIh.mjs +0 -5
- package/dist/renderer-CT8h0boY.mjs +0 -5
- package/dist/renderer-Cb0lszt3.mjs +0 -5
- package/dist/renderer-Ci7oLye9.mjs +0 -5
- package/dist/renderer-CjqXB3CZ.mjs +0 -5
- package/dist/renderer-CqTV04zQ.mjs +0 -5
- package/dist/renderer-CtWeRtHK.mjs +0 -5
- package/dist/renderer-CzolnwCo.mjs +0 -5
- package/dist/renderer-D6qhcx_C.mjs +0 -5
- package/dist/renderer-DDfEf0jt.mjs +0 -5
- package/dist/renderer-DDpa8ztp.mjs +0 -5
- package/dist/renderer-DbQBqzmx.mjs +0 -5
- package/dist/renderer-DfUcwMKa.mjs +0 -5
- package/dist/renderer-DgIjNANM.mjs +0 -6
- package/dist/renderer-Dsh6Tgu0.mjs +0 -3
- package/dist/renderer-DuIwR9GT.mjs +0 -5
- package/dist/renderer-Dv4u2c14.mjs +0 -5
- package/dist/renderer-HDj9Zb-O.mjs.map +0 -1
- package/dist/renderer-IE1yu3lZ.mjs +0 -5
- package/dist/renderer-PY_wnEN0.mjs +0 -5
- package/dist/renderer-TKZCA0B9.mjs.map +0 -1
- package/dist/renderer-gv24VyzO.mjs +0 -5
- package/dist/renderer-nN6lPZf9.mjs +0 -5
- package/dist/src-BYp6r-cS.mjs.map +0 -1
- package/dist/src-Bnr8DUC--BRDqRF6I.mjs.map +0 -1
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
//#region ../storage/dist/index.d.mts
|
|
2
|
+
//#region src/manifest.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The `storage` and `assets` sections of a project's `framefields.json`.
|
|
5
|
+
*
|
|
6
|
+
* ```json
|
|
7
|
+
* {
|
|
8
|
+
* "storage": {
|
|
9
|
+
* "remotes": {
|
|
10
|
+
* "media": {
|
|
11
|
+
* "endpoint": "https://<account>.r2.cloudflarestorage.com",
|
|
12
|
+
* "bucket": "films",
|
|
13
|
+
* "publicUrl": "https://media.example.com"
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* },
|
|
17
|
+
* "assets": {
|
|
18
|
+
* "assets/footage/intro.mp4": { "sha256": "…", "size": 48213 }
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Assets are stored by content (`sha256/ab/<hash>`), so the manifest pins
|
|
24
|
+
* exact bytes the way a lockfile pins packages, and the files themselves
|
|
25
|
+
* stay out of git.
|
|
26
|
+
*/
|
|
27
|
+
/** An S3-compatible bucket: Cloudflare R2, AWS S3, Backblaze B2, MinIO, … */
|
|
28
|
+
interface StorageRemote {
|
|
29
|
+
/** The S3 API endpoint, e.g. `https://<account>.r2.cloudflarestorage.com`. */
|
|
30
|
+
endpoint: string;
|
|
31
|
+
bucket: string;
|
|
32
|
+
/** SigV4 region. Default `auto` (R2); AWS needs the bucket's region. */
|
|
33
|
+
region?: string;
|
|
34
|
+
/** Key prefix inside the bucket, e.g. `films/launch/`. */
|
|
35
|
+
prefix?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Where the bucket is publicly readable: a custom domain (an R2 custom
|
|
38
|
+
* domain or any CDN in front of the bucket) or the `r2.dev` URL. Reads use
|
|
39
|
+
* it instead of signed URLs, so anyone can pull and render without keys.
|
|
40
|
+
*/
|
|
41
|
+
publicUrl?: string;
|
|
42
|
+
}
|
|
43
|
+
interface StorageConfig {
|
|
44
|
+
/** The remote new assets go to. Default: the only remote. */
|
|
45
|
+
default?: string;
|
|
46
|
+
remotes: Record<string, StorageRemote>;
|
|
47
|
+
}
|
|
48
|
+
/** One file the project needs, pinned by content. */
|
|
49
|
+
interface AssetEntry {
|
|
50
|
+
sha256: string;
|
|
51
|
+
size: number;
|
|
52
|
+
/** The remote holding it. Default: `storage.default`. */
|
|
53
|
+
remote?: string;
|
|
54
|
+
/** A fixed https URL to fetch it from instead of a remote (public media). */
|
|
55
|
+
url?: string;
|
|
56
|
+
}
|
|
57
|
+
type AssetManifest = Record<string, AssetEntry>;
|
|
58
|
+
declare const REMOTE_NAME: RegExp;
|
|
59
|
+
declare const SHA256: RegExp;
|
|
60
|
+
declare class ManifestError extends Error {
|
|
61
|
+
name: string;
|
|
62
|
+
}
|
|
63
|
+
/** Validates `storage`; errors name the remote and field at fault. */
|
|
64
|
+
declare function parseStorage(value: unknown): StorageConfig;
|
|
65
|
+
/** Validates `assets`; errors name the path and field at fault. */
|
|
66
|
+
declare function parseAssets(value: unknown, storage?: StorageConfig): AssetManifest;
|
|
67
|
+
/** The remote an asset (or a new one, without `name`) belongs to. */
|
|
68
|
+
declare function pickRemote(storage: StorageConfig | undefined, name?: string): {
|
|
69
|
+
name: string;
|
|
70
|
+
remote: StorageRemote;
|
|
71
|
+
};
|
|
72
|
+
/** The object key holding `sha256`: `<prefix>sha256/ab/<hash>`. */
|
|
73
|
+
declare function objectKey(sha256: string, prefix?: string): string;
|
|
74
|
+
/** The asset's URL on the remote's public domain, if it has one. */
|
|
75
|
+
declare function publicUrl(remote: StorageRemote, sha256: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Where to download an asset without credentials: a signed URL handed in
|
|
78
|
+
* (`signed`, by sha256), its own `url`, or its remote's public domain.
|
|
79
|
+
* Undefined means the asset is on a private remote and needs a signature.
|
|
80
|
+
*/
|
|
81
|
+
declare function readUrl(entry: AssetEntry, storage: StorageConfig | undefined, signed?: Readonly<Record<string, string>>): string | undefined;
|
|
82
|
+
declare function isAssetPath(path: string): boolean;
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/bucket.d.ts
|
|
85
|
+
interface Credentials {
|
|
86
|
+
accessKeyId: string;
|
|
87
|
+
secretAccessKey: string;
|
|
88
|
+
sessionToken?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Keys for `remote` from the environment:
|
|
92
|
+
* `FRAMEFIELDS_STORAGE_<REMOTE>_ACCESS_KEY_ID` / `…_SECRET_ACCESS_KEY`
|
|
93
|
+
* (the remote's name upper-cased, `-` as `_`), else the standard
|
|
94
|
+
* `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`.
|
|
95
|
+
*/
|
|
96
|
+
declare function credentialsFromEnv(remote: string, env?: Readonly<Record<string, string | undefined>>): Credentials | undefined;
|
|
97
|
+
/** The env vars `credentialsFromEnv` reads for `remote`, for messages. */
|
|
98
|
+
declare function credentialEnvNames(remote: string): [string, string];
|
|
99
|
+
declare class StorageError extends Error {
|
|
100
|
+
readonly status?: number | undefined;
|
|
101
|
+
name: string;
|
|
102
|
+
constructor(message: string, status?: number | undefined);
|
|
103
|
+
}
|
|
104
|
+
interface UploadProgress {
|
|
105
|
+
sent: number;
|
|
106
|
+
total: number;
|
|
107
|
+
}
|
|
108
|
+
interface BucketOptions {
|
|
109
|
+
fetch?: typeof fetch;
|
|
110
|
+
/** Files above this go up in parts. Default 64 MiB. */
|
|
111
|
+
multipartThreshold?: number;
|
|
112
|
+
/** Default 16 MiB; grows so a file never needs more than 10,000 parts. */
|
|
113
|
+
partSize?: number;
|
|
114
|
+
/** Parts in flight at once. Default 4. */
|
|
115
|
+
concurrency?: number;
|
|
116
|
+
}
|
|
117
|
+
/** One remote's bucket, signed with `credentials`. */
|
|
118
|
+
declare class Bucket {
|
|
119
|
+
readonly remote: StorageRemote;
|
|
120
|
+
private readonly options;
|
|
121
|
+
private readonly aws;
|
|
122
|
+
private readonly fetch;
|
|
123
|
+
constructor(remote: StorageRemote, credentials: Credentials, options?: BucketOptions);
|
|
124
|
+
keyFor(sha256: string): string;
|
|
125
|
+
/** Whether the bucket holds `sha256` at the expected size. */
|
|
126
|
+
has(sha256: string, size: number): Promise<boolean>;
|
|
127
|
+
/**
|
|
128
|
+
* Uploads `file` (already hashed) under its content key. The bucket
|
|
129
|
+
* checks every byte against the sha256 sent with it.
|
|
130
|
+
*/
|
|
131
|
+
upload(file: string, digest: {
|
|
132
|
+
sha256: string;
|
|
133
|
+
size: number;
|
|
134
|
+
}, onProgress?: (p: UploadProgress) => void): Promise<void>;
|
|
135
|
+
/** A GET URL anyone can use until it expires (at most 7 days). */
|
|
136
|
+
presign(sha256: string, expiresSec?: number): Promise<string>;
|
|
137
|
+
private put;
|
|
138
|
+
private uploadParts;
|
|
139
|
+
private url;
|
|
140
|
+
private send;
|
|
141
|
+
private failure;
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/files.d.ts
|
|
145
|
+
type AssetErrorCode = "ASSET_NOT_FOUND" | "ASSET_FORBIDDEN" | "ASSET_DOWNLOAD_FAILED" | "ASSET_HASH_MISMATCH";
|
|
146
|
+
declare class AssetError extends Error {
|
|
147
|
+
readonly code: AssetErrorCode;
|
|
148
|
+
name: string;
|
|
149
|
+
constructor(code: AssetErrorCode, message: string, options?: {
|
|
150
|
+
cause?: unknown;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
interface FileDigest {
|
|
154
|
+
sha256: string;
|
|
155
|
+
size: number;
|
|
156
|
+
}
|
|
157
|
+
declare function hashFile(path: string): Promise<FileDigest>;
|
|
158
|
+
interface DownloadOptions {
|
|
159
|
+
fetch?: typeof fetch;
|
|
160
|
+
signal?: AbortSignal;
|
|
161
|
+
/** Attempts for network errors and 5xx/429 responses. Default 3. */
|
|
162
|
+
attempts?: number;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Downloads `url` to `dest` through a temporary file, and only renames it
|
|
166
|
+
* into place once its size and sha256 match `expected`.
|
|
167
|
+
*/
|
|
168
|
+
declare function downloadVerified(url: string, dest: string, expected: FileDigest, options?: DownloadOptions): Promise<void>;
|
|
169
|
+
/** Signed URLs carry credentials in the query: never print them. */
|
|
170
|
+
declare function redactQuery(url: string): string;
|
|
171
|
+
/** The Content-Type a CDN serves the file with. */
|
|
172
|
+
declare function contentType(path: string): string;
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region src/locate.d.ts
|
|
175
|
+
interface ProjectManifest {
|
|
176
|
+
storage?: StorageConfig;
|
|
177
|
+
assets: AssetManifest;
|
|
178
|
+
}
|
|
179
|
+
/** The nearest folder at or above `dir` holding a framefields.json. */
|
|
180
|
+
declare function findProjectDir(dir: string): string | undefined;
|
|
181
|
+
/** The `storage` and `assets` of the project at `dir`; undefined without assets. */
|
|
182
|
+
declare function readProjectManifest(dir: string): Promise<ProjectManifest | undefined>;
|
|
183
|
+
interface AssetLocator {
|
|
184
|
+
/** The project folder (where framefields.json is). */
|
|
185
|
+
readonly root: string;
|
|
186
|
+
/** The pinned entry for an absolute path, if the project pins it. */
|
|
187
|
+
entry(file: string): AssetEntry | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* A URL to read a pinned file from: its public domain or own URL, else
|
|
190
|
+
* a GET signed with the remote's keys from the environment. Undefined
|
|
191
|
+
* when the file isn't pinned, or is private and there are no keys.
|
|
192
|
+
*/
|
|
193
|
+
url(file: string): Promise<string | undefined>;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Pinned-asset lookup for the project at or above `dir`, or undefined when
|
|
197
|
+
* it pins none.
|
|
198
|
+
*/
|
|
199
|
+
declare function openAssetLocator(dir: string, options?: {
|
|
200
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
201
|
+
fetch?: typeof fetch;
|
|
202
|
+
}): Promise<AssetLocator | undefined>;
|
|
203
|
+
//#endregion
|
|
204
|
+
//#endregion
|
|
205
|
+
export { type AssetEntry, AssetError, type AssetErrorCode, type AssetLocator, type AssetManifest, Bucket, type BucketOptions, type Credentials, type DownloadOptions, type FileDigest, ManifestError, type ProjectManifest, REMOTE_NAME, SHA256, type StorageConfig, StorageError, type StorageRemote, type UploadProgress, contentType, credentialEnvNames, credentialsFromEnv, downloadVerified, findProjectDir, hashFile, isAssetPath, objectKey, openAssetLocator, parseAssets, parseStorage, pickRemote, publicUrl, readProjectManifest, readUrl, redactQuery };
|
|
206
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":["StorageRemote","StorageConfig","Record","AssetEntry","AssetManifest","REMOTE_NAME","RegExp","SHA256","ManifestError","Error","parseStorage","parseAssets","pickRemote","objectKey","publicUrl","readUrl","Readonly","isAssetPath","Credentials","credentialsFromEnv","credentialEnvNames","StorageError","UploadProgress","BucketOptions","fetch","Bucket","Promise","AssetErrorCode","AssetError","FileDigest","hashFile","DownloadOptions","AbortSignal","downloadVerified","redactQuery","contentType","ProjectManifest","findProjectDir","readProjectManifest","AssetLocator","openAssetLocator"],"sources":["../../../storage/dist/index.d.mts"],"sourcesContent":["//#region src/manifest.d.ts\n/**\n * The `storage` and `assets` sections of a project's `framefields.json`.\n *\n * ```json\n * {\n * \"storage\": {\n * \"remotes\": {\n * \"media\": {\n * \"endpoint\": \"https://<account>.r2.cloudflarestorage.com\",\n * \"bucket\": \"films\",\n * \"publicUrl\": \"https://media.example.com\"\n * }\n * }\n * },\n * \"assets\": {\n * \"assets/footage/intro.mp4\": { \"sha256\": \"…\", \"size\": 48213 }\n * }\n * }\n * ```\n *\n * Assets are stored by content (`sha256/ab/<hash>`), so the manifest pins\n * exact bytes the way a lockfile pins packages, and the files themselves\n * stay out of git.\n */\n/** An S3-compatible bucket: Cloudflare R2, AWS S3, Backblaze B2, MinIO, … */\ninterface StorageRemote {\n /** The S3 API endpoint, e.g. `https://<account>.r2.cloudflarestorage.com`. */\n endpoint: string;\n bucket: string;\n /** SigV4 region. Default `auto` (R2); AWS needs the bucket's region. */\n region?: string;\n /** Key prefix inside the bucket, e.g. `films/launch/`. */\n prefix?: string;\n /**\n * Where the bucket is publicly readable: a custom domain (an R2 custom\n * domain or any CDN in front of the bucket) or the `r2.dev` URL. Reads use\n * it instead of signed URLs, so anyone can pull and render without keys.\n */\n publicUrl?: string;\n}\ninterface StorageConfig {\n /** The remote new assets go to. Default: the only remote. */\n default?: string;\n remotes: Record<string, StorageRemote>;\n}\n/** One file the project needs, pinned by content. */\ninterface AssetEntry {\n sha256: string;\n size: number;\n /** The remote holding it. Default: `storage.default`. */\n remote?: string;\n /** A fixed https URL to fetch it from instead of a remote (public media). */\n url?: string;\n}\ntype AssetManifest = Record<string, AssetEntry>;\ndeclare const REMOTE_NAME: RegExp;\ndeclare const SHA256: RegExp;\ndeclare class ManifestError extends Error {\n name: string;\n}\n/** Validates `storage`; errors name the remote and field at fault. */\ndeclare function parseStorage(value: unknown): StorageConfig;\n/** Validates `assets`; errors name the path and field at fault. */\ndeclare function parseAssets(value: unknown, storage?: StorageConfig): AssetManifest;\n/** The remote an asset (or a new one, without `name`) belongs to. */\ndeclare function pickRemote(storage: StorageConfig | undefined, name?: string): {\n name: string;\n remote: StorageRemote;\n};\n/** The object key holding `sha256`: `<prefix>sha256/ab/<hash>`. */\ndeclare function objectKey(sha256: string, prefix?: string): string;\n/** The asset's URL on the remote's public domain, if it has one. */\ndeclare function publicUrl(remote: StorageRemote, sha256: string): string | undefined;\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 */\ndeclare function readUrl(entry: AssetEntry, storage: StorageConfig | undefined, signed?: Readonly<Record<string, string>>): string | undefined;\ndeclare function isAssetPath(path: string): boolean;\n//#endregion\n//#region src/bucket.d.ts\ninterface Credentials {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\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 */\ndeclare function credentialsFromEnv(remote: string, env?: Readonly<Record<string, string | undefined>>): Credentials | undefined;\n/** The env vars `credentialsFromEnv` reads for `remote`, for messages. */\ndeclare function credentialEnvNames(remote: string): [string, string];\ndeclare class StorageError extends Error {\n readonly status?: number | undefined;\n name: string;\n constructor(message: string, status?: number | undefined);\n}\ninterface UploadProgress {\n sent: number;\n total: number;\n}\ninterface BucketOptions {\n fetch?: typeof fetch;\n /** Files above this go up in parts. Default 64 MiB. */\n multipartThreshold?: number;\n /** Default 16 MiB; grows so a file never needs more than 10,000 parts. */\n partSize?: number;\n /** Parts in flight at once. Default 4. */\n concurrency?: number;\n}\n/** One remote's bucket, signed with `credentials`. */\ndeclare class Bucket {\n readonly remote: StorageRemote;\n private readonly options;\n private readonly aws;\n private readonly fetch;\n constructor(remote: StorageRemote, credentials: Credentials, options?: BucketOptions);\n keyFor(sha256: string): string;\n /** Whether the bucket holds `sha256` at the expected size. */\n has(sha256: string, size: number): Promise<boolean>;\n /**\n * Uploads `file` (already hashed) under its content key. The bucket\n * checks every byte against the sha256 sent with it.\n */\n upload(file: string, digest: {\n sha256: string;\n size: number;\n }, onProgress?: (p: UploadProgress) => void): Promise<void>;\n /** A GET URL anyone can use until it expires (at most 7 days). */\n presign(sha256: string, expiresSec?: number): Promise<string>;\n private put;\n private uploadParts;\n private url;\n private send;\n private failure;\n}\n//#endregion\n//#region src/files.d.ts\ntype AssetErrorCode = \"ASSET_NOT_FOUND\" | \"ASSET_FORBIDDEN\" | \"ASSET_DOWNLOAD_FAILED\" | \"ASSET_HASH_MISMATCH\";\ndeclare class AssetError extends Error {\n readonly code: AssetErrorCode;\n name: string;\n constructor(code: AssetErrorCode, message: string, options?: {\n cause?: unknown;\n });\n}\ninterface FileDigest {\n sha256: string;\n size: number;\n}\ndeclare function hashFile(path: string): Promise<FileDigest>;\ninterface DownloadOptions {\n fetch?: typeof fetch;\n signal?: AbortSignal;\n /** Attempts for network errors and 5xx/429 responses. Default 3. */\n attempts?: number;\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 */\ndeclare function downloadVerified(url: string, dest: string, expected: FileDigest, options?: DownloadOptions): Promise<void>;\n/** Signed URLs carry credentials in the query: never print them. */\ndeclare function redactQuery(url: string): string;\n/** The Content-Type a CDN serves the file with. */\ndeclare function contentType(path: string): string;\n//#endregion\n//#region src/locate.d.ts\ninterface ProjectManifest {\n storage?: StorageConfig;\n assets: AssetManifest;\n}\n/** The nearest folder at or above `dir` holding a framefields.json. */\ndeclare function findProjectDir(dir: string): string | undefined;\n/** The `storage` and `assets` of the project at `dir`; undefined without assets. */\ndeclare function readProjectManifest(dir: string): Promise<ProjectManifest | undefined>;\ninterface AssetLocator {\n /** The project folder (where framefields.json is). */\n readonly root: string;\n /** The pinned entry for an absolute path, if the project pins it. */\n entry(file: string): AssetEntry | undefined;\n /**\n * A URL to read a pinned file from: its public domain or own URL, else\n * a GET signed with the remote's keys from the environment. Undefined\n * when the file isn't pinned, or is private and there are no keys.\n */\n url(file: string): Promise<string | undefined>;\n}\n/**\n * Pinned-asset lookup for the project at or above `dir`, or undefined when\n * it pins none.\n */\ndeclare function openAssetLocator(dir: string, options?: {\n env?: Readonly<Record<string, string | undefined>>;\n fetch?: typeof fetch;\n}): Promise<AssetLocator | undefined>;\n//#endregion\nexport { type AssetEntry, AssetError, type AssetErrorCode, type AssetLocator, type AssetManifest, Bucket, type BucketOptions, type Credentials, type DownloadOptions, type FileDigest, ManifestError, type ProjectManifest, REMOTE_NAME, SHA256, type StorageConfig, StorageError, type StorageRemote, type UploadProgress, contentType, credentialEnvNames, credentialsFromEnv, downloadVerified, findProjectDir, hashFile, isAssetPath, objectKey, openAssetLocator, parseAssets, parseStorage, pickRemote, publicUrl, readProjectManifest, readUrl, redactQuery };\n//# sourceMappingURL=index.d.mts.map"],"mappings":";;;AA0BuB;AAkBN;AAGG;AAQO;AACM;AACL;AACa;AAImB;AAEwB;AAI7D;AAGG;AAEsB;;;;;;AAMiD;AACrE;AAGP;;;;;AAW+F,UApE1GA,aAAAA,CAsEOoB;EAAkB;EACK,QAK9BE,EAAAA,MAAAA;EAAc,MAIdC,EAAAA,MAAAA;EACY;EAUHvB,MAAAA,CAAAA,EAAAA,MAAAA;EAIGA;EAA4BkB,MAAAA,CAAAA,EAAAA,MAAAA;EAAuBK;;;;;EAalB,SAAA,CAAA,EAAA,MAAA;AAAA;AASpC,UAtGTtB,aAAAA,CAuGc;EACP0B;EAEGA,OAAAA,CAAAA,EAAAA,MAAAA;EAHalB,OAAAA,EApGtBP,MAoGsBO,CAAAA,MAAAA,EApGPT,aAoGOS,CAAAA;;AAAK;AAOlB,UAxGVN,UAAAA,CA4Ge;EAAuB,MACtC4B,EAAAA,MAAAA;EAEY,IAQLE,EAAAA,MAAAA;EAAsDJ;EAAsBE,MAAAA,CAAAA,EAAAA,MAAAA;EAAkBL;EAAO,GAAA,CAAA,EAAA,MAAA;AAAA;AAE1F,KAjHvBtB,aAAAA,GAAgBF,MAmHO,CAAA,MAAA,EAnHQC,UAmHR,CAAA;AAAA,cAlHdE,WAqHW,EArHEC,MAqHF;AAEF,cAtHTC,MAyHG8B,EAzHK/B,MAyHS;AAAA,cAxHjBE,aAAAA,SAAsBC,KAAAA,CA0HuB2B;EAAD,IAChDG,EAAAA,MAAAA;AAUkB;;iBAjIX7B,YAAAA,CAwITM,KAAAA,EAAAA,OAAAA,CAAAA,EAxIuCf,aAwIvCe;;iBAtISL,WAAAA,CAwIL4B,KAAAA,EAAAA,OAAAA,EAAAA,OAAAA,CAAAA,EAxI2CtC,aAwI3CsC,CAAAA,EAxI2DnC,aAwI3DmC;;iBAtIK3B,UAAAA,CAsIN,OAAA,EAtI0BX,aAsI1B,GAAA,SAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA;;UApIDD;;;iBAGOa,SAAAA;;iBAEAC,SAAAA,SAAkBd;;;;;;iBAMlBe,OAAAA,QAAeZ,qBAAqBF,oCAAoCe,SAASd;iBACjFe,WAAAA;;;UAGPC,WAAAA;;;;;;;;;;;iBAWOC,kBAAAA,uBAAyCH,SAASd,sCAAsCgB;;iBAExFE,kBAAAA;cACHC,YAAAA,SAAqBZ,KAAAA;;;;;UAKzBa,cAAAA;;;;UAIAC,aAAAA;iBACOC;;;;;;;;;cASHC,MAAAA;mBACKzB;;;;sBAIGA,4BAA4BkB,uBAAuBK;;;qCAGpCG;;;;;;;;sBAQfJ,0BAA0BI;;gDAEAA;;;;;;;;;KAS3CC,cAAAA;cACSC,UAAAA,SAAmBnB,KAAAA;iBAChBkB;;oBAEGA;;;;UAIVE,UAAAA;;;;iBAIOC,QAAAA,gBAAwBJ,QAAQG;UACvCE,eAAAA;iBACOP;WACNQ;;;;;;;;iBAQMC,gBAAAA,sCAAsDJ,sBAAsBE,kBAAkBL;;iBAE9FQ,WAAAA;;iBAEAC,WAAAA;;;UAGPC,eAAAA;YACEnC;UACFG;;;iBAGOiC,cAAAA;;iBAEAC,mBAAAA,eAAkCZ,QAAQU;UACjDG,YAAAA;;;;uBAIapC;;;;;;qBAMFuB;;;;;;iBAMJc,gBAAAA;QACTxB,SAASd;iBACAsB;IACbE,QAAQa"}
|
|
@@ -0,0 +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";
|
|
2
|
+
|
|
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.
|
|
3
|
+
"version": "2.13.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",
|
|
@@ -87,6 +87,12 @@
|
|
|
87
87
|
"import": "./dist/cloud/index.mjs",
|
|
88
88
|
"default": "./dist/cloud/index.mjs"
|
|
89
89
|
},
|
|
90
|
+
"./storage": {
|
|
91
|
+
"types": "./dist/storage/index.d.mts",
|
|
92
|
+
"development": "./src/storage/index.ts",
|
|
93
|
+
"import": "./dist/storage/index.mjs",
|
|
94
|
+
"default": "./dist/storage/index.mjs"
|
|
95
|
+
},
|
|
90
96
|
"./sam": {
|
|
91
97
|
"types": "./dist/sam/index.d.mts",
|
|
92
98
|
"development": "./src/sam/index.ts",
|
|
@@ -105,6 +111,7 @@
|
|
|
105
111
|
"@mediabunny/server": "^1.61.6",
|
|
106
112
|
"@napi-rs/webcodecs": "^1.3.1",
|
|
107
113
|
"@resvg/resvg-js": "^2.6.2",
|
|
114
|
+
"aws4fetch": "^1.0.20",
|
|
108
115
|
"d3-format": "^3.1.2",
|
|
109
116
|
"d3-scale": "^4.0.2",
|
|
110
117
|
"d3-shape": "^3.2.0",
|
|
@@ -138,64 +145,65 @@
|
|
|
138
145
|
"tsdown": "^0.19.0",
|
|
139
146
|
"typescript": "^5.8.3",
|
|
140
147
|
"vitest": "4.1.5",
|
|
141
|
-
"@framefields/
|
|
142
|
-
"@framefields/node-audio-compressor": "2.
|
|
143
|
-
"@framefields/
|
|
144
|
-
"@framefields/
|
|
145
|
-
"@framefields/
|
|
146
|
-
"@framefields/
|
|
147
|
-
"@framefields/
|
|
148
|
-
"@framefields/node-audio-fade": "2.
|
|
149
|
-
"@framefields/node-audio-reverb": "2.
|
|
150
|
-
"@framefields/node-audio-
|
|
151
|
-
"@framefields/node-audio-
|
|
152
|
-
"@framefields/node-
|
|
153
|
-
"@framefields/node-
|
|
154
|
-
"@framefields/node-
|
|
155
|
-
"@framefields/node-
|
|
156
|
-
"@framefields/node-
|
|
157
|
-
"@framefields/node-
|
|
158
|
-
"@framefields/node-
|
|
159
|
-
"@framefields/node-
|
|
160
|
-
"@framefields/node-blur": "2.
|
|
161
|
-
"@framefields/node-
|
|
162
|
-
"@framefields/node-
|
|
163
|
-
"@framefields/node-
|
|
164
|
-
"@framefields/node-
|
|
165
|
-
"@framefields/node-
|
|
166
|
-
"@framefields/node-levels": "2.
|
|
167
|
-
"@framefields/node-
|
|
168
|
-
"@framefields/node-
|
|
169
|
-
"@framefields/node-
|
|
170
|
-
"@framefields/node-modulate": "2.
|
|
171
|
-
"@framefields/node-
|
|
172
|
-
"@framefields/node-
|
|
173
|
-
"@framefields/node-
|
|
174
|
-
"@framefields/node-
|
|
175
|
-
"@framefields/node-
|
|
176
|
-
"@framefields/node-
|
|
177
|
-
"@framefields/node-
|
|
178
|
-
"@framefields/node-
|
|
179
|
-
"@framefields/node-
|
|
180
|
-
"@framefields/node-
|
|
181
|
-
"@framefields/node-
|
|
182
|
-
"@framefields/node-
|
|
183
|
-
"@framefields/node-
|
|
184
|
-
"@framefields/node-signal
|
|
185
|
-
"@framefields/node-
|
|
186
|
-
"@framefields/node-
|
|
187
|
-
"@framefields/node-
|
|
188
|
-
"@framefields/node-
|
|
189
|
-
"@framefields/node-
|
|
190
|
-
"@framefields/
|
|
191
|
-
"@framefields/
|
|
192
|
-
"@framefields/
|
|
193
|
-
"@framefields/
|
|
194
|
-
"@framefields/
|
|
195
|
-
"@framefields/
|
|
196
|
-
"@framefields/
|
|
197
|
-
"@framefields/webgpu-renderers": "2.
|
|
198
|
-
"@framefields/node-
|
|
148
|
+
"@framefields/ai": "2.13.0",
|
|
149
|
+
"@framefields/node-audio-compressor": "2.13.0",
|
|
150
|
+
"@framefields/client-utils": "2.13.0",
|
|
151
|
+
"@framefields/compositions": "2.13.0",
|
|
152
|
+
"@framefields/components": "2.13.0",
|
|
153
|
+
"@framefields/node-audio-noise-gate": "2.13.0",
|
|
154
|
+
"@framefields/core": "2.13.0",
|
|
155
|
+
"@framefields/node-audio-fade": "2.13.0",
|
|
156
|
+
"@framefields/node-audio-reverb": "2.13.0",
|
|
157
|
+
"@framefields/node-audio-parametric-eq": "2.13.0",
|
|
158
|
+
"@framefields/node-audio-delay": "2.13.0",
|
|
159
|
+
"@framefields/node-color-balance": "2.13.0",
|
|
160
|
+
"@framefields/node-crop": "2.13.0",
|
|
161
|
+
"@framefields/node-curves": "2.13.0",
|
|
162
|
+
"@framefields/node-colorkey": "2.13.0",
|
|
163
|
+
"@framefields/node-audio-signal-extractor": "2.13.0",
|
|
164
|
+
"@framefields/node-deflicker": "2.13.0",
|
|
165
|
+
"@framefields/node-displacement-map": "2.13.0",
|
|
166
|
+
"@framefields/node-film-grain": "2.13.0",
|
|
167
|
+
"@framefields/node-blur": "2.13.0",
|
|
168
|
+
"@framefields/node-gradient-map": "2.13.0",
|
|
169
|
+
"@framefields/node-high-pass": "2.13.0",
|
|
170
|
+
"@framefields/node-kenburns": "2.13.0",
|
|
171
|
+
"@framefields/node-liquify": "2.13.0",
|
|
172
|
+
"@framefields/node-corner-pin": "2.13.0",
|
|
173
|
+
"@framefields/node-levels": "2.13.0",
|
|
174
|
+
"@framefields/node-halftone-screen": "2.13.0",
|
|
175
|
+
"@framefields/node-lut": "2.13.0",
|
|
176
|
+
"@framefields/node-mask-math": "2.13.0",
|
|
177
|
+
"@framefields/node-modulate": "2.13.0",
|
|
178
|
+
"@framefields/node-mesh-warp": "2.13.0",
|
|
179
|
+
"@framefields/node-paint": "2.13.0",
|
|
180
|
+
"@framefields/node-patch-heal": "2.13.0",
|
|
181
|
+
"@framefields/node-particles": "2.13.0",
|
|
182
|
+
"@framefields/node-refraction-caustics": "2.13.0",
|
|
183
|
+
"@framefields/node-layer-style": "2.13.0",
|
|
184
|
+
"@framefields/node-refine-edge": "2.13.0",
|
|
185
|
+
"@framefields/node-rotate": "2.13.0",
|
|
186
|
+
"@framefields/node-sdk": "2.13.0",
|
|
187
|
+
"@framefields/node-selective-color": "2.13.0",
|
|
188
|
+
"@framefields/node-shadows-highlights": "2.13.0",
|
|
189
|
+
"@framefields/node-signal-gate": "2.13.0",
|
|
190
|
+
"@framefields/node-signal-math": "2.13.0",
|
|
191
|
+
"@framefields/node-signal": "2.13.0",
|
|
192
|
+
"@framefields/node-stereo-panning": "2.13.0",
|
|
193
|
+
"@framefields/node-unsharp-mask": "2.13.0",
|
|
194
|
+
"@framefields/node-tile-offset": "2.13.0",
|
|
195
|
+
"@framefields/node-vignette": "2.13.0",
|
|
196
|
+
"@framefields/node-vision": "2.13.0",
|
|
197
|
+
"@framefields/renderer": "2.13.0",
|
|
198
|
+
"@framefields/storage": "2.13.0",
|
|
199
|
+
"@framefields/renderers": "2.13.0",
|
|
200
|
+
"@framefields/tensor-webgpu": "2.13.0",
|
|
201
|
+
"@framefields/tsconfig": "2.13.0",
|
|
202
|
+
"@framefields/vision-sam": "2.13.0",
|
|
203
|
+
"@framefields/vision": "2.13.0",
|
|
204
|
+
"@framefields/webgpu-renderers": "2.13.0",
|
|
205
|
+
"@framefields/node-flip": "2.13.0",
|
|
206
|
+
"@framefields/node-relight-3d": "2.13.0"
|
|
199
207
|
},
|
|
200
208
|
"scripts": {
|
|
201
209
|
"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":"audio-CYZkDwae.d.mts","names":["_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../../nodes/node-modulate/dist/renderer.d.mts","../src/signals/audio.ts"],"sourcesContent":["import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;cAGcC,UAAUE,SAASH;;;;UCWhB,kBAAA,SAA2B;;;EDX9BC,WAAsE,CAAA,EAAA,UAAnDD,GAAAA,UAAAA,GAAAA,cAAD,GAAA,UAAA;;UCiBf,2BAAA;WACP;EAPO,IAAA,EAQV,WARU,CAAA,MAAmB,CAAA;EAMnB,IAAA,EAGV,WAHU,CAAA,MAAA,CAAA;EACP,MAAA,EAGD,WAHC,CAAA,MAAA,CAAA;EACH,WAAA,EAAA,MAAA;EACA,SAAA,EAAA,MAAA;EACE,UAAA,EAAA,MAAA;EAAW,WAAA,EAAA,OAAA;EAaH,OAAA,EAAA,OAAA;EAKA,aAAA,EAAA,OAAiB;EAE7B,UAAA,EAAA,OAAA;EAEQ,UAAA,EAAA,OAAA;EAEJ,YAAA,EAAA,OAAA;EACO,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAAgD,UAZ/C,iBAAA,SAA0B,qBAYqB,CAAA;EAAY,GAAA,CAAA,EAAA,MAAA;AAc5E;;AAIW,UAzBM,iBAAA,CAyBN;EACC;EAAR,EAAA,EAxBC,WAwBD,CAAA,MAAA,CAAA;EAoFO;EACC,UAAA,EA3GC,WA2GD,CAAA,MAAA,CAAA;EAAR;EAWQ,MAAA,EApHH,WAoHG,CAAA,MAAA,CAAA;EAED,OAAA,EAAA;IACC,EAAA,EAtHI,YAsHJ;IAAR,UAAA,EAtHsC,YAsHtC;IA4BO,MAAA,EAlJqD,YAkJrD;EACC,CAAA;EAAR,GAAA,EAAA,MAAA;EAAO,SAAA,EAAA,MAAA;;;cArIE;gCAED,8CAED,qBACP,QAAQ;oCAoFD,qBACP,QAAQ;;8BAWA,8CAED,oBACP,QAAQ;;kCA4BD,oBACP,QAAQ"}
|
package/dist/cloud-xcfV4J03.mjs
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { createWriteStream, realpathSync } from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import fs$1 from "node:fs/promises";
|
|
4
|
-
import { execFileSync } from "node:child_process";
|
|
5
|
-
import { Readable } from "node:stream";
|
|
6
|
-
import { pipeline } from "node:stream/promises";
|
|
7
|
-
|
|
8
|
-
//#region src/cloud/git-source.ts
|
|
9
|
-
/**
|
|
10
|
-
* Where a cloud render gets the project from: the git repo the working
|
|
11
|
-
* directory is in, at the commit checked out now. Cloud workers fetch from
|
|
12
|
-
* the remote, so that commit has to be pushed; uncommitted changes are not
|
|
13
|
-
* rendered.
|
|
14
|
-
*/
|
|
15
|
-
/** Reads repo, branch, commit and folder from git, and checks the commit is pushed. */
|
|
16
|
-
function resolveGitSource(cwd, entry) {
|
|
17
|
-
const git = (...args) => execFileSync("git", args, {
|
|
18
|
-
cwd,
|
|
19
|
-
encoding: "utf8",
|
|
20
|
-
stdio: [
|
|
21
|
-
"ignore",
|
|
22
|
-
"pipe",
|
|
23
|
-
"pipe"
|
|
24
|
-
]
|
|
25
|
-
}).trim();
|
|
26
|
-
let root;
|
|
27
|
-
try {
|
|
28
|
-
root = git("rev-parse", "--show-toplevel");
|
|
29
|
-
} catch {
|
|
30
|
-
throw new Error(`${cwd} is not in a git repository. Cloud renders fetch the project from git: commit it and push it to a remote first.`);
|
|
31
|
-
}
|
|
32
|
-
const workdir = path.relative(realpathSync(root), realpathSync(cwd)).split(path.sep).join("/") || ".";
|
|
33
|
-
const relEntry = path.relative(cwd, path.resolve(cwd, entry)).split(path.sep).join("/");
|
|
34
|
-
if (relEntry.startsWith("../") || path.isAbsolute(relEntry)) throw new Error(`${entry} is outside ${cwd}; run from the project folder that contains it.`);
|
|
35
|
-
const branch = git("rev-parse", "--abbrev-ref", "HEAD");
|
|
36
|
-
const commit = git("rev-parse", "HEAD");
|
|
37
|
-
const remoteName = upstreamRemote(git, branch) ?? "origin";
|
|
38
|
-
let remoteUrl;
|
|
39
|
-
try {
|
|
40
|
-
remoteUrl = git("remote", "get-url", remoteName);
|
|
41
|
-
} catch {
|
|
42
|
-
throw new Error(`The repository has no "${remoteName}" remote. Push the project to a git host first.`);
|
|
43
|
-
}
|
|
44
|
-
if (!git("branch", "-r", "--contains", commit)) throw new Error(`Commit ${commit.slice(0, 7)} is not on ${remoteName}. Push it first (\`git push\`): cloud workers fetch the project from the remote.`);
|
|
45
|
-
const dirty = git("status", "--porcelain", "--untracked-files=no", "--", ".");
|
|
46
|
-
return {
|
|
47
|
-
source: {
|
|
48
|
-
repo: toHttps(remoteUrl),
|
|
49
|
-
...branch !== "HEAD" && { ref: branch },
|
|
50
|
-
commit,
|
|
51
|
-
workdir
|
|
52
|
-
},
|
|
53
|
-
entry: relEntry,
|
|
54
|
-
warnings: dirty ? [`Uncommitted changes are not rendered: the cloud renders commit ${commit.slice(0, 7)}.`] : []
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
function upstreamRemote(git, branch) {
|
|
58
|
-
if (branch === "HEAD") return void 0;
|
|
59
|
-
try {
|
|
60
|
-
return git("config", `branch.${branch}.remote`) || void 0;
|
|
61
|
-
} catch {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** `git@github.com:acme/films.git` → `https://github.com/acme/films.git`; credentials dropped. */
|
|
66
|
-
function toHttps(url) {
|
|
67
|
-
const scp = /^[\w.-]+@([^:/]+):(.+)$/.exec(url);
|
|
68
|
-
if (scp) return `https://${scp[1]}/${scp[2]}`;
|
|
69
|
-
const parsed = URL.canParse(url) ? new URL(url) : void 0;
|
|
70
|
-
if (parsed && (parsed.protocol === "ssh:" || parsed.protocol === "git:")) return `https://${parsed.hostname}${parsed.pathname}`;
|
|
71
|
-
if (parsed?.protocol === "https:" || parsed?.protocol === "http:") {
|
|
72
|
-
parsed.username = "";
|
|
73
|
-
parsed.password = "";
|
|
74
|
-
return parsed.toString();
|
|
75
|
-
}
|
|
76
|
-
return url;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
//#endregion
|
|
80
|
-
//#region src/cloud/index.ts
|
|
81
|
-
/**
|
|
82
|
-
* Cloud renders on api.framefields.dev: the project renders from git on
|
|
83
|
-
* framefields' GPU workers, billed to the account that owns the API key.
|
|
84
|
-
*
|
|
85
|
-
* ```ts
|
|
86
|
-
* import { renderCloud } from "framefields/cloud";
|
|
87
|
-
*
|
|
88
|
-
* const result = await renderCloud({
|
|
89
|
-
* entry: "src/film.ts",
|
|
90
|
-
* workers: "auto", // split a long film across GPUs; 1 (default) renders on one
|
|
91
|
-
* outputPath: "output/film.mp4",
|
|
92
|
-
* onProgress: (s) => console.log(s.status, s.progress.frames),
|
|
93
|
-
* });
|
|
94
|
-
* ```
|
|
95
|
-
*
|
|
96
|
-
* `workers: "auto"` probes the film on one worker first, then splits it into
|
|
97
|
-
* as many chunks as stay efficient: short films stay on one worker, long ones
|
|
98
|
-
* spread out up to `maxWorkers`. `dryRun: true` returns that plan with the
|
|
99
|
-
* estimated cost and renders nothing. Aborting `signal` cancels the render;
|
|
100
|
-
* GPU time already used is charged.
|
|
101
|
-
*/
|
|
102
|
-
const FRAMEFIELDS_API_URL = "https://api.framefields.dev";
|
|
103
|
-
/** A cloud render that failed, was cancelled, or was refused by the API. */
|
|
104
|
-
var CloudRenderError = class extends Error {
|
|
105
|
-
constructor(message, code, status) {
|
|
106
|
-
super(message);
|
|
107
|
-
this.code = code;
|
|
108
|
-
this.status = status;
|
|
109
|
-
this.name = "CloudRenderError";
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
const DONE = new Set([
|
|
113
|
-
"planned",
|
|
114
|
-
"completed",
|
|
115
|
-
"failed",
|
|
116
|
-
"cancelled"
|
|
117
|
-
]);
|
|
118
|
-
/** Starts a cloud render and waits for it; resolves when it completed (or was planned). */
|
|
119
|
-
async function renderCloud(options) {
|
|
120
|
-
const api = cloudClient(options);
|
|
121
|
-
const cwd = options.cwd ?? process.cwd();
|
|
122
|
-
const resolved = options.source ? {
|
|
123
|
-
source: options.source,
|
|
124
|
-
entry: options.entry,
|
|
125
|
-
warnings: []
|
|
126
|
-
} : resolveGitSource(cwd, options.entry);
|
|
127
|
-
const warn = options.onWarning ?? ((m) => process.stderr.write(`framefields: ${m}\n`));
|
|
128
|
-
for (const w of resolved.warnings) warn(w);
|
|
129
|
-
let status = await api.start({
|
|
130
|
-
source: resolved.source,
|
|
131
|
-
target: {
|
|
132
|
-
entry: resolved.entry,
|
|
133
|
-
export: options.export ?? "buildFilm",
|
|
134
|
-
...options.args !== void 0 && { args: options.args },
|
|
135
|
-
...options.select && { select: [options.select] }
|
|
136
|
-
},
|
|
137
|
-
render: {
|
|
138
|
-
codec: options.codec ?? "h264",
|
|
139
|
-
...options.quality && { quality: options.quality }
|
|
140
|
-
},
|
|
141
|
-
workers: options.workers ?? 1,
|
|
142
|
-
...options.maxWorkers && { max_workers: options.maxWorkers },
|
|
143
|
-
dry_run: options.dryRun ?? false
|
|
144
|
-
});
|
|
145
|
-
options.onProgress?.(status);
|
|
146
|
-
try {
|
|
147
|
-
while (!DONE.has(status.status)) {
|
|
148
|
-
await sleep(options.pollMs ?? 3e3, options.signal);
|
|
149
|
-
status = await api.status(status.id);
|
|
150
|
-
options.onProgress?.(status);
|
|
151
|
-
}
|
|
152
|
-
} catch (err) {
|
|
153
|
-
if (options.signal?.aborted) throw new CloudRenderError("The cloud render was cancelled.", "cancelled", await api.cancel(status.id).catch(() => status));
|
|
154
|
-
throw err;
|
|
155
|
-
}
|
|
156
|
-
if (status.status === "failed" || status.status === "cancelled") throw new CloudRenderError(status.error ? `Cloud render ${status.status}: ${status.error.message} (${status.error.code})` : `Cloud render ${status.status}.`, status.error?.code ?? status.status, status);
|
|
157
|
-
if (status.status === "completed" && options.outputPath && status.output) {
|
|
158
|
-
await download(status.output.url, options.outputPath, options.signal);
|
|
159
|
-
return {
|
|
160
|
-
...status,
|
|
161
|
-
filePath: options.outputPath
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
return status;
|
|
165
|
-
}
|
|
166
|
-
/** The API calls behind `renderCloud`, for callers who track renders themselves. */
|
|
167
|
-
function cloudClient(options) {
|
|
168
|
-
const key = options.apiKey ?? process.env.FRAMEFIELDS_API_KEY;
|
|
169
|
-
if (!key) throw new CloudRenderError("No API key. Set FRAMEFIELDS_API_KEY (keys at https://framefields.dev/dashboard/keys) or pass apiKey.", "invalid_api_key");
|
|
170
|
-
const base = (options.apiUrl ?? process.env.FRAMEFIELDS_API_URL ?? FRAMEFIELDS_API_URL).replace(/\/+$/, "");
|
|
171
|
-
const call = async (method, route, body) => {
|
|
172
|
-
const res = await fetch(`${base}/v1/render${route}`, {
|
|
173
|
-
method,
|
|
174
|
-
headers: {
|
|
175
|
-
Authorization: `Bearer ${key}`,
|
|
176
|
-
"Content-Type": "application/json"
|
|
177
|
-
},
|
|
178
|
-
...body !== void 0 && { body: JSON.stringify(body) }
|
|
179
|
-
});
|
|
180
|
-
const json = await res.json().catch(() => ({}));
|
|
181
|
-
if (!res.ok) throw new CloudRenderError(json.error?.message ?? `api.framefields.dev answered HTTP ${res.status}`, json.error?.type ?? `http_${res.status}`);
|
|
182
|
-
return fromApi(json);
|
|
183
|
-
};
|
|
184
|
-
return {
|
|
185
|
-
start: (body) => call("POST", "", body),
|
|
186
|
-
status: (id) => call("GET", `/${encodeURIComponent(id)}`),
|
|
187
|
-
cancel: (id) => call("DELETE", `/${encodeURIComponent(id)}`)
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
function fromApi(s) {
|
|
191
|
-
return {
|
|
192
|
-
id: s.id,
|
|
193
|
-
status: s.status,
|
|
194
|
-
workers: s.workers ?? 1,
|
|
195
|
-
...s.plan && { plan: {
|
|
196
|
-
workers: s.plan.workers,
|
|
197
|
-
workSec: s.plan.work_sec,
|
|
198
|
-
etaSec: s.plan.eta_sec,
|
|
199
|
-
chunks: s.plan.chunks
|
|
200
|
-
} },
|
|
201
|
-
progress: {
|
|
202
|
-
frames: s.progress?.frames ?? 0,
|
|
203
|
-
totalFrames: s.progress?.total_frames ?? null,
|
|
204
|
-
etaSec: s.progress?.eta_sec ?? null
|
|
205
|
-
},
|
|
206
|
-
costUsd: s.cost_usd ?? 0,
|
|
207
|
-
gpuSeconds: s.gpu_seconds ?? 0,
|
|
208
|
-
...s.estimate_usd !== void 0 && { estimateUsd: s.estimate_usd },
|
|
209
|
-
...s.sha && { sha: s.sha },
|
|
210
|
-
...s.output && { output: s.output },
|
|
211
|
-
...s.error && { error: s.error }
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
async function download(url, file, signal) {
|
|
215
|
-
const res = await fetch(url, { signal });
|
|
216
|
-
if (!res.ok || !res.body) throw new CloudRenderError(`Downloading the render failed: HTTP ${res.status}`, "download_failed");
|
|
217
|
-
await fs$1.mkdir(path.dirname(path.resolve(file)), { recursive: true });
|
|
218
|
-
await pipeline(Readable.fromWeb(res.body), createWriteStream(file));
|
|
219
|
-
}
|
|
220
|
-
function sleep(ms, signal) {
|
|
221
|
-
return new Promise((resolve$1, reject) => {
|
|
222
|
-
if (signal?.aborted) return reject(signal.reason);
|
|
223
|
-
const timer = setTimeout(resolve$1, ms);
|
|
224
|
-
signal?.addEventListener("abort", () => {
|
|
225
|
-
clearTimeout(timer);
|
|
226
|
-
reject(signal.reason);
|
|
227
|
-
}, { once: true });
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
//#endregion
|
|
232
|
-
export { resolveGitSource as a, renderCloud as i, FRAMEFIELDS_API_URL as n, toHttps as o, cloudClient as r, CloudRenderError as t };
|
|
233
|
-
//# sourceMappingURL=cloud-xcfV4J03.mjs.map
|