hyperframes 0.8.186 → 0.8.189
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-UGK7AZI6.js → add-TIKUM2YX.js} +12 -12
- package/dist/{animatedGifPrep-HPZPSB43.js → animatedGifPrep-25X4G5IE.js} +7 -7
- package/dist/api.js +15 -15
- package/dist/{asset-X2GTFWOY.js → asset-TPKLIP4R.js} +2 -2
- package/dist/{assetCataloger-5NWEG4IU.js → assetCataloger-PQAIV3FI.js} +7 -7
- package/dist/{audio-7PBM5F3H.js → audio-6RLPKB5X.js} +15 -15
- package/dist/{auth-WABSMO46.js → auth-O7QSTP6Y.js} +1 -1
- package/dist/{autoUpdate-6SCMLTSC.js → autoUpdate-TIEJODP7.js} +2 -2
- package/dist/{backgroundChecks-XOGPAAR3.js → backgroundChecks-K2AXYDYG.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-VR6IA77K.js → batchRender-ORVWYJAH.js} +4 -4
- package/dist/{beats-3IWXLMSC.js → beats-2VTB2ATR.js} +4 -4
- package/dist/{benchmark-2SSYATCX.js → benchmark-NLNBL6YR.js} +9 -9
- package/dist/{browser-PMRN345D.js → browser-M5UV6VJB.js} +3 -3
- package/dist/{bundleWithLocalizedFonts-TT32MZBO.js → bundleWithLocalizedFonts-EDD2XDS2.js} +2 -2
- package/dist/{capture-4VD6AKUJ.js → capture-JSYVNFKO.js} +10 -10
- package/dist/{capture-BDGYTE57.js → capture-WHWEE5FE.js} +2 -2
- package/dist/{captureCompositionFrame-5FVLAETA.js → captureCompositionFrame-JANGQCIA.js} +13 -13
- package/dist/{catalog-HUYZO5D7.js → catalog-MPOOKNSZ.js} +12 -12
- package/dist/{catch-up-SSGTR2ZT.js → catch-up-6KZV3UMZ.js} +4 -4
- package/dist/{check-JWUWHGM2.js → check-G273NWK7.js} +37 -36
- package/dist/{checkBrowser-X7G6YNR7.js → checkBrowser-G53E2ZQI.js} +32 -33
- package/dist/{chunk-WHMFW5ET.js → chunk-2CYM34M7.js} +3 -3
- package/dist/{chunk-HZ7M2MZA.js → chunk-37EPEFXM.js} +1 -1
- package/dist/{chunk-4XFFJAWS.js → chunk-3OLOVRWS.js} +1 -1
- package/dist/{chunk-ZIRIDSDB.js → chunk-3X6LH25W.js} +1 -1
- package/dist/{chunk-TH7J3JZ5.js → chunk-44TJOEH5.js} +92 -25
- package/dist/{chunk-K6KBOORN.js → chunk-4DZ3HBKF.js} +2 -2
- package/dist/{chunk-U7QTMRLW.js → chunk-4QFKGRTB.js} +2 -2
- package/dist/{chunk-7MVODWQF.js → chunk-5544QB3U.js} +1 -1
- package/dist/{chunk-7AUMTARQ.js → chunk-565X6Q4X.js} +3 -3
- package/dist/{chunk-J36JVBLR.js → chunk-5C7R55BJ.js} +1 -1
- package/dist/{chunk-YRAJDFIN.js → chunk-5HJJEHGE.js} +1 -1
- package/dist/{chunk-5UBZPG74.js → chunk-6A45RKAK.js} +1 -1
- package/dist/{chunk-ROWEDRVX.js → chunk-6RA4TWGV.js} +1 -1
- package/dist/{chunk-3YHGQJI6.js → chunk-74Y43RJZ.js} +3 -3
- package/dist/{chunk-4AFNEKU7.js → chunk-ANYBRVPF.js} +1 -1
- package/dist/{chunk-R6IGQ5NO.js → chunk-AQ3L7DVB.js} +2 -2
- package/dist/{chunk-LDW3KVGK.js → chunk-ASZ4IQB4.js} +2 -2
- package/dist/{chunk-DQZMJS2P.js → chunk-AYBKDHYD.js} +2 -2
- package/dist/{chunk-RVZNSKRH.js → chunk-B52BJM5K.js} +2 -2
- package/dist/{chunk-GTMBII7X.js → chunk-B634ZCY2.js} +1 -1
- package/dist/chunk-BPX7LZG6.js +3896 -0
- package/dist/{chunk-5ZMIVTHN.js → chunk-BZQLTNMB.js} +219 -79
- package/dist/{chunk-MY6CVBDD.js → chunk-CE7EQUBV.js} +1 -1
- package/dist/{chunk-ZVBEGBII.js → chunk-CSYSEPWL.js} +31 -7
- package/dist/{chunk-EZINX6HH.js → chunk-CTF7BYCV.js} +3 -3
- package/dist/{chunk-2II34JPM.js → chunk-E676Y7AY.js} +82 -29
- package/dist/{chunk-YQICCAVA.js → chunk-E7TI5PAQ.js} +1 -1
- package/dist/{chunk-TTVHYD5R.js → chunk-EI7FP7F3.js} +1 -1
- package/dist/{chunk-UJZT6HNN.js → chunk-F45HHA3M.js} +1 -1
- package/dist/{chunk-TQ2RRB5V.js → chunk-FJF5JBYU.js} +1 -1
- package/dist/{chunk-Z5233OAN.js → chunk-GBT7P3OQ.js} +5 -5
- package/dist/{chunk-NPDPDEPP.js → chunk-GWYMAII7.js} +1 -1
- package/dist/{chunk-UAJCTEK2.js → chunk-HNMDLKA4.js} +1 -1
- package/dist/{chunk-FCWFV4P7.js → chunk-HQIFMCQN.js} +2278 -2273
- package/dist/{chunk-DTXDQ6OP.js → chunk-HUG47UEE.js} +1 -1
- package/dist/{chunk-7M7TMM4S.js → chunk-HXM2ISEK.js} +264 -124
- package/dist/{chunk-WLHNIIXU.js → chunk-IFXOMIBP.js} +3 -3
- package/dist/{chunk-77QM6YRQ.js → chunk-IPEP346Y.js} +1 -1
- package/dist/{chunk-22QKQDEE.js → chunk-JIPUWKLA.js} +14 -14
- package/dist/{chunk-YNH6ERDL.js → chunk-JZDVIDFH.js} +2 -2
- package/dist/{chunk-KNLSYCI5.js → chunk-KLWUB37U.js} +7 -7
- package/dist/{chunk-PEIV2SOG.js → chunk-KS4HMJJD.js} +1 -1
- package/dist/{chunk-4NTW45W5.js → chunk-M6FHSQZ3.js} +3 -3
- package/dist/{chunk-RFJ6SX4U.js → chunk-NDBWI7OA.js} +5 -5
- package/dist/{chunk-ACLABKEF.js → chunk-NSJ5HD6A.js} +5 -5
- package/dist/{chunk-FRLTKTOR.js → chunk-OHXHBMF4.js} +1 -1
- package/dist/{chunk-7MLFYMFB.js → chunk-QMFI4N7J.js} +1 -1
- package/dist/{chunk-HOFX63F2.js → chunk-QYQ2EYOI.js} +3 -3
- package/dist/{chunk-27H2363S.js → chunk-R5FS7GFU.js} +1 -1
- package/dist/{chunk-PFD25NAC.js → chunk-RIJHDTM5.js} +4 -0
- package/dist/{chunk-FH7WODJH.js → chunk-SGFMCNLY.js} +8 -0
- package/dist/{chunk-BRTDLVK3.js → chunk-SMF6YAUL.js} +9 -11
- package/dist/{chunk-6IOBAOU7.js → chunk-T37XXYRK.js} +1 -1
- package/dist/{chunk-T4RP55P2.js → chunk-TFUAKV6O.js} +1 -1
- package/dist/{chunk-U6RXZNZE.js → chunk-TMBUBLZB.js} +55 -23
- package/dist/{chunk-5ZMXGNGC.js → chunk-TPTQHOXU.js} +9 -9
- package/dist/{chunk-U4BMRIE6.js → chunk-TREMHDWT.js} +12 -10
- package/dist/{chunk-Q447CX26.js → chunk-TSFA2Y5C.js} +60 -47
- package/dist/{chunk-Y2M6XSNK.js → chunk-VRQU564T.js} +1 -1
- package/dist/{chunk-ID5AJ4L3.js → chunk-WMJJCHVQ.js} +2 -2
- package/dist/{chunk-RNZEQTWZ.js → chunk-WYCFMNU3.js} +15 -2
- package/dist/{chunk-UJKQWGFF.js → chunk-X7HBSTCZ.js} +8 -0
- package/dist/{chunk-ZKBW7NU2.js → chunk-XJVXROOL.js} +2 -2
- package/dist/{chunk-CML25PAF.js → chunk-XNFDDVJS.js} +27 -3
- package/dist/{chunk-RPUIMFHF.js → chunk-Z2BW2WJS.js} +1 -1
- package/dist/{chunk-2PZZMAME.js → chunk-ZPMF6GAQ.js} +17 -12
- package/dist/{clean-IM2JIAUT.js → clean-PS4VYGQ6.js} +17 -17
- package/dist/cli.js +53 -53
- package/dist/{cloud-6IPBCJSX.js → cloud-E47CE5VQ.js} +4 -4
- package/dist/{cloudrun-MWZ6S2I2.js → cloudrun-3J4SQBXE.js} +5 -5
- package/dist/{compare-WD7A2TV5.js → compare-EAKHXBDO.js} +29 -29
- package/dist/{compiler-2EKSMC3I.js → compiler-23MT6CX6.js} +4 -4
- package/dist/{component-JKALWH36.js → component-QBOXYJJS.js} +3 -3
- package/dist/{compositions-643NAG4A.js → compositions-QC3EO3MJ.js} +11 -11
- package/dist/{delete-EASPXKHQ.js → delete-TXEOLPC6.js} +4 -4
- package/dist/deploy-3B3WJ6PM.js +300 -0
- package/dist/{destroy-4B5HW5FH.js → destroy-SSPAKADI.js} +13 -3
- package/dist/{dist-F6FOKRSU.js → dist-F4UJFK4S.js} +5 -3
- package/dist/{dist-LM7AVHOU.js → dist-JH32CBQL.js} +1 -1
- package/dist/{doctor-7XUVYDJQ.js → doctor-2CRFH4B3.js} +11 -11
- package/dist/{events-TULV6D3G.js → events-GUIOSBIB.js} +3 -3
- package/dist/{events-5TTPYBKG.js → events-KVTX3QFV.js} +2 -2
- package/dist/{feedback-4FTPWM6P.js → feedback-VQIOSTIB.js} +7 -7
- package/dist/{ffmpeg-MP7ZVYLZ.js → ffmpeg-BPCZGXFW.js} +7 -7
- package/dist/{figma-B7LFWYKO.js → figma-QIOKCH26.js} +3 -3
- package/dist/fontLocalizeCli.js +9 -9
- package/dist/{get-F7W4AQ2V.js → get-TU45SNXF.js} +4 -4
- package/dist/{gpuPolicy-NSNVDFXC.js → gpuPolicy-AWAJBGYY.js} +7 -7
- package/dist/{grade-compare-6QXDTLS2.js → grade-compare-LDNUXX3Q.js} +30 -30
- package/dist/{help-RJAA4O74.js → help-YUCHJKKL.js} +1 -1
- package/dist/{history-OOQBDVV5.js → history-MMHFUMIG.js} +7 -7
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +65 -64
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/{info-5OGGYYLO.js → info-HBHOFSC2.js} +8 -8
- package/dist/{init-DM3TJKW2.js → init-3E4GUXIZ.js} +27 -27
- package/dist/{inspect-FECQCLS5.js → inspect-YNUPJVIH.js} +30 -30
- package/dist/{installer-WOG4VORV.js → installer-WLCRP33K.js} +5 -5
- package/dist/{keyframes-SZHWUF5Y.js → keyframes-Z47GHCGO.js} +6 -6
- package/dist/{lambda-JG2ZRGMC.js → lambda-CA4PEUO2.js} +20 -13
- package/dist/{layout-7ACF7ZKC.js → layout-YPV6PIKF.js} +30 -30
- package/dist/{lint-ZCQGMILV.js → lint-3AVVQ74A.js} +7 -7
- package/dist/{lintProject-JATQKR64.js → lintProject-XM3DLUKG.js} +1 -1
- package/dist/{list-MH2X3Y2T.js → list-JH52Y735.js} +7 -7
- package/dist/{login-CK46WX5U.js → login-G7NPJUAW.js} +4 -4
- package/dist/{manager-GXTPNJVW.js → manager-2LSMMZY4.js} +8 -8
- package/dist/{media-treatment-EH2AT34Z.js → media-treatment-BVMMD5EN.js} +13 -13
- package/dist/{models-D5XP2UK6.js → models-P3TNRVRV.js} +11 -11
- package/dist/{motionShot-UR7D3SRQ.js → motionShot-LK62QHNE.js} +18 -18
- package/dist/{normalize-audio-635JOR5W.js → normalize-audio-Y7BAQ7AR.js} +6 -6
- package/dist/{open-6WE5WFVM.js → open-CCFFLAT7.js} +12 -12
- package/dist/{parakeetRunner-STHZPG32.js → parakeetRunner-N2BWSOSD.js} +12 -12
- package/dist/{pipeline-LVEKRETU.js → pipeline-3VT2DQGU.js} +8 -8
- package/dist/{play-W6TDW4FE.js → play-G4I5IFHO.js} +20 -20
- package/dist/{policies-XXNGXWHV.js → policies-MBWGLMWB.js} +17 -0
- package/dist/{preflight-LIMQXLR7.js → preflight-2KU2QLCZ.js} +8 -8
- package/dist/{present-RX5QX6UR.js → present-EJ7XHGQO.js} +16 -16
- package/dist/{preview-KIWTWK63.js → preview-O23BYFAY.js} +18 -18
- package/dist/{producer-TSNKSCUM.js → producer-UJQVLKLP.js} +1 -1
- package/dist/{progress-NHJIHAAG.js → progress-PX3PVAIM.js} +5 -3
- package/dist/{projectConfig-NCP7JRH4.js → projectConfig-QFVIBT37.js} +7 -7
- package/dist/{publication-5W5UZWGC.js → publication-4UYGFB2X.js} +3 -3
- package/dist/{publish-7WR4XJ6I.js → publish-MHLVJLCR.js} +9 -9
- package/dist/{remove-background-43JGBRWQ.js → remove-background-N7AHTZWP.js} +9 -9
- package/dist/{render-7T44HIM6.js → render-6HQV4LZJ.js} +11 -9
- package/dist/{render-WHMLYIOI.js → render-CDATEVDJ.js} +31 -22
- package/dist/{render-456HCO6O.js → render-EI2ODKOP.js} +45 -29
- package/dist/{render-batch-LURBJTBV.js → render-batch-F7HMC7XH.js} +7 -7
- package/dist/renderSetupWorker.js +1 -1
- package/dist/{resolver-MBIW4VC4.js → resolver-63DB5JCY.js} +5 -5
- package/dist/{sam-MC24SZHC.js → sam-FHJ7IL7T.js} +3 -1
- package/dist/{sherpa-5J2AALED.js → sherpa-AK3MTPL3.js} +11 -11
- package/dist/{sites-MAVH57MO.js → sites-5PWHAMEG.js} +1 -1
- package/dist/skills/hyperframes/references/motion.md +1 -0
- package/dist/{skills-UHOXOGGF.js → skills-EVIDL7PV.js} +5 -5
- package/dist/{skillsUpdateCheck-PDZIFUJE.js → skillsUpdateCheck-YCNJYDJO.js} +3 -3
- package/dist/{snapshot-PFV7ALLH.js → snapshot-WSYZKR3C.js} +35 -35
- package/dist/{src-XK5YIR6L.js → src-KTD6WTEV.js} +8 -8
- package/dist/{src-DCVSEODX.js → src-YNXBU4ZQ.js} +12 -6
- package/dist/{state-ORRPOLMQ.js → state-JPNCCXAV.js} +3 -1
- package/dist/{staticProjectServer-4IE4G4JO.js → staticProjectServer-D2D3BKBP.js} +18 -16
- package/dist/studio/assets/{hyperframes-player-B_skzvYC.js → hyperframes-player-CkK8Zijf.js} +1 -1
- package/dist/studio/assets/{index-CgLbvCUo.js → index-ATnRoBug.js} +1 -1
- package/dist/studio/assets/{index-Dn5FAk2e.js → index-B2JcCaRF.js} +130 -130
- package/dist/studio/index.html +1 -1
- package/dist/{studio-api-JMWYU7KF.js → studio-api-3ZGQPE5J.js} +10 -10
- package/dist/{studioServer-BWLSTGIG.js → studioServer-VWM4J7ZP.js} +48 -48
- package/dist/{telemetry-JCU3AV7W.js → telemetry-BEVI64BB.js} +3 -3
- package/dist/templates/_shared/AGENTS.md +5 -0
- package/dist/templates/_shared/CLAUDE.md +5 -0
- package/dist/{timeline-BCIFQYOM.js → timeline-P57FUXJQ.js} +18 -18
- package/dist/{tokens-7IXKALMQ.js → tokens-OUQY6LPD.js} +2 -2
- package/dist/{transcribe-ZUQD3B32.js → transcribe-CK66VIU4.js} +10 -10
- package/dist/{transcribe-HW7HGJ4V.js → transcribe-QUPX67KC.js} +16 -16
- package/dist/{updateCheck-Z6LNEK7B.js → updateCheck-XZ43CH3L.js} +2 -2
- package/dist/{upgrade-JYH72JGL.js → upgrade-7QQNGI7I.js} +2 -2
- package/dist/{urlDownloader-WKLFHSUH.js → urlDownloader-ESAEL6YX.js} +6 -6
- package/dist/{validate-QCC27YYI.js → validate-5GZ6KFRU.js} +24 -24
- package/dist/{video-EZ7ONY6L.js → video-AQNVR6PE.js} +7 -7
- package/dist/warmCheck.js +37 -38
- package/package.json +18 -2
- package/dist/chunk-KANNRHY7.js +0 -53
- package/dist/chunk-UOZX5W5T.js +0 -3852
- package/dist/deploy-CDKCQ5MX.js +0 -196
|
@@ -21,13 +21,13 @@ import {
|
|
|
21
21
|
mkdirWithinProject
|
|
22
22
|
} from "./chunk-OFQWTKPW.js";
|
|
23
23
|
|
|
24
|
-
// ../studio-server/dist/chunk-
|
|
24
|
+
// ../studio-server/dist/chunk-YIMSBQIO.js
|
|
25
25
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
26
26
|
import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
|
|
27
27
|
import {
|
|
28
28
|
existsSync as existsSync3,
|
|
29
29
|
lstatSync as lstatSync4,
|
|
30
|
-
statSync as
|
|
30
|
+
statSync as statSync5,
|
|
31
31
|
mkdirSync as mkdirSync5,
|
|
32
32
|
readdirSync as readdirSync4,
|
|
33
33
|
readFileSync as readFileSync10,
|
|
@@ -40,7 +40,15 @@ import { createHash, randomUUID } from "crypto";
|
|
|
40
40
|
import { readFileSync as readFileSync2 } from "fs";
|
|
41
41
|
import { isAbsolute, relative, resolve, sep } from "path";
|
|
42
42
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
43
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
linkSync,
|
|
45
|
+
mkdirSync,
|
|
46
|
+
readFileSync,
|
|
47
|
+
renameSync,
|
|
48
|
+
rmSync,
|
|
49
|
+
statSync,
|
|
50
|
+
writeFileSync
|
|
51
|
+
} from "fs";
|
|
44
52
|
import { join } from "path";
|
|
45
53
|
import { createHash as createHash2 } from "crypto";
|
|
46
54
|
import { lstatSync, readFileSync as readFileSync3, readdirSync } from "fs";
|
|
@@ -51,15 +59,15 @@ import { copyFile, mkdir, readdir, readFile, rename, rm, stat } from "fs/promise
|
|
|
51
59
|
import { dirname, join as join2 } from "path";
|
|
52
60
|
import { pipeline } from "stream/promises";
|
|
53
61
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
54
|
-
import { readdirSync as readdirSync2, readFileSync as readFileSync5, renameSync as renameSync3, statSync as
|
|
62
|
+
import { readdirSync as readdirSync2, readFileSync as readFileSync5, renameSync as renameSync3, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
|
|
55
63
|
import { lstat, readdir as readdir2, rm as rm2 } from "fs/promises";
|
|
56
64
|
import { tmpdir } from "os";
|
|
57
65
|
import { dirname as dirname2, join as join4 } from "path";
|
|
58
66
|
import { randomUUID as randomUUID4 } from "crypto";
|
|
59
|
-
import { existsSync, mkdirSync as mkdirSync2, readFileSync as readFileSync4, statSync, writeFileSync as writeFileSync2 } from "fs";
|
|
67
|
+
import { existsSync, mkdirSync as mkdirSync2, readFileSync as readFileSync4, statSync as statSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
60
68
|
import { basename, join as join3, resolve as resolve3 } from "path";
|
|
61
69
|
import { createHash as createHash5, randomUUID as randomUUID6 } from "crypto";
|
|
62
|
-
import { createReadStream as createReadStream2, existsSync as existsSync2, readFileSync as readFileSync8, renameSync as renameSync4, statSync as
|
|
70
|
+
import { createReadStream as createReadStream2, existsSync as existsSync2, readFileSync as readFileSync8, renameSync as renameSync4, statSync as statSync4 } from "fs";
|
|
63
71
|
import { isAbsolute as isAbsolute4, join as join7, resolve as resolve6 } from "path";
|
|
64
72
|
import { createHash as createHash4 } from "crypto";
|
|
65
73
|
import {
|
|
@@ -175,6 +183,8 @@ var HistoryBusyError = class extends Error {
|
|
|
175
183
|
url;
|
|
176
184
|
};
|
|
177
185
|
var WINDOWS_BUSY = /* @__PURE__ */ new Set(["EPERM", "EBUSY", "EACCES"]);
|
|
186
|
+
var NO_HARD_LINKS = /* @__PURE__ */ new Set(["ENOTSUP", "EOPNOTSUPP", "ENOSYS", "EPERM"]);
|
|
187
|
+
var TAKING_MS = 2e3;
|
|
178
188
|
function busyOnWindows(error) {
|
|
179
189
|
return process.platform === "win32" && WINDOWS_BUSY.has(error.code ?? "");
|
|
180
190
|
}
|
|
@@ -196,6 +206,17 @@ function ownerOf(file) {
|
|
|
196
206
|
throw error;
|
|
197
207
|
}
|
|
198
208
|
}
|
|
209
|
+
function beingTaken(file) {
|
|
210
|
+
try {
|
|
211
|
+
const { size, mtimeMs } = statSync(file);
|
|
212
|
+
return size === 0 && Date.now() - mtimeMs < TAKING_MS;
|
|
213
|
+
} catch {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function deadHolder(file, pid) {
|
|
218
|
+
return !alive(pid) && !beingTaken(file);
|
|
219
|
+
}
|
|
199
220
|
function claim(file) {
|
|
200
221
|
const draft = `${file}-${process.pid}-${randomUUID2()}.tmp`;
|
|
201
222
|
writeFileSync(draft, String(process.pid));
|
|
@@ -203,12 +224,23 @@ function claim(file) {
|
|
|
203
224
|
linkSync(draft, file);
|
|
204
225
|
return true;
|
|
205
226
|
} catch (error) {
|
|
206
|
-
|
|
207
|
-
return false;
|
|
227
|
+
const code = error.code ?? "";
|
|
228
|
+
if (code === "EEXIST") return false;
|
|
229
|
+
if (!NO_HARD_LINKS.has(code)) throw error;
|
|
230
|
+
return createExclusively(file);
|
|
208
231
|
} finally {
|
|
209
232
|
rmSync(draft, { force: true });
|
|
210
233
|
}
|
|
211
234
|
}
|
|
235
|
+
function createExclusively(file) {
|
|
236
|
+
try {
|
|
237
|
+
writeFileSync(file, String(process.pid), { flag: "wx" });
|
|
238
|
+
return true;
|
|
239
|
+
} catch (error) {
|
|
240
|
+
if (error.code !== "EEXIST") throw error;
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
212
244
|
function releaseOwn(file) {
|
|
213
245
|
if (ownerOf(file) === process.pid) rmSync(file, { force: true });
|
|
214
246
|
}
|
|
@@ -216,12 +248,12 @@ function evictDeadOwner(file) {
|
|
|
216
248
|
const evictor = `${file}.evict`;
|
|
217
249
|
if (!claim(evictor)) {
|
|
218
250
|
const holder = ownerOf(evictor);
|
|
219
|
-
if (holder !== null &&
|
|
251
|
+
if (holder !== null && deadHolder(evictor, holder)) rmSync(evictor, { force: true });
|
|
220
252
|
return false;
|
|
221
253
|
}
|
|
222
254
|
try {
|
|
223
255
|
const pid = ownerOf(file);
|
|
224
|
-
if (pid !== null &&
|
|
256
|
+
if (pid !== null && deadHolder(file, pid)) rmSync(file, { force: true });
|
|
225
257
|
return true;
|
|
226
258
|
} finally {
|
|
227
259
|
releaseOwn(evictor);
|
|
@@ -246,7 +278,7 @@ function attemptClaim(file, urlFile, deadline) {
|
|
|
246
278
|
if (claim(file)) return "claimed";
|
|
247
279
|
const pid = ownerOf(file);
|
|
248
280
|
if (pid === null) return "retry";
|
|
249
|
-
if (
|
|
281
|
+
if (deadHolder(file, pid) && evictDeadOwner(file)) return "retry";
|
|
250
282
|
if (Date.now() >= deadline) throw new HistoryBusyError(pid, servedBy(file, urlFile, pid));
|
|
251
283
|
return "wait";
|
|
252
284
|
}
|
|
@@ -591,7 +623,7 @@ function readRecord(historyDir) {
|
|
|
591
623
|
function isCopyOf0878Folder(recordedDir, id, folder) {
|
|
592
624
|
let there;
|
|
593
625
|
try {
|
|
594
|
-
there =
|
|
626
|
+
there = statSync2(recordedDir, { throwIfNoEntry: false });
|
|
595
627
|
} catch {
|
|
596
628
|
return false;
|
|
597
629
|
}
|
|
@@ -599,7 +631,7 @@ function isCopyOf0878Folder(recordedDir, id, folder) {
|
|
|
599
631
|
}
|
|
600
632
|
function projectHistoryId(projectDir, historyRoot) {
|
|
601
633
|
const dir = resolve3(projectDir);
|
|
602
|
-
const folder =
|
|
634
|
+
const folder = statSync2(dir);
|
|
603
635
|
let id = readId(dir);
|
|
604
636
|
if (!id && existsSync(join3(dir, ID_PATH)))
|
|
605
637
|
throw new HistoryIdError(
|
|
@@ -724,24 +756,24 @@ function abandonedProject(home, id, now, tempDir) {
|
|
|
724
756
|
return projectGone(dir, id, record?.dev, tempDir) ? dir : null;
|
|
725
757
|
}
|
|
726
758
|
function projectGone(dir, id, dev, tempDir) {
|
|
727
|
-
if (!
|
|
759
|
+
if (!statSync3(join4(dir, ID_PATH), { throwIfNoEntry: false }))
|
|
728
760
|
return diskStillHere(dir, dev, tempDir);
|
|
729
761
|
const there = readId(dir);
|
|
730
762
|
return there !== null && there !== id;
|
|
731
763
|
}
|
|
732
764
|
function diskStillHere(dir, dev, tempDir) {
|
|
733
765
|
let at = dir;
|
|
734
|
-
let stat2 =
|
|
766
|
+
let stat2 = statSync3(at, { throwIfNoEntry: false });
|
|
735
767
|
while (!stat2) {
|
|
736
768
|
if (dirname2(at) === at) return false;
|
|
737
769
|
at = dirname2(at);
|
|
738
|
-
stat2 =
|
|
770
|
+
stat2 = statSync3(at, { throwIfNoEntry: false });
|
|
739
771
|
}
|
|
740
772
|
if (typeof dev === "number") return stat2.dev === dev;
|
|
741
773
|
return at === dir || isSafePath(tempDir, at);
|
|
742
774
|
}
|
|
743
775
|
function lastUsed(home) {
|
|
744
|
-
const mtime = (file) =>
|
|
776
|
+
const mtime = (file) => statSync3(join4(home, file), { throwIfNoEntry: false })?.mtimeMs ?? 0;
|
|
745
777
|
return Math.max(mtime("project.json"), mtime("log.jsonl"));
|
|
746
778
|
}
|
|
747
779
|
async function bytesIn(dir) {
|
|
@@ -1305,7 +1337,7 @@ function retainRevision(retained, revision) {
|
|
|
1305
1337
|
return [revision, ...retained.filter((id) => id !== revision)].slice(0, 2);
|
|
1306
1338
|
}
|
|
1307
1339
|
async function recordRenderSuccess(projectDir, output, status = "completed", capture) {
|
|
1308
|
-
const outputFile =
|
|
1340
|
+
const outputFile = statSync4(output);
|
|
1309
1341
|
if (!outputFile.isFile() && !outputFile.isDirectory() || outputFile.isFile() && outputFile.size === 0)
|
|
1310
1342
|
throw new Error("Render output is missing or empty.");
|
|
1311
1343
|
const after = capture ? await beginArtifactCapture(projectDir) : null;
|
|
@@ -1534,8 +1566,8 @@ function fileLeftIn(dir, at, deleted) {
|
|
|
1534
1566
|
return void 0;
|
|
1535
1567
|
}
|
|
1536
1568
|
function ignoresCase(dir) {
|
|
1537
|
-
const self =
|
|
1538
|
-
const other =
|
|
1569
|
+
const self = statSync5(join8(dir, ID_PATH), { throwIfNoEntry: false });
|
|
1570
|
+
const other = statSync5(join8(dir, ID_PATH.toUpperCase()), { throwIfNoEntry: false });
|
|
1539
1571
|
return self !== void 0 && other?.ino === self.ino && other.dev === self.dev;
|
|
1540
1572
|
}
|
|
1541
1573
|
var blocks = (removed, added) => added.startsWith(`${removed}/`) || removed.startsWith(`${added}/`);
|
|
@@ -1575,7 +1607,7 @@ var Engine = class {
|
|
|
1575
1607
|
this.dir = resolve7(options.projectDir);
|
|
1576
1608
|
this.home = join8(options.historyRoot, projectId);
|
|
1577
1609
|
this.foldsCase = ignoresCase(this.dir);
|
|
1578
|
-
const folder =
|
|
1610
|
+
const folder = statSync5(this.dir, { throwIfNoEntry: false });
|
|
1579
1611
|
if (!folder || readId(this.dir) !== projectId || !isRecordedFolder(this.home, folder))
|
|
1580
1612
|
throw this.replaced();
|
|
1581
1613
|
this.folder = { dev: folder.dev, ino: folder.ino, birthtimeMs: folder.birthtimeMs };
|
|
@@ -1640,7 +1672,7 @@ var Engine = class {
|
|
|
1640
1672
|
}
|
|
1641
1673
|
/** Another project if the folder or its id changed, or the id is gone: a recreated folder may reuse the inode. */
|
|
1642
1674
|
whereFolder() {
|
|
1643
|
-
const now =
|
|
1675
|
+
const now = statSync5(this.dir, { throwIfNoEntry: false });
|
|
1644
1676
|
if (!now) return "gone";
|
|
1645
1677
|
const same = now.dev === this.folder.dev && sameFolder(now, this.folder);
|
|
1646
1678
|
return same && readId(this.dir) === this.projectId ? "here" : "replaced";
|
|
@@ -2445,7 +2477,7 @@ async function openProjectHistory(options) {
|
|
|
2445
2477
|
function readProjectHistory(options) {
|
|
2446
2478
|
const dir = resolve7(options.projectDir);
|
|
2447
2479
|
const id = readId(dir);
|
|
2448
|
-
const home = id && isRecordedFolder(join8(options.historyRoot, id),
|
|
2480
|
+
const home = id && isRecordedFolder(join8(options.historyRoot, id), statSync5(dir)) ? join8(options.historyRoot, id) : null;
|
|
2449
2481
|
const read = home && readLog(logFileIn(home), () => {
|
|
2450
2482
|
});
|
|
2451
2483
|
const log = withoutHiddenPaths(read || { baseline: /* @__PURE__ */ new Map(), entries: [], pins: /* @__PURE__ */ new Set() });
|
|
@@ -6,27 +6,27 @@ var __filename = __hf_fileURLToPath(import.meta.url);
|
|
|
6
6
|
var __dirname = __hf_dirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
resolveProject
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-37EPEFXM.js";
|
|
10
10
|
import {
|
|
11
11
|
serveStaticProjectHtml
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-CSYSEPWL.js";
|
|
13
13
|
import {
|
|
14
14
|
AUDIT_SEEK_OPTIONS,
|
|
15
15
|
installPageFunctionGuard,
|
|
16
16
|
seekCompositionTimeline,
|
|
17
17
|
waitForCompositionFonts,
|
|
18
18
|
waitForRuntimeReady
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-TREMHDWT.js";
|
|
20
20
|
import {
|
|
21
21
|
launchManagedBrowser,
|
|
22
22
|
resolveManagedGpuMode
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-HNMDLKA4.js";
|
|
24
24
|
import {
|
|
25
25
|
gotoWhenSent
|
|
26
26
|
} from "./chunk-MOEGCMKI.js";
|
|
27
27
|
import {
|
|
28
28
|
pageNavigationTimeoutMs
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-565X6Q4X.js";
|
|
30
30
|
import {
|
|
31
31
|
defineCommand
|
|
32
32
|
} from "./chunk-S3S4TGEH.js";
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
import {
|
|
41
41
|
printDeprecationNotice,
|
|
42
42
|
withMeta
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-OHXHBMF4.js";
|
|
44
44
|
import {
|
|
45
45
|
normalizeErrorMessage
|
|
46
46
|
} from "./chunk-KNU5COPB.js";
|
|
@@ -715,7 +715,7 @@ async function collectTweenBoundaries(page) {
|
|
|
715
715
|
});
|
|
716
716
|
}
|
|
717
717
|
async function bundleProjectHtml(projectDir) {
|
|
718
|
-
const { bundleToSingleHtml } = await import("./compiler-
|
|
718
|
+
const { bundleToSingleHtml } = await import("./compiler-23MT6CX6.js");
|
|
719
719
|
return bundleToSingleHtml(projectDir);
|
|
720
720
|
}
|
|
721
721
|
async function alignViewportToComposition(page, url) {
|
|
@@ -734,13 +734,13 @@ async function alignViewportToComposition(page, url) {
|
|
|
734
734
|
async function runLayoutAudit(projectDir, opts) {
|
|
735
735
|
const { ensureBrowser } = await import("./manager-UHWEKPXC.js");
|
|
736
736
|
const puppeteer = await import("puppeteer-core");
|
|
737
|
-
const { buildChromeArgs } = await import("./src-
|
|
737
|
+
const { buildChromeArgs } = await import("./src-YNXBU4ZQ.js");
|
|
738
738
|
const {
|
|
739
739
|
assertWebGpuAdapterAvailable,
|
|
740
740
|
compositionRequiresWebGpu,
|
|
741
741
|
resolveLocalBrowserGpuMode,
|
|
742
742
|
resolveLocalWebGpu
|
|
743
|
-
} = await import("./gpuPolicy-
|
|
743
|
+
} = await import("./gpuPolicy-AWAJBGYY.js");
|
|
744
744
|
const html = await bundleProjectHtml(projectDir);
|
|
745
745
|
const server = await serveStaticProjectHtml(
|
|
746
746
|
projectDir,
|
|
@@ -4,35 +4,35 @@ 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
|
-
resolveCompositionViewportFromHtml
|
|
9
|
-
} from "./chunk-FH7WODJH.js";
|
|
10
7
|
import {
|
|
11
8
|
launchManagedBrowser,
|
|
12
9
|
resolveManagedGpuMode,
|
|
13
10
|
rethrowAfterBrowserCleanup
|
|
14
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HNMDLKA4.js";
|
|
15
12
|
import {
|
|
16
13
|
gotoWhenSent
|
|
17
14
|
} from "./chunk-MOEGCMKI.js";
|
|
18
15
|
import {
|
|
19
16
|
pageNavigationTimeoutMs,
|
|
20
17
|
windowsChromeCrashRemediation
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-565X6Q4X.js";
|
|
22
19
|
import {
|
|
23
20
|
oneProcessOverPipe
|
|
24
21
|
} from "./chunk-DKPNNYBZ.js";
|
|
22
|
+
import {
|
|
23
|
+
resolveCompositionViewportFromHtml
|
|
24
|
+
} from "./chunk-SGFMCNLY.js";
|
|
25
25
|
import {
|
|
26
26
|
resolveLocalBrowserGpuMode,
|
|
27
27
|
resolveLocalWebGpu
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-B52BJM5K.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-HXM2ISEK.js";
|
|
36
36
|
import {
|
|
37
37
|
normalizeErrorMessage
|
|
38
38
|
} from "./chunk-KNU5COPB.js";
|
|
@@ -138,7 +138,7 @@ async function waitForCompositionSettle(page, options) {
|
|
|
138
138
|
console.warn(` ${c.warn("\u26A0")} Shader transitions did not finish pre-rendering`);
|
|
139
139
|
});
|
|
140
140
|
await waitForLateSubresources(page, options.lateSubresourceTimeoutMs ?? CAPTURE_SETTLE_MS);
|
|
141
|
-
const { resolveConfig, waitForImagesReady } = await import("./src-
|
|
141
|
+
const { resolveConfig, waitForImagesReady } = await import("./src-YNXBU4ZQ.js");
|
|
142
142
|
const imageTimeoutMs = resolveConfig().playerReadyTimeout;
|
|
143
143
|
await waitForImagesReady(
|
|
144
144
|
page,
|
|
@@ -187,7 +187,7 @@ async function installPageFunctionGuard(page) {
|
|
|
187
187
|
async function openSettledCompositionPage(html, url, options) {
|
|
188
188
|
const viewport = resolveCompositionViewportFromHtml(html);
|
|
189
189
|
const requiresWebGpu = compositionRequiresWebGpu(html);
|
|
190
|
-
const answer = (await import("./staticProjectServer-
|
|
190
|
+
const answer = (await import("./staticProjectServer-D2D3BKBP.js")).inProcessAnswer(url);
|
|
191
191
|
const noListen = answer !== void 0;
|
|
192
192
|
let chromeBrowser;
|
|
193
193
|
try {
|
|
@@ -198,6 +198,8 @@ async function openSettledCompositionPage(html, url, options) {
|
|
|
198
198
|
options.onBrowserReady?.();
|
|
199
199
|
const page = await chromeBrowser.newPage();
|
|
200
200
|
await installPageFunctionGuard(page);
|
|
201
|
+
const { installMediaRenderIdBridge } = await import("./src-YNXBU4ZQ.js");
|
|
202
|
+
await installMediaRenderIdBridge(page);
|
|
201
203
|
await page.setViewport(viewport);
|
|
202
204
|
if (answer) await answerPageInProcess(page, url, answer);
|
|
203
205
|
await options.beforeNavigate?.(page);
|
|
@@ -215,7 +217,7 @@ async function launchCompositionBrowser(html, noListen, options) {
|
|
|
215
217
|
const { ensureBrowser, findSystemBrowser } = await import("./manager-UHWEKPXC.js");
|
|
216
218
|
const browser = await ensureBrowser({ signal: options.signal });
|
|
217
219
|
const puppeteer = await import("puppeteer-core");
|
|
218
|
-
const { buildChromeArgs } = await import("./src-
|
|
220
|
+
const { buildChromeArgs } = await import("./src-YNXBU4ZQ.js");
|
|
219
221
|
const requestedGpuMode = options.browserGpuMode ?? resolveCliChromeGpuMode();
|
|
220
222
|
const requiresWebGpu = compositionRequiresWebGpu(html);
|
|
221
223
|
let softwareWebGpu = false;
|
|
@@ -5897,6 +5897,53 @@ function findRuntimeMediaSrcMutationFindings(ctx) {
|
|
|
5897
5897
|
}
|
|
5898
5898
|
return findings;
|
|
5899
5899
|
}
|
|
5900
|
+
var VOID_ELEMENTS = /* @__PURE__ */ new Set([
|
|
5901
|
+
"area",
|
|
5902
|
+
"base",
|
|
5903
|
+
"br",
|
|
5904
|
+
"col",
|
|
5905
|
+
"embed",
|
|
5906
|
+
"hr",
|
|
5907
|
+
"img",
|
|
5908
|
+
"input",
|
|
5909
|
+
"link",
|
|
5910
|
+
"meta",
|
|
5911
|
+
"source",
|
|
5912
|
+
"track",
|
|
5913
|
+
"wbr"
|
|
5914
|
+
]);
|
|
5915
|
+
var closeTag = (name) => new RegExp(`</${name}>`, "gi");
|
|
5916
|
+
function innermostTimedWrapper(source, tags, media) {
|
|
5917
|
+
let found = null;
|
|
5918
|
+
for (const parent of tags) {
|
|
5919
|
+
if (parent.index >= media.index) break;
|
|
5920
|
+
if (parent.name === "video" || parent.name === "audio" || VOID_ELEMENTS.has(parent.name))
|
|
5921
|
+
continue;
|
|
5922
|
+
if (readDecodedAttr(parent.raw, "data-composition-id")) continue;
|
|
5923
|
+
const start = readAttr(parent.raw, "data-start");
|
|
5924
|
+
if (!start) continue;
|
|
5925
|
+
const events = [
|
|
5926
|
+
...tags.filter((t) => t.name === parent.name && t.index > parent.index && t.index < media.index).map((t) => [t.index, 1]),
|
|
5927
|
+
...[...source.substring(parent.index, media.index).matchAll(closeTag(parent.name))].map(
|
|
5928
|
+
(m) => [parent.index + m.index, -1]
|
|
5929
|
+
)
|
|
5930
|
+
];
|
|
5931
|
+
let depth = 1;
|
|
5932
|
+
for (const [, delta] of events.sort((x, y) => x[0] - y[0])) {
|
|
5933
|
+
depth += delta;
|
|
5934
|
+
if (depth === 0) break;
|
|
5935
|
+
}
|
|
5936
|
+
if (depth > 0) {
|
|
5937
|
+
found = {
|
|
5938
|
+
name: parent.name,
|
|
5939
|
+
id: readAttr(parent.raw, "id") || void 0,
|
|
5940
|
+
start,
|
|
5941
|
+
duration: readAttr(parent.raw, "data-duration")
|
|
5942
|
+
};
|
|
5943
|
+
}
|
|
5944
|
+
}
|
|
5945
|
+
return found;
|
|
5946
|
+
}
|
|
5900
5947
|
var mediaRules = [
|
|
5901
5948
|
findNestedMediaStartBasisFindings,
|
|
5902
5949
|
findSpeedRampOnNonMediaFindings,
|
|
@@ -6033,54 +6080,19 @@ var mediaRules = [
|
|
|
6033
6080
|
// video_nested_in_timed_element
|
|
6034
6081
|
({ source, tags }) => {
|
|
6035
6082
|
const findings = [];
|
|
6036
|
-
const voidElements = /* @__PURE__ */ new Set([
|
|
6037
|
-
"area",
|
|
6038
|
-
"base",
|
|
6039
|
-
"br",
|
|
6040
|
-
"col",
|
|
6041
|
-
"embed",
|
|
6042
|
-
"hr",
|
|
6043
|
-
"img",
|
|
6044
|
-
"input",
|
|
6045
|
-
"link",
|
|
6046
|
-
"meta",
|
|
6047
|
-
"source",
|
|
6048
|
-
"track",
|
|
6049
|
-
"wbr"
|
|
6050
|
-
]);
|
|
6051
|
-
const timedTagPositions = [];
|
|
6052
|
-
for (const tag of tags) {
|
|
6053
|
-
if (tag.name === "video" || tag.name === "audio") continue;
|
|
6054
|
-
if (voidElements.has(tag.name)) continue;
|
|
6055
|
-
if (readDecodedAttr(tag.raw, "data-composition-id")) continue;
|
|
6056
|
-
if (readAttr(tag.raw, "data-start")) {
|
|
6057
|
-
timedTagPositions.push({
|
|
6058
|
-
name: tag.name,
|
|
6059
|
-
start: tag.index,
|
|
6060
|
-
id: readAttr(tag.raw, "id") || void 0
|
|
6061
|
-
});
|
|
6062
|
-
}
|
|
6063
|
-
}
|
|
6064
6083
|
for (const tag of tags) {
|
|
6065
6084
|
if (tag.name !== "video") continue;
|
|
6066
6085
|
if (!readAttr(tag.raw, "data-start")) continue;
|
|
6067
|
-
|
|
6068
|
-
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
fixHint: "Time the wrapper OR the video, never both: remove data-start from the wrapper (use it as a non-timed visual container), or move the <video> up to be a direct child of the stage.",
|
|
6078
|
-
snippet: truncateSnippet(tag.raw)
|
|
6079
|
-
});
|
|
6080
|
-
break;
|
|
6081
|
-
}
|
|
6082
|
-
}
|
|
6083
|
-
}
|
|
6086
|
+
const parent = innermostTimedWrapper(source, tags, tag);
|
|
6087
|
+
if (!parent) continue;
|
|
6088
|
+
findings.push({
|
|
6089
|
+
code: "video_nested_in_timed_element",
|
|
6090
|
+
severity: "error",
|
|
6091
|
+
message: `<video> with data-start is nested inside <${parent.name}${parent.id ? ` id="${parent.id}"` : ""}> which also has data-start. The frame extractor resolves the video's start from its own data-start without the wrapper's offset, while visibility uses the wrapper's window, so the two disagree: the clip shows the wrong source frames and then disappears partway through its slot.`,
|
|
6092
|
+
elementId: readAttr(tag.raw, "id") || void 0,
|
|
6093
|
+
fixHint: "Time the wrapper OR the video, never both: remove data-start from the wrapper (use it as a non-timed visual container), or move the <video> up to be a direct child of the stage.",
|
|
6094
|
+
snippet: truncateSnippet(tag.raw)
|
|
6095
|
+
});
|
|
6084
6096
|
}
|
|
6085
6097
|
return findings;
|
|
6086
6098
|
},
|
|
@@ -6148,7 +6160,7 @@ var mediaRules = [
|
|
|
6148
6160
|
return findings;
|
|
6149
6161
|
},
|
|
6150
6162
|
// media_missing_data_start + media_missing_id + media_missing_src + media_preload_none
|
|
6151
|
-
({ tags }) => {
|
|
6163
|
+
({ source, tags }) => {
|
|
6152
6164
|
const findings = [];
|
|
6153
6165
|
for (const tag of tags) {
|
|
6154
6166
|
if (tag.name !== "video" && tag.name !== "audio") continue;
|
|
@@ -6156,12 +6168,13 @@ var mediaRules = [
|
|
|
6156
6168
|
const hasId = readAttr(tag.raw, "id");
|
|
6157
6169
|
const hasSrc = mediaHasResolvableSrc(tag, tags);
|
|
6158
6170
|
if (hasSrc && !hasDataStart) {
|
|
6171
|
+
const wrapper = tag.name === "video" ? innermostTimedWrapper(source, tags, tag) : null;
|
|
6159
6172
|
findings.push({
|
|
6160
6173
|
code: "media_missing_data_start",
|
|
6161
6174
|
severity: "error",
|
|
6162
6175
|
message: `<${tag.name}${hasId ? ` id="${hasId}"` : ""}> has src but no data-start. HyperFrames cannot own playback for untimed media, so preview and render behavior can diverge.`,
|
|
6163
6176
|
elementId: hasId || void 0,
|
|
6164
|
-
fixHint: `Add data-start="0" (or the intended start time) and data-duration if the clip should stop before the source ends.`,
|
|
6177
|
+
fixHint: wrapper ? `This <${tag.name}> sits inside the timed <${wrapper.name}${wrapper.id ? ` id="${wrapper.id}"` : ""}> (data-start="${wrapper.start}"), and the wrapper's data-start would then clash. Move the <${tag.name}> out as a direct child of the stage and give it that wrapper's data-start="${wrapper.start}"${wrapper.duration ? ` and data-duration="${wrapper.duration}"` : ""}.` : `Add data-start="0" (or the intended start time) and data-duration if the clip should stop before the source ends.`,
|
|
6165
6178
|
snippet: truncateSnippet(tag.raw)
|
|
6166
6179
|
});
|
|
6167
6180
|
}
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
DEFAULT_REGISTRY_URL,
|
|
9
9
|
fetchItemFile,
|
|
10
10
|
validRegistryItem
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-5HJJEHGE.js";
|
|
12
12
|
import {
|
|
13
13
|
publishRegistryFile,
|
|
14
14
|
registryTargetPath
|
|
15
15
|
} from "./chunk-GMECXFAN.js";
|
|
16
16
|
import {
|
|
17
17
|
validateVariables
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-WYCFMNU3.js";
|
|
19
19
|
import {
|
|
20
20
|
realProjectRoot
|
|
21
21
|
} from "./chunk-OFQWTKPW.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
parseStrictFiniteTimingNumber,
|
|
10
10
|
resolveNaturalMediaTimelineDuration,
|
|
11
11
|
resolveTimedImageDurationSeconds
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BPX7LZG6.js";
|
|
13
13
|
import {
|
|
14
14
|
CANVAS_DIMENSIONS,
|
|
15
15
|
isCompositionElement,
|
|
@@ -1188,6 +1188,16 @@ function parseFirstFrameColour(stderr) {
|
|
|
1188
1188
|
// ../core/dist/previewProxyBox.js
|
|
1189
1189
|
var PREVIEW_PROXY_BOX_PARAM = "hf-proxy-box";
|
|
1190
1190
|
var RUNGS = [256, 362, 512, 724, 1024, 1448, 2048, 2896, 4096, 5792, 8192];
|
|
1191
|
+
function rungAtLeast(pixels) {
|
|
1192
|
+
if (!(pixels > 0))
|
|
1193
|
+
return null;
|
|
1194
|
+
return RUNGS.find((rung) => rung >= pixels) ?? null;
|
|
1195
|
+
}
|
|
1196
|
+
function quantizePreviewProxyBox(width, height) {
|
|
1197
|
+
const w = rungAtLeast(width);
|
|
1198
|
+
const h = rungAtLeast(height);
|
|
1199
|
+
return w && h ? { width: w, height: h } : null;
|
|
1200
|
+
}
|
|
1191
1201
|
function formatPreviewProxyBox(box) {
|
|
1192
1202
|
return `${box.width}x${box.height}`;
|
|
1193
1203
|
}
|
|
@@ -1205,6 +1215,7 @@ import { existsSync } from "fs";
|
|
|
1205
1215
|
import { createRequire } from "module";
|
|
1206
1216
|
import { dirname, resolve } from "path";
|
|
1207
1217
|
import { fileURLToPath } from "url";
|
|
1218
|
+
var RUNTIME_ESBUILD_DEFINE = { console: "globalThis.console" };
|
|
1208
1219
|
function applyDefaultParityMode(script, enabled) {
|
|
1209
1220
|
const parityFlagPattern = /var\s+_parityModeEnabled\s*=\s*(?:true|false)\s*;/;
|
|
1210
1221
|
if (!parityFlagPattern.test(script))
|
|
@@ -1224,7 +1235,8 @@ function buildHyperframesRuntimeScript(options = {}) {
|
|
|
1224
1235
|
format: "iife",
|
|
1225
1236
|
target: ["es2020"],
|
|
1226
1237
|
minify: options.minify ?? true,
|
|
1227
|
-
legalComments: "none"
|
|
1238
|
+
legalComments: "none",
|
|
1239
|
+
define: RUNTIME_ESBUILD_DEFINE
|
|
1228
1240
|
});
|
|
1229
1241
|
let script = result.outputFiles[0]?.text ?? "";
|
|
1230
1242
|
if (typeof options.defaultParityMode === "boolean") {
|
|
@@ -5543,6 +5555,7 @@ export {
|
|
|
5543
5555
|
firstFrameColourArgs,
|
|
5544
5556
|
parseFirstFrameColour,
|
|
5545
5557
|
PREVIEW_PROXY_BOX_PARAM,
|
|
5558
|
+
quantizePreviewProxyBox,
|
|
5546
5559
|
formatPreviewProxyBox,
|
|
5547
5560
|
parsePreviewProxyBox,
|
|
5548
5561
|
buildHyperframesRuntimeScript,
|
|
@@ -29,6 +29,12 @@ function clampAudioGain(value) {
|
|
|
29
29
|
return 1;
|
|
30
30
|
return Math.max(0, Math.min(MAX_AUDIO_GAIN, value));
|
|
31
31
|
}
|
|
32
|
+
function gainTimesLane(gain, lane) {
|
|
33
|
+
return clampAudioGain(gain * lane);
|
|
34
|
+
}
|
|
35
|
+
function clipGain(volume, tweened) {
|
|
36
|
+
return tweened ? 1 : clampAudioGain(volume);
|
|
37
|
+
}
|
|
32
38
|
function formatAudioGain(gain) {
|
|
33
39
|
return clampAudioGain(gain).toFixed(6).replace(/\.?0+$/, "");
|
|
34
40
|
}
|
|
@@ -37,6 +43,8 @@ export {
|
|
|
37
43
|
MAX_AUDIO_GAIN_DB,
|
|
38
44
|
MAX_AUDIO_GAIN,
|
|
39
45
|
clampAudioGain,
|
|
46
|
+
gainTimesLane,
|
|
47
|
+
clipGain,
|
|
40
48
|
formatAudioGain,
|
|
41
49
|
AUDIBLE_VIDEO_QUALIFIER,
|
|
42
50
|
AUDIBLE_MEDIA_SELECTOR,
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
DEFAULT_VP9_CPU_USED,
|
|
9
9
|
isHttpUrl,
|
|
10
10
|
runFfmpeg
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HXM2ISEK.js";
|
|
12
12
|
import {
|
|
13
13
|
parseAnimatedGifMetadata
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-WYCFMNU3.js";
|
|
15
15
|
import {
|
|
16
16
|
parseHTML
|
|
17
17
|
} from "./chunk-SDYDNHEE.js";
|
|
@@ -49,7 +49,11 @@ function parseReservedConcurrency(raw) {
|
|
|
49
49
|
}
|
|
50
50
|
function samDeploy(opts) {
|
|
51
51
|
assertSamAvailable();
|
|
52
|
-
const paramOverrides = [
|
|
52
|
+
const paramOverrides = [
|
|
53
|
+
`ChromeSource=${opts.chromeSource ?? "sparticuz"}`,
|
|
54
|
+
// Always sent: omitted, SAM's UsePreviousValue would keep a video function the user dropped.
|
|
55
|
+
`VideoImageUri=${opts.videoImageUri ?? '""'}`
|
|
56
|
+
];
|
|
53
57
|
if (opts.reservedConcurrency !== void 0) {
|
|
54
58
|
paramOverrides.push(`ReservedConcurrency=${opts.reservedConcurrency}`);
|
|
55
59
|
}
|
|
@@ -133,14 +137,34 @@ function fetchStackOutputs(opts) {
|
|
|
133
137
|
// for cost math + CloudWatch lookups.
|
|
134
138
|
functionName: functionName.split(":").pop() ?? functionName,
|
|
135
139
|
stateMachineArn,
|
|
136
|
-
reservedConcurrency: reserved > 0 ? reserved : void 0
|
|
140
|
+
reservedConcurrency: reserved > 0 ? reserved : void 0,
|
|
141
|
+
videoFunctionName: byKey.get("VideoFunctionArn")?.split(":").pop()
|
|
137
142
|
};
|
|
138
143
|
}
|
|
144
|
+
function deleteEcrRepository(opts) {
|
|
145
|
+
assertAwsCliAvailable();
|
|
146
|
+
const args = [
|
|
147
|
+
"ecr",
|
|
148
|
+
"delete-repository",
|
|
149
|
+
"--repository-name",
|
|
150
|
+
opts.repositoryName,
|
|
151
|
+
"--force",
|
|
152
|
+
"--region",
|
|
153
|
+
opts.region
|
|
154
|
+
];
|
|
155
|
+
if (opts.awsProfile) args.push("--profile", opts.awsProfile);
|
|
156
|
+
const result = spawnSync("aws", args, { encoding: "utf-8" });
|
|
157
|
+
if (result.status === 0 || result.stderr?.includes("RepositoryNotFoundException")) return;
|
|
158
|
+
throw new Error(
|
|
159
|
+
`[lambda] aws ecr delete-repository ${opts.repositoryName} exited with code ${result.status ?? "unknown"}: ${result.stderr ?? ""}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
139
162
|
|
|
140
163
|
export {
|
|
141
164
|
locateSamTemplate,
|
|
142
165
|
parseReservedConcurrency,
|
|
143
166
|
samDeploy,
|
|
144
167
|
samDelete,
|
|
145
|
-
fetchStackOutputs
|
|
168
|
+
fetchStackOutputs,
|
|
169
|
+
deleteEcrRepository
|
|
146
170
|
};
|