hyperframes 0.8.191 → 0.8.193
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/dist/{add-S2ZQYG52.js → add-JC6DKZKC.js} +17 -17
- package/dist/{animatedGifPrep-3JA2CQ3U.js → animatedGifPrep-S6KXJGEL.js} +11 -10
- package/dist/api.js +24 -23
- package/dist/{appHistory-TH3TL6N6.js → appHistory-QVCSAOI4.js} +1 -1
- package/dist/{asset-2CNTAPOC.js → asset-XITFIFE6.js} +2 -2
- package/dist/{assetCataloger-5HXLXL7C.js → assetCataloger-K5FNKG35.js} +13 -12
- package/dist/{audio-DZTSYHXS.js → audio-364UHTY4.js} +22 -21
- package/dist/{auth-GX3M6TJ4.js → auth-5JEESRE6.js} +4 -4
- package/dist/{autoUpdate-EDIWE4Z5.js → autoUpdate-RVVYEHAA.js} +5 -5
- package/dist/{backgroundChecks-VPUPJ7UI.js → backgroundChecks-DCBIYWIQ.js} +5 -5
- package/dist/backgroundChecksWorker.js +5 -5
- package/dist/{batchRender-JHIIDBJR.js → batchRender-ZZ4QMBAA.js} +14 -7
- package/dist/{beats-PZRVTRYW.js → beats-YEL65M6G.js} +53 -15
- package/dist/{benchmark-22UFDW2N.js → benchmark-RBTRPA76.js} +18 -14
- package/dist/{browser-VRDWYIUM.js → browser-BVAYXT4R.js} +7 -7
- package/dist/{bundleWithLocalizedFonts-23QDKFSN.js → bundleWithLocalizedFonts-JLB2OYMT.js} +3 -3
- package/dist/{capture-TOCLXYMJ.js → capture-GBXTMYLZ.js} +76 -68
- package/dist/{capture-NFCBXHDE.js → capture-NIFX6IRS.js} +3 -3
- package/dist/{captureCompositionFrame-BEM6MF7F.js → captureCompositionFrame-ATNNKUL5.js} +17 -16
- package/dist/{catalog-NXS35KM7.js → catalog-AGIF5SM5.js} +18 -18
- package/dist/{catch-up-6WJBUI2C.js → catch-up-SZ3ULDTI.js} +7 -7
- package/dist/{check-WVEBMWN5.js → check-YLQS3TF4.js} +43 -42
- package/dist/{checkBrowser-RT45HJ36.js → checkBrowser-QH4FMCBO.js} +38 -37
- package/dist/{chunk-JOLZ3BSL.js → chunk-2LSCYS2H.js} +2 -2
- package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
- package/dist/{chunk-TADJOIFW.js → chunk-2NERNYCJ.js} +4 -4
- package/dist/{chunk-KGMHMYWI.js → chunk-2SFDWMSW.js} +2 -2
- package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
- package/dist/{chunk-3NRB7YXW.js → chunk-2VXY3PEF.js} +96 -67
- package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
- package/dist/{chunk-VYQYVYQ5.js → chunk-3W4B6G7Y.js} +83 -45
- package/dist/{chunk-JYSSPQDT.js → chunk-4LXZJIVY.js} +11 -11
- package/dist/{chunk-WHAEJX26.js → chunk-4PPWAQYV.js} +17 -12
- package/dist/{chunk-COWQITWP.js → chunk-4TKJWWPL.js} +1 -1
- package/dist/{chunk-NXMYHJAL.js → chunk-4VYPICIA.js} +29 -1
- package/dist/{chunk-RE3EEBWC.js → chunk-5J6TWLFG.js} +4 -4
- package/dist/{chunk-TFMZ4RKM.js → chunk-6DLCOQR4.js} +474 -429
- package/dist/{chunk-KV72BP7O.js → chunk-6LWUPIKD.js} +11 -11
- package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
- package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
- package/dist/{chunk-JJJCFKMF.js → chunk-6XUJVEY2.js} +17 -6
- package/dist/{chunk-GM3WIOO6.js → chunk-7HTH5PFK.js} +2 -2
- package/dist/{chunk-LBNEH6IQ.js → chunk-7QNIXBQD.js} +1 -1
- package/dist/{chunk-OV6KHXLX.js → chunk-7YKJF5JV.js} +1 -1
- package/dist/{chunk-COETAXRN.js → chunk-7YSFE4SZ.js} +2 -2
- package/dist/{chunk-3WJT2JCX.js → chunk-AR3DQYRR.js} +52 -23
- package/dist/{chunk-HYW6HTAK.js → chunk-BJAS2JLW.js} +2 -2
- package/dist/{chunk-RWYUK7LM.js → chunk-BP4EMEGH.js} +2 -2
- package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
- package/dist/{chunk-TMBUBLZB.js → chunk-C4Y3ZREE.js} +185 -46
- package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
- package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
- package/dist/{chunk-JGTRVG32.js → chunk-CGTZOY53.js} +1 -1
- package/dist/chunk-CZGHFATT.js +31 -0
- package/dist/{chunk-NJGTNWQY.js → chunk-D625D4TV.js} +6 -6
- package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
- package/dist/{chunk-CXMXJEVY.js → chunk-DSQ72G5I.js} +1 -1
- package/dist/{chunk-GLG5JWLI.js → chunk-DYNHVCBF.js} +2 -2
- package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
- package/dist/{chunk-EFCKV7MY.js → chunk-E77ALFLW.js} +1 -1
- package/dist/{chunk-WQ3X5OH4.js → chunk-EFXMETRK.js} +2 -2
- package/dist/{chunk-7KVVNF7B.js → chunk-ELP5QZWL.js} +1 -1
- package/dist/{chunk-QH3T4WI2.js → chunk-EXAX37XR.js} +8 -2
- package/dist/{chunk-7A65UCMI.js → chunk-F5LLORBP.js} +2 -2
- package/dist/{chunk-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
- package/dist/{chunk-XWOCXIKR.js → chunk-GKHMSSGY.js} +1 -1
- package/dist/{chunk-DOOSC34Z.js → chunk-GR5DQKDR.js} +8 -8
- package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
- package/dist/{chunk-NAUKCKCJ.js → chunk-KU3UFQN7.js} +9 -12
- package/dist/{chunk-NMDUSCCE.js → chunk-L4JB7LI4.js} +478 -129
- package/dist/{chunk-ALEF2F5N.js → chunk-L5YLA54L.js} +2 -2
- package/dist/{chunk-MSM6VRQ4.js → chunk-LFUVTS6V.js} +2 -2
- package/dist/{chunk-7ZJEQY7Q.js → chunk-LMNZLZMJ.js} +23 -3
- package/dist/{chunk-AQB5M53R.js → chunk-M3KZBDPB.js} +3 -3
- package/dist/{chunk-BFFLKQVB.js → chunk-MFUNDJEV.js} +4 -4
- package/dist/{chunk-7NKJS5KM.js → chunk-OFV3WSOE.js} +1 -1
- package/dist/{chunk-CINKQY6M.js → chunk-OFYW4J7Y.js} +3 -3
- package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
- package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
- package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
- package/dist/{chunk-TRZVS6TL.js → chunk-QKX7ITER.js} +3 -3
- package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
- package/dist/{chunk-TFGO5YMI.js → chunk-RTLPWOO6.js} +2 -2
- package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
- package/dist/chunk-RXATE6FZ.js +385 -0
- package/dist/{chunk-U5GTDAQL.js → chunk-SOY2FPOR.js} +7 -7
- package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
- package/dist/{chunk-RQBB7PYT.js → chunk-TY3LDJA3.js} +5 -12
- package/dist/{chunk-KAC2WR7P.js → chunk-TZEKVLPV.js} +3 -3
- package/dist/{chunk-TJKE4EYX.js → chunk-UB7BIDBS.js} +3 -3
- package/dist/{chunk-WY3TQ2PT.js → chunk-UIC7B5KW.js} +2 -2
- package/dist/{chunk-2WNVHZHA.js → chunk-UNATIAOT.js} +13 -13
- package/dist/chunk-USWPZXEA.js +3897 -0
- package/dist/{chunk-FBDOHH3Q.js → chunk-V7ZA2BNW.js} +29 -59
- package/dist/{chunk-7LUJE3II.js → chunk-VLLFORE2.js} +1 -1
- package/dist/{chunk-T5YF32WV.js → chunk-VPC4XIVI.js} +6 -5
- package/dist/{chunk-7FF36MAD.js → chunk-VW63MHQU.js} +9 -6
- package/dist/{chunk-ZHKUIC7X.js → chunk-WFS6S65A.js} +21 -14
- package/dist/{chunk-UNR3P7IF.js → chunk-WIVOXGEP.js} +3 -3
- package/dist/{chunk-3XI7MIZB.js → chunk-X5CECNCK.js} +1 -1
- package/dist/{chunk-KHCTBZGJ.js → chunk-XQPA4W3M.js} +4 -4
- package/dist/{chunk-XMSQRDAK.js → chunk-YS4JUGNI.js} +2 -2
- package/dist/{chunk-SMEF3TRJ.js → chunk-ZH7J2ZUL.js} +15 -15
- package/dist/{chunk-WJEVUPVD.js → chunk-ZT45TCY3.js} +1 -1
- package/dist/{chunk-JTPHFYZI.js → chunk-ZTKFRXJB.js} +68 -7
- package/dist/{chunk-W3CS2KFV.js → chunk-ZZPBXRYQ.js} +2 -2
- package/dist/{clean-3VIU2BSK.js → clean-5HGESK5A.js} +40 -27
- package/dist/cli.js +70 -68
- package/dist/{cloud-NA3J4XW2.js → cloud-746PHS32.js} +4 -4
- package/dist/{cloudrun-4MHOF7UT.js → cloudrun-DO7WFLSM.js} +9 -9
- package/dist/commands/contrast-audit.browser.js +1 -1
- package/dist/{compare-ZR7XRPPT.js → compare-66YPRNG2.js} +76 -47
- package/dist/{compiler-MA2ELZPG.js → compiler-R4UYDWXO.js} +8 -7
- package/dist/{component-ZJSOPUAM.js → component-EQ3H6RFP.js} +3 -3
- package/dist/{compositions-WA5V2SHF.js → compositions-ZZ7P5HT2.js} +19 -17
- package/dist/{contactSheet-CAGMKI3E.js → contactSheet-SZBJDOMT.js} +2 -2
- package/dist/{delete-UC427UEA.js → delete-Z5MSLJSR.js} +7 -7
- package/dist/{deploy-B5UO4UIK.js → deploy-RGSAC2K5.js} +1 -1
- package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
- package/dist/{dist-XGPSPKKP.js → dist-QQ26RUDV.js} +5 -4
- package/dist/{dist-BPK37SAB.js → dist-RKK4YLAD.js} +5 -5
- package/dist/{doctor-ZERCTKEK.js → doctor-W4ZZDRTU.js} +20 -19
- package/dist/{events-DCOZQERS.js → events-BSSL4A4W.js} +4 -4
- package/dist/{events-CNIXB2QK.js → events-UACT7PX3.js} +5 -5
- package/dist/{feedback-YBD5ITTY.js → feedback-47ILDLQG.js} +16 -16
- package/dist/{ffmpeg-V4BBFDTG.js → ffmpeg-IEHSUNUT.js} +13 -12
- package/dist/{figma-Z45ZYVGE.js → figma-PLFIIYRU.js} +3 -3
- package/dist/fontLocalizeCli.js +14 -13
- package/dist/{get-23NXQWCD.js → get-PDWGJYNL.js} +7 -7
- package/dist/{gpuPolicy-H6ABHVEB.js → gpuPolicy-6UBXO6ME.js} +11 -10
- package/dist/{grade-compare-ZPX2G3UV.js → grade-compare-5VWLQGM7.js} +38 -37
- package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
- package/dist/{help-EP4CDPLO.js → help-DS3KMWYO.js} +1 -1
- package/dist/{history-E5OSXO74.js → history-OC326NVZ.js} +41 -17
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +62 -62
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/hyperframes-slideshow.global.js +1 -1
- package/dist/{info-2HHGSW5H.js → info-AUIFV6MX.js} +56 -22
- package/dist/{init-ENEG6RZT.js → init-MRTWWDFW.js} +38 -45
- package/dist/{inspect-PVQK4E2A.js → inspect-55NOAXI2.js} +36 -35
- package/dist/{installer-YGGLEOSF.js → installer-YSFFGBBV.js} +8 -8
- package/dist/{keyframes-UWSYS2SL.js → keyframes-OO2BX2IB.js} +13 -14
- package/dist/{lambda-L3LPXC2M.js → lambda-CXXY6QT3.js} +11 -11
- package/dist/{layout-JVL4QREC.js → layout-57GJXKDK.js} +36 -35
- package/dist/{lint-JXQ72DDB.js → lint-J4FK3Z6G.js} +23 -16
- package/dist/{lintProject-F7IC7WY4.js → lintProject-52SLJPRC.js} +5 -4
- package/dist/{list-UFMLM3VV.js → list-VDQUJ76B.js} +7 -7
- package/dist/{login-CKGMWQJN.js → login-TJSEALWW.js} +7 -7
- package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
- package/dist/{manager-U6OP3EXB.js → manager-4PLYEEWP.js} +14 -13
- package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
- package/dist/{media-treatment-MFMEWCDY.js → media-treatment-GXP4PMJH.js} +20 -19
- package/dist/{models-QA3TJ75Y.js → models-HQQQKEEP.js} +18 -17
- package/dist/{motionShot-NV2OPJHD.js → motionShot-2BT5D7DC.js} +21 -20
- package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
- package/dist/{normalize-audio-JWJRUKK2.js → normalize-audio-SOLFMHNP.js} +12 -8
- package/dist/{open-PTJNDRER.js → open-KHEUODFQ.js} +18 -18
- package/dist/{parakeetRunner-B5FCWWOO.js → parakeetRunner-BHU5NCAX.js} +20 -19
- package/dist/{pipeline-N26NA6ZG.js → pipeline-WFV5HDTD.js} +15 -14
- package/dist/{play-45D6X6TV.js → play-GB34CANJ.js} +27 -26
- package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
- package/dist/{preflight-MFOHPUOI.js → preflight-REF3VSJ7.js} +15 -14
- package/dist/{present-IFBUDI4D.js → present-SIUTA7TD.js} +24 -23
- package/dist/{preview-MQRLXQOV.js → preview-T2GE7Z4A.js} +27 -26
- package/dist/{producer-2QG7HLAW.js → producer-23KVQZAB.js} +1 -1
- package/dist/{projectConfig-I4FTZXHB.js → projectConfig-DBSNBPNP.js} +10 -10
- package/dist/{publication-3GOFXCGU.js → publication-IXPUKYWJ.js} +5 -5
- package/dist/{publish-3B2TZCFH.js → publish-3BA5VHXJ.js} +18 -17
- package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
- package/dist/{remove-background-RK4BJDBF.js → remove-background-RMSCJVVQ.js} +16 -15
- package/dist/{render-SJ4HFPFU.js → render-6RNE2MLU.js} +26 -25
- package/dist/{render-PW3XGS7B.js → render-XGOZMMWX.js} +42 -41
- package/dist/{render-BV6FWFX3.js → render-Y6CTQ3YW.js} +8 -8
- package/dist/{render-batch-GKX54O6N.js → render-batch-VUR6N6EY.js} +9 -9
- package/dist/renderSetupWorker.js +9 -8
- package/dist/{resolver-RQJ7CNXD.js → resolver-GJCUH57W.js} +7 -7
- package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
- package/dist/{sherpa-XZPG7QFF.js → sherpa-VVAKRCPL.js} +19 -18
- package/dist/skills/hyperframes/references/format.md +1 -0
- package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
- package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
- package/dist/{skills-EYLB2V6F.js → skills-ZHBURVQG.js} +13 -75
- package/dist/{skillsUpdateCheck-TE6K5ROM.js → skillsUpdateCheck-VMDAL2O2.js} +5 -5
- package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
- package/dist/{snapshot-FE4T3SCN.js → snapshot-KEOG56SL.js} +61 -53
- package/dist/{src-ZOXSEJCD.js → src-BH5NICGQ.js} +24 -9
- package/dist/{src-SEJ7LNNB.js → src-TZLGFRRX.js} +13 -12
- package/dist/{staticProjectServer-LSVIRDRO.js → staticProjectServer-BKXL5CXB.js} +22 -21
- package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
- package/dist/studio/assets/{hyperframes-player-Bv9hQ3v7.js → hyperframes-player-BMcUdmDb.js} +3 -3
- package/dist/studio/assets/{index-CBO8uz7-.css → index-CYbvOVp-.css} +1 -1
- package/dist/studio/assets/{index-D_QqfWhx.js → index-Ca-mgTnS.js} +122 -122
- package/dist/studio/assets/{index-Df14bh-L.js → index-Ci6GuloR.js} +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/{studio-api-SL2Z76NU.js → studio-api-A5U6QAMC.js} +19 -14
- package/dist/{studioServer-BADWVIHU.js → studioServer-5EC5CP4W.js} +60 -59
- package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
- package/dist/{telemetry-RN6VYEID.js → telemetry-BCKJXDSW.js} +5 -5
- package/dist/{timeline-JBTCIPLU.js → timeline-AZWAXTAY.js} +65 -43
- package/dist/{tokens-A7V7UHNK.js → tokens-X7NC3V7C.js} +2 -2
- package/dist/{transcribe-E4BOSNM4.js → transcribe-7NCY7QZ2.js} +17 -16
- package/dist/{transcribe-NTUCJGFI.js → transcribe-SH26H755.js} +26 -25
- package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
- package/dist/{updateCheck-M7UAYLUR.js → updateCheck-Y7FUWQM4.js} +4 -4
- package/dist/{upgrade-A2COSIMB.js → upgrade-ZHGEVL65.js} +4 -4
- package/dist/{urlDownloader-MBSQYART.js → urlDownloader-FPILIT7M.js} +10 -9
- package/dist/{validate-NODZYBHY.js → validate-KQOZR4F6.js} +30 -29
- package/dist/{video-LBCUUYK7.js → video-N2QAETFB.js} +12 -11
- package/dist/warmCheck.js +43 -42
- package/package.json +2 -1
- package/dist/chunk-I5JRXMCV.js +0 -6077
- package/dist/chunk-LM265QNK.js +0 -3896
|
@@ -19,6 +19,10 @@ import {
|
|
|
19
19
|
resolveLocalAssetCandidates,
|
|
20
20
|
resolveProjectRelativeSrc
|
|
21
21
|
} from "./chunk-6BNTGNGD.js";
|
|
22
|
+
import {
|
|
23
|
+
TIMING_TOLERANCE_SECONDS,
|
|
24
|
+
resolveCompositionDuration
|
|
25
|
+
} from "./chunk-CZGHFATT.js";
|
|
22
26
|
import {
|
|
23
27
|
COMPOSITION_VARIABLE_TYPES,
|
|
24
28
|
FONT_ALIAS_KEYS,
|
|
@@ -26,9 +30,10 @@ import {
|
|
|
26
30
|
HTML_BODY_CSS_WIDTH_FIRST_RE,
|
|
27
31
|
VIEWPORT_META_SIZE_RE,
|
|
28
32
|
extractMediaSrcMutations,
|
|
33
|
+
isCompositionVariable,
|
|
29
34
|
isSafeMediaUrl,
|
|
30
35
|
resolveAliasDisplayName
|
|
31
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-PKZ7RK5N.js";
|
|
32
37
|
import {
|
|
33
38
|
COLOR_GRADING_SOURCE_TAGS,
|
|
34
39
|
COMPOSITION_ATTRIBUTES,
|
|
@@ -56,14 +61,12 @@ import {
|
|
|
56
61
|
isSceneLikeCompositionId,
|
|
57
62
|
parseSlideshowManifest,
|
|
58
63
|
resolveSlideshow
|
|
59
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-3422KMTD.js";
|
|
60
65
|
import {
|
|
61
66
|
base,
|
|
62
|
-
parse,
|
|
63
|
-
parseExpressionAt,
|
|
64
67
|
recursive,
|
|
65
68
|
simple
|
|
66
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-RXATE6FZ.js";
|
|
67
70
|
import {
|
|
68
71
|
__commonJS,
|
|
69
72
|
__require,
|
|
@@ -3708,30 +3711,10 @@ var require_dist = __commonJS({
|
|
|
3708
3711
|
});
|
|
3709
3712
|
|
|
3710
3713
|
// ../lint/dist/index.js
|
|
3714
|
+
import { parse } from "acorn";
|
|
3711
3715
|
var import_postcss_selector_parser = __toESM(require_dist(), 1);
|
|
3712
3716
|
import postcss from "postcss";
|
|
3713
|
-
|
|
3714
|
-
// ../parsers/dist/compositionDuration.js
|
|
3715
|
-
var TIMING_TOLERANCE_SECONDS = 0.05;
|
|
3716
|
-
var isPositiveFinite = (value) => value !== null && Number.isFinite(value) && value > 0;
|
|
3717
|
-
function resolveCompositionDuration(input) {
|
|
3718
|
-
const pendingClips = input.clipEndsSeconds.filter((end) => end === null).length;
|
|
3719
|
-
if (isPositiveFinite(input.authoredDurationSeconds)) {
|
|
3720
|
-
return { seconds: input.authoredDurationSeconds, source: "authored", pendingClips };
|
|
3721
|
-
}
|
|
3722
|
-
const known = input.clipEndsSeconds.filter(isPositiveFinite);
|
|
3723
|
-
if (known.length > 0) {
|
|
3724
|
-
return { seconds: Math.max(...known), source: "derived", pendingClips };
|
|
3725
|
-
}
|
|
3726
|
-
return {
|
|
3727
|
-
seconds: null,
|
|
3728
|
-
source: "unresolved",
|
|
3729
|
-
pendingClips,
|
|
3730
|
-
reason: pendingClips > 0 ? "every clip's length is still pending" : "no authored duration and no clip with a length"
|
|
3731
|
-
};
|
|
3732
|
-
}
|
|
3733
|
-
|
|
3734
|
-
// ../lint/dist/index.js
|
|
3717
|
+
import { parse as parse2 } from "acorn";
|
|
3735
3718
|
import postcss2 from "postcss";
|
|
3736
3719
|
import postcss3 from "postcss";
|
|
3737
3720
|
|
|
@@ -3770,6 +3753,7 @@ function trackKindOf(node) {
|
|
|
3770
3753
|
}
|
|
3771
3754
|
|
|
3772
3755
|
// ../lint/dist/index.js
|
|
3756
|
+
import { parse as parse3, parseExpressionAt } from "acorn";
|
|
3773
3757
|
import { createHash } from "crypto";
|
|
3774
3758
|
import { existsSync as existsSync2, readFileSync, readdirSync } from "fs";
|
|
3775
3759
|
import { dirname as dirname2, extname, join as join3, relative as relative2, resolve } from "path";
|
|
@@ -3895,6 +3879,7 @@ function resolveReferencedDuration(doc, el, startCache, visiting) {
|
|
|
3895
3879
|
}
|
|
3896
3880
|
|
|
3897
3881
|
// ../lint/dist/index.js
|
|
3882
|
+
import postcss4 from "postcss";
|
|
3898
3883
|
import { execFile } from "child_process";
|
|
3899
3884
|
import { existsSync } from "fs";
|
|
3900
3885
|
import { join } from "path";
|
|
@@ -6457,7 +6442,7 @@ function callsFor(script) {
|
|
|
6457
6442
|
if (cached) return cached;
|
|
6458
6443
|
const calls = [];
|
|
6459
6444
|
try {
|
|
6460
|
-
const ast =
|
|
6445
|
+
const ast = parse2(script.content, {
|
|
6461
6446
|
ecmaVersion: "latest",
|
|
6462
6447
|
sourceType: "script",
|
|
6463
6448
|
allowReturnOutsideFunction: true
|
|
@@ -6783,6 +6768,16 @@ function variablesDeclarationFindings(tag, tags) {
|
|
|
6783
6768
|
});
|
|
6784
6769
|
continue;
|
|
6785
6770
|
}
|
|
6771
|
+
if (!isCompositionVariable(e)) {
|
|
6772
|
+
findings.push({
|
|
6773
|
+
code: "invalid_composition_variables_declaration",
|
|
6774
|
+
severity: "error",
|
|
6775
|
+
message: `data-composition-variables entry [${i}] has a default that does not match its type, or an enum without an options array.`,
|
|
6776
|
+
fixHint: "Use number defaults for number variables, boolean defaults for boolean variables, and string defaults for other types. Enum variables also require an options array.",
|
|
6777
|
+
snippet: truncateSnippet(tag.raw)
|
|
6778
|
+
});
|
|
6779
|
+
continue;
|
|
6780
|
+
}
|
|
6786
6781
|
const id = String(e.id);
|
|
6787
6782
|
if ((e.type === "image" || varSrcIds.has(id)) && typeof e.default === "string" && e.default.length > 0 && !isSafeMediaUrl(e.default)) {
|
|
6788
6783
|
findings.push({
|
|
@@ -7681,11 +7676,11 @@ function deriveDurationFromClips(tags, rootTag) {
|
|
|
7681
7676
|
return resolveCompositionDuration({ authoredDurationSeconds: null, clipEndsSeconds: clipEnds });
|
|
7682
7677
|
}
|
|
7683
7678
|
async function loadParseGsapScript() {
|
|
7684
|
-
const mod = await import("./gsapParserAcorn-
|
|
7679
|
+
const mod = await import("./gsapParserAcorn-OOTY2MVN.js");
|
|
7685
7680
|
return mod.parseGsapScriptAcorn;
|
|
7686
7681
|
}
|
|
7687
7682
|
async function loadGsapScriptMotionPathFirstUseIndex() {
|
|
7688
|
-
const mod = await import("./gsapParserAcorn-
|
|
7683
|
+
const mod = await import("./gsapParserAcorn-OOTY2MVN.js");
|
|
7689
7684
|
return mod.gsapScriptMotionPathFirstUseIndex;
|
|
7690
7685
|
}
|
|
7691
7686
|
var SCENE_BOUNDARY_EPSILON_SECONDS = 0.05;
|
|
@@ -8819,7 +8814,7 @@ ${right.raw}`)
|
|
|
8819
8814
|
return findings;
|
|
8820
8815
|
},
|
|
8821
8816
|
// gsap_timeline_registered_before_async_build — registering window.__timelines[id]
|
|
8822
|
-
// BEFORE the timeline is built inside
|
|
8817
|
+
// BEFORE the timeline is built inside a font-ready callback
|
|
8823
8818
|
// leaves an EMPTY timeline registered. The runtime's sub-composition readiness gate
|
|
8824
8819
|
// treats "key present" as "ready" and nests the child ONCE, while still empty — so the
|
|
8825
8820
|
// animation never renders when this composition is mounted as a sub-composition.
|
|
@@ -8828,9 +8823,11 @@ ${right.raw}`)
|
|
|
8828
8823
|
const findings = [];
|
|
8829
8824
|
for (const script of scripts) {
|
|
8830
8825
|
const content = stripJsComments(script.content);
|
|
8831
|
-
const regIdx = content.search(
|
|
8826
|
+
const regIdx = content.search(
|
|
8827
|
+
/window\s*\.\s*__timelines\s*(?:\[[^\]]+\]|\.\s*[A-Za-z_$][\w$]*)\s*=\s*(?!=)/
|
|
8828
|
+
);
|
|
8832
8829
|
if (regIdx < 0) continue;
|
|
8833
|
-
const fontsReadyIdx = content.search(/document\s*\.\s*fonts\s*\.\s*ready/);
|
|
8830
|
+
const fontsReadyIdx = content.search(/document\s*\.\s*fonts\s*\.\s*(?:ready\b|load\s*\()/);
|
|
8834
8831
|
if (fontsReadyIdx < 0) continue;
|
|
8835
8832
|
if (regIdx >= fontsReadyIdx) continue;
|
|
8836
8833
|
const tail = content.slice(fontsReadyIdx);
|
|
@@ -8838,8 +8835,8 @@ ${right.raw}`)
|
|
|
8838
8835
|
findings.push({
|
|
8839
8836
|
code: "gsap_timeline_registered_before_async_build",
|
|
8840
8837
|
severity: "error",
|
|
8841
|
-
message: 'window.__timelines is assigned BEFORE the timeline is built inside document.fonts.ready. An empty timeline registered early gets nested empty when this composition is used as a sub-composition (the readiness gate treats "key present" as "ready" and never re-nests), so the animation renders blank.',
|
|
8842
|
-
fixHint: "Move the `window.__timelines[id] = tl;` assignment to the END of the
|
|
8838
|
+
message: 'window.__timelines is assigned BEFORE the timeline is built inside document.fonts.ready or document.fonts.load(). An empty timeline registered early gets nested empty when this composition is used as a sub-composition (the readiness gate treats "key present" as "ready" and never re-nests), so the animation renders blank.',
|
|
8839
|
+
fixHint: "Move the `window.__timelines[id] = tl;` assignment to the END of the font-ready callback, after the tweens are added. Optionally call window.__hfForceTimelineRebind() right after, to re-nest the populated timeline."
|
|
8843
8840
|
});
|
|
8844
8841
|
}
|
|
8845
8842
|
return findings;
|
|
@@ -9868,22 +9865,29 @@ var GENERIC_FAMILIES = /* @__PURE__ */ new Set([
|
|
|
9868
9865
|
"unset",
|
|
9869
9866
|
"revert"
|
|
9870
9867
|
]);
|
|
9871
|
-
function
|
|
9872
|
-
|
|
9868
|
+
function parseFontCss(css) {
|
|
9869
|
+
try {
|
|
9870
|
+
return postcss3.parse(css);
|
|
9871
|
+
} catch {
|
|
9872
|
+
return null;
|
|
9873
|
+
}
|
|
9874
|
+
}
|
|
9875
|
+
function isFontFaceDeclaration(decl) {
|
|
9876
|
+
let parent = decl.parent;
|
|
9877
|
+
while (parent) {
|
|
9878
|
+
if (parent.type === "atrule" && parent.name.toLowerCase() === "font-face") return true;
|
|
9879
|
+
parent = parent.parent;
|
|
9880
|
+
}
|
|
9881
|
+
return false;
|
|
9873
9882
|
}
|
|
9874
9883
|
function extractFontFaceFamilies(styles) {
|
|
9875
9884
|
const families = /* @__PURE__ */ new Set();
|
|
9876
|
-
const fontFaceRe = /@font-face\s*\{[^}]*\}/gi;
|
|
9877
|
-
const familyRe = /font-family\s*:\s*(['"]?)([^;'"]+)\1/i;
|
|
9878
9885
|
for (const style of styles) {
|
|
9879
|
-
|
|
9880
|
-
|
|
9881
|
-
|
|
9882
|
-
|
|
9883
|
-
|
|
9884
|
-
families.add(familyMatch[2].trim().toLowerCase());
|
|
9885
|
-
}
|
|
9886
|
-
}
|
|
9886
|
+
parseFontCss(style.content)?.walkDecls(/^font-family$/i, (decl) => {
|
|
9887
|
+
if (!isFontFaceDeclaration(decl)) return;
|
|
9888
|
+
const name = normalizeUsedFontName(decl.value);
|
|
9889
|
+
if (name) families.add(name);
|
|
9890
|
+
});
|
|
9887
9891
|
}
|
|
9888
9892
|
return families;
|
|
9889
9893
|
}
|
|
@@ -9892,22 +9896,43 @@ function normalizeUsedFontName(part) {
|
|
|
9892
9896
|
if (!name || name.includes("(") || name.includes(")")) return null;
|
|
9893
9897
|
return name;
|
|
9894
9898
|
}
|
|
9899
|
+
function collectFontCustomProperties(styles) {
|
|
9900
|
+
const properties = /* @__PURE__ */ new Map();
|
|
9901
|
+
for (const style of styles) {
|
|
9902
|
+
parseFontCss(style.content)?.walkDecls(/^--/, (decl) => {
|
|
9903
|
+
if (!isFontFaceDeclaration(decl)) properties.set(decl.prop, decl.value);
|
|
9904
|
+
});
|
|
9905
|
+
}
|
|
9906
|
+
return properties;
|
|
9907
|
+
}
|
|
9908
|
+
function resolveUsedFontNames(value, properties, resolving = /* @__PURE__ */ new Set()) {
|
|
9909
|
+
return postcss3.list.comma(value).flatMap((part) => {
|
|
9910
|
+
const variable = /^var\(\s*(--[^\s,()]+)\s*(?:,[\s\S]*)?\)$/i.exec(part.trim());
|
|
9911
|
+
if (!variable) {
|
|
9912
|
+
const name = normalizeUsedFontName(part);
|
|
9913
|
+
return name ? [name] : [];
|
|
9914
|
+
}
|
|
9915
|
+
const property = variable[1];
|
|
9916
|
+
if (!property || resolving.has(property) || resolving.size >= 8) return [];
|
|
9917
|
+
const referenced = properties.get(property);
|
|
9918
|
+
if (referenced === void 0) return [];
|
|
9919
|
+
return resolveUsedFontNames(referenced, properties, new Set(resolving).add(property));
|
|
9920
|
+
});
|
|
9921
|
+
}
|
|
9895
9922
|
function extractUsedFontFamilies(styles) {
|
|
9896
9923
|
const used = [];
|
|
9897
9924
|
const seen = /* @__PURE__ */ new Set();
|
|
9898
|
-
const
|
|
9925
|
+
const properties = collectFontCustomProperties(styles);
|
|
9899
9926
|
for (const style of styles) {
|
|
9900
|
-
|
|
9901
|
-
|
|
9902
|
-
|
|
9903
|
-
|
|
9904
|
-
const name = normalizeUsedFontName(part);
|
|
9905
|
-
if (name && !GENERIC_FAMILIES.has(name) && !seen.has(name)) {
|
|
9927
|
+
parseFontCss(style.content)?.walkDecls(/^font-family$/i, (decl) => {
|
|
9928
|
+
if (isFontFaceDeclaration(decl)) return;
|
|
9929
|
+
for (const name of resolveUsedFontNames(decl.value, properties)) {
|
|
9930
|
+
if (!GENERIC_FAMILIES.has(name) && !seen.has(name)) {
|
|
9906
9931
|
seen.add(name);
|
|
9907
9932
|
used.push(name);
|
|
9908
9933
|
}
|
|
9909
9934
|
}
|
|
9910
|
-
}
|
|
9935
|
+
});
|
|
9911
9936
|
}
|
|
9912
9937
|
return used;
|
|
9913
9938
|
}
|
|
@@ -10010,15 +10035,12 @@ var fontRules = [
|
|
|
10010
10035
|
];
|
|
10011
10036
|
function uniqueFontLocation(styles, families, locate) {
|
|
10012
10037
|
const locations = [];
|
|
10038
|
+
const properties = collectFontCustomProperties(styles);
|
|
10013
10039
|
for (const style of styles) {
|
|
10014
10040
|
try {
|
|
10015
10041
|
postcss3.parse(style.content).walkDecls(/^font-family$/i, (decl) => {
|
|
10016
|
-
|
|
10017
|
-
|
|
10018
|
-
if (parent.type === "atrule" && parent.name.toLowerCase() === "font-face") return;
|
|
10019
|
-
parent = parent.parent;
|
|
10020
|
-
}
|
|
10021
|
-
if (!decl.value.split(",").some((part) => families.includes(normalizeUsedFontName(part) ?? "")))
|
|
10042
|
+
if (isFontFaceDeclaration(decl)) return;
|
|
10043
|
+
if (!resolveUsedFontNames(decl.value, properties).some((name) => families.includes(name)))
|
|
10022
10044
|
return;
|
|
10023
10045
|
locations.push(locate(style, decl.source?.start?.offset));
|
|
10024
10046
|
});
|
|
@@ -10026,7 +10048,7 @@ function uniqueFontLocation(styles, families, locate) {
|
|
|
10026
10048
|
return {};
|
|
10027
10049
|
}
|
|
10028
10050
|
}
|
|
10029
|
-
return locations.length === 1 ? locations[0] : {};
|
|
10051
|
+
return locations.length === 1 ? locations[0] ?? {} : {};
|
|
10030
10052
|
}
|
|
10031
10053
|
function parseTiming(raw) {
|
|
10032
10054
|
const startStr = readAttr(raw, "data-start");
|
|
@@ -10295,7 +10317,7 @@ function withoutComments(source) {
|
|
|
10295
10317
|
function staticShaders(source) {
|
|
10296
10318
|
const shaders = [];
|
|
10297
10319
|
try {
|
|
10298
|
-
const ast =
|
|
10320
|
+
const ast = parse3(source, {
|
|
10299
10321
|
ecmaVersion: "latest",
|
|
10300
10322
|
sourceType: "module",
|
|
10301
10323
|
allowReturnOutsideFunction: true
|
|
@@ -10826,6 +10848,7 @@ function contentDigest(html) {
|
|
|
10826
10848
|
return createHash("sha256").update(html).digest("hex").slice(0, 16);
|
|
10827
10849
|
}
|
|
10828
10850
|
var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set([".mp3", ".wav", ".aac", ".ogg", ".m4a", ".flac", ".opus"]);
|
|
10851
|
+
var CSS_URL_RE = /\burl\(\s*(?:"([^"]+)"|'([^']+)'|([^"')\s]+))\s*\)/gi;
|
|
10829
10852
|
var MASK_IMAGE_URL_RE = /\b(?:-webkit-)?mask-image\s*:\s*[^;{}]*url\(\s*(?:"([^"]+)"|'([^']+)'|([^"')\s]+))\s*\)/gi;
|
|
10830
10853
|
function isLocalStylesheetHref(href) {
|
|
10831
10854
|
return !!href && !/^(https?:|data:|blob:|\/\/)/i.test(href);
|
|
@@ -11118,9 +11141,16 @@ function lintTextureMaskAssetNotFound(projectDir, htmlSources) {
|
|
|
11118
11141
|
for (const { html, compSrcPath } of htmlSources) {
|
|
11119
11142
|
const file = sourceFile(projectDir, compSrcPath);
|
|
11120
11143
|
for (const cssSource of collectCssSources(projectDir, html, compSrcPath)) {
|
|
11121
|
-
let
|
|
11122
|
-
|
|
11123
|
-
|
|
11144
|
+
let matches = [];
|
|
11145
|
+
try {
|
|
11146
|
+
postcss4.parse(cssSource.content).walkDecls(/^(?:-webkit-)?mask-image$/i, (declaration) => {
|
|
11147
|
+
matches.push(...declaration.value.matchAll(CSS_URL_RE));
|
|
11148
|
+
});
|
|
11149
|
+
} catch (error) {
|
|
11150
|
+
if (!(error instanceof postcss4.CssSyntaxError)) throw error;
|
|
11151
|
+
matches = [...cssSource.content.matchAll(MASK_IMAGE_URL_RE)];
|
|
11152
|
+
}
|
|
11153
|
+
for (const match of matches) {
|
|
11124
11154
|
const rawUrl = match[1] ?? match[2] ?? match[3] ?? "";
|
|
11125
11155
|
if (isUnresolvedAssetPlaceholder(rawUrl)) continue;
|
|
11126
11156
|
const url = cleanAssetUrl(rawUrl);
|
|
@@ -11322,7 +11352,6 @@ export {
|
|
|
11322
11352
|
resolveReferencedStart,
|
|
11323
11353
|
resolveReferencedDuration,
|
|
11324
11354
|
require_dist,
|
|
11325
|
-
resolveCompositionDuration,
|
|
11326
11355
|
LINT_RULE_COUNT,
|
|
11327
11356
|
LINT_RULE_GROUP_COUNTS,
|
|
11328
11357
|
lintHyperframeHtml,
|
|
@@ -10,7 +10,11 @@ var SLIDESHOW_MANIFEST_VERSION = 1;
|
|
|
10
10
|
var SLIDESHOW_ISLAND_TYPE = "application/hyperframes-slideshow+json";
|
|
11
11
|
function slideshowIslandRegex(flags = "i") {
|
|
12
12
|
const escaped = SLIDESHOW_ISLAND_TYPE.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
13
|
-
|
|
13
|
+
const htmlWhitespace = "[\\t\\n\\f\\r ]*";
|
|
14
|
+
return new RegExp(
|
|
15
|
+
`<script[^>]*type${htmlWhitespace}=${htmlWhitespace}["']${escaped}["'][^>]*>([\\s\\S]*?)<\\/script>`,
|
|
16
|
+
flags
|
|
17
|
+
);
|
|
14
18
|
}
|
|
15
19
|
function parseSlideshowManifest(html) {
|
|
16
20
|
const re = slideshowIslandRegex("i");
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
stripEmbeddedRuntimeScripts,
|
|
39
39
|
styleElementsFor,
|
|
40
40
|
warnUnknownEnumValues
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-USWPZXEA.js";
|
|
42
42
|
import {
|
|
43
43
|
cssVariableName
|
|
44
44
|
} from "./chunk-VC76R6W2.js";
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
} from "./chunk-OFQWTKPW.js";
|
|
49
49
|
import {
|
|
50
50
|
lintHyperframeHtml
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-2VXY3PEF.js";
|
|
52
52
|
import {
|
|
53
53
|
checkSubCompositionUsability,
|
|
54
54
|
resolveSubCompositionContent
|
|
@@ -69,9 +69,6 @@ import {
|
|
|
69
69
|
import {
|
|
70
70
|
parseHTML
|
|
71
71
|
} from "./chunk-SDYDNHEE.js";
|
|
72
|
-
import {
|
|
73
|
-
parse
|
|
74
|
-
} from "./chunk-I5JRXMCV.js";
|
|
75
72
|
|
|
76
73
|
// ../core/dist/compiler/htmlCompiler.js
|
|
77
74
|
import { resolve } from "path";
|
|
@@ -170,7 +167,16 @@ function ensureExternalScriptTag(doc, src, attributes = {}) {
|
|
|
170
167
|
}
|
|
171
168
|
|
|
172
169
|
// ../core/dist/compiler/importMaps.js
|
|
173
|
-
|
|
170
|
+
function isRecord(value) {
|
|
171
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
172
|
+
}
|
|
173
|
+
function isScopeMap(value) {
|
|
174
|
+
return isRecord(value) && Object.values(value).every(isRecord);
|
|
175
|
+
}
|
|
176
|
+
var rebaseEntries = (entries, rebase) => entries && Object.fromEntries(Object.entries(entries).map(([specifier, url]) => [
|
|
177
|
+
specifier,
|
|
178
|
+
typeof url === "string" ? rebase(url) : null
|
|
179
|
+
]));
|
|
174
180
|
function parseImportMap(json, rebase) {
|
|
175
181
|
let parsed;
|
|
176
182
|
try {
|
|
@@ -178,9 +184,13 @@ function parseImportMap(json, rebase) {
|
|
|
178
184
|
} catch {
|
|
179
185
|
return null;
|
|
180
186
|
}
|
|
181
|
-
if (!parsed
|
|
187
|
+
if (!isRecord(parsed))
|
|
182
188
|
return null;
|
|
183
189
|
const { imports, scopes } = parsed;
|
|
190
|
+
if (imports !== void 0 && !isRecord(imports))
|
|
191
|
+
return null;
|
|
192
|
+
if (scopes !== void 0 && !isScopeMap(scopes))
|
|
193
|
+
return null;
|
|
184
194
|
return {
|
|
185
195
|
imports: rebaseEntries(imports, rebase),
|
|
186
196
|
scopes: scopes && Object.fromEntries(Object.entries(scopes).map(([prefix, entries]) => [
|
|
@@ -191,9 +201,14 @@ function parseImportMap(json, rebase) {
|
|
|
191
201
|
}
|
|
192
202
|
function mergeEntries(into, from, where) {
|
|
193
203
|
for (const [specifier, url] of Object.entries(from ?? {})) {
|
|
194
|
-
if (!(specifier
|
|
195
|
-
into
|
|
196
|
-
|
|
204
|
+
if (!Object.hasOwn(into, specifier)) {
|
|
205
|
+
Object.defineProperty(into, specifier, {
|
|
206
|
+
value: url,
|
|
207
|
+
enumerable: true,
|
|
208
|
+
configurable: true,
|
|
209
|
+
writable: true
|
|
210
|
+
});
|
|
211
|
+
} else if (into[specifier] !== url) {
|
|
197
212
|
console.warn(`[HyperFrames] import map conflict for "${specifier}"${where}: keeping ${into[specifier]}, ignoring ${url}.`);
|
|
198
213
|
}
|
|
199
214
|
}
|
|
@@ -213,7 +228,9 @@ function mergeImportMapsIntoDocument(doc, maps) {
|
|
|
213
228
|
for (const map of maps) {
|
|
214
229
|
mergeEntries(imports, map.imports, "");
|
|
215
230
|
for (const [prefix, entries] of Object.entries(map.scopes ?? {})) {
|
|
216
|
-
|
|
231
|
+
const scope = (Object.hasOwn(scopes, prefix) ? scopes[prefix] : void 0) ?? {};
|
|
232
|
+
Object.defineProperty(scopes, prefix, { value: scope, enumerable: true });
|
|
233
|
+
mergeEntries(scope, entries, ` in scope ${prefix}`);
|
|
217
234
|
}
|
|
218
235
|
}
|
|
219
236
|
if (!el) {
|
|
@@ -270,6 +287,7 @@ function sanitizeCssValue(value) {
|
|
|
270
287
|
// ../core/dist/compiler/htmlBundler.js
|
|
271
288
|
import { AsyncLocalStorage } from "async_hooks";
|
|
272
289
|
import { readFileSync, existsSync, statSync } from "fs";
|
|
290
|
+
import { parse as parseJs } from "acorn";
|
|
273
291
|
import { resolve as resolve2, relative, dirname, isAbsolute, sep } from "path";
|
|
274
292
|
|
|
275
293
|
// ../core/dist/compiler/standaloneEntry.js
|
|
@@ -2252,20 +2270,41 @@ function rebaseRelativePath(urlValue, fromDir, toDir) {
|
|
|
2252
2270
|
const rebased = encodeUrlPath(relative(resolve2(toDir), absolutePath).split(sep).join("/"));
|
|
2253
2271
|
return appendSuffixToUrl(rebased, suffix);
|
|
2254
2272
|
}
|
|
2255
|
-
function
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
const
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2273
|
+
function rewriteSrcsetUrls(srcset, rewriteUrl) {
|
|
2274
|
+
const parts = [];
|
|
2275
|
+
let position = 0;
|
|
2276
|
+
let written = 0;
|
|
2277
|
+
while (position < srcset.length) {
|
|
2278
|
+
while (position < srcset.length && /[ \t\n\r\f,]/.test(srcset.charAt(position)))
|
|
2279
|
+
position++;
|
|
2280
|
+
const start = position;
|
|
2281
|
+
while (position < srcset.length && !/[ \t\n\r\f]/.test(srcset.charAt(position)))
|
|
2282
|
+
position++;
|
|
2283
|
+
let end = position;
|
|
2284
|
+
while (end > start && srcset.charAt(end - 1) === ",")
|
|
2285
|
+
end--;
|
|
2286
|
+
if (end > start) {
|
|
2287
|
+
const url = srcset.slice(start, end);
|
|
2288
|
+
const rewritten = rewriteUrl(url);
|
|
2289
|
+
if (rewritten !== url) {
|
|
2290
|
+
parts.push(srcset.slice(written, start), rewritten);
|
|
2291
|
+
written = end;
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
if (end < position)
|
|
2295
|
+
continue;
|
|
2296
|
+
let inParens = false;
|
|
2297
|
+
while (position < srcset.length) {
|
|
2298
|
+
const char = srcset.charAt(position++);
|
|
2299
|
+
if (char === "(")
|
|
2300
|
+
inParens = true;
|
|
2301
|
+
else if (char === ")")
|
|
2302
|
+
inParens = false;
|
|
2303
|
+
else if (char === "," && !inParens)
|
|
2304
|
+
break;
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
return parts.length > 0 ? parts.join("") + srcset.slice(written) : srcset;
|
|
2269
2308
|
}
|
|
2270
2309
|
function rebaseColorGradingLutPath(value, fromDir, toDir) {
|
|
2271
2310
|
if (!value.trim().startsWith("{"))
|
|
@@ -2317,7 +2356,7 @@ function rebaseEntryAuthoredAssetPaths(document, sourceDir, projectDir) {
|
|
|
2317
2356
|
for (const el of [...document.querySelectorAll("[srcset]")]) {
|
|
2318
2357
|
const srcset = el.getAttribute("srcset");
|
|
2319
2358
|
if (srcset)
|
|
2320
|
-
el.setAttribute("srcset",
|
|
2359
|
+
el.setAttribute("srcset", rewriteSrcsetUrls(srcset, (url) => isRelativeUrl(url) ? rebaseRelativePath(url, sourceDir, projectDir) : url));
|
|
2321
2360
|
}
|
|
2322
2361
|
for (const el of [...document.querySelectorAll(`[${HF_COLOR_GRADING_ATTR}]`)]) {
|
|
2323
2362
|
const value = el.getAttribute(HF_COLOR_GRADING_ATTR);
|
|
@@ -2410,6 +2449,7 @@ var INLINE_MIME = {
|
|
|
2410
2449
|
".avif": "image/avif"
|
|
2411
2450
|
};
|
|
2412
2451
|
var MAX_INLINE_ASSET_BYTES = 2 * 1024 * 1024;
|
|
2452
|
+
var MAX_INLINED_BUNDLE_CHARS = 256 * 1024 * 1024;
|
|
2413
2453
|
function safeStatSize(filePath) {
|
|
2414
2454
|
try {
|
|
2415
2455
|
return statSync(filePath).size;
|
|
@@ -2421,8 +2461,13 @@ function warnAssetTooLargeToInline(assetPath, byteLength) {
|
|
|
2421
2461
|
const mb = (byteLength / (1024 * 1024)).toFixed(1);
|
|
2422
2462
|
console.warn(`[HyperFrames] Not inlining "${assetPath}" (${mb} MB exceeds the ${MAX_INLINE_ASSET_BYTES / (1024 * 1024)} MB inline limit). The bundle may not be self-contained.`);
|
|
2423
2463
|
}
|
|
2464
|
+
function warnInlineBudgetExhausted(assetPath) {
|
|
2465
|
+
console.warn(`[HyperFrames] Not inlining "${assetPath}" and later assets: the bundle already inlines ${MAX_INLINED_BUNDLE_CHARS / (1024 * 1024)} MB of data URLs. The bundle may not be self-contained.`);
|
|
2466
|
+
}
|
|
2424
2467
|
function createAssetInliner(resolveProjectPath, inlineAssets) {
|
|
2425
2468
|
const assets = /* @__PURE__ */ new Map();
|
|
2469
|
+
let inlinedChars = 0;
|
|
2470
|
+
let budgetExhausted = false;
|
|
2426
2471
|
const readAsset = (filePath, mimeType) => {
|
|
2427
2472
|
const byteLength = safeStatSize(filePath);
|
|
2428
2473
|
if (byteLength !== null && byteLength > MAX_INLINE_ASSET_BYTES)
|
|
@@ -2458,7 +2503,16 @@ function createAssetInliner(resolveProjectPath, inlineAssets) {
|
|
|
2458
2503
|
warnAssetTooLargeToInline(basePath, asset.tooLarge);
|
|
2459
2504
|
return null;
|
|
2460
2505
|
}
|
|
2461
|
-
|
|
2506
|
+
if (asset.dataUrl === null)
|
|
2507
|
+
return null;
|
|
2508
|
+
if (budgetExhausted || inlinedChars + asset.dataUrl.length > MAX_INLINED_BUNDLE_CHARS) {
|
|
2509
|
+
if (!budgetExhausted)
|
|
2510
|
+
warnInlineBudgetExhausted(basePath);
|
|
2511
|
+
budgetExhausted = true;
|
|
2512
|
+
return null;
|
|
2513
|
+
}
|
|
2514
|
+
inlinedChars += asset.dataUrl.length;
|
|
2515
|
+
return appendSuffixToUrl(asset.dataUrl, suffix);
|
|
2462
2516
|
};
|
|
2463
2517
|
}
|
|
2464
2518
|
function isExternalSvgFragmentUse(el, attr, urlValue) {
|
|
@@ -2514,22 +2568,6 @@ function rewriteColorGradingLutWithInlinedAssets(value, inlineAsset) {
|
|
|
2514
2568
|
Reflect.set(lut, "src", inlined);
|
|
2515
2569
|
return JSON.stringify(parsed);
|
|
2516
2570
|
}
|
|
2517
|
-
function rewriteSrcsetWithInlinedAssets(srcsetValue, inlineAsset) {
|
|
2518
|
-
if (!srcsetValue)
|
|
2519
|
-
return srcsetValue;
|
|
2520
|
-
return srcsetValue.split(",").map((rawCandidate) => {
|
|
2521
|
-
const candidate = rawCandidate.trim();
|
|
2522
|
-
if (!candidate)
|
|
2523
|
-
return candidate;
|
|
2524
|
-
const parts = candidate.split(/\s+/);
|
|
2525
|
-
if (parts.length === 0)
|
|
2526
|
-
return candidate;
|
|
2527
|
-
const maybeInlined = inlineAsset(parts[0] ?? "");
|
|
2528
|
-
if (maybeInlined)
|
|
2529
|
-
parts[0] = maybeInlined;
|
|
2530
|
-
return parts.join(" ");
|
|
2531
|
-
}).join(", ");
|
|
2532
|
-
}
|
|
2533
2571
|
function rewriteCssUrlsWithInlinedAssets(cssText, inlineAsset) {
|
|
2534
2572
|
if (!cssText)
|
|
2535
2573
|
return cssText;
|
|
@@ -2792,7 +2830,7 @@ function joinJsChunks(chunks) {
|
|
|
2792
2830
|
}
|
|
2793
2831
|
function parsesAsScript(source) {
|
|
2794
2832
|
try {
|
|
2795
|
-
|
|
2833
|
+
parseJs(source, { ecmaVersion: "latest", sourceType: "script" });
|
|
2796
2834
|
return true;
|
|
2797
2835
|
} catch {
|
|
2798
2836
|
return false;
|
|
@@ -3222,7 +3260,7 @@ async function bundleProject(projectDir, options) {
|
|
|
3222
3260
|
for (const el of [...document.querySelectorAll("[srcset]")]) {
|
|
3223
3261
|
const srcset = el.getAttribute("srcset");
|
|
3224
3262
|
if (srcset)
|
|
3225
|
-
el.setAttribute("srcset",
|
|
3263
|
+
el.setAttribute("srcset", rewriteSrcsetUrls(srcset, (url) => inlineAsset(url) ?? url));
|
|
3226
3264
|
}
|
|
3227
3265
|
const liveStyles = [...document.querySelectorAll("style")].filter(isAlwaysAppliedStyle);
|
|
3228
3266
|
const liveCss = liveStyles.map((el) => el.textContent || "");
|
|
@@ -8,34 +8,34 @@ import {
|
|
|
8
8
|
launchManagedBrowser,
|
|
9
9
|
resolveManagedGpuMode,
|
|
10
10
|
rethrowAfterBrowserCleanup
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UIC7B5KW.js";
|
|
12
12
|
import {
|
|
13
13
|
gotoWhenSent
|
|
14
14
|
} from "./chunk-MOEGCMKI.js";
|
|
15
15
|
import {
|
|
16
16
|
pageNavigationTimeoutMs,
|
|
17
17
|
windowsChromeCrashRemediation
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-UB7BIDBS.js";
|
|
19
19
|
import {
|
|
20
20
|
oneProcessOverPipe
|
|
21
21
|
} from "./chunk-DKPNNYBZ.js";
|
|
22
22
|
import {
|
|
23
23
|
resolveCompositionViewportFromHtml
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4TKJWWPL.js";
|
|
25
25
|
import {
|
|
26
26
|
resolveLocalBrowserGpuMode,
|
|
27
27
|
resolveLocalWebGpu
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-YS4JUGNI.js";
|
|
29
29
|
import {
|
|
30
30
|
c
|
|
31
31
|
} from "./chunk-ZTZA4UWZ.js";
|
|
32
32
|
import {
|
|
33
33
|
assertWebGpuAdapterAvailable,
|
|
34
34
|
compositionRequiresWebGpu
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-L4JB7LI4.js";
|
|
36
36
|
import {
|
|
37
37
|
normalizeErrorMessage
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-T2EUWCJE.js";
|
|
39
39
|
|
|
40
40
|
// src/capture/captureCompositionFrame.ts
|
|
41
41
|
import { spawn } from "child_process";
|
|
@@ -140,7 +140,7 @@ async function waitForCompositionSettle(page, options) {
|
|
|
140
140
|
console.warn(` ${c.warn("\u26A0")} Shader transitions did not finish pre-rendering`);
|
|
141
141
|
});
|
|
142
142
|
await waitForLateSubresources(page, options.lateSubresourceTimeoutMs ?? CAPTURE_SETTLE_MS);
|
|
143
|
-
const { resolveConfig, waitForImagesReady } = await import("./src-
|
|
143
|
+
const { resolveConfig, waitForImagesReady } = await import("./src-BH5NICGQ.js");
|
|
144
144
|
const imageTimeoutMs = resolveConfig().playerReadyTimeout;
|
|
145
145
|
await waitForImagesReady(
|
|
146
146
|
page,
|
|
@@ -189,7 +189,7 @@ async function installPageFunctionGuard(page) {
|
|
|
189
189
|
async function openSettledCompositionPage(html, url, options) {
|
|
190
190
|
const viewport = resolveCompositionViewportFromHtml(html);
|
|
191
191
|
const requiresWebGpu = compositionRequiresWebGpu(html);
|
|
192
|
-
const answer = (await import("./staticProjectServer-
|
|
192
|
+
const answer = (await import("./staticProjectServer-BKXL5CXB.js")).inProcessAnswer(url);
|
|
193
193
|
const noListen = answer !== void 0;
|
|
194
194
|
let chromeBrowser;
|
|
195
195
|
try {
|
|
@@ -200,7 +200,7 @@ async function openSettledCompositionPage(html, url, options) {
|
|
|
200
200
|
options.onBrowserReady?.();
|
|
201
201
|
const page = await chromeBrowser.newPage();
|
|
202
202
|
await installPageFunctionGuard(page);
|
|
203
|
-
const { installMediaRenderIdBridge } = await import("./src-
|
|
203
|
+
const { installMediaRenderIdBridge } = await import("./src-BH5NICGQ.js");
|
|
204
204
|
await installMediaRenderIdBridge(page);
|
|
205
205
|
await page.setViewport(viewport);
|
|
206
206
|
if (answer) await answerPageInProcess(page, url, answer);
|
|
@@ -216,10 +216,10 @@ async function openSettledCompositionPage(html, url, options) {
|
|
|
216
216
|
}
|
|
217
217
|
async function launchCompositionBrowser(html, noListen, options) {
|
|
218
218
|
const viewport = resolveCompositionViewportFromHtml(html);
|
|
219
|
-
const { ensureBrowser, findSystemBrowser } = await import("./manager-
|
|
219
|
+
const { ensureBrowser, findSystemBrowser } = await import("./manager-MZIJY73J.js");
|
|
220
220
|
const browser = await ensureBrowser({ signal: options.signal });
|
|
221
221
|
const puppeteer = await import("puppeteer-core");
|
|
222
|
-
const { buildChromeArgs } = await import("./src-
|
|
222
|
+
const { buildChromeArgs } = await import("./src-BH5NICGQ.js");
|
|
223
223
|
const requestedGpuMode = options.browserGpuMode ?? resolveCliChromeGpuMode();
|
|
224
224
|
const requiresWebGpu = compositionRequiresWebGpu(html);
|
|
225
225
|
let softwareWebGpu = false;
|