hyperframes 0.8.193 → 0.8.195

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.
Files changed (191) hide show
  1. package/dist/{add-JC6DKZKC.js → add-NL6XABRV.js} +12 -12
  2. package/dist/{animatedGifPrep-S6KXJGEL.js → animatedGifPrep-JD4BBM2L.js} +8 -7
  3. package/dist/api.js +18 -17
  4. package/dist/{asset-XITFIFE6.js → asset-LRRHLG4L.js} +2 -2
  5. package/dist/{assetCataloger-K5FNKG35.js → assetCataloger-D7KGO346.js} +8 -7
  6. package/dist/{audio-364UHTY4.js → audio-34CZM4HF.js} +14 -13
  7. package/dist/{auth-5JEESRE6.js → auth-FL5ZMOXB.js} +1 -1
  8. package/dist/{autoUpdate-RVVYEHAA.js → autoUpdate-FZTJFLIH.js} +2 -2
  9. package/dist/{backgroundChecks-DCBIYWIQ.js → backgroundChecks-6ZKDCQET.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-ZZ4QMBAA.js → batchRender-KDZ4F4QT.js} +4 -4
  12. package/dist/{beats-YEL65M6G.js → beats-7PK677VR.js} +9 -9
  13. package/dist/{benchmark-RBTRPA76.js → benchmark-LO36QH5D.js} +9 -9
  14. package/dist/{browser-BVAYXT4R.js → browser-3F7NDHU2.js} +5 -5
  15. package/dist/{bundleWithLocalizedFonts-JLB2OYMT.js → bundleWithLocalizedFonts-JL5J52L6.js} +2 -2
  16. package/dist/{capture-GBXTMYLZ.js → capture-DOP3ONNZ.js} +13 -12
  17. package/dist/{capture-NIFX6IRS.js → capture-JOSZZYUW.js} +2 -2
  18. package/dist/{captureCompositionFrame-ATNNKUL5.js → captureCompositionFrame-SWZ4GEJP.js} +13 -12
  19. package/dist/{catalog-AGIF5SM5.js → catalog-EZLHZMLM.js} +12 -12
  20. package/dist/{catch-up-SZ3ULDTI.js → catch-up-6B7VY43I.js} +4 -4
  21. package/dist/{check-YLQS3TF4.js → check-QGELCBBF.js} +38 -37
  22. package/dist/{checkBrowser-QH4FMCBO.js → checkBrowser-A5C2AB4L.js} +33 -32
  23. package/dist/{chunk-L5YLA54L.js → chunk-2G6JZJAV.js} +2 -2
  24. package/dist/{chunk-M3KZBDPB.js → chunk-2HSRLKZR.js} +3 -3
  25. package/dist/{chunk-FBVUAH7N.js → chunk-2OYYNKJ4.js} +1 -1
  26. package/dist/{chunk-2VXY3PEF.js → chunk-2TU4OKIR.js} +280 -114
  27. package/dist/{chunk-4PPWAQYV.js → chunk-3OAFRLD3.js} +7 -7
  28. package/dist/{chunk-ZT45TCY3.js → chunk-3PYIQLPL.js} +1 -1
  29. package/dist/{chunk-DYNHVCBF.js → chunk-4R2NWLQL.js} +2 -2
  30. package/dist/{chunk-SOY2FPOR.js → chunk-636WBDXB.js} +5 -5
  31. package/dist/{chunk-LFUVTS6V.js → chunk-66Q27H72.js} +2 -2
  32. package/dist/{chunk-MFUNDJEV.js → chunk-6ORTRIDW.js} +3 -3
  33. package/dist/{chunk-D625D4TV.js → chunk-7DFIVUOW.js} +6 -6
  34. package/dist/{chunk-ZH7J2ZUL.js → chunk-7G2LQM3J.js} +14 -14
  35. package/dist/{chunk-6LWUPIKD.js → chunk-7PXVXRVX.js} +10 -10
  36. package/dist/{chunk-XQPA4W3M.js → chunk-7Y5RVQQ7.js} +4 -4
  37. package/dist/{chunk-2MCXIY4B.js → chunk-B7RJV74O.js} +28 -11
  38. package/dist/{chunk-BJAS2JLW.js → chunk-B7Y2DGU6.js} +7 -3
  39. package/dist/{chunk-YS4JUGNI.js → chunk-BBXZPDEA.js} +2 -2
  40. package/dist/{chunk-RWGASWT7.js → chunk-BL4U6U52.js} +1 -0
  41. package/dist/{chunk-VW63MHQU.js → chunk-CCZMCX3F.js} +1 -1
  42. package/dist/{chunk-BY6OQ6XP.js → chunk-CZNSLFYD.js} +3 -1
  43. package/dist/{chunk-X5CECNCK.js → chunk-D6XDOYMB.js} +8 -3
  44. package/dist/{chunk-F5LLORBP.js → chunk-E527A6RS.js} +2 -2
  45. package/dist/{chunk-7HTH5PFK.js → chunk-E74JMKSK.js} +58 -8
  46. package/dist/{chunk-TZEKVLPV.js → chunk-ELQ2QQC5.js} +1 -1
  47. package/dist/{chunk-4LXZJIVY.js → chunk-ES7KSCSO.js} +10 -10
  48. package/dist/{chunk-KU3UFQN7.js → chunk-F2ASNL2K.js} +1 -1
  49. package/dist/{chunk-VLLFORE2.js → chunk-F4T7XYMF.js} +1 -1
  50. package/dist/{chunk-E3P3LJG6.js → chunk-FLREUEHW.js} +28 -11
  51. package/dist/{chunk-TY3LDJA3.js → chunk-FWDDLW2H.js} +2 -2
  52. package/dist/{chunk-7YSFE4SZ.js → chunk-GJG4CTXD.js} +2 -2
  53. package/dist/{chunk-2NERNYCJ.js → chunk-GKMRLES4.js} +3 -3
  54. package/dist/{chunk-4TKJWWPL.js → chunk-GOOE33GV.js} +1 -1
  55. package/dist/{chunk-DIKAPMMF.js → chunk-GQVTTWZF.js} +144 -39
  56. package/dist/{chunk-L4JB7LI4.js → chunk-HJINEUHY.js} +84 -61
  57. package/dist/{chunk-7QNIXBQD.js → chunk-HT33OHQL.js} +3 -2
  58. package/dist/{chunk-AR3DQYRR.js → chunk-HTLCE7M2.js} +18 -18
  59. package/dist/{chunk-ZTKFRXJB.js → chunk-IA7HZ4CM.js} +4 -4
  60. package/dist/{chunk-WFS6S65A.js → chunk-IZR7U27Z.js} +12 -12
  61. package/dist/chunk-K4MJX7SR.js +17 -0
  62. package/dist/{chunk-ZZPBXRYQ.js → chunk-KJ6ZQL34.js} +1 -1
  63. package/dist/{chunk-VPC4XIVI.js → chunk-KVLGJJTE.js} +5 -5
  64. package/dist/{chunk-CGTZOY53.js → chunk-L2EBYFU7.js} +1 -1
  65. package/dist/{chunk-UNATIAOT.js → chunk-L4BFXWHC.js} +144 -67
  66. package/dist/{chunk-IW5G323T.js → chunk-LTGTN2TH.js} +8 -9
  67. package/dist/{chunk-EFXMETRK.js → chunk-NKNRVPNV.js} +2 -2
  68. package/dist/{chunk-2SFDWMSW.js → chunk-NOHH25WS.js} +2 -2
  69. package/dist/{chunk-7YKJF5JV.js → chunk-OB4GJZTY.js} +1 -1
  70. package/dist/{chunk-C4Y3ZREE.js → chunk-OJNNKHAZ.js} +75 -22
  71. package/dist/{chunk-OFYW4J7Y.js → chunk-ORZMO6NY.js} +3 -3
  72. package/dist/{chunk-BP4EMEGH.js → chunk-P5X5URNQ.js} +2 -2
  73. package/dist/{chunk-6XUJVEY2.js → chunk-RAACYYWX.js} +1 -1
  74. package/dist/{chunk-QFPBRZJD.js → chunk-ROEW726S.js} +1 -1
  75. package/dist/{chunk-WIVOXGEP.js → chunk-RZUEXJRC.js} +2 -2
  76. package/dist/{chunk-V7ZA2BNW.js → chunk-SC6NILKD.js} +1 -1
  77. package/dist/{chunk-2LSCYS2H.js → chunk-SMROKE63.js} +2 -2
  78. package/dist/{chunk-REUL2KH2.js → chunk-ST35C4K6.js} +1 -1
  79. package/dist/{chunk-OFV3WSOE.js → chunk-TE6VGYHQ.js} +1 -1
  80. package/dist/{chunk-3W4B6G7Y.js → chunk-VNWX5GBF.js} +19 -15
  81. package/dist/{chunk-QKX7ITER.js → chunk-W4SSWOOD.js} +2 -2
  82. package/dist/{chunk-6DLCOQR4.js → chunk-W7GMPEY3.js} +142 -44
  83. package/dist/{chunk-UIC7B5KW.js → chunk-WUL5LPI2.js} +12 -2
  84. package/dist/{chunk-5J6TWLFG.js → chunk-XC7SJ2UR.js} +3 -3
  85. package/dist/{chunk-E77ALFLW.js → chunk-XOUWCZHD.js} +1 -1
  86. package/dist/{chunk-GR5DQKDR.js → chunk-YFTO5YD7.js} +5 -5
  87. package/dist/{chunk-UB7BIDBS.js → chunk-YSXCPSJ4.js} +3 -3
  88. package/dist/{chunk-GKHMSSGY.js → chunk-YUFECVHG.js} +1 -1
  89. package/dist/{chunk-LMNZLZMJ.js → chunk-ZAVUASNT.js} +1 -1
  90. package/dist/{chunk-RTLPWOO6.js → chunk-ZL6ZCLY6.js} +1 -1
  91. package/dist/{chunk-DSQ72G5I.js → chunk-ZOJHEN3C.js} +1 -1
  92. package/dist/chunk-ZQRD62QZ.js +3901 -0
  93. package/dist/{clean-5HGESK5A.js → clean-PI4JLT6O.js} +21 -20
  94. package/dist/cli.js +53 -53
  95. package/dist/{cloud-746PHS32.js → cloud-SQRY723M.js} +4 -4
  96. package/dist/{cloudrun-DO7WFLSM.js → cloudrun-VMPROR43.js} +6 -6
  97. package/dist/commands/layout-audit.browser.js +1 -1
  98. package/dist/{compare-66YPRNG2.js → compare-EHX4APTP.js} +31 -30
  99. package/dist/{compiler-R4UYDWXO.js → compiler-FZCJGGBF.js} +5 -5
  100. package/dist/{component-EQ3H6RFP.js → component-I75ZKJYH.js} +3 -3
  101. package/dist/{compositions-ZZ7P5HT2.js → compositions-YNYYUEQD.js} +12 -11
  102. package/dist/{contactSheet-SZBJDOMT.js → contactSheet-5APX35L3.js} +1 -1
  103. package/dist/{delete-Z5MSLJSR.js → delete-7BVTBKOC.js} +2 -2
  104. package/dist/{deploy-RGSAC2K5.js → deploy-TUEEJP3W.js} +1 -1
  105. package/dist/{deterministicFonts-RO2TCMLZ.js → deterministicFonts-RADD3BSX.js} +2 -2
  106. package/dist/{dist-QQ26RUDV.js → dist-VRGIE57H.js} +1 -1
  107. package/dist/{dist-RKK4YLAD.js → dist-VVROHSP4.js} +3 -3
  108. package/dist/{doctor-W4ZZDRTU.js → doctor-53DSQFW4.js} +14 -13
  109. package/dist/{events-BSSL4A4W.js → events-AD3U6E7I.js} +2 -2
  110. package/dist/{events-UACT7PX3.js → events-M6FIUDNQ.js} +3 -3
  111. package/dist/{feedback-47ILDLQG.js → feedback-7SQ7KKAR.js} +8 -8
  112. package/dist/{ffmpeg-IEHSUNUT.js → ffmpeg-3HSSPXS4.js} +9 -8
  113. package/dist/{figma-PLFIIYRU.js → figma-B5XII2BO.js} +3 -3
  114. package/dist/fontLocalizeCli.js +11 -10
  115. package/dist/{get-PDWGJYNL.js → get-RZKNBIRD.js} +2 -2
  116. package/dist/{gpuPolicy-6UBXO6ME.js → gpuPolicy-77LOK3K6.js} +8 -7
  117. package/dist/{grade-compare-5VWLQGM7.js → grade-compare-K3YB3FQA.js} +37 -35
  118. package/dist/{gsapParser-UP3PNPC2.js → gsapParser-IEUSLYDJ.js} +11 -11
  119. package/dist/{gsapParserAcorn-OOTY2MVN.js → gsapParserAcorn-LZJKCFQI.js} +1 -1
  120. package/dist/{help-DS3KMWYO.js → help-UM6INVL5.js} +1 -1
  121. package/dist/{history-OC326NVZ.js → history-EWKPACWR.js} +7 -7
  122. package/dist/hyperframe.manifest.json +1 -1
  123. package/dist/hyperframe.runtime.iife.js +72 -66
  124. package/dist/hyperframes-player.global.js +3 -3
  125. package/dist/hyperframes-slideshow.global.js +1 -1
  126. package/dist/{info-AUIFV6MX.js → info-KY3MFTCY.js} +8 -8
  127. package/dist/{init-MRTWWDFW.js → init-LURF2PL5.js} +30 -29
  128. package/dist/{inspect-55NOAXI2.js → inspect-46CZJM6P.js} +31 -30
  129. package/dist/{installer-YSFFGBBV.js → installer-NGFX6INI.js} +5 -5
  130. package/dist/{keyframes-OO2BX2IB.js → keyframes-YCSK6POI.js} +59 -33
  131. package/dist/{lambda-CXXY6QT3.js → lambda-5KXULI2S.js} +8 -8
  132. package/dist/{layout-57GJXKDK.js → layout-WOLH24YE.js} +31 -30
  133. package/dist/{lint-J4FK3Z6G.js → lint-P3P2LX6S.js} +7 -7
  134. package/dist/{lintProject-52SLJPRC.js → lintProject-ESAJKFOX.js} +1 -1
  135. package/dist/{list-VDQUJ76B.js → list-RUYQWMF2.js} +2 -2
  136. package/dist/{login-TJSEALWW.js → login-THBBWZAY.js} +4 -4
  137. package/dist/{manager-MZIJY73J.js → manager-COSJVRAE.js} +2 -2
  138. package/dist/{manager-4PLYEEWP.js → manager-V34BMSAG.js} +10 -9
  139. package/dist/{media-treatment-GXP4PMJH.js → media-treatment-IMBLTYGV.js} +15 -14
  140. package/dist/{models-HQQQKEEP.js → models-3NW7HU72.js} +14 -13
  141. package/dist/{motionShot-2BT5D7DC.js → motionShot-VTTYZ6KW.js} +17 -16
  142. package/dist/{normalize-audio-SOLFMHNP.js → normalize-audio-ME3X7HBX.js} +6 -6
  143. package/dist/{open-KHEUODFQ.js → open-GLGSJISM.js} +12 -12
  144. package/dist/{parakeetRunner-BHU5NCAX.js → parakeetRunner-T3UGRZWC.js} +15 -14
  145. package/dist/{pipeline-WFV5HDTD.js → pipeline-IJXVEQCU.js} +10 -9
  146. package/dist/{play-GB34CANJ.js → play-HFFGGAZH.js} +21 -21
  147. package/dist/{preflight-REF3VSJ7.js → preflight-QV6V3UO2.js} +11 -10
  148. package/dist/{present-SIUTA7TD.js → present-TH34CTYY.js} +17 -17
  149. package/dist/{preview-T2GE7Z4A.js → preview-R67EQGQP.js} +100 -65
  150. package/dist/{producer-23KVQZAB.js → producer-HWPFETDU.js} +1 -1
  151. package/dist/{projectConfig-DBSNBPNP.js → projectConfig-AO4V3RHS.js} +7 -7
  152. package/dist/{publication-IXPUKYWJ.js → publication-BDQ3PXYG.js} +3 -3
  153. package/dist/{publish-3BA5VHXJ.js → publish-PXYTWSXN.js} +10 -10
  154. package/dist/{remove-background-RMSCJVVQ.js → remove-background-BVDJPT3Z.js} +11 -10
  155. package/dist/{render-Y6CTQ3YW.js → render-45YHWV6W.js} +6 -6
  156. package/dist/{render-6RNE2MLU.js → render-5MZY4TAB.js} +17 -16
  157. package/dist/{render-XGOZMMWX.js → render-5RQUYPIV.js} +35 -34
  158. package/dist/{render-batch-VUR6N6EY.js → render-batch-ZUTUBTHX.js} +6 -6
  159. package/dist/renderSetupWorker.js +42 -4
  160. package/dist/{resolver-GJCUH57W.js → resolver-FN2M3XVM.js} +5 -5
  161. package/dist/{sherpa-VVAKRCPL.js → sherpa-6KWNPRWB.js} +14 -13
  162. package/dist/skills/media-use/scripts/lib/duck.mjs +18 -2
  163. package/dist/skills/media-use/scripts/lib/duck.test.mjs +79 -0
  164. package/dist/{skills-ZHBURVQG.js → skills-PWQCM2BT.js} +5 -5
  165. package/dist/{skillsUpdateCheck-VMDAL2O2.js → skillsUpdateCheck-EHV2G3JX.js} +3 -3
  166. package/dist/{snapshot-KEOG56SL.js → snapshot-7Q24NFEI.js} +39 -38
  167. package/dist/{src-TZLGFRRX.js → src-J43SXEHJ.js} +10 -9
  168. package/dist/{src-BH5NICGQ.js → src-OS2FRVZV.js} +9 -6
  169. package/dist/{staticProjectServer-BKXL5CXB.js → staticProjectServer-YJWOQJF4.js} +18 -18
  170. package/dist/studio/assets/{hyperframes-player-BMcUdmDb.js → hyperframes-player-DnIPEARk.js} +1 -1
  171. package/dist/studio/assets/{index-Ci6GuloR.js → index-CVppCm_X.js} +1 -1
  172. package/dist/studio/assets/{index-Ca-mgTnS.js → index-Dkt4c1MV.js} +161 -161
  173. package/dist/studio/index.html +1 -1
  174. package/dist/{studio-api-A5U6QAMC.js → studio-api-CZBZ4D65.js} +11 -11
  175. package/dist/{studioServer-5EC5CP4W.js → studioServer-U6EX5DSB.js} +94 -53
  176. package/dist/{telemetry-BCKJXDSW.js → telemetry-VP4UWWO3.js} +3 -3
  177. package/dist/{timeline-AZWAXTAY.js → timeline-LMSUKEG6.js} +20 -19
  178. package/dist/{tokens-X7NC3V7C.js → tokens-FQ5AI5H4.js} +2 -2
  179. package/dist/{transcribe-7NCY7QZ2.js → transcribe-DNQFPZ2S.js} +13 -12
  180. package/dist/{transcribe-SH26H755.js → transcribe-VAMXV7QS.js} +19 -18
  181. package/dist/{updateCheck-Y7FUWQM4.js → updateCheck-TOU7VLZK.js} +2 -2
  182. package/dist/{upgrade-ZHGEVL65.js → upgrade-CJRMRR2S.js} +2 -2
  183. package/dist/{urlDownloader-FPILIT7M.js → urlDownloader-GETNWEIT.js} +7 -6
  184. package/dist/{validate-KQOZR4F6.js → validate-PRI2UTQS.js} +25 -24
  185. package/dist/vendor/npm/gsap@3.15.0/dist/CustomEase.min.js +11 -0
  186. package/dist/vendor/npm/gsap@3.15.0/dist/MotionPathPlugin.min.js +11 -0
  187. package/dist/vendor/npm/gsap@3.15.0/dist/gsap.min.js +11 -0
  188. package/dist/{video-N2QAETFB.js → video-VOCQA6AG.js} +8 -7
  189. package/dist/warmCheck.js +38 -37
  190. package/package.json +1 -1
  191. package/dist/chunk-USWPZXEA.js +0 -3897
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-ZTKFRXJB.js";
13
+ } from "./chunk-IA7HZ4CM.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";
@@ -21,7 +21,7 @@ import {
21
21
  mkdirWithinProject
22
22
  } from "./chunk-OFQWTKPW.js";
23
23
 
24
- // ../studio-server/dist/chunk-JPKAFJIJ.js
24
+ // ../studio-server/dist/chunk-4HP26XV4.js
25
25
  import { randomUUID as randomUUID7 } from "crypto";
26
26
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, stat as stat2, writeFile } from "fs/promises";
27
27
  import {
@@ -554,14 +554,41 @@ async function cloneOrCopy(from, to, beforeReplace) {
554
554
  throw error;
555
555
  }
556
556
  }
557
+ var listDir = (path) => readdir(path, { withFileTypes: true }).catch((error) => {
558
+ if (error.code === "ENOENT") return [];
559
+ throw error;
560
+ });
557
561
  async function openBlobStore(dir) {
558
562
  const sizes = /* @__PURE__ */ new Map();
563
+ const asideDir = join2(dirname(dir), "aside");
564
+ const asideSizes = /* @__PURE__ */ new Map();
565
+ const holds = /* @__PURE__ */ new Map();
559
566
  await mkdir(dir, { recursive: true });
560
- for (const shard of await readdir(dir))
561
- for (const hash of await readdir(join2(dir, shard)).catch(() => []))
562
- sizes.set(hash, (await stat(join2(dir, shard, hash))).size);
563
- const pathOf = (hash) => blobPath(dir, hash);
567
+ for (const [root, found] of [
568
+ [dir, sizes],
569
+ [asideDir, asideSizes]
570
+ ])
571
+ for (const shard of await listDir(root)) {
572
+ if (!shard.isDirectory()) {
573
+ if (shard.name.startsWith("incoming-")) await rm(join2(root, shard.name), { force: true });
574
+ continue;
575
+ }
576
+ for (const hash of await listDir(join2(root, shard.name)))
577
+ found.set(hash.name, (await stat(join2(root, shard.name, hash.name))).size);
578
+ }
579
+ for (const hash of asideSizes.keys()) holds.set(hash, /* @__PURE__ */ new Set(["*"]));
580
+ const pathOf = (hash) => blobPath(sizes.has(hash) ? dir : asideDir, hash);
564
581
  let total = [...sizes.values()].reduce((sum, size) => sum + size, 0);
582
+ const forget = async (hash) => {
583
+ await rm(blobPath(dir, hash), { force: true });
584
+ total -= sizes.get(hash) ?? 0;
585
+ sizes.delete(hash);
586
+ };
587
+ const forgetAside = async (hash) => {
588
+ await rm(blobPath(asideDir, hash), { force: true });
589
+ asideSizes.delete(hash);
590
+ holds.delete(hash);
591
+ };
565
592
  return {
566
593
  async put(absPath) {
567
594
  const temp = join2(dir, `incoming-${randomUUID3()}`);
@@ -575,35 +602,55 @@ async function openBlobStore(dir) {
575
602
  await rm(temp, { force: true });
576
603
  return hash;
577
604
  }
578
- await mkdir(dirname(pathOf(hash)), { recursive: true });
605
+ await mkdir(dirname(blobPath(dir, hash)), { recursive: true });
579
606
  const size = (await stat(temp)).size;
580
- await rename(temp, pathOf(hash));
607
+ await rename(temp, blobPath(dir, hash));
581
608
  sizes.set(hash, size);
582
609
  total += size;
583
610
  return hash;
584
611
  },
585
612
  reference: (absPath) => hashFile(absPath),
586
- has: (hash) => sizes.has(hash),
587
- read: async (hash) => readBlob(dir, hash),
613
+ has: (hash) => sizes.has(hash) || asideSizes.has(hash),
614
+ read: (hash) => readFile(pathOf(hash)),
588
615
  writeTo: async (hash, absPath, beforeReplace) => cloneOrCopy(pathOf(hash), absPath, beforeReplace),
616
+ async release(held) {
617
+ for (const [hash, path] of held) {
618
+ holds.get(hash)?.delete(path);
619
+ if (holds.get(hash)?.size === 0) await forgetAside(hash);
620
+ }
621
+ },
622
+ async keep(path, absPath, remove) {
623
+ const hash = await hashFile(absPath);
624
+ if (sizes.has(hash)) return;
625
+ if (asideSizes.has(hash)) {
626
+ holds.get(hash).add(path);
627
+ return;
628
+ }
629
+ const to = blobPath(asideDir, hash);
630
+ await mkdir(dirname(to), { recursive: true });
631
+ const moved = remove && await rename(absPath, to).then(
632
+ () => true,
633
+ () => false
634
+ );
635
+ if (!moved) {
636
+ const temp = join2(asideDir, `incoming-${randomUUID3()}`);
637
+ await cloneOrStream(absPath, temp).catch(async (error) => {
638
+ await rm(temp, { force: true });
639
+ throw error;
640
+ });
641
+ await rename(temp, to);
642
+ }
643
+ asideSizes.set(hash, (await stat(to)).size);
644
+ holds.set(hash, /* @__PURE__ */ new Set([path]));
645
+ },
589
646
  bytes: () => total,
590
647
  size: (hash) => sizes.get(hash) ?? 0,
591
648
  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
- }
649
+ for (const hash of hashes) if (sizes.has(hash)) await forget(hash);
599
650
  },
600
651
  async prune(keep) {
601
- for (const [hash, size] of sizes) {
602
- if (keep.has(hash)) continue;
603
- await rm(pathOf(hash), { force: true });
604
- sizes.delete(hash);
605
- total -= size;
606
- }
652
+ for (const hash of [...sizes.keys()]) if (!keep.has(hash)) await forget(hash);
653
+ for (const hash of [...asideSizes.keys()]) if (!keep.has(hash)) await forgetAside(hash);
607
654
  }
608
655
  };
609
656
  }
@@ -2288,6 +2335,9 @@ var Engine = class {
2288
2335
  this.windows.push(group);
2289
2336
  try {
2290
2337
  for (const [path, hash] of changes) await this.writeProjectFile(path, hash);
2338
+ await this.blobs.release(
2339
+ changes.flatMap(([path, hash]) => hash ? [[hash, path]] : [])
2340
+ );
2291
2341
  await this.sweep();
2292
2342
  } finally {
2293
2343
  this.windows = this.windows.filter((open) => open !== group);
@@ -2303,6 +2353,9 @@ var Engine = class {
2303
2353
  const version = hash === null ? DELETED_VERSION : hashVersion(hash);
2304
2354
  recordFileWriteReceipt(absPath, { path, version, writeToken });
2305
2355
  }
2356
+ const standing = lstatSync4(absPath, { throwIfNoEntry: false });
2357
+ if (standing?.isFile() && isUncopied(path, standing.size))
2358
+ await this.blobs.keep(path, absPath, hash === null);
2306
2359
  if (hash === null) {
2307
2360
  this.assertWritable();
2308
2361
  rmSync3(absPath, { force: true });
@@ -7,14 +7,14 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  trackLintReport,
9
9
  trackLintRuleStreak
10
- } from "./chunk-RTLPWOO6.js";
10
+ } from "./chunk-ZL6ZCLY6.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-ZZPBXRYQ.js";
13
+ } from "./chunk-KJ6ZQL34.js";
14
14
  import {
15
15
  LINT_RULE_COUNT,
16
16
  LINT_RULE_GROUP_COUNTS
17
- } from "./chunk-2VXY3PEF.js";
17
+ } from "./chunk-2TU4OKIR.js";
18
18
 
19
19
  // src/telemetry/lintStreaks.ts
20
20
  import { createHash } from "crypto";
@@ -6,12 +6,12 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  setHostHandlesSigint
9
- } from "./chunk-L4JB7LI4.js";
9
+ } from "./chunk-HJINEUHY.js";
10
10
  import {
11
11
  processAncestorSnapshot,
12
12
  processIdentity,
13
13
  processParentPid
14
- } from "./chunk-IW5G323T.js";
14
+ } from "./chunk-LTGTN2TH.js";
15
15
  import {
16
16
  processIsAlive
17
17
  } from "./chunk-KGPLIH7B.js";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-HVW7ABXD.js";
13
13
  import {
14
14
  DEFAULT_REGISTRY_URL
15
- } from "./chunk-7QNIXBQD.js";
15
+ } from "./chunk-HT33OHQL.js";
16
16
 
17
17
  // src/utils/projectConfig.ts
18
18
  import { readFileSync, writeFileSync } from "fs";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  FONT_ALIAS_MAP,
16
16
  resolveAliasDisplayName
17
- } from "./chunk-2MCXIY4B.js";
17
+ } from "./chunk-B7RJV74O.js";
18
18
  import {
19
19
  parseHTML
20
20
  } from "./chunk-SDYDNHEE.js";
@@ -12,10 +12,10 @@ import {
12
12
  } from "./chunk-2ST4WAFY.js";
13
13
  import {
14
14
  createProjectConfig
15
- } from "./chunk-6XUJVEY2.js";
15
+ } from "./chunk-RAACYYWX.js";
16
16
  import {
17
17
  isHyperframesProject
18
- } from "./chunk-7HTH5PFK.js";
18
+ } from "./chunk-E74JMKSK.js";
19
19
 
20
20
  // src/utils/desktopApp.ts
21
21
  import { spawn, spawnSync } from "child_process";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateCheckDisabled
9
- } from "./chunk-TZEKVLPV.js";
9
+ } from "./chunk-ELQ2QQC5.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -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-LMNZLZMJ.js";
9
+ } from "./chunk-ZAVUASNT.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-C4Y3ZREE.js";
16
+ } from "./chunk-OJNNKHAZ.js";
17
17
  import {
18
18
  findPreviewServerForProject,
19
19
  studioApiUrl
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VALID_CANVAS_RESOLUTIONS,
9
9
  resolveResolutionFlagPair
10
- } from "./chunk-2MCXIY4B.js";
10
+ } from "./chunk-B7RJV74O.js";
11
11
 
12
12
  // src/utils/parseOutputResolution.ts
13
13
  function parseOutputResolutionFlag(raw, options) {
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  sherpaParakeetInstalled,
9
9
  sherpaUnsupportedReason
10
- } from "./chunk-MFUNDJEV.js";
10
+ } from "./chunk-6ORTRIDW.js";
11
11
  import {
12
12
  findParakeet
13
13
  } from "./chunk-JZIEZCQM.js";
@@ -30,6 +30,7 @@ import {
30
30
  inlineScriptRuns,
31
31
  insertRuntimeTag,
32
32
  isJavaScriptType,
33
+ isTemplateEntry,
33
34
  parseHTMLContent,
34
35
  parseHostVariableValues,
35
36
  planCompositionAssembly,
@@ -38,7 +39,7 @@ import {
38
39
  stripEmbeddedRuntimeScripts,
39
40
  styleElementsFor,
40
41
  warnUnknownEnumValues
41
- } from "./chunk-USWPZXEA.js";
42
+ } from "./chunk-ZQRD62QZ.js";
42
43
  import {
43
44
  cssVariableName
44
45
  } from "./chunk-VC76R6W2.js";
@@ -48,7 +49,7 @@ import {
48
49
  } from "./chunk-OFQWTKPW.js";
49
50
  import {
50
51
  lintHyperframeHtml
51
- } from "./chunk-2VXY3PEF.js";
52
+ } from "./chunk-2TU4OKIR.js";
52
53
  import {
53
54
  checkSubCompositionUsability,
54
55
  resolveSubCompositionContent
@@ -291,9 +292,6 @@ import { parse as parseJs } from "acorn";
291
292
  import { resolve as resolve2, relative, dirname, isAbsolute, sep } from "path";
292
293
 
293
294
  // ../core/dist/compiler/standaloneEntry.js
294
- function isTemplateEntry(html) {
295
- return html.trimStart().startsWith("<template");
296
- }
297
295
  function normalizeCompositionSrcPath(srcPath) {
298
296
  return srcPath.replace(/\\/g, "/").replace(/^\.\//, "");
299
297
  }
@@ -1023,16 +1021,22 @@ function wrapScopedCompositionScript(source, compositionId, errorLabel = "[Hyper
1023
1021
  })
1024
1022
  : window;
1025
1023
  var __hfResolveGsapTarget = function(target) {
1026
- if (typeof target === "string") return __hfQueryAll(target);
1027
- if (!Array.isArray(target)) return target;
1028
- return target.reduce(function(resolved, item) {
1024
+ if (typeof target !== "string" && !Array.isArray(target)) return target;
1025
+ var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved, item) {
1029
1026
  if (typeof item === "string") {
1030
1027
  return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
1031
1028
  }
1032
1029
  resolved.push(item);
1033
1030
  return resolved;
1034
1031
  }, []);
1035
-
1032
+ if (!resolved.length) {
1033
+ // GSAP warns "GSAP target " + targets + " not found"; a bare empty match list prints an
1034
+ // empty name. Keep the authored selector as the text while still targeting nothing here.
1035
+ var originalTarget = String(target);
1036
+ resolved = [];
1037
+ resolved.toString = function() { return originalTarget; };
1038
+ }
1039
+ return resolved;
1036
1040
  };
1037
1041
  var __hfScopeTimeline = function(timeline) {
1038
1042
  if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
@@ -2364,7 +2368,7 @@ function rebaseEntryAuthoredAssetPaths(document, sourceDir, projectDir) {
2364
2368
  el.setAttribute(HF_COLOR_GRADING_ATTR, rebaseColorGradingLutPath(value, sourceDir, projectDir));
2365
2369
  }
2366
2370
  }
2367
- function inlineCssFile(css, cssFileDir, projectDir, visited = /* @__PURE__ */ new Set()) {
2371
+ function inlineCssFile(css, cssFileDir, projectDir, activeImports) {
2368
2372
  const { result: strippedCss, restore: restoreComments } = withCommentsStripped(css, (s) => s);
2369
2373
  const importPlaceholders = [];
2370
2374
  const withPlaceholders = strippedCss.replace(CSS_IMPORT_RE, (full, _q1, urlPath, _q2, barePath, mediaQuery) => {
@@ -2374,13 +2378,14 @@ function inlineCssFile(css, cssFileDir, projectDir, visited = /* @__PURE__ */ ne
2374
2378
  const resolved = resolve2(cssFileDir, decodedUrlPath(importPath));
2375
2379
  if (!isSafePath(projectDir, resolved))
2376
2380
  return full;
2377
- if (visited.has(resolved))
2381
+ if (activeImports.has(resolved))
2378
2382
  return "";
2379
2383
  const content = safeReadFile(resolved);
2380
2384
  if (content == null)
2381
2385
  return full;
2382
- visited.add(resolved);
2383
- const inlined = inlineCssFile(content, dirname(resolved), projectDir, visited);
2386
+ activeImports.add(resolved);
2387
+ const inlined = inlineCssFile(content, dirname(resolved), projectDir, activeImports);
2388
+ activeImports.delete(resolved);
2384
2389
  const trimmedMedia = (mediaQuery || "").trim();
2385
2390
  const block = trimmedMedia ? `@media ${trimmedMedia} {
2386
2391
  ${inlined}
@@ -2999,7 +3004,7 @@ async function bundleProject(projectDir, options) {
2999
3004
  if (value !== null)
3000
3005
  style.setAttribute(name, value);
3001
3006
  }
3002
- style.textContent = inlineCssFile(css, dirname(cssPath), projectDir);
3007
+ style.textContent = inlineCssFile(css, dirname(cssPath), projectDir, /* @__PURE__ */ new Set([cssPath]));
3003
3008
  el.replaceWith(style);
3004
3009
  }
3005
3010
  const rootScripts = options?.sceneParts ? [
@@ -3545,7 +3550,6 @@ export {
3545
3550
  ensureExternalScriptTag,
3546
3551
  emitMountedModuleScripts,
3547
3552
  FLATTENED_INNER_ROOT_STRIP_ATTRS,
3548
- isTemplateEntry,
3549
3553
  extractStandaloneEntryFromIndex,
3550
3554
  scopeCssToComposition,
3551
3555
  wrapScopedCompositionScript,
@@ -8,14 +8,14 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemFile,
10
10
  validRegistryItem
11
- } from "./chunk-7QNIXBQD.js";
11
+ } from "./chunk-HT33OHQL.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-7HTH5PFK.js";
18
+ } from "./chunk-E74JMKSK.js";
19
19
  import {
20
20
  realProjectRoot
21
21
  } from "./chunk-OFQWTKPW.js";