hyperframes 0.8.191 → 0.8.192
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-S2ZQYG52.js → add-TZU2UW7A.js} +17 -17
- package/dist/{animatedGifPrep-3JA2CQ3U.js → animatedGifPrep-NLAXC3VV.js} +11 -10
- package/dist/api.js +24 -23
- package/dist/{appHistory-TH3TL6N6.js → appHistory-QVCSAOI4.js} +1 -1
- package/dist/{asset-2CNTAPOC.js → asset-JAJXA6LB.js} +2 -2
- package/dist/{assetCataloger-5HXLXL7C.js → assetCataloger-4WTX3J4I.js} +13 -12
- package/dist/{audio-DZTSYHXS.js → audio-XLWC7JKS.js} +22 -21
- package/dist/{auth-GX3M6TJ4.js → auth-5K6X3NPJ.js} +4 -4
- package/dist/{autoUpdate-EDIWE4Z5.js → autoUpdate-RNV7SKGB.js} +4 -4
- package/dist/{backgroundChecks-VPUPJ7UI.js → backgroundChecks-QXLVZVGX.js} +5 -5
- package/dist/backgroundChecksWorker.js +5 -5
- package/dist/{batchRender-JHIIDBJR.js → batchRender-THKSPDZR.js} +14 -7
- package/dist/{beats-PZRVTRYW.js → beats-K7CGCFVL.js} +53 -15
- package/dist/{benchmark-22UFDW2N.js → benchmark-PHRDIXNL.js} +18 -14
- package/dist/{browser-VRDWYIUM.js → browser-GN6R5ZSK.js} +7 -7
- package/dist/{bundleWithLocalizedFonts-23QDKFSN.js → bundleWithLocalizedFonts-C325UNR4.js} +3 -3
- package/dist/{capture-TOCLXYMJ.js → capture-6UBQFHZQ.js} +76 -68
- package/dist/{capture-NFCBXHDE.js → capture-BZ7APOGQ.js} +3 -3
- package/dist/{captureCompositionFrame-BEM6MF7F.js → captureCompositionFrame-VORSCTWC.js} +17 -16
- package/dist/{catalog-NXS35KM7.js → catalog-PHU2RUZ3.js} +18 -18
- package/dist/{catch-up-6WJBUI2C.js → catch-up-HCNRM46J.js} +7 -7
- package/dist/{check-WVEBMWN5.js → check-TJ5ZLB4I.js} +43 -42
- package/dist/{checkBrowser-RT45HJ36.js → checkBrowser-DWP7ZXJ7.js} +38 -37
- package/dist/{chunk-KAC2WR7P.js → chunk-2HP5GIQ3.js} +3 -3
- package/dist/{chunk-2WNVHZHA.js → chunk-2J3NA3OB.js} +13 -13
- package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
- package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
- package/dist/{chunk-3NRB7YXW.js → chunk-2VXY3PEF.js} +96 -67
- package/dist/{chunk-LBNEH6IQ.js → chunk-32NB4VMH.js} +1 -1
- package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
- package/dist/{chunk-JTPHFYZI.js → chunk-3CXIX6XS.js} +68 -7
- package/dist/{chunk-MSM6VRQ4.js → chunk-3FV5BVWS.js} +2 -2
- package/dist/{chunk-7ZJEQY7Q.js → chunk-4E75LHAL.js} +23 -3
- package/dist/{chunk-TMBUBLZB.js → chunk-4HCJOFMB.js} +166 -46
- package/dist/{chunk-JJJCFKMF.js → chunk-5IPKQHOL.js} +17 -6
- package/dist/{chunk-WQ3X5OH4.js → chunk-5TRFLZ5Z.js} +2 -2
- package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
- package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
- package/dist/{chunk-RE3EEBWC.js → chunk-6WNLQI63.js} +4 -4
- package/dist/{chunk-7FF36MAD.js → chunk-6XVKMBUA.js} +9 -6
- package/dist/{chunk-7NKJS5KM.js → chunk-7JJMT6LN.js} +1 -1
- package/dist/{chunk-JOLZ3BSL.js → chunk-7LLRMYP6.js} +2 -2
- package/dist/{chunk-COETAXRN.js → chunk-7RSY7SZN.js} +2 -2
- package/dist/{chunk-JGTRVG32.js → chunk-7UZC4N62.js} +1 -1
- package/dist/{chunk-XWOCXIKR.js → chunk-A4OI5ZNX.js} +1 -1
- package/dist/{chunk-VYQYVYQ5.js → chunk-AEXVVABM.js} +83 -45
- package/dist/{chunk-DOOSC34Z.js → chunk-AMZJFCOX.js} +8 -8
- package/dist/{chunk-OV6KHXLX.js → chunk-AR46ND2Q.js} +1 -1
- package/dist/chunk-B2XLXD7V.js +3897 -0
- package/dist/{chunk-XMSQRDAK.js → chunk-BEOK6F26.js} +2 -2
- package/dist/{chunk-U5GTDAQL.js → chunk-BPKLUHFT.js} +7 -7
- package/dist/{chunk-TFGO5YMI.js → chunk-BV6YE455.js} +2 -2
- package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
- package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
- package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
- package/dist/{chunk-KV72BP7O.js → chunk-CXRZBWSH.js} +11 -11
- package/dist/chunk-CZGHFATT.js +31 -0
- package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
- package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
- package/dist/{chunk-JYSSPQDT.js → chunk-E5V6WEMK.js} +11 -11
- package/dist/{chunk-T5YF32WV.js → chunk-EKGGSAWR.js} +6 -5
- package/dist/{chunk-7KVVNF7B.js → chunk-ELP5QZWL.js} +1 -1
- package/dist/{chunk-QH3T4WI2.js → chunk-EXAX37XR.js} +8 -2
- package/dist/{chunk-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
- package/dist/{chunk-W3CS2KFV.js → chunk-GANST5K3.js} +2 -2
- package/dist/{chunk-3WJT2JCX.js → chunk-IMSI7IFW.js} +52 -23
- package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
- package/dist/{chunk-RWYUK7LM.js → chunk-J2ASTCU6.js} +2 -2
- package/dist/{chunk-3XI7MIZB.js → chunk-J2BSUF6X.js} +1 -1
- package/dist/{chunk-WY3TQ2PT.js → chunk-JCDYDF54.js} +2 -2
- package/dist/{chunk-ALEF2F5N.js → chunk-K2AKVYNR.js} +2 -2
- package/dist/{chunk-TADJOIFW.js → chunk-KZOZN4PI.js} +4 -4
- package/dist/{chunk-CINKQY6M.js → chunk-L2YGSAOL.js} +3 -3
- package/dist/{chunk-AQB5M53R.js → chunk-LOKCBZYF.js} +3 -3
- package/dist/{chunk-7A65UCMI.js → chunk-MEE4NTPZ.js} +2 -2
- package/dist/{chunk-GM3WIOO6.js → chunk-MGBUWPXX.js} +2 -2
- package/dist/{chunk-ZHKUIC7X.js → chunk-MVIJTXN5.js} +21 -14
- package/dist/{chunk-SMEF3TRJ.js → chunk-ODBYZIOH.js} +15 -15
- package/dist/{chunk-NJGTNWQY.js → chunk-OQL4AJ4X.js} +6 -6
- package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
- package/dist/{chunk-7LUJE3II.js → chunk-PFRG5P32.js} +1 -1
- package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
- package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
- package/dist/{chunk-TJKE4EYX.js → chunk-QWLES6YV.js} +3 -3
- package/dist/{chunk-NMDUSCCE.js → chunk-QX4TB4NH.js} +160 -56
- package/dist/{chunk-CXMXJEVY.js → chunk-R2U2G4OS.js} +1 -1
- package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
- package/dist/{chunk-KGMHMYWI.js → chunk-RHYOWDI6.js} +2 -2
- package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
- package/dist/chunk-RXATE6FZ.js +385 -0
- package/dist/{chunk-EFCKV7MY.js → chunk-SBBQFPCJ.js} +1 -1
- package/dist/{chunk-KHCTBZGJ.js → chunk-SK7TR7BL.js} +4 -4
- package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
- package/dist/{chunk-TRZVS6TL.js → chunk-T6O5OLN2.js} +3 -3
- package/dist/{chunk-TFMZ4RKM.js → chunk-ULTKB5FC.js} +23 -12
- package/dist/{chunk-UNR3P7IF.js → chunk-VNPADTDD.js} +3 -3
- package/dist/{chunk-BFFLKQVB.js → chunk-VOM2HLUI.js} +4 -4
- package/dist/{chunk-GLG5JWLI.js → chunk-VRAXIQ6I.js} +2 -2
- package/dist/{chunk-NAUKCKCJ.js → chunk-W24SZ5FL.js} +4 -4
- package/dist/{chunk-COWQITWP.js → chunk-WOKVXK4J.js} +1 -1
- package/dist/{chunk-WJEVUPVD.js → chunk-XF77MK3J.js} +1 -1
- package/dist/{chunk-HYW6HTAK.js → chunk-XX2PA4L3.js} +2 -2
- package/dist/{chunk-RQBB7PYT.js → chunk-YMQQXPD5.js} +2 -2
- package/dist/{chunk-WHAEJX26.js → chunk-YWRQHRDY.js} +17 -12
- package/dist/{chunk-FBDOHH3Q.js → chunk-ZEMDV6W2.js} +29 -59
- package/dist/{clean-3VIU2BSK.js → clean-2RNCTDBT.js} +40 -27
- package/dist/cli.js +69 -67
- package/dist/{cloud-NA3J4XW2.js → cloud-NFIKESNZ.js} +4 -4
- package/dist/{cloudrun-4MHOF7UT.js → cloudrun-7224BCX3.js} +9 -9
- package/dist/commands/contrast-audit.browser.js +1 -1
- package/dist/{compare-ZR7XRPPT.js → compare-HL44MXVX.js} +76 -47
- package/dist/{compiler-MA2ELZPG.js → compiler-WF5QTXV7.js} +8 -7
- package/dist/{component-ZJSOPUAM.js → component-ZBZXSJBR.js} +3 -3
- package/dist/{compositions-WA5V2SHF.js → compositions-76P7LDDX.js} +19 -17
- package/dist/{contactSheet-CAGMKI3E.js → contactSheet-43ISAESM.js} +2 -2
- package/dist/{delete-UC427UEA.js → delete-4YZBYOHJ.js} +7 -7
- package/dist/{deploy-B5UO4UIK.js → deploy-UGUUGYLF.js} +1 -1
- package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
- package/dist/{dist-BPK37SAB.js → dist-5KKCRFPT.js} +5 -5
- package/dist/{dist-XGPSPKKP.js → dist-QQ26RUDV.js} +5 -4
- package/dist/{doctor-ZERCTKEK.js → doctor-GGVUK4NB.js} +20 -19
- package/dist/{events-DCOZQERS.js → events-OXPTHVDB.js} +4 -4
- package/dist/{events-CNIXB2QK.js → events-V2VU4J3B.js} +5 -5
- package/dist/{feedback-YBD5ITTY.js → feedback-HFZ5SCUK.js} +16 -16
- package/dist/{ffmpeg-V4BBFDTG.js → ffmpeg-3VHY7GO3.js} +13 -12
- package/dist/{figma-Z45ZYVGE.js → figma-7SEZTLBJ.js} +3 -3
- package/dist/fontLocalizeCli.js +14 -13
- package/dist/{get-23NXQWCD.js → get-Y2S2PXCM.js} +7 -7
- package/dist/{gpuPolicy-H6ABHVEB.js → gpuPolicy-UHPOWRV5.js} +11 -10
- package/dist/{grade-compare-ZPX2G3UV.js → grade-compare-4VTXSQM5.js} +38 -37
- package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
- package/dist/{help-EP4CDPLO.js → help-HXNOACHI.js} +1 -1
- package/dist/{history-E5OSXO74.js → history-XDJUI4LC.js} +39 -16
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +59 -59
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/hyperframes-slideshow.global.js +1 -1
- package/dist/{info-2HHGSW5H.js → info-KYRI3EZV.js} +56 -22
- package/dist/{init-ENEG6RZT.js → init-IL7EWMT5.js} +38 -45
- package/dist/{inspect-PVQK4E2A.js → inspect-TBNH23UC.js} +36 -35
- package/dist/{installer-YGGLEOSF.js → installer-O2YMFSI4.js} +8 -8
- package/dist/{keyframes-UWSYS2SL.js → keyframes-4GF62KAJ.js} +13 -14
- package/dist/{lambda-L3LPXC2M.js → lambda-JFL6M4XZ.js} +11 -11
- package/dist/{layout-JVL4QREC.js → layout-7MAEFR65.js} +36 -35
- package/dist/{lint-JXQ72DDB.js → lint-4AYHKYAM.js} +23 -16
- package/dist/{lintProject-F7IC7WY4.js → lintProject-52SLJPRC.js} +5 -4
- package/dist/{list-UFMLM3VV.js → list-3DP3D3MW.js} +7 -7
- package/dist/{login-CKGMWQJN.js → login-T54WQYRQ.js} +7 -7
- package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
- package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
- package/dist/{manager-U6OP3EXB.js → manager-QROK2IH3.js} +14 -13
- package/dist/{media-treatment-MFMEWCDY.js → media-treatment-4CXF7MSG.js} +20 -19
- package/dist/{models-QA3TJ75Y.js → models-IS3I6JKU.js} +18 -17
- package/dist/{motionShot-NV2OPJHD.js → motionShot-DVYJZOTQ.js} +21 -20
- package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
- package/dist/{normalize-audio-JWJRUKK2.js → normalize-audio-4527JIK4.js} +12 -8
- package/dist/{open-PTJNDRER.js → open-5JE46SAX.js} +18 -18
- package/dist/{parakeetRunner-B5FCWWOO.js → parakeetRunner-7JIJGJJ7.js} +20 -19
- package/dist/{pipeline-N26NA6ZG.js → pipeline-YEN3WFD2.js} +15 -14
- package/dist/{play-45D6X6TV.js → play-WFX67I7M.js} +27 -26
- package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
- package/dist/{preflight-MFOHPUOI.js → preflight-D377HVUZ.js} +15 -14
- package/dist/{present-IFBUDI4D.js → present-XTSEKAC7.js} +24 -23
- package/dist/{preview-MQRLXQOV.js → preview-5XH7EK6O.js} +27 -26
- package/dist/{producer-2QG7HLAW.js → producer-TFFYF4ZM.js} +1 -1
- package/dist/{projectConfig-I4FTZXHB.js → projectConfig-6YUJHMCL.js} +10 -10
- package/dist/{publication-3GOFXCGU.js → publication-JK33Y55E.js} +5 -5
- package/dist/{publish-3B2TZCFH.js → publish-JHDGXWXU.js} +18 -17
- package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
- package/dist/{remove-background-RK4BJDBF.js → remove-background-P44MYAPJ.js} +16 -15
- package/dist/{render-BV6FWFX3.js → render-HJ34EGMN.js} +8 -8
- package/dist/{render-PW3XGS7B.js → render-RBINWWP5.js} +42 -41
- package/dist/{render-SJ4HFPFU.js → render-RJ3I4E3A.js} +26 -25
- package/dist/{render-batch-GKX54O6N.js → render-batch-3D6XQYUC.js} +9 -9
- package/dist/renderSetupWorker.js +9 -8
- package/dist/{resolver-RQJ7CNXD.js → resolver-HCLTFZUW.js} +7 -7
- package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
- package/dist/{sherpa-XZPG7QFF.js → sherpa-IPOUJM6Q.js} +19 -18
- package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
- package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
- package/dist/{skills-EYLB2V6F.js → skills-P67QEERC.js} +13 -75
- package/dist/{skillsUpdateCheck-TE6K5ROM.js → skillsUpdateCheck-IFMLRVIF.js} +5 -5
- package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
- package/dist/{snapshot-FE4T3SCN.js → snapshot-4YM4NNWJ.js} +48 -45
- package/dist/{src-SEJ7LNNB.js → src-DCD3YMXX.js} +13 -12
- package/dist/{src-ZOXSEJCD.js → src-SSV66L3F.js} +14 -9
- package/dist/{staticProjectServer-LSVIRDRO.js → staticProjectServer-C7PPGLEQ.js} +22 -21
- package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
- package/dist/studio/assets/{hyperframes-player-Bv9hQ3v7.js → hyperframes-player-ChN3cOr0.js} +3 -3
- package/dist/studio/assets/{index-Df14bh-L.js → index-BYbFcRR0.js} +1 -1
- package/dist/studio/assets/{index-D_QqfWhx.js → index-CHu83hHM.js} +122 -122
- package/dist/studio/assets/{index-CBO8uz7-.css → index-CYbvOVp-.css} +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/{studio-api-SL2Z76NU.js → studio-api-6YZ7PIQR.js} +17 -14
- package/dist/{studioServer-BADWVIHU.js → studioServer-EWHSE4GC.js} +60 -59
- package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
- package/dist/{telemetry-RN6VYEID.js → telemetry-GGLBHZRZ.js} +5 -5
- package/dist/{timeline-JBTCIPLU.js → timeline-NKHQJXJ2.js} +65 -43
- package/dist/{tokens-A7V7UHNK.js → tokens-FWNNDJ6R.js} +2 -2
- package/dist/{transcribe-NTUCJGFI.js → transcribe-TRPKXZ7L.js} +26 -25
- package/dist/{transcribe-E4BOSNM4.js → transcribe-VD2TMMC2.js} +17 -16
- package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
- package/dist/{updateCheck-M7UAYLUR.js → updateCheck-CUPS6LU3.js} +4 -4
- package/dist/{upgrade-A2COSIMB.js → upgrade-23XO6MEX.js} +4 -4
- package/dist/{urlDownloader-MBSQYART.js → urlDownloader-YOAOONCK.js} +10 -9
- package/dist/{validate-NODZYBHY.js → validate-BWIW24G5.js} +30 -29
- package/dist/{video-LBCUUYK7.js → video-XRXJS4GC.js} +12 -11
- package/dist/warmCheck.js +43 -42
- package/package.json +2 -1
- package/dist/chunk-I5JRXMCV.js +0 -6077
- package/dist/chunk-LM265QNK.js +0 -3896
|
@@ -21,9 +21,9 @@ import {
|
|
|
21
21
|
mkdirWithinProject
|
|
22
22
|
} from "./chunk-OFQWTKPW.js";
|
|
23
23
|
|
|
24
|
-
// ../studio-server/dist/chunk-
|
|
24
|
+
// ../studio-server/dist/chunk-B4NDV4NM.js
|
|
25
25
|
import { randomUUID as randomUUID7 } from "crypto";
|
|
26
|
-
import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
|
|
26
|
+
import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, stat as stat2, writeFile } from "fs/promises";
|
|
27
27
|
import {
|
|
28
28
|
existsSync as existsSync3,
|
|
29
29
|
lstatSync as lstatSync4,
|
|
@@ -58,6 +58,7 @@ import { constants, createReadStream, createWriteStream, renameSync as renameSyn
|
|
|
58
58
|
import { copyFile, mkdir, readdir, readFile, rename, rm, stat } from "fs/promises";
|
|
59
59
|
import { dirname, join as join2 } from "path";
|
|
60
60
|
import { pipeline } from "stream/promises";
|
|
61
|
+
import { extname as extname2 } from "path";
|
|
61
62
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
62
63
|
import { readdirSync as readdirSync2, readFileSync as readFileSync5, renameSync as renameSync3, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
|
|
63
64
|
import { lstat, readdir as readdir2, rm as rm2 } from "fs/promises";
|
|
@@ -97,6 +98,9 @@ import {
|
|
|
97
98
|
import { dirname as dirname3, join as join6, relative as relative4, resolve as resolve5, sep as sep4 } from "path";
|
|
98
99
|
import { closeSync as closeSync3, constants as constants4, mkdirSync as mkdirSync4, openSync as openSync3, readFileSync as readFileSync9, writeSync as writeSync2 } from "fs";
|
|
99
100
|
import { dirname as dirname4 } from "path";
|
|
101
|
+
import { readdirSync as readdirSync5 } from "fs";
|
|
102
|
+
import { rm as rm4, stat as stat3 } from "fs/promises";
|
|
103
|
+
import { join as join9 } from "path";
|
|
100
104
|
var RECEIPT_TTL_MS = 1e4;
|
|
101
105
|
var receipts = /* @__PURE__ */ new Map();
|
|
102
106
|
var overwriteListeners = /* @__PURE__ */ new Set();
|
|
@@ -110,9 +114,9 @@ function hashVersion(hex) {
|
|
|
110
114
|
function hashOfVersion(version) {
|
|
111
115
|
return /^"sha256:([0-9a-f]{64})"$/.exec(version)?.[1];
|
|
112
116
|
}
|
|
113
|
-
function settledFileTag(
|
|
114
|
-
if (now -
|
|
115
|
-
return [
|
|
117
|
+
function settledFileTag(stat4, now = Date.now()) {
|
|
118
|
+
if (now - stat4.ctimeMs < 3e3) return null;
|
|
119
|
+
return [stat4.ino, stat4.ctimeMs, stat4.size].map((n) => n.toString(36)).join("-");
|
|
116
120
|
}
|
|
117
121
|
function createWriteToken(requestToken) {
|
|
118
122
|
const token = requestToken?.trim();
|
|
@@ -391,8 +395,8 @@ function signatureEntryStat(projectDir, entry, file, outputs) {
|
|
|
391
395
|
if (isSkippedEntry(entry) || !isPathWithin(projectDir, file)) return null;
|
|
392
396
|
if (isRenderOutput(projectDir, file, outputs)) return null;
|
|
393
397
|
try {
|
|
394
|
-
const
|
|
395
|
-
return
|
|
398
|
+
const stat4 = lstatSync(file);
|
|
399
|
+
return stat4.isSymbolicLink() ? null : stat4;
|
|
396
400
|
} catch {
|
|
397
401
|
return null;
|
|
398
402
|
}
|
|
@@ -406,17 +410,17 @@ function collectProjectSignatureFiles(projectDir, dir, files, outputs = readRend
|
|
|
406
410
|
}
|
|
407
411
|
for (const entry of entries) {
|
|
408
412
|
const file = resolve2(dir, entry);
|
|
409
|
-
const
|
|
410
|
-
if (!
|
|
411
|
-
if (
|
|
413
|
+
const stat4 = signatureEntryStat(projectDir, entry, file, outputs);
|
|
414
|
+
if (!stat4) continue;
|
|
415
|
+
if (stat4.isDirectory()) {
|
|
412
416
|
collectProjectSignatureFiles(projectDir, file, files, outputs);
|
|
413
|
-
} else if (
|
|
417
|
+
} else if (stat4.isFile()) {
|
|
414
418
|
files.push({
|
|
415
419
|
file,
|
|
416
|
-
mtimeMs:
|
|
417
|
-
ctimeMs:
|
|
418
|
-
size:
|
|
419
|
-
textContentEligible: isTextContentEligible(file,
|
|
420
|
+
mtimeMs: stat4.mtimeMs,
|
|
421
|
+
ctimeMs: stat4.ctimeMs,
|
|
422
|
+
size: stat4.size,
|
|
423
|
+
textContentEligible: isTextContentEligible(file, stat4.size)
|
|
420
424
|
});
|
|
421
425
|
}
|
|
422
426
|
}
|
|
@@ -426,19 +430,19 @@ function collectProjectSignatureManifestFiles(projectDir, files) {
|
|
|
426
430
|
for (const manifestPath of STUDIO_SIGNATURE_MANIFEST_PATHS) {
|
|
427
431
|
const file = resolve2(projectDir, manifestPath);
|
|
428
432
|
if (seen.has(file) || !isPathWithin(projectDir, file)) continue;
|
|
429
|
-
let
|
|
433
|
+
let stat4;
|
|
430
434
|
try {
|
|
431
|
-
|
|
435
|
+
stat4 = lstatSync(file);
|
|
432
436
|
} catch {
|
|
433
437
|
continue;
|
|
434
438
|
}
|
|
435
|
-
if (
|
|
439
|
+
if (stat4.isSymbolicLink() || !stat4.isFile()) continue;
|
|
436
440
|
files.push({
|
|
437
441
|
file,
|
|
438
|
-
mtimeMs:
|
|
439
|
-
ctimeMs:
|
|
440
|
-
size:
|
|
441
|
-
textContentEligible: isTextContentEligible(file,
|
|
442
|
+
mtimeMs: stat4.mtimeMs,
|
|
443
|
+
ctimeMs: stat4.ctimeMs,
|
|
444
|
+
size: stat4.size,
|
|
445
|
+
textContentEligible: isTextContentEligible(file, stat4.size)
|
|
442
446
|
});
|
|
443
447
|
seen.add(file);
|
|
444
448
|
}
|
|
@@ -578,11 +582,21 @@ async function openBlobStore(dir) {
|
|
|
578
582
|
total += size;
|
|
579
583
|
return hash;
|
|
580
584
|
},
|
|
585
|
+
reference: (absPath) => hashFile(absPath),
|
|
581
586
|
has: (hash) => sizes.has(hash),
|
|
582
587
|
read: async (hash) => readBlob(dir, hash),
|
|
583
588
|
writeTo: async (hash, absPath, beforeReplace) => cloneOrCopy(pathOf(hash), absPath, beforeReplace),
|
|
584
589
|
bytes: () => total,
|
|
585
590
|
size: (hash) => sizes.get(hash) ?? 0,
|
|
591
|
+
async drop(hashes) {
|
|
592
|
+
for (const hash of hashes) {
|
|
593
|
+
const size = sizes.get(hash);
|
|
594
|
+
if (size === void 0) continue;
|
|
595
|
+
await rm(pathOf(hash), { force: true });
|
|
596
|
+
sizes.delete(hash);
|
|
597
|
+
total -= size;
|
|
598
|
+
}
|
|
599
|
+
},
|
|
586
600
|
async prune(keep) {
|
|
587
601
|
for (const [hash, size] of sizes) {
|
|
588
602
|
if (keep.has(hash)) continue;
|
|
@@ -593,6 +607,39 @@ async function openBlobStore(dir) {
|
|
|
593
607
|
}
|
|
594
608
|
};
|
|
595
609
|
}
|
|
610
|
+
var MEDIA_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
611
|
+
".mp4",
|
|
612
|
+
".mov",
|
|
613
|
+
".m4v",
|
|
614
|
+
".webm",
|
|
615
|
+
".mkv",
|
|
616
|
+
".avi",
|
|
617
|
+
".mxf",
|
|
618
|
+
".m2ts",
|
|
619
|
+
".mp3",
|
|
620
|
+
".wav",
|
|
621
|
+
".aac",
|
|
622
|
+
".m4a",
|
|
623
|
+
".flac",
|
|
624
|
+
".ogg",
|
|
625
|
+
".opus"
|
|
626
|
+
]);
|
|
627
|
+
var COPY_NOTHING_ABOVE_BYTES = 64 * 1024 ** 2;
|
|
628
|
+
var isUncopied = (path, size) => size > COPY_NOTHING_ABOVE_BYTES || MEDIA_EXTENSIONS.has(extname2(path).toLowerCase());
|
|
629
|
+
function uncopiedOnlyHashes(log, sizeOf) {
|
|
630
|
+
const copied = /* @__PURE__ */ new Set();
|
|
631
|
+
const uncopied = /* @__PURE__ */ new Set();
|
|
632
|
+
const note = (path, hash) => {
|
|
633
|
+
if (hash) (isUncopied(path, sizeOf(hash)) ? uncopied : copied).add(hash);
|
|
634
|
+
};
|
|
635
|
+
for (const [path, hash] of log.baseline) note(path, hash);
|
|
636
|
+
for (const entry of log.entries)
|
|
637
|
+
for (const file of entry.files) {
|
|
638
|
+
note(file.path, file.before);
|
|
639
|
+
note(file.path, file.after);
|
|
640
|
+
}
|
|
641
|
+
return [...uncopied].filter((hash) => !copied.has(hash));
|
|
642
|
+
}
|
|
596
643
|
var ID_PATH = join3(".hyperframes", "history-id");
|
|
597
644
|
var ID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
598
645
|
var isHistoryId = (name) => ID_SHAPE.test(name);
|
|
@@ -763,13 +810,13 @@ function projectGone(dir, id, dev, tempDir) {
|
|
|
763
810
|
}
|
|
764
811
|
function diskStillHere(dir, dev, tempDir) {
|
|
765
812
|
let at = dir;
|
|
766
|
-
let
|
|
767
|
-
while (!
|
|
813
|
+
let stat4 = statSync3(at, { throwIfNoEntry: false });
|
|
814
|
+
while (!stat4) {
|
|
768
815
|
if (dirname2(at) === at) return false;
|
|
769
816
|
at = dirname2(at);
|
|
770
|
-
|
|
817
|
+
stat4 = statSync3(at, { throwIfNoEntry: false });
|
|
771
818
|
}
|
|
772
|
-
if (typeof dev === "number") return
|
|
819
|
+
if (typeof dev === "number") return stat4.dev === dev;
|
|
773
820
|
return at === dir || isSafePath(tempDir, at);
|
|
774
821
|
}
|
|
775
822
|
function lastUsed(home) {
|
|
@@ -870,12 +917,12 @@ function stillPendingAfterUnlink(item) {
|
|
|
870
917
|
let descriptor;
|
|
871
918
|
try {
|
|
872
919
|
descriptor = openSync(item.path, constants2.O_RDONLY | constants2.O_NOFOLLOW);
|
|
873
|
-
const
|
|
874
|
-
if (!
|
|
920
|
+
const stat4 = fstatSync(descriptor);
|
|
921
|
+
if (!stat4.isFile() || stat4.isSymbolicLink()) return false;
|
|
875
922
|
const hash = createHash4("sha256").update(readFileSync6(descriptor)).digest("hex");
|
|
876
923
|
if (hash !== item.hash) return false;
|
|
877
924
|
const current = lstatSync2(item.path);
|
|
878
|
-
if (current.dev !==
|
|
925
|
+
if (current.dev !== stat4.dev || current.ino !== stat4.ino) return false;
|
|
879
926
|
unlinkSync(item.path);
|
|
880
927
|
return false;
|
|
881
928
|
} catch (error) {
|
|
@@ -975,8 +1022,8 @@ function ownerPid(owner) {
|
|
|
975
1022
|
const pid = owner.pid;
|
|
976
1023
|
return typeof pid === "number" && Number.isSafeInteger(pid) && pid > 0 ? pid : null;
|
|
977
1024
|
}
|
|
978
|
-
function ordinaryOwner(
|
|
979
|
-
return
|
|
1025
|
+
function ordinaryOwner(stat4) {
|
|
1026
|
+
return stat4.isFile() && stat4.nlink === 1;
|
|
980
1027
|
}
|
|
981
1028
|
function sameOwnerFile(before, current) {
|
|
982
1029
|
return current.dev === before.dev && current.ino === before.ino;
|
|
@@ -1050,8 +1097,8 @@ function runsOnDisk(root) {
|
|
|
1050
1097
|
return entries.filter((entry) => entry.isDirectory() && UUID.test(entry.name)).flatMap((entry) => {
|
|
1051
1098
|
const path = join6(root, entry.name);
|
|
1052
1099
|
try {
|
|
1053
|
-
const
|
|
1054
|
-
return [{ path, stat:
|
|
1100
|
+
const stat4 = lstatSync3(path);
|
|
1101
|
+
return [{ path, stat: stat4 }];
|
|
1055
1102
|
} catch {
|
|
1056
1103
|
return [];
|
|
1057
1104
|
}
|
|
@@ -1065,10 +1112,10 @@ function planSnapshotCleanup(project, state, now = Date.now()) {
|
|
|
1065
1112
|
const runs = runsOnDisk(root);
|
|
1066
1113
|
for (const run of runs.slice(0, SNAPSHOT_RUNS_TO_KEEP)) keep.add(run.path);
|
|
1067
1114
|
const pending = [];
|
|
1068
|
-
for (const { path, stat:
|
|
1069
|
-
if (keep.has(path) || now -
|
|
1115
|
+
for (const { path, stat: stat4 } of runs) {
|
|
1116
|
+
if (keep.has(path) || now - stat4.mtimeMs < SNAPSHOT_GRACE_MS || liveOwner(path)) continue;
|
|
1070
1117
|
try {
|
|
1071
|
-
const run = { path, dev:
|
|
1118
|
+
const run = { path, dev: stat4.dev, ino: stat4.ino, mtimeMs: stat4.mtimeMs };
|
|
1072
1119
|
if (!unchangedRun(project, run)) continue;
|
|
1073
1120
|
pending.push(run);
|
|
1074
1121
|
retireReferences(records2, root, path);
|
|
@@ -1704,6 +1751,7 @@ var Engine = class {
|
|
|
1704
1751
|
);
|
|
1705
1752
|
if (!log) return this.firstOpen();
|
|
1706
1753
|
this.log = withoutHiddenPaths(log);
|
|
1754
|
+
await this.reclaimUncopied();
|
|
1707
1755
|
if (!this.log.keepsLedger) await this.takeInUnnamedLedger();
|
|
1708
1756
|
const cache = this.readStatCache();
|
|
1709
1757
|
const last = this.log.entries.at(-1)?.id ?? START;
|
|
@@ -1717,6 +1765,10 @@ var Engine = class {
|
|
|
1717
1765
|
this.reopenClosedWindow();
|
|
1718
1766
|
await this.settleAll();
|
|
1719
1767
|
}
|
|
1768
|
+
/** Copies an older version took of files that are no longer copied; text and small files are never touched. */
|
|
1769
|
+
async reclaimUncopied() {
|
|
1770
|
+
await this.blobs.drop(uncopiedOnlyHashes(this.log, (hash) => this.blobs.size(hash)));
|
|
1771
|
+
}
|
|
1720
1772
|
hearWrites() {
|
|
1721
1773
|
const realDir = realFilePath(this.dir);
|
|
1722
1774
|
this.stopHearing = onFileOverwritten((absPath, version, bytes) => {
|
|
@@ -1731,7 +1783,8 @@ var Engine = class {
|
|
|
1731
1783
|
chainBackFrom(this.overwritten.get(path), replaced).set(after, replaced)
|
|
1732
1784
|
);
|
|
1733
1785
|
this.queue(async () => {
|
|
1734
|
-
if (!this.blobs.has(replaced)
|
|
1786
|
+
if (!this.blobs.has(replaced) && !isUncopied(path, bytes.length))
|
|
1787
|
+
await this.storeBytes(bytes);
|
|
1735
1788
|
}).catch((error) => this.options.onError?.(error));
|
|
1736
1789
|
});
|
|
1737
1790
|
}
|
|
@@ -1810,7 +1863,8 @@ var Engine = class {
|
|
|
1810
1863
|
}
|
|
1811
1864
|
async recordAdopted(file, sweptAt, stored) {
|
|
1812
1865
|
if (stored === null || this.whereFolder() !== "here") return;
|
|
1813
|
-
const
|
|
1866
|
+
const kept = this.blobs.has(stored) || isUncopied(file.path, file.size);
|
|
1867
|
+
const hash = kept ? stored : await this.storeIfPresent(file.path);
|
|
1814
1868
|
if (hash === null) return;
|
|
1815
1869
|
const change = { path: file.path, before: null, after: hash };
|
|
1816
1870
|
const found = this.overwrittenBy(change, void 0, /* @__PURE__ */ new Set());
|
|
@@ -1886,22 +1940,24 @@ var Engine = class {
|
|
|
1886
1940
|
/** The file's hash once copied in; null when it was removed before the copy (the next sweep records that). */
|
|
1887
1941
|
async storeIfPresent(path) {
|
|
1888
1942
|
try {
|
|
1889
|
-
|
|
1943
|
+
const abs = join8(this.dir, path);
|
|
1944
|
+
const { size } = await stat2(abs);
|
|
1945
|
+
return await (isUncopied(path, size) ? this.blobs.reference(abs) : this.blobs.put(abs));
|
|
1890
1946
|
} catch (error) {
|
|
1891
1947
|
if (error.code === "ENOENT") return null;
|
|
1892
1948
|
throw error;
|
|
1893
1949
|
}
|
|
1894
1950
|
}
|
|
1895
|
-
async observe(path,
|
|
1951
|
+
async observe(path, stat4, at) {
|
|
1896
1952
|
const known = this.tracked.get(path) ?? { hash: null, stat: null };
|
|
1897
|
-
if (
|
|
1953
|
+
if (stat4 && known.stat === stat4) return false;
|
|
1898
1954
|
const heard = this.overwritten.get(path);
|
|
1899
1955
|
const hash = await this.storeIfPresent(path);
|
|
1900
1956
|
if (hash === null || this.whereFolder() !== "here") return false;
|
|
1901
|
-
this.tracked.set(path, { hash, stat:
|
|
1957
|
+
this.tracked.set(path, { hash, stat: stat4 });
|
|
1902
1958
|
this.forgetWritesBefore(path, hash, heard);
|
|
1903
1959
|
if (known.hash !== hash) await this.record(path, known.hash, hash, at);
|
|
1904
|
-
return known.hash !== hash || known.stat !==
|
|
1960
|
+
return known.hash !== hash || known.stat !== stat4;
|
|
1905
1961
|
}
|
|
1906
1962
|
async record(path, before, after, at) {
|
|
1907
1963
|
const endedBeforeThisWrite = this.windows.filter((open) => !takesWrite(open, at));
|
|
@@ -2199,9 +2255,9 @@ var Engine = class {
|
|
|
2199
2255
|
const parts = path.split("/");
|
|
2200
2256
|
for (let depth = 1; depth <= parts.length; depth += 1) {
|
|
2201
2257
|
const at = parts.slice(0, depth).join("/");
|
|
2202
|
-
const
|
|
2203
|
-
if (!
|
|
2204
|
-
if (at === path || !
|
|
2258
|
+
const stat4 = lstatSync4(join8(this.dir, at), { throwIfNoEntry: false });
|
|
2259
|
+
if (!stat4) return void 0;
|
|
2260
|
+
if (at === path || !stat4.isDirectory()) return { at, stat: stat4 };
|
|
2205
2261
|
}
|
|
2206
2262
|
return void 0;
|
|
2207
2263
|
}
|
|
@@ -2220,6 +2276,11 @@ var Engine = class {
|
|
|
2220
2276
|
async writeAs(who, label, target, extra) {
|
|
2221
2277
|
this.assertWritable();
|
|
2222
2278
|
const changes = [...target].filter(([path, hash]) => (this.tracked.get(path)?.hash ?? null) !== hash).sort(([, a], [, b]) => Number(a !== null) - Number(b !== null));
|
|
2279
|
+
const gone = changes.find(([, hash]) => hash !== null && !this.blobs.has(hash));
|
|
2280
|
+
if (gone)
|
|
2281
|
+
throw new Error(
|
|
2282
|
+
`An earlier version of ${gone[0]} is not kept, so this cannot be brought back.`
|
|
2283
|
+
);
|
|
2223
2284
|
const deleted = new Set(changes.filter(([, hash]) => hash === null).map(([path]) => path));
|
|
2224
2285
|
const blocked = changes.filter(([, hash]) => hash !== null).map(([path]) => this.inTheWay(path, deleted)).find(Boolean);
|
|
2225
2286
|
if (blocked) throw new Error(`${blocked} is in the way; move or delete it, then try again.`);
|
|
@@ -2386,6 +2447,9 @@ var Engine = class {
|
|
|
2386
2447
|
if ((await readdir3(dest).catch(missingIsEmpty)).length > 0)
|
|
2387
2448
|
throw new Error(`Checkout writes into an empty folder only: ${dest}`);
|
|
2388
2449
|
const files = manifestAround(this.log, entryId, side);
|
|
2450
|
+
for (const [path, hash] of files)
|
|
2451
|
+
if (!this.blobs.has(hash))
|
|
2452
|
+
throw new Error(`The version of ${path} from then is not kept.`);
|
|
2389
2453
|
try {
|
|
2390
2454
|
for (const [path, hash] of files) await this.blobs.writeTo(hash, join8(dest, path));
|
|
2391
2455
|
} catch (error) {
|
|
@@ -2490,6 +2554,61 @@ function readProjectHistory(options) {
|
|
|
2490
2554
|
}
|
|
2491
2555
|
};
|
|
2492
2556
|
}
|
|
2557
|
+
function historyIds(historyRoot) {
|
|
2558
|
+
try {
|
|
2559
|
+
return readdirSync5(historyRoot).filter(isHistoryId);
|
|
2560
|
+
} catch {
|
|
2561
|
+
return [];
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
function namedHashes(log) {
|
|
2565
|
+
const hashes = new Set(log.baseline.values());
|
|
2566
|
+
for (const entry of log.entries) {
|
|
2567
|
+
for (const file of entry.files) {
|
|
2568
|
+
if (file.before) hashes.add(file.before);
|
|
2569
|
+
if (file.after) hashes.add(file.after);
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
return hashes;
|
|
2573
|
+
}
|
|
2574
|
+
async function blobSizes(blobs, hashes) {
|
|
2575
|
+
const sizes = /* @__PURE__ */ new Map();
|
|
2576
|
+
for (const hash of hashes)
|
|
2577
|
+
sizes.set(hash, (await stat3(blobPath(blobs, hash)).catch(() => null))?.size ?? 0);
|
|
2578
|
+
return sizes;
|
|
2579
|
+
}
|
|
2580
|
+
async function reclaimOne(home, dryRun) {
|
|
2581
|
+
const log = readLog(join9(home, "log.jsonl"), () => {
|
|
2582
|
+
});
|
|
2583
|
+
if (!log) return 0;
|
|
2584
|
+
const blobs = join9(home, "blobs");
|
|
2585
|
+
const sizes = await blobSizes(blobs, namedHashes(log));
|
|
2586
|
+
let bytes = 0;
|
|
2587
|
+
for (const hash of uncopiedOnlyHashes(log, (known) => sizes.get(known) ?? 0)) {
|
|
2588
|
+
const size = sizes.get(hash) ?? 0;
|
|
2589
|
+
if (size === 0) continue;
|
|
2590
|
+
bytes += size;
|
|
2591
|
+
if (!dryRun) await rm4(blobPath(blobs, hash), { force: true });
|
|
2592
|
+
}
|
|
2593
|
+
return bytes;
|
|
2594
|
+
}
|
|
2595
|
+
async function reclaimUncopiedBlobs(historyRoot, { dryRun = false, onError } = {}) {
|
|
2596
|
+
const reclaimed = [];
|
|
2597
|
+
for (const id of historyIds(historyRoot)) {
|
|
2598
|
+
const home = join9(historyRoot, id);
|
|
2599
|
+
let release;
|
|
2600
|
+
try {
|
|
2601
|
+
release = await takeHistoryOwnership(home, 0);
|
|
2602
|
+
const bytes = await reclaimOne(home, dryRun);
|
|
2603
|
+
if (bytes > 0) reclaimed.push({ id, bytes });
|
|
2604
|
+
} catch (error) {
|
|
2605
|
+
if (!(error instanceof HistoryBusyError)) onError?.(error);
|
|
2606
|
+
} finally {
|
|
2607
|
+
release?.();
|
|
2608
|
+
}
|
|
2609
|
+
}
|
|
2610
|
+
return reclaimed;
|
|
2611
|
+
}
|
|
2493
2612
|
function historyCache(open) {
|
|
2494
2613
|
const histories = /* @__PURE__ */ new Map();
|
|
2495
2614
|
const get = async (projectDir) => {
|
|
@@ -2547,5 +2666,6 @@ export {
|
|
|
2547
2666
|
HistoryClosedError,
|
|
2548
2667
|
openProjectHistory,
|
|
2549
2668
|
readProjectHistory,
|
|
2669
|
+
reclaimUncopiedBlobs,
|
|
2550
2670
|
historyCache
|
|
2551
2671
|
};
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-HVW7ABXD.js";
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_REGISTRY_URL
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-32NB4VMH.js";
|
|
16
16
|
|
|
17
17
|
// src/utils/projectConfig.ts
|
|
18
18
|
import { readFileSync, writeFileSync } from "fs";
|
|
@@ -43,7 +43,10 @@ function readProjectConfigWithStatus(projectDir) {
|
|
|
43
43
|
return { status: isFileNotFound(error) ? "missing" : "unreadable" };
|
|
44
44
|
}
|
|
45
45
|
try {
|
|
46
|
-
return {
|
|
46
|
+
return {
|
|
47
|
+
status: "ok",
|
|
48
|
+
config: normalizeConfig(JSON.parse(text.replace(/^\uFEFF/, "")))
|
|
49
|
+
};
|
|
47
50
|
} catch {
|
|
48
51
|
return { status: "unreadable" };
|
|
49
52
|
}
|
|
@@ -118,12 +121,16 @@ function seedProjectAuthoringSkill(projectDir, rawSkill) {
|
|
|
118
121
|
return;
|
|
119
122
|
}
|
|
120
123
|
try {
|
|
121
|
-
const parsed = JSON.parse(text);
|
|
124
|
+
const parsed = JSON.parse(text.replace(/^\uFEFF/, ""));
|
|
122
125
|
if (!isJsonObject(parsed)) return;
|
|
123
126
|
if (normalizeSkillSlug(parsed.authoringSkill)) return;
|
|
124
127
|
parsed.authoringSkill = skill;
|
|
125
128
|
const indent = /\n([ \t]+)"/.exec(text)?.[1] ?? " ";
|
|
126
|
-
writeFileSync(
|
|
129
|
+
writeFileSync(
|
|
130
|
+
path,
|
|
131
|
+
(text.startsWith("\uFEFF") ? "\uFEFF" : "") + JSON.stringify(parsed, null, indent) + "\n",
|
|
132
|
+
"utf-8"
|
|
133
|
+
);
|
|
127
134
|
} catch {
|
|
128
135
|
}
|
|
129
136
|
}
|
|
@@ -137,7 +144,7 @@ function recordProjectRegistryItems(projectDir, items) {
|
|
|
137
144
|
return;
|
|
138
145
|
}
|
|
139
146
|
try {
|
|
140
|
-
const parsed = JSON.parse(text);
|
|
147
|
+
const parsed = JSON.parse(text.replace(/^\uFEFF/, ""));
|
|
141
148
|
if (!isJsonObject(parsed)) return;
|
|
142
149
|
const existing = normalizeRegistryItems(parsed.registryItems) ?? [];
|
|
143
150
|
const byName = new Map(existing.map((item) => [item.name, item]));
|
|
@@ -150,7 +157,11 @@ function recordProjectRegistryItems(projectDir, items) {
|
|
|
150
157
|
if (unchanged) return;
|
|
151
158
|
parsed.registryItems = merged;
|
|
152
159
|
const indent = /\n([ \t]+)"/.exec(text)?.[1] ?? " ";
|
|
153
|
-
writeFileSync(
|
|
160
|
+
writeFileSync(
|
|
161
|
+
path,
|
|
162
|
+
(text.startsWith("\uFEFF") ? "\uFEFF" : "") + JSON.stringify(parsed, null, indent) + "\n",
|
|
163
|
+
"utf-8"
|
|
164
|
+
);
|
|
154
165
|
} catch {
|
|
155
166
|
}
|
|
156
167
|
}
|
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
formatVariableValidationIssue,
|
|
21
21
|
validateVariables
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MGBUWPXX.js";
|
|
23
23
|
import {
|
|
24
24
|
extractCompositionMetadata
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-2MCXIY4B.js";
|
|
26
26
|
|
|
27
27
|
// src/utils/variables.ts
|
|
28
28
|
import { readFileSync } from "fs";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-ISN5GRYI.js";
|
|
13
13
|
import {
|
|
14
14
|
normalizeErrorMessage
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-T2EUWCJE.js";
|
|
16
16
|
|
|
17
17
|
// src/telemetry/posthogKey.ts
|
|
18
18
|
var POSTHOG_API_KEY = "phc_zjjbX0PnWxERXrMHhkEJWj9A9BhGVLRReICgsfTMmpx";
|
|
@@ -305,7 +305,6 @@ function passthroughFields(parsed) {
|
|
|
305
305
|
skillsUpdateAvailable: parsed.skillsUpdateAvailable,
|
|
306
306
|
skillsOutdatedCount: parsed.skillsOutdatedCount,
|
|
307
307
|
skillsMissingCount: parsed.skillsMissingCount,
|
|
308
|
-
skillsRemovedCount: parsed.skillsRemovedCount,
|
|
309
308
|
localEmbeddingEnabled: consentFrom(parsed.localEmbeddingEnabled)
|
|
310
309
|
};
|
|
311
310
|
}
|
|
@@ -7,10 +7,10 @@ var __dirname = __hf_dirname(__filename);
|
|
|
7
7
|
import {
|
|
8
8
|
parseFeedbackRating,
|
|
9
9
|
trackRenderFeedback
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-BV6YE455.js";
|
|
11
11
|
import {
|
|
12
12
|
shouldTrack
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GANST5K3.js";
|
|
14
14
|
import {
|
|
15
15
|
c
|
|
16
16
|
} from "./chunk-ZTZA4UWZ.js";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
readConfig,
|
|
22
22
|
writeConfig
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-6NLPPKBO.js";
|
|
24
24
|
|
|
25
25
|
// src/telemetry/feedback.ts
|
|
26
26
|
import * as readline from "readline";
|
|
@@ -84,7 +84,7 @@ async function getDoctorSummary() {
|
|
|
84
84
|
try {
|
|
85
85
|
const [{ getSystemMeta }, { findFFmpeg }] = await Promise.all([
|
|
86
86
|
import("./system-7F3UEHQT.js"),
|
|
87
|
-
import("./ffmpeg-
|
|
87
|
+
import("./ffmpeg-3VHY7GO3.js")
|
|
88
88
|
]);
|
|
89
89
|
const sys = getSystemMeta();
|
|
90
90
|
const parts = [
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
DISTRIBUTED_FPS,
|
|
12
12
|
isDistributedFps
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MGBUWPXX.js";
|
|
14
14
|
import {
|
|
15
15
|
parseHTML
|
|
16
16
|
} from "./chunk-SDYDNHEE.js";
|
|
@@ -18,6 +18,9 @@ import {
|
|
|
18
18
|
// src/utils/compositionFps.ts
|
|
19
19
|
import { readFileSync } from "fs";
|
|
20
20
|
import { join } from "path";
|
|
21
|
+
function getHtmlAttribute(element, name) {
|
|
22
|
+
return Array.from(element.attributes).find((attribute) => attribute.name.toLowerCase() === name)?.value ?? null;
|
|
23
|
+
}
|
|
21
24
|
function readCompositionFps(html) {
|
|
22
25
|
let doc;
|
|
23
26
|
try {
|
|
@@ -25,11 +28,11 @@ function readCompositionFps(html) {
|
|
|
25
28
|
} catch {
|
|
26
29
|
return null;
|
|
27
30
|
}
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
) ??
|
|
32
|
-
const raw = root
|
|
31
|
+
const compositions = Array.from(doc.querySelectorAll("*")).filter(
|
|
32
|
+
(element) => getHtmlAttribute(element, "data-composition-id") !== null
|
|
33
|
+
);
|
|
34
|
+
const root = compositions.find((element) => getHtmlAttribute(element, "data-root") === "true") ?? compositions[0];
|
|
35
|
+
const raw = root ? getHtmlAttribute(root, "data-fps")?.trim() : void 0;
|
|
33
36
|
return raw ? raw : null;
|
|
34
37
|
}
|
|
35
38
|
var DEFAULT_CLOUD_FPS = 30;
|
|
@@ -6,14 +6,14 @@ 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-4E75LHAL.js";
|
|
10
10
|
import {
|
|
11
11
|
DEFAULT_HISTORY_ROOT,
|
|
12
12
|
HistoryBusyError,
|
|
13
13
|
MAX_WINDOW_IDLE_MS,
|
|
14
14
|
openProjectHistory,
|
|
15
15
|
readProjectHistory
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4HCJOFMB.js";
|
|
17
17
|
import {
|
|
18
18
|
findPreviewServerForProject,
|
|
19
19
|
studioApiUrl
|
|
@@ -13,11 +13,11 @@ import {
|
|
|
13
13
|
formatPreviewProxyBox,
|
|
14
14
|
hdrToSdrToneMapFilter,
|
|
15
15
|
parseFirstFrameColour
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MGBUWPXX.js";
|
|
17
17
|
import {
|
|
18
18
|
decodeAuthoredAttribute,
|
|
19
19
|
scanHtmlOpeningTags
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-2MCXIY4B.js";
|
|
21
21
|
import {
|
|
22
22
|
mkdirWithinProject,
|
|
23
23
|
realProjectRoot,
|
|
@@ -1278,7 +1278,7 @@ async function withFigmaErrors(command, fn) {
|
|
|
1278
1278
|
} catch (err) {
|
|
1279
1279
|
if (err instanceof Error) {
|
|
1280
1280
|
try {
|
|
1281
|
-
const { trackCommandFailure } = await import("./events-
|
|
1281
|
+
const { trackCommandFailure } = await import("./events-V2VU4J3B.js");
|
|
1282
1282
|
trackCommandFailure(
|
|
1283
1283
|
command,
|
|
1284
1284
|
err,
|