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