hyperframes 0.8.150 → 0.8.152
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-3ZIFEN2U.js → add-SA33REHW.js} +14 -14
- package/dist/{animatedGifPrep-77LPFLKJ.js → animatedGifPrep-3YXJQZ7L.js} +9 -9
- package/dist/api.js +19 -19
- package/dist/{asset-EYSZEHM6.js → asset-PUVPTWPD.js} +2 -2
- package/dist/{assetCataloger-KX3HD7ZI.js → assetCataloger-VWE2PLBX.js} +4 -4
- package/dist/{auth-L6IWNRXY.js → auth-PS3M6AI7.js} +1 -1
- package/dist/{autoUpdate-2O3HZB65.js → autoUpdate-CMO4SHWU.js} +2 -2
- package/dist/{backgroundChecks-BH2LMJYE.js → backgroundChecks-EDZ2A55J.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-ZBKAYLWU.js → batchRender-7PLJISCN.js} +5 -5
- package/dist/{beats-IVLF2566.js → beats-2MDSIOE7.js} +15 -15
- package/dist/{benchmark-SYZFW2G7.js → benchmark-KBBXAPI4.js} +10 -10
- package/dist/{browser-OSW3L25S.js → browser-OMWKZRSW.js} +5 -5
- package/dist/{bundleWithLocalizedFonts-I4CWOXLK.js → bundleWithLocalizedFonts-76DMCRIW.js} +2 -2
- package/dist/{capture-AZOQ57TM.js → capture-LRUUXH5Q.js} +2 -2
- package/dist/{capture-V5ICGSVJ.js → capture-YGDC7GN3.js} +13 -13
- package/dist/{catalog-VBJOA2Y5.js → catalog-SMEBKEVO.js} +14 -14
- package/dist/{catch-up-TKSEDNJK.js → catch-up-OMILX3WE.js} +4 -4
- package/dist/{check-3HFISKDB.js → check-NUZ62LIW.js} +288 -64
- package/dist/{checkBrowser-MXBDNZJB.js → checkBrowser-MSTVEL4V.js} +181 -38
- package/dist/{chunk-73RBX2E7.js → chunk-3DZBQ7MH.js} +3 -3
- package/dist/{chunk-6QB7F2II.js → chunk-3E4OCOC5.js} +1 -1
- package/dist/{chunk-OQ7XMM3S.js → chunk-3HPJM5IQ.js} +1 -1
- package/dist/{chunk-UJB7356Y.js → chunk-3LO7BBJX.js} +3 -3
- package/dist/{chunk-APDLWWFG.js → chunk-3VGU2SH7.js} +1 -1
- package/dist/{chunk-DUUFDLC4.js → chunk-4MLYMDQ4.js} +1 -1
- package/dist/{chunk-AXPNVC3N.js → chunk-4UMKAUZI.js} +1 -1
- package/dist/{chunk-XPQSL5VS.js → chunk-54DMWFQZ.js} +8 -1
- package/dist/chunk-57GN6KWT.js +179 -0
- package/dist/{chunk-374QQGBQ.js → chunk-5CS4T6C6.js} +63 -12
- package/dist/{chunk-PCWOSS7G.js → chunk-5ERVRJMV.js} +3 -3
- package/dist/{chunk-TZPZE5PS.js → chunk-5VMSUW4Z.js} +6 -3
- package/dist/{chunk-M6UDJ2E7.js → chunk-6Z4YJ5Q3.js} +3 -3
- package/dist/{chunk-FJWEYVEM.js → chunk-7FYFEXD2.js} +658 -198
- package/dist/{chunk-UQYQ7TBA.js → chunk-7NPSXBIN.js} +2 -2
- package/dist/chunk-7TASSBN2.js +215 -0
- package/dist/{chunk-F2RLIE7P.js → chunk-ANS56TPS.js} +11 -11
- package/dist/{chunk-DOVJRUFM.js → chunk-BQK3J7XO.js} +1 -1
- package/dist/{chunk-FPAT5HTI.js → chunk-BYJYQWEX.js} +10 -10
- package/dist/{chunk-XXPYZBZ3.js → chunk-C6TPGUWD.js} +2 -2
- package/dist/{chunk-XQMEGSHG.js → chunk-D6RJXQLD.js} +1 -1
- package/dist/{chunk-RW7NLGPD.js → chunk-DFXK7KUO.js} +25 -17
- package/dist/{chunk-6SFPQ2RZ.js → chunk-E6EYZ33P.js} +2 -2
- package/dist/{chunk-AKYQGZLU.js → chunk-EVTHG34H.js} +2 -2
- package/dist/{chunk-5NAYNDBT.js → chunk-EXH6L2XZ.js} +6 -2
- package/dist/{chunk-AIJS74LG.js → chunk-FFDC5OWV.js} +8 -2
- package/dist/{chunk-4WFNTWKZ.js → chunk-FNN5QINS.js} +2 -2
- package/dist/{chunk-DMKI64EZ.js → chunk-FSZAFCU7.js} +1 -1
- package/dist/{chunk-S5F26DUL.js → chunk-GQETH4PE.js} +3 -3
- package/dist/{chunk-3UAIVF4L.js → chunk-H2SGM2V2.js} +1 -1
- package/dist/{chunk-O4DC5CHF.js → chunk-H7FXBK3Q.js} +1 -1
- package/dist/{chunk-UVVI2NJQ.js → chunk-HBCRRCTX.js} +109 -31
- package/dist/{chunk-NFQY7EIC.js → chunk-IBYC3VUA.js} +1 -1
- package/dist/{chunk-2KAL22B5.js → chunk-IEDT4EXE.js} +1 -1
- package/dist/{chunk-I6DATIHC.js → chunk-IZIRIDJH.js} +2 -2
- package/dist/{chunk-Z6WZDGCS.js → chunk-IZKXUYZE.js} +2 -2
- package/dist/chunk-KCFF4ENE.js +24 -0
- package/dist/{chunk-6KWA3XPS.js → chunk-KZ3L3W4Q.js} +1 -1
- package/dist/{chunk-7IEGPJ4P.js → chunk-LBT4AMSF.js} +1 -1
- package/dist/{chunk-7JTFPUMA.js → chunk-LECTCGGS.js} +1 -1
- package/dist/{chunk-7E4VHPKJ.js → chunk-LVPSWUS6.js} +5 -5
- package/dist/{chunk-6NPFJ255.js → chunk-MNHPG2UO.js} +1 -1
- package/dist/{chunk-FN6KAS7A.js → chunk-NHAG2KCE.js} +7 -7
- package/dist/{chunk-423DJVX2.js → chunk-PKO2EWO7.js} +1 -1
- package/dist/{chunk-ZNHAJCEA.js → chunk-PRXAOZWZ.js} +28 -13
- package/dist/{chunk-VQ7YIURZ.js → chunk-PTXZDSW5.js} +5 -5
- package/dist/{chunk-XANZ4R4P.js → chunk-QECEOV6W.js} +3 -3
- package/dist/{chunk-BLRJKBKP.js → chunk-QESSGUKX.js} +1 -1
- package/dist/{chunk-WLIUULZQ.js → chunk-RN5I2DP5.js} +29 -15
- package/dist/chunk-S3RCK56N.js +3795 -0
- package/dist/{chunk-UAIUVPZE.js → chunk-SWCSL6WS.js} +6 -6
- package/dist/{chunk-2PSPARWP.js → chunk-TYXH3EKP.js} +4 -0
- package/dist/{chunk-FMNVTKX2.js → chunk-U3BCDVZO.js} +1 -1
- package/dist/{chunk-LW5VFBSY.js → chunk-VS732BUG.js} +1 -1
- package/dist/{chunk-LFNQDTSH.js → chunk-VYKPBRCB.js} +63 -12
- package/dist/{chunk-M5B42RL5.js → chunk-WUUOFMHU.js} +3 -3
- package/dist/{chunk-A6ZO4BX7.js → chunk-XEFFJRYX.js} +2 -2
- package/dist/{chunk-EL5QVJEG.js → chunk-XINGD6MS.js} +4 -4
- package/dist/chunk-XSEGMQYA.js +30 -0
- package/dist/{chunk-CZQLCBWY.js → chunk-YG2Y55KF.js} +1 -1
- package/dist/{chunk-B3XLIBFL.js → chunk-YIJMVFEJ.js} +1 -1
- package/dist/{chunk-JDB65PPT.js → chunk-YOEGUBBY.js} +13 -12
- package/dist/{chunk-AFRXL75S.js → chunk-YYEYOFHW.js} +1 -1
- package/dist/{chunk-R5A7454P.js → chunk-ZTM3RMAD.js} +2 -2
- package/dist/{clean-7HU7S7DT.js → clean-F75G45BI.js} +56 -35
- package/dist/cli.js +53 -53
- package/dist/{cloud-HAXHBO25.js → cloud-KVJAOUWH.js} +4 -4
- package/dist/{cloudrun-A3PIJ6DX.js → cloudrun-Q7Q7O4GY.js} +6 -6
- package/dist/{compare-6IPSQMSM.js → compare-DGUJ4QWU.js} +30 -30
- package/dist/{compiler-UQP2VXN6.js → compiler-NCN6PTVH.js} +6 -6
- package/dist/{component-FF3AU24M.js → component-PSYGT3JV.js} +3 -3
- package/dist/{compositions-JSH4MZXB.js → compositions-J3GAETIC.js} +13 -13
- package/dist/{delete-G763SW64.js → delete-MR7LRGRP.js} +2 -2
- package/dist/{deterministicFonts-C5JQLCTS.js → deterministicFonts-EOMDR6ZF.js} +3 -3
- package/dist/{dist-HUMFCJ6T.js → dist-2YYJYYPY.js} +3 -3
- package/dist/{dist-Z7Q3JS7K.js → dist-3MHXG6EJ.js} +4 -4
- package/dist/{doctor-WZB6WMBY.js → doctor-JOUGR5UK.js} +15 -15
- package/dist/{events-T4YFQC5G.js → events-63BKDWVO.js} +3 -3
- package/dist/{events-MUWJJCC7.js → events-FZFBJCIH.js} +2 -2
- package/dist/{feedback-AUTHQNN2.js → feedback-QLKWUDXR.js} +8 -8
- package/dist/{ffmpeg-TZB5WAYE.js → ffmpeg-MJFMBBSF.js} +2 -2
- package/dist/{figma-NBG6WBI7.js → figma-YJ7HGVQC.js} +3 -3
- package/dist/fontLocalizeCli.js +12 -12
- package/dist/{get-OXBJLKLV.js → get-54MUUXMR.js} +2 -2
- package/dist/{gpuPolicy-HBCCEQUS.js → gpuPolicy-5OVNR75D.js} +9 -9
- package/dist/{grade-compare-2LX4FDH7.js → grade-compare-7IDUF673.js} +32 -32
- package/dist/{gsapParserAcorn-VXZ3ZIF2.js → gsapParserAcorn-7NCK2LVT.js} +2 -2
- package/dist/{help-LJI46EDO.js → help-GQFYO5LU.js} +1 -1
- package/dist/{history-MFKAQEHU.js → history-UI3O7CSO.js} +77 -205
- package/dist/hyperframe-runtime.js +54 -54
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +54 -54
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/{info-D6Y5O2QE.js → info-VQV3APEX.js} +9 -9
- package/dist/{init-47NZPEBI.js → init-2UBFV5D7.js} +31 -31
- package/dist/{inspect-U5UXJK5D.js → inspect-36ACJ3CO.js} +31 -31
- package/dist/{installer-AW7VFVTQ.js → installer-GDUZDJG4.js} +7 -7
- package/dist/{keyframes-5G334NWB.js → keyframes-GPBU34BG.js} +227 -82
- package/dist/{lambda-GASGXN3A.js → lambda-CBJVLTHY.js} +7 -7
- package/dist/{layout-OXAQFLJS.js → layout-2IHFV6EI.js} +31 -31
- package/dist/{lint-F36QFSNF.js → lint-IR6IYCEO.js} +9 -9
- package/dist/{lintProject-SSEXWCH6.js → lintProject-XQWXJYSC.js} +3 -3
- package/dist/{list-TR6QCI53.js → list-UAGKWARH.js} +2 -2
- package/dist/{login-6LA2RWTC.js → login-2GYCNCZF.js} +4 -4
- package/dist/{manager-ES2UFT4X.js → manager-X44GKUEL.js} +3 -3
- package/dist/{manager-GWU5J6RJ.js → manager-ZLJD3EAY.js} +2 -2
- package/dist/{media-treatment-BOHYDWVY.js → media-treatment-Z553F7XI.js} +14 -14
- package/dist/{models-6GW5Q3IW.js → models-6AZTNNSO.js} +15 -15
- package/dist/{motionShot-O7AOMPUN.js → motionShot-ARRL7WXT.js} +29 -16
- package/dist/{normalize-audio-UO5B4O76.js → normalize-audio-CME4NUB6.js} +6 -6
- package/dist/{open-JV2EHVKM.js → open-HU2VXUFD.js} +4 -4
- package/dist/{parakeetRunner-23DZUF6G.js → parakeetRunner-X5MKFMCB.js} +16 -16
- package/dist/{pipeline-KTICSIK7.js → pipeline-MNFTEBJU.js} +11 -11
- package/dist/{play-CMUYPXBC.js → play-2BBJDDAZ.js} +24 -24
- package/dist/{preflight-JOD4OXGC.js → preflight-JYOX64YP.js} +4 -4
- package/dist/{present-ZDT5FM2H.js → present-OE2WL2NY.js} +20 -20
- package/dist/{preview-ASHLGKDD.js → preview-RYSCCAWJ.js} +21 -21
- package/dist/{producer-FFH2KUAZ.js → producer-SQWNRO66.js} +1 -1
- package/dist/{projectConfig-FHIAOPKW.js → projectConfig-B55Z7YKQ.js} +9 -9
- package/dist/{publication-WO5ZXURT.js → publication-MDZCOBJP.js} +4 -4
- package/dist/{publish-QWO2W7FB.js → publish-AILV36BO.js} +12 -12
- package/dist/{remove-background-BO5MQR25.js → remove-background-6F72LKHG.js} +12 -12
- package/dist/{render-XTJKGT3G.js → render-2MZKU3L5.js} +10 -10
- package/dist/{render-SDHFXL3Y.js → render-5EREH6YD.js} +95 -37
- package/dist/{render-HS3YOLSD.js → render-6GH5FSXU.js} +5 -5
- package/dist/{render-batch-J64AJHQY.js → render-batch-UMBUQWWS.js} +5 -5
- package/dist/renderSetupWorker.js +6 -6
- package/dist/{resolver-IHNWMDJA.js → resolver-KO6WWO5P.js} +6 -6
- package/dist/{sherpa-FXBBYMDR.js → sherpa-DADGYWNR.js} +15 -15
- package/dist/skills/hyperframes/references/frame-worker-core.md +11 -9
- package/dist/skills/hyperframes/references/subagent-dispatch.md +1 -1
- package/dist/skills/hyperframes-cli/SKILL.md +3 -0
- package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +5 -1
- package/dist/skills/media-use/audio/scripts/lib/tts.cleanup.test.mjs +175 -0
- package/dist/skills/media-use/audio/scripts/lib/tts.mjs +24 -19
- package/dist/skills/media-use/references/grading.md +1 -2
- package/dist/skills/media-use/references/meta.md +17 -17
- package/dist/skills/media-use/references/operations.md +6 -6
- package/dist/skills/media-use/references/setup-providers.md +3 -4
- package/dist/skills/media-use/scripts/lib/cutlist.mjs +9 -2
- package/dist/skills/media-use/scripts/lib/cutlist.test.mjs +12 -0
- package/dist/skills/media-use/scripts/lib/telemetry.mjs +4 -1
- package/dist/skills/media-use/scripts/lib/telemetry.test.mjs +20 -0
- package/dist/skills/media-use/scripts/transcript-cut.mjs +23 -4
- package/dist/skills/media-use/scripts/transcript-cut.test.mjs +224 -0
- package/dist/{skills-ALLSN7TB.js → skills-QLKSNU4Y.js} +5 -5
- package/dist/{skillsUpdateCheck-EIT5NWM6.js → skillsUpdateCheck-Z2QQGF2W.js} +3 -3
- package/dist/{snapshot-Y3I76OIZ.js → snapshot-D5BBFXOS.js} +342 -154
- package/dist/{src-7V6LBC56.js → src-AVQBAECC.js} +10 -8
- package/dist/{src-S5IZVJUX.js → src-V7263E47.js} +11 -11
- package/dist/{staticProjectServer-QLWWGHZE.js → staticProjectServer-HNWSVEWN.js} +20 -20
- package/dist/studio/assets/{hyperframes-player-kup62bDR.js → hyperframes-player-0BY7-PK7.js} +1 -1
- package/dist/studio/assets/{index-B8BBYY8L.js → index-COrWdzlj.js} +1 -1
- package/dist/studio/assets/{index-CS_m0TkX.js → index-p-VXwuJ2.js} +132 -132
- package/dist/studio/assets/{index-DQ5jGodF.js → index-rmD5k_ES.js} +1 -1
- package/dist/studio/index.html +1 -1
- package/dist/{studio-api-UBFLZ3DA.js → studio-api-UXKTDWLT.js} +30 -16
- package/dist/{studioServer-REOVCIFP.js → studioServer-JOVR24O3.js} +51 -51
- package/dist/{synthesize-22B7L5GX.js → synthesize-MBDVUSH3.js} +2 -1
- package/dist/{telemetry-C3GDIXHO.js → telemetry-UW7XAM5W.js} +3 -3
- package/dist/{timeline-H42EGLMT.js → timeline-JSGTZ3AN.js} +73 -20
- package/dist/{tokens-2K7ISTKV.js → tokens-ADDBGTQ7.js} +2 -2
- package/dist/{transcribe-NUPASAUP.js → transcribe-FEHOK626.js} +14 -14
- package/dist/{transcribe-DVM7UFZZ.js → transcribe-P6MJGSZJ.js} +20 -20
- package/dist/{tts-QSAQZVEZ.js → tts-POI553RG.js} +1 -1
- package/dist/{updateCheck-3RWFSEZD.js → updateCheck-IBWMLXQ4.js} +2 -2
- package/dist/{upgrade-YKKL36N7.js → upgrade-NHZ7AYPO.js} +2 -2
- package/dist/{urlDownloader-6JNJYLPN.js → urlDownloader-ULDRBWS5.js} +8 -8
- package/dist/{validate-Z7KQT7GO.js → validate-NVWNXNBV.js} +25 -25
- package/dist/{video-EXL2JDSL.js → video-74DRD2DN.js} +9 -9
- package/package.json +1 -1
- package/dist/chunk-CEND6BLF.js +0 -3795
- package/dist/chunk-WBLXWOYK.js +0 -15
|
@@ -5,14 +5,24 @@ var require = __hf_createRequire(import.meta.url);
|
|
|
5
5
|
var __filename = __hf_fileURLToPath(import.meta.url);
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
7
|
import {
|
|
8
|
+
pngDimensions,
|
|
9
|
+
reportArtifacts,
|
|
10
|
+
withProjectLock
|
|
11
|
+
} from "./chunk-57GN6KWT.js";
|
|
12
|
+
import {
|
|
13
|
+
checkSnapshotDirectory,
|
|
8
14
|
rectToBbox
|
|
9
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-XSEGMQYA.js";
|
|
16
|
+
import {
|
|
17
|
+
captureArtifactRevision
|
|
18
|
+
} from "./chunk-KCFF4ENE.js";
|
|
19
|
+
import "./chunk-7TASSBN2.js";
|
|
10
20
|
import {
|
|
11
21
|
loadProducer
|
|
12
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-3E4OCOC5.js";
|
|
13
23
|
import {
|
|
14
24
|
trackLintRun
|
|
15
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-3DZBQ7MH.js";
|
|
16
26
|
import {
|
|
17
27
|
assertionTargets,
|
|
18
28
|
buildLayoutSampleTimes,
|
|
@@ -31,46 +41,49 @@ import {
|
|
|
31
41
|
mergeSampleTimes,
|
|
32
42
|
parseAt,
|
|
33
43
|
readMotionSpec
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-
|
|
44
|
+
} from "./chunk-BYJYQWEX.js";
|
|
45
|
+
import "./chunk-GQETH4PE.js";
|
|
36
46
|
import "./chunk-XUHOIDKG.js";
|
|
37
|
-
import "./chunk-
|
|
47
|
+
import "./chunk-XEFFJRYX.js";
|
|
38
48
|
import "./chunk-X7MTZ4T2.js";
|
|
39
|
-
import "./chunk-
|
|
49
|
+
import "./chunk-SWCSL6WS.js";
|
|
40
50
|
import "./chunk-FH7WODJH.js";
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
51
|
+
import "./chunk-4UMKAUZI.js";
|
|
52
|
+
import "./chunk-PKO2EWO7.js";
|
|
43
53
|
import "./chunk-WPNE5NEP.js";
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
import "./chunk-HBCRRCTX.js";
|
|
55
|
+
import "./chunk-PRXAOZWZ.js";
|
|
56
|
+
import "./chunk-C6TPGUWD.js";
|
|
57
|
+
import {
|
|
58
|
+
recordArtifacts
|
|
59
|
+
} from "./chunk-7FYFEXD2.js";
|
|
60
|
+
import "./chunk-XINGD6MS.js";
|
|
61
|
+
import "./chunk-FFDC5OWV.js";
|
|
50
62
|
import {
|
|
51
63
|
resolveProject
|
|
52
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-IBYC3VUA.js";
|
|
53
65
|
import "./chunk-K2FLNJVB.js";
|
|
66
|
+
import "./chunk-DQBY7FRR.js";
|
|
54
67
|
import {
|
|
55
68
|
resolveLocalBrowserGpuMode
|
|
56
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-EVTHG34H.js";
|
|
57
70
|
import "./chunk-442JNXRM.js";
|
|
58
|
-
import "./chunk-
|
|
71
|
+
import "./chunk-D6RJXQLD.js";
|
|
59
72
|
import "./chunk-XT7X6QCP.js";
|
|
60
73
|
import "./chunk-4YYJOFKS.js";
|
|
61
74
|
import "./chunk-HVW7ABXD.js";
|
|
62
|
-
import "./chunk-
|
|
63
|
-
import "./chunk-
|
|
64
|
-
import "./chunk-
|
|
75
|
+
import "./chunk-QESSGUKX.js";
|
|
76
|
+
import "./chunk-6Z4YJ5Q3.js";
|
|
77
|
+
import "./chunk-3HPJM5IQ.js";
|
|
65
78
|
import "./chunk-AWDFDFI3.js";
|
|
66
79
|
import "./chunk-P6LJ4Y32.js";
|
|
67
80
|
import "./chunk-GMECXFAN.js";
|
|
68
|
-
import "./chunk-
|
|
81
|
+
import "./chunk-5CS4T6C6.js";
|
|
69
82
|
import {
|
|
70
83
|
trackCheckReport,
|
|
71
84
|
trackCommandFailure
|
|
72
|
-
} from "./chunk-
|
|
73
|
-
import "./chunk-
|
|
85
|
+
} from "./chunk-H2SGM2V2.js";
|
|
86
|
+
import "./chunk-KZ3L3W4Q.js";
|
|
74
87
|
import "./chunk-VWG7OQKU.js";
|
|
75
88
|
import "./chunk-XBSPQ52S.js";
|
|
76
89
|
import {
|
|
@@ -94,26 +107,26 @@ import "./chunk-TJSTGSAW.js";
|
|
|
94
107
|
import "./chunk-Q5X2B5WT.js";
|
|
95
108
|
import {
|
|
96
109
|
withMeta
|
|
97
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-YYEYOFHW.js";
|
|
98
111
|
import "./chunk-K4WIOZFP.js";
|
|
99
112
|
import "./chunk-XUXGIA7H.js";
|
|
100
113
|
import "./chunk-WERLJGIC.js";
|
|
101
114
|
import "./chunk-ISN5GRYI.js";
|
|
102
|
-
import "./chunk-
|
|
115
|
+
import "./chunk-IZIRIDJH.js";
|
|
103
116
|
import "./chunk-EOVYQ3IG.js";
|
|
104
117
|
import "./chunk-AMKC3AXA.js";
|
|
105
118
|
import {
|
|
106
119
|
extractMediaMetadata,
|
|
107
120
|
findHdrAutoPromotion
|
|
108
|
-
} from "./chunk-
|
|
109
|
-
import "./chunk-
|
|
121
|
+
} from "./chunk-EXH6L2XZ.js";
|
|
122
|
+
import "./chunk-RN5I2DP5.js";
|
|
110
123
|
import "./chunk-NE55C6S5.js";
|
|
111
124
|
import "./chunk-JYVGYKXG.js";
|
|
112
|
-
import "./chunk-
|
|
113
|
-
import "./chunk-
|
|
125
|
+
import "./chunk-5ERVRJMV.js";
|
|
126
|
+
import "./chunk-S3RCK56N.js";
|
|
114
127
|
import "./chunk-VC76R6W2.js";
|
|
115
128
|
import "./chunk-UJKQWGFF.js";
|
|
116
|
-
import "./chunk-
|
|
129
|
+
import "./chunk-VYKPBRCB.js";
|
|
117
130
|
import "./chunk-OFQWTKPW.js";
|
|
118
131
|
import "./chunk-DPVXBVLL.js";
|
|
119
132
|
import "./chunk-T76PLPD6.js";
|
|
@@ -123,16 +136,16 @@ import "./chunk-TWWSYAKJ.js";
|
|
|
123
136
|
import {
|
|
124
137
|
lintProject,
|
|
125
138
|
shouldBlockRender
|
|
126
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-YOEGUBBY.js";
|
|
127
140
|
import {
|
|
128
141
|
resolveProjectRelativeSrc
|
|
129
142
|
} from "./chunk-IWFLMU2N.js";
|
|
130
|
-
import "./chunk-
|
|
143
|
+
import "./chunk-3VGU2SH7.js";
|
|
131
144
|
import "./chunk-VAS6HQX3.js";
|
|
132
145
|
import "./chunk-3RM2ETQT.js";
|
|
133
146
|
import "./chunk-BSQ7XANM.js";
|
|
134
147
|
import "./chunk-SDYDNHEE.js";
|
|
135
|
-
import "./chunk-
|
|
148
|
+
import "./chunk-TYXH3EKP.js";
|
|
136
149
|
import "./chunk-IXLUTE6N.js";
|
|
137
150
|
import {
|
|
138
151
|
normalizeErrorMessage
|
|
@@ -140,13 +153,18 @@ import {
|
|
|
140
153
|
import "./chunk-3GXQPCJC.js";
|
|
141
154
|
import "./chunk-M2WBOQ2Q.js";
|
|
142
155
|
|
|
156
|
+
// src/commands/check.ts
|
|
157
|
+
import { randomUUID } from "crypto";
|
|
158
|
+
import { mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
159
|
+
import { join as join2, resolve } from "path";
|
|
160
|
+
|
|
143
161
|
// src/utils/checkPipeline.ts
|
|
144
162
|
import { mkdirSync, writeFileSync } from "fs";
|
|
145
163
|
import { join, relative } from "path";
|
|
146
164
|
|
|
147
165
|
// src/utils/hdrPromotion.ts
|
|
148
166
|
async function bundleProjectHtml(projectDir) {
|
|
149
|
-
const { bundleToSingleHtml } = await import("./compiler-
|
|
167
|
+
const { bundleToSingleHtml } = await import("./compiler-NCN6PTVH.js");
|
|
150
168
|
return bundleToSingleHtml(projectDir);
|
|
151
169
|
}
|
|
152
170
|
async function collectBundledRenderMedia(html) {
|
|
@@ -255,22 +273,61 @@ function gateSampleTimes(duration, seeks, fallback) {
|
|
|
255
273
|
const fractions = seeks && seeks.length > 0 ? seeks : [fallback];
|
|
256
274
|
return mergeSampleTimes(fractions.map((fraction) => fraction * duration));
|
|
257
275
|
}
|
|
258
|
-
|
|
259
|
-
|
|
276
|
+
function validateSampleRange([start, end], duration) {
|
|
277
|
+
if (!Number.isFinite(start + end) || start < 0 || end <= start || end > duration)
|
|
278
|
+
throw new Error(`Check range must lie within the composition duration (${duration} seconds)`);
|
|
279
|
+
}
|
|
280
|
+
function gateSamplesInRange(flag, samples, inRange, range) {
|
|
281
|
+
if (!range) return samples;
|
|
282
|
+
const selected = samples.filter(inRange);
|
|
283
|
+
if (samples.length > 0 && selected.length === 0) {
|
|
284
|
+
throw new Error(`No ${flag} seek samples lie within --range`);
|
|
285
|
+
}
|
|
286
|
+
return selected;
|
|
287
|
+
}
|
|
288
|
+
function layoutSamplesInRange(options, duration) {
|
|
289
|
+
if (!options.range)
|
|
290
|
+
return {
|
|
291
|
+
inRange: (_t) => true,
|
|
292
|
+
baseSamples: buildLayoutSampleTimes({ duration, samples: options.samples, at: options.at })
|
|
293
|
+
};
|
|
294
|
+
validateSampleRange(options.range, duration);
|
|
295
|
+
const [start, end] = options.range;
|
|
296
|
+
const inRange = (t) => t >= start && t <= end;
|
|
297
|
+
const selected = (options.at ?? []).filter(inRange);
|
|
298
|
+
if (options.at?.length && !selected.length) throw new Error("No --at samples lie within --range");
|
|
260
299
|
const baseSamples = buildLayoutSampleTimes({
|
|
261
|
-
duration,
|
|
300
|
+
duration: end - start,
|
|
262
301
|
samples: options.samples,
|
|
263
|
-
at:
|
|
264
|
-
});
|
|
302
|
+
at: selected.map((t) => t - start)
|
|
303
|
+
}).map((t) => t + start);
|
|
304
|
+
return { inRange, baseSamples };
|
|
305
|
+
}
|
|
306
|
+
async function buildSampleGrid(driver, options) {
|
|
307
|
+
const duration = await driver.getDuration();
|
|
308
|
+
const { inRange, baseSamples } = layoutSamplesInRange(options, duration);
|
|
265
309
|
const transitions = options.atTransitions ? buildTransitionSampleTimes({
|
|
266
310
|
duration,
|
|
267
|
-
boundaries: await driver.getTransitionBoundaries(),
|
|
311
|
+
boundaries: (await driver.getTransitionBoundaries()).filter(inRange),
|
|
268
312
|
cap: options.maxTransitionSamples
|
|
269
313
|
}) : { times: [], dropped: 0 };
|
|
270
|
-
const captionSamples =
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
314
|
+
const captionSamples = gateSamplesInRange(
|
|
315
|
+
"--caption-zone",
|
|
316
|
+
options.captionZone ? gateSampleTimes(duration, options.captionZone.seek, 1) : [],
|
|
317
|
+
inRange,
|
|
318
|
+
options.range
|
|
319
|
+
);
|
|
320
|
+
const frameSamples = gateSamplesInRange(
|
|
321
|
+
"--frame-check",
|
|
322
|
+
options.frameCheck ? gateSampleTimes(duration, options.frameCheck.seek, 0.5) : [],
|
|
323
|
+
inRange,
|
|
324
|
+
options.range
|
|
325
|
+
);
|
|
326
|
+
transitions.times = transitions.times.filter(inRange);
|
|
327
|
+
const auditSamples = mergeSampleTimes(baseSamples, transitions.times).filter(inRange);
|
|
328
|
+
const layoutSamples = mergeSampleTimes(auditSamples, captionSamples, frameSamples).filter(
|
|
329
|
+
inRange
|
|
330
|
+
);
|
|
274
331
|
if (layoutSamples.length === 0) {
|
|
275
332
|
throw new Error("Could not determine composition duration \u2014 no layout samples run");
|
|
276
333
|
}
|
|
@@ -462,7 +519,7 @@ async function collectGridSamples(driver, options, grid, motion) {
|
|
|
462
519
|
collected.screenshots.push({ time, pngBase64: capture.pngBase64 });
|
|
463
520
|
}
|
|
464
521
|
}
|
|
465
|
-
await collectMotionOverlapSamples(driver, grid, collected);
|
|
522
|
+
await collectMotionOverlapSamples(driver, grid, collected, options.range);
|
|
466
523
|
return collected;
|
|
467
524
|
}
|
|
468
525
|
var OVERLAP_SAMPLE_FPS = 8;
|
|
@@ -478,9 +535,11 @@ function buildOverlapSampleTimes(duration) {
|
|
|
478
535
|
Array.from({ length: count }, (_, index) => Math.round(index * step * 1e3) / 1e3)
|
|
479
536
|
);
|
|
480
537
|
}
|
|
481
|
-
async function collectMotionOverlapSamples(driver, grid, collected) {
|
|
538
|
+
async function collectMotionOverlapSamples(driver, grid, collected, range) {
|
|
482
539
|
const baseTimes = new Set(grid.layoutSamples);
|
|
483
|
-
|
|
540
|
+
const overlapTimes = buildOverlapSampleTimes(range ? range[1] - range[0] : grid.duration);
|
|
541
|
+
const shiftedTimes = range ? mergeSampleTimes(overlapTimes.map((time) => time + range[0])) : overlapTimes;
|
|
542
|
+
for (const time of shiftedTimes) {
|
|
484
543
|
if (baseTimes.has(time)) continue;
|
|
485
544
|
await driver.seekGeometry(time);
|
|
486
545
|
collected.layoutIssues.push(...await driver.collectOverlap(time));
|
|
@@ -875,7 +934,11 @@ function annotationBoxesFrom(issues) {
|
|
|
875
934
|
async function runAuditGrid(driver, options, motion) {
|
|
876
935
|
await driver.initialize(options.contrast);
|
|
877
936
|
const grid = await buildSampleGrid(driver, options);
|
|
878
|
-
const plan = await planMotionSampling(
|
|
937
|
+
const plan = await planMotionSampling(
|
|
938
|
+
driver,
|
|
939
|
+
options.range ? { kind: "none" } : motion,
|
|
940
|
+
grid.duration
|
|
941
|
+
);
|
|
879
942
|
const seekLoopStart = Date.now();
|
|
880
943
|
const collected = await collectGridSamples(driver, options, grid, plan);
|
|
881
944
|
const seekLoopMs = Date.now() - seekLoopStart;
|
|
@@ -889,7 +952,7 @@ async function runAuditGrid(driver, options, motion) {
|
|
|
889
952
|
motionIssues = [...motionIssues, ...await driver.anchorMotionIssues(evaluated)];
|
|
890
953
|
}
|
|
891
954
|
const userPicked = new Set(grid.userPickedSamples);
|
|
892
|
-
const sweepFindings = detectSweepStatic(
|
|
955
|
+
const sweepFindings = options.range ? [] : detectSweepStatic(
|
|
893
956
|
grid.duration,
|
|
894
957
|
collected.layoutStateSignatures.filter((sample) => !userPicked.has(sample.time)),
|
|
895
958
|
motionIssues,
|
|
@@ -901,6 +964,22 @@ async function runAuditGrid(driver, options, motion) {
|
|
|
901
964
|
);
|
|
902
965
|
const offPivotFindings = detectOffPivotRotation(collected.indicatorFrames);
|
|
903
966
|
const contrast = buildContrastResults(collected.contrastEntries);
|
|
967
|
+
if (options.components?.length) {
|
|
968
|
+
if (!driver.matchComponents)
|
|
969
|
+
throw new Error("Component filtering unavailable in this check driver");
|
|
970
|
+
const findings = [
|
|
971
|
+
...collected.layoutIssues,
|
|
972
|
+
...sweepFindings,
|
|
973
|
+
...rotationFindings,
|
|
974
|
+
...offPivotFindings,
|
|
975
|
+
...motionIssues,
|
|
976
|
+
...contrast.findings
|
|
977
|
+
];
|
|
978
|
+
const matches = await driver.matchComponents(options.components, findings);
|
|
979
|
+
findings.forEach((finding, i) => {
|
|
980
|
+
finding.componentMatch = matches[i];
|
|
981
|
+
});
|
|
982
|
+
}
|
|
904
983
|
return {
|
|
905
984
|
duration: grid.duration,
|
|
906
985
|
layoutSamples: grid.layoutSamples,
|
|
@@ -1116,8 +1195,9 @@ function buildLintSection(result) {
|
|
|
1116
1195
|
return { ...section(findings), filesScanned: result.results.length };
|
|
1117
1196
|
}
|
|
1118
1197
|
function buildReport(options, lint, browser, motion, extraMotionFindings, snapshotFiles, hdrPromotion = null, hdrInspection = "available") {
|
|
1119
|
-
const
|
|
1120
|
-
const
|
|
1198
|
+
const shaping = options.components?.length ? { ...options, maxIssues: Number.MAX_SAFE_INTEGER } : options;
|
|
1199
|
+
const layout = shapeLayoutSection(browser.layoutIssues, browser, shaping);
|
|
1200
|
+
const shapedMotion = shapeLayoutFindings(browser.motionIssues, shaping);
|
|
1121
1201
|
const motionFindings = [...shapedMotion.findings, ...extraMotionFindings];
|
|
1122
1202
|
const runtime = section(browser.runtimeFindings);
|
|
1123
1203
|
const motionSection = section(motionFindings);
|
|
@@ -1133,7 +1213,7 @@ function buildReport(options, lint, browser, motion, extraMotionFindings, snapsh
|
|
|
1133
1213
|
layout,
|
|
1134
1214
|
motion: {
|
|
1135
1215
|
...motionSection,
|
|
1136
|
-
enabled: motion.kind !== "none",
|
|
1216
|
+
enabled: motion.kind !== "none" && !options.range,
|
|
1137
1217
|
specPath: motion.kind === "none" ? void 0 : motion.path,
|
|
1138
1218
|
samples: browser.motionSampleCount
|
|
1139
1219
|
},
|
|
@@ -1154,7 +1234,7 @@ function buildReport(options, lint, browser, motion, extraMotionFindings, snapsh
|
|
|
1154
1234
|
};
|
|
1155
1235
|
trackCheckReport({
|
|
1156
1236
|
contrastGate: options.contrast,
|
|
1157
|
-
motionGate: motion.kind !== "none",
|
|
1237
|
+
motionGate: motion.kind !== "none" && !options.range,
|
|
1158
1238
|
captionZoneGate: options.captionZone !== void 0,
|
|
1159
1239
|
frameCheckGate: options.frameCheck !== void 0,
|
|
1160
1240
|
snapshotsGate: options.snapshots,
|
|
@@ -1177,6 +1257,35 @@ function buildReport(options, lint, browser, motion, extraMotionFindings, snapsh
|
|
|
1177
1257
|
exitCode: checkExitCode(report),
|
|
1178
1258
|
runId: getRunId()
|
|
1179
1259
|
});
|
|
1260
|
+
return filterComponentReport(report, options);
|
|
1261
|
+
}
|
|
1262
|
+
function filterComponentReport(report, options) {
|
|
1263
|
+
if (!options.range && !options.components?.length) return report;
|
|
1264
|
+
{
|
|
1265
|
+
report.scope = {
|
|
1266
|
+
range: options.range,
|
|
1267
|
+
components: options.components,
|
|
1268
|
+
hiddenFindings: 0,
|
|
1269
|
+
notes: [
|
|
1270
|
+
"Static lint and unscoped runtime failures remain project-wide.",
|
|
1271
|
+
...options.range ? [
|
|
1272
|
+
"Whole-timeline motion assertions and frozen-sweep detection are skipped for range checks."
|
|
1273
|
+
] : []
|
|
1274
|
+
]
|
|
1275
|
+
};
|
|
1276
|
+
for (const group of [report.layout, report.motion, report.contrast]) {
|
|
1277
|
+
const before = group.findings.length;
|
|
1278
|
+
group.findings = group.findings.filter((f) => f.componentMatch !== false);
|
|
1279
|
+
report.scope.hiddenFindings += before - group.findings.length;
|
|
1280
|
+
if (group !== report.contrast && group.findings.length > options.maxIssues) {
|
|
1281
|
+
group.findings = group.findings.slice(0, options.maxIssues);
|
|
1282
|
+
report.scope.notes.push(
|
|
1283
|
+
"Selected findings exceed --max-issues; increase it to see the remainder."
|
|
1284
|
+
);
|
|
1285
|
+
if (group === report.layout) report.layout.truncated = true;
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1180
1289
|
return report;
|
|
1181
1290
|
}
|
|
1182
1291
|
function shapeLayoutSection(issues, browser, options) {
|
|
@@ -1292,19 +1401,19 @@ function resolveMotionSpec(projectDir) {
|
|
|
1292
1401
|
};
|
|
1293
1402
|
}
|
|
1294
1403
|
async function runBrowserCheck(project, options, motion) {
|
|
1295
|
-
const module = await import("./checkBrowser-
|
|
1404
|
+
const module = await import("./checkBrowser-MSTVEL4V.js");
|
|
1296
1405
|
return module.runBrowserCheck(project, options, motion, runAuditGrid);
|
|
1297
1406
|
}
|
|
1298
1407
|
async function writeSnapshot(projectDir, index, time, pngBase64) {
|
|
1299
|
-
const snapshotDir =
|
|
1408
|
+
const snapshotDir = checkSnapshotDirectory(projectDir);
|
|
1300
1409
|
mkdirSync(snapshotDir, { recursive: true });
|
|
1301
1410
|
const filename = `frame-${String(index).padStart(2, "0")}-at-${time.toFixed(1)}s.png`;
|
|
1302
1411
|
const path = join(snapshotDir, filename);
|
|
1303
1412
|
writeFileSync(path, Buffer.from(pngBase64, "base64"));
|
|
1304
|
-
return
|
|
1413
|
+
return relative(projectDir, path);
|
|
1305
1414
|
}
|
|
1306
1415
|
async function captureFindingCrops(project, options, requests) {
|
|
1307
|
-
const module = await import("./checkBrowser-
|
|
1416
|
+
const module = await import("./checkBrowser-MSTVEL4V.js");
|
|
1308
1417
|
return module.captureFindingCrops(project, options, requests);
|
|
1309
1418
|
}
|
|
1310
1419
|
var DEFAULT_DEPENDENCIES2 = {
|
|
@@ -1325,9 +1434,86 @@ var examples = [
|
|
|
1325
1434
|
];
|
|
1326
1435
|
var DEFAULT_COMMAND_DEPENDENCIES = {
|
|
1327
1436
|
resolveProject,
|
|
1328
|
-
runPipeline
|
|
1437
|
+
async runPipeline(project, options) {
|
|
1438
|
+
const capture = await captureArtifactRevision(project.dir).catch(warnNotRecorded);
|
|
1439
|
+
const report = await runCheckPipeline(project, options);
|
|
1440
|
+
const images = (files) => files.map((file) => resolve(project.dir, file));
|
|
1441
|
+
reportArtifacts("check", "frame", images(report.snapshots.files));
|
|
1442
|
+
reportArtifacts("check", "finding", images(report.snapshots.findingFiles));
|
|
1443
|
+
if (!capture) return report;
|
|
1444
|
+
try {
|
|
1445
|
+
return { ...report, saved: await saveCheckReport(project, options, report, capture) };
|
|
1446
|
+
} catch (error) {
|
|
1447
|
+
warnNotRecorded(error);
|
|
1448
|
+
return report;
|
|
1449
|
+
}
|
|
1450
|
+
},
|
|
1329
1451
|
withMeta
|
|
1330
1452
|
};
|
|
1453
|
+
function warnNotRecorded(error) {
|
|
1454
|
+
console.warn(`${c.warn("\u26A0")} Check report was not recorded: ${normalizeErrorMessage(error)}`);
|
|
1455
|
+
return void 0;
|
|
1456
|
+
}
|
|
1457
|
+
async function saveCheckReport(project, options, report, capture) {
|
|
1458
|
+
const id = randomUUID();
|
|
1459
|
+
const directory = join2(project.dir, ".hyperframes", "artifacts", "checks");
|
|
1460
|
+
mkdirSync2(directory, { recursive: true });
|
|
1461
|
+
const path = join2(directory, `${id}.json`);
|
|
1462
|
+
writeFileSync2(path, JSON.stringify(report, null, 2) + "\n", { flag: "wx" });
|
|
1463
|
+
const reportScope = "scope" in report && typeof report.scope === "object" && report.scope !== null ? report.scope : void 0;
|
|
1464
|
+
const artifacts = [
|
|
1465
|
+
{
|
|
1466
|
+
kind: "check",
|
|
1467
|
+
id,
|
|
1468
|
+
scope: reportScope ? "scoped" : "project",
|
|
1469
|
+
report: resolve(path),
|
|
1470
|
+
metadata: {
|
|
1471
|
+
ok: report.ok,
|
|
1472
|
+
browserSkipped: report.browserSkipped,
|
|
1473
|
+
scope: reportScope,
|
|
1474
|
+
options
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
];
|
|
1478
|
+
for (const [index, image] of report.snapshots.files.entries()) {
|
|
1479
|
+
artifacts.push({
|
|
1480
|
+
kind: "snapshot",
|
|
1481
|
+
id: `${id}-${index}`,
|
|
1482
|
+
scope: "full",
|
|
1483
|
+
image: resolve(project.dir, image),
|
|
1484
|
+
time: report.snapshots.times[index],
|
|
1485
|
+
metadata: {
|
|
1486
|
+
checkId: id,
|
|
1487
|
+
...pngDimensions(resolve(project.dir, image))
|
|
1488
|
+
}
|
|
1489
|
+
});
|
|
1490
|
+
}
|
|
1491
|
+
const crops = selectFindingCropRequests(report);
|
|
1492
|
+
for (const [index, image] of report.snapshots.findingFiles.entries()) {
|
|
1493
|
+
const crop = crops.find((request) => image.endsWith(request.filename));
|
|
1494
|
+
artifacts.push({
|
|
1495
|
+
kind: "snapshot",
|
|
1496
|
+
id: `${id}-crop-${index}`,
|
|
1497
|
+
scope: "finding",
|
|
1498
|
+
image: resolve(project.dir, image),
|
|
1499
|
+
time: crop?.time,
|
|
1500
|
+
metadata: {
|
|
1501
|
+
checkId: id,
|
|
1502
|
+
finding: crop,
|
|
1503
|
+
...pngDimensions(resolve(project.dir, image))
|
|
1504
|
+
}
|
|
1505
|
+
});
|
|
1506
|
+
}
|
|
1507
|
+
const [saved] = await recordArtifacts(project.dir, capture, artifacts);
|
|
1508
|
+
if (!saved) throw new Error("no history record was written");
|
|
1509
|
+
reportArtifacts("check", "check-report", [resolve(path)]);
|
|
1510
|
+
return {
|
|
1511
|
+
id: saved.id,
|
|
1512
|
+
revision: saved.revision,
|
|
1513
|
+
report: saved.report,
|
|
1514
|
+
attribution: saved.attribution
|
|
1515
|
+
};
|
|
1516
|
+
}
|
|
1331
1517
|
var CHECK_COMMAND_ARGS = {
|
|
1332
1518
|
dir: { type: "positional", description: "Project directory", required: false },
|
|
1333
1519
|
json: { type: "boolean", description: "Output agent-readable JSON", default: false },
|
|
@@ -1336,6 +1522,14 @@ var CHECK_COMMAND_ARGS = {
|
|
|
1336
1522
|
description: "Number of midpoint samples across the duration (default: 9)",
|
|
1337
1523
|
default: "9"
|
|
1338
1524
|
},
|
|
1525
|
+
range: {
|
|
1526
|
+
type: "string",
|
|
1527
|
+
description: "Runtime sample interval in global seconds: start,end. Static lint remains project-wide."
|
|
1528
|
+
},
|
|
1529
|
+
components: {
|
|
1530
|
+
type: "string",
|
|
1531
|
+
description: "CSS selector list: filter findings involving these components or descendants; preserve full-check status."
|
|
1532
|
+
},
|
|
1339
1533
|
at: {
|
|
1340
1534
|
type: "string",
|
|
1341
1535
|
description: "Comma-separated timestamps in seconds (e.g., --at 1.5,4,7.25)"
|
|
@@ -1391,7 +1585,7 @@ var CHECK_COMMAND_ARGS = {
|
|
|
1391
1585
|
},
|
|
1392
1586
|
snapshots: {
|
|
1393
1587
|
type: "boolean",
|
|
1394
|
-
description: "Save
|
|
1588
|
+
description: "Save contrast-pass PNGs under .hyperframes/artifacts/snapshots/",
|
|
1395
1589
|
default: false
|
|
1396
1590
|
},
|
|
1397
1591
|
"caption-zone": {
|
|
@@ -1423,11 +1617,21 @@ function createCheckCommand(dependencies = DEFAULT_COMMAND_DEPENDENCIES) {
|
|
|
1423
1617
|
if (!asJson) {
|
|
1424
1618
|
console.log(`${c.accent("\u25C6")} Checking ${c.accent(project.name)}`);
|
|
1425
1619
|
}
|
|
1426
|
-
const report = await
|
|
1620
|
+
const report = await withProjectLock(
|
|
1621
|
+
project.dir,
|
|
1622
|
+
"check",
|
|
1623
|
+
() => dependencies.runPipeline(project, options)
|
|
1624
|
+
);
|
|
1427
1625
|
if (asJson) {
|
|
1428
1626
|
console.log(JSON.stringify(dependencies.withMeta(report), null, 2));
|
|
1429
1627
|
} else {
|
|
1430
1628
|
printHumanReport(report);
|
|
1629
|
+
if (report.saved) {
|
|
1630
|
+
console.log(`Report: ${report.saved.report}`);
|
|
1631
|
+
console.log(
|
|
1632
|
+
`Revision: ${report.saved.revision ?? "none"} (${report.saved.attribution})`
|
|
1633
|
+
);
|
|
1634
|
+
}
|
|
1431
1635
|
}
|
|
1432
1636
|
setCommandExitCode(checkExitCode(report));
|
|
1433
1637
|
} catch (error) {
|
|
@@ -1448,6 +1652,8 @@ function parseCheckOptions(args) {
|
|
|
1448
1652
|
const maxTransitionSamples = positiveInteger(args["max-transition-samples"], 0);
|
|
1449
1653
|
return {
|
|
1450
1654
|
samples: positiveInteger(args.samples, DEFAULT_CHECK_OPTIONS.samples),
|
|
1655
|
+
range: parseCheckRange(args.range),
|
|
1656
|
+
components: typeof args.components === "string" ? [args.components] : void 0,
|
|
1451
1657
|
at: parseAt(args.at),
|
|
1452
1658
|
atTransitions: args["at-transitions"] === true,
|
|
1453
1659
|
maxTransitionSamples: maxTransitionSamples > 0 ? maxTransitionSamples : void 0,
|
|
@@ -1465,6 +1671,14 @@ function parseCheckOptions(args) {
|
|
|
1465
1671
|
browserGpuMode: resolveLocalBrowserGpuMode(args["browser-gpu"])
|
|
1466
1672
|
};
|
|
1467
1673
|
}
|
|
1674
|
+
function parseCheckRange(value) {
|
|
1675
|
+
if (value === void 0) return void 0;
|
|
1676
|
+
const parts = String(value).split(/[,:]/);
|
|
1677
|
+
const start = Number(parts[0]), end = Number(parts[1]);
|
|
1678
|
+
if (parts.length !== 2 || parts.some((p) => !p.trim()) || !Number.isFinite(start) || !Number.isFinite(end) || start < 0 || end <= start)
|
|
1679
|
+
throw new Error("Invalid --range: use non-negative start,end with end > start");
|
|
1680
|
+
return [start, end];
|
|
1681
|
+
}
|
|
1468
1682
|
var CAPTION_ZONE_FIELDS = /* @__PURE__ */ new Set(["x0", "y0", "x1", "y1", "severity", "seek"]);
|
|
1469
1683
|
var FRAME_CHECK_FIELDS = /* @__PURE__ */ new Set(["severity", "seek", "tol"]);
|
|
1470
1684
|
var LAYOUT_FIELDS = /* @__PURE__ */ new Set(["proseCoverageFloor"]);
|
|
@@ -1622,6 +1836,12 @@ function nonNegativeNumber(value, fallback) {
|
|
|
1622
1836
|
return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback;
|
|
1623
1837
|
}
|
|
1624
1838
|
function printHumanReport(report) {
|
|
1839
|
+
if (report.scope) {
|
|
1840
|
+
console.log(
|
|
1841
|
+
`Scope: ${report.scope.range ? report.scope.range.join("\u2013") + "s" : "full timeline"}; ${report.scope.hiddenFindings} findings hidden by component filter. Counts/status include hidden findings.`
|
|
1842
|
+
);
|
|
1843
|
+
for (const note of report.scope.notes) console.log(note);
|
|
1844
|
+
}
|
|
1625
1845
|
printSection("Lint", report.lint);
|
|
1626
1846
|
if (report.browserSkipped) {
|
|
1627
1847
|
console.log();
|
|
@@ -1638,10 +1858,13 @@ function printHumanReport(report) {
|
|
|
1638
1858
|
const label = report.ok ? c.success("Check passed") : c.error("Check failed");
|
|
1639
1859
|
console.log(`${report.ok ? c.success("\u25C7") : c.error("\u25C7")} ${label}`);
|
|
1640
1860
|
}
|
|
1861
|
+
function isEmptySection(section2) {
|
|
1862
|
+
return section2.findings.length === 0 && section2.errorCount + section2.warningCount + section2.infoCount === 0;
|
|
1863
|
+
}
|
|
1641
1864
|
function printSection(title, section2) {
|
|
1642
1865
|
console.log();
|
|
1643
1866
|
console.log(c.bold(title));
|
|
1644
|
-
if (section2
|
|
1867
|
+
if (isEmptySection(section2)) {
|
|
1645
1868
|
console.log(` ${c.success("\u25C7")} 0 errors, 0 warnings`);
|
|
1646
1869
|
return;
|
|
1647
1870
|
}
|
|
@@ -1651,7 +1874,7 @@ function printSection(title, section2) {
|
|
|
1651
1874
|
function printLayoutSection(title, section2) {
|
|
1652
1875
|
console.log();
|
|
1653
1876
|
console.log(c.bold(title));
|
|
1654
|
-
if (section2
|
|
1877
|
+
if (isEmptySection(section2)) {
|
|
1655
1878
|
console.log(` ${c.success("\u25C7")} 0 issues across ${section2.samples.length} sample(s)`);
|
|
1656
1879
|
} else {
|
|
1657
1880
|
for (const finding of section2.findings) {
|
|
@@ -1674,7 +1897,7 @@ function printContrastSection(report) {
|
|
|
1674
1897
|
console.log(` ${c.dim("\u25C7")} skipped`);
|
|
1675
1898
|
return;
|
|
1676
1899
|
}
|
|
1677
|
-
if (section2
|
|
1900
|
+
if (isEmptySection(section2)) {
|
|
1678
1901
|
console.log(
|
|
1679
1902
|
` ${c.success("\u25C7")} ${section2.passed}/${section2.checked} text checks pass WCAG AA`
|
|
1680
1903
|
);
|
|
@@ -1725,6 +1948,7 @@ export {
|
|
|
1725
1948
|
createCheckCommand,
|
|
1726
1949
|
check_default as default,
|
|
1727
1950
|
examples,
|
|
1951
|
+
parseCheckRange,
|
|
1728
1952
|
parseFrameCheck,
|
|
1729
1953
|
parseLayout
|
|
1730
1954
|
};
|