hyperframes 0.8.142 → 0.8.143

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 (189) hide show
  1. package/dist/{add-YS2RCWEK.js → add-Q5EYDUAY.js} +18 -17
  2. package/dist/{animatedGifPrep-SAMCDT7T.js → animatedGifPrep-H2DUQEZ3.js} +15 -14
  3. package/dist/{asset-BLWC2NWB.js → asset-C7JBYYX4.js} +4 -4
  4. package/dist/{assetCataloger-FVNBBRP3.js → assetCataloger-FRO4G6OU.js} +8 -7
  5. package/dist/{auth-DRZB7OAC.js → auth-FRWLCO36.js} +1 -1
  6. package/dist/{autoUpdate-I5I3BOJK.js → autoUpdate-E4OZXQK6.js} +2 -2
  7. package/dist/{backgroundChecks-VR2QHGNY.js → backgroundChecks-FSUVHN5L.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-4YUHQI6X.js → batchRender-4U73BYTU.js} +11 -10
  10. package/dist/{beats-7OT7ALV3.js → beats-U6KJWF35.js} +32 -27
  11. package/dist/{benchmark-Q2XQCRTR.js → benchmark-5ONT7V7B.js} +15 -14
  12. package/dist/{browser-7VAWQQZC.js → browser-R4DU46IE.js} +4 -4
  13. package/dist/{bundleWithLocalizedFonts-DDMLLL2R.js → bundleWithLocalizedFonts-VH55VOAL.js} +2 -2
  14. package/dist/{capture-HEJS6M5A.js → capture-26G2DPSI.js} +18 -17
  15. package/dist/{capture-U7ABPKS5.js → capture-OGQAEYKO.js} +2 -2
  16. package/dist/{catalog-DVJ3XPDN.js → catalog-RKORTIUE.js} +19 -18
  17. package/dist/{catch-up-DF6AVSN2.js → catch-up-4OBERRQO.js} +5 -5
  18. package/dist/{check-KXORRWAE.js → check-P2XDN57S.js} +43 -42
  19. package/dist/{checkBrowser-J7HZJTRH.js → checkBrowser-NTGJGAEA.js} +42 -41
  20. package/dist/{chunk-EFDXGAAD.js → chunk-2LBBHMKT.js} +1 -1
  21. package/dist/{chunk-IDX52YJN.js → chunk-33RZPZ4K.js} +189 -42
  22. package/dist/{chunk-JU6Y5TTZ.js → chunk-3NE7ZYU2.js} +2 -2
  23. package/dist/{chunk-TQFG7HTI.js → chunk-3RM2ETQT.js} +0 -168
  24. package/dist/{chunk-PFCFR3KZ.js → chunk-442JNXRM.js} +1 -1
  25. package/dist/{chunk-YFT3BL7N.js → chunk-4M4EC7JX.js} +19 -12
  26. package/dist/{chunk-AM5L5YIA.js → chunk-4OA4LDTU.js} +1 -1
  27. package/dist/{chunk-LQASVU3I.js → chunk-5FISWJ37.js} +12 -4
  28. package/dist/{chunk-JYYOAKHS.js → chunk-6IIGT7BX.js} +1 -1
  29. package/dist/chunk-6TPZSTCL.js +3681 -0
  30. package/dist/{chunk-QGRFOOLE.js → chunk-6XMFEICO.js} +263 -75
  31. package/dist/{chunk-YHRZQJXH.js → chunk-7UYBQ6NF.js} +260 -67
  32. package/dist/{chunk-U7E736AJ.js → chunk-BFDJ63J5.js} +32 -14
  33. package/dist/{chunk-WCJGTLPF.js → chunk-BHVFTYSI.js} +6 -3
  34. package/dist/{chunk-B6SMSALD.js → chunk-BT27OYYX.js} +9 -9
  35. package/dist/{chunk-IXCTG2WY.js → chunk-BYK73CR7.js} +4 -4
  36. package/dist/{chunk-75JJVANE.js → chunk-CLOH4LIB.js} +3 -3
  37. package/dist/{chunk-H2X52H2N.js → chunk-DF2BHILQ.js} +3 -3
  38. package/dist/{chunk-DPHJKWP5.js → chunk-F26LCYRY.js} +42 -34
  39. package/dist/{chunk-5Z63TBTX.js → chunk-FH7WODJH.js} +1 -1
  40. package/dist/{chunk-LTGGTEMA.js → chunk-FVYXDXEV.js} +2 -2
  41. package/dist/{chunk-KYN364DU.js → chunk-GNBGPUJ7.js} +6 -8
  42. package/dist/{chunk-RVCWIIZ7.js → chunk-GV5R5B7Q.js} +1 -1
  43. package/dist/{chunk-FZK35GT4.js → chunk-HC7EVDEL.js} +1 -1
  44. package/dist/{chunk-MVTUV4TP.js → chunk-HLYOEIWM.js} +14 -6
  45. package/dist/{chunk-WSGY5CDQ.js → chunk-HMT2RPZU.js} +6 -6
  46. package/dist/{chunk-JOTLPC6S.js → chunk-HW4AKJ5F.js} +1 -1
  47. package/dist/{chunk-IMY4QQTQ.js → chunk-I7QGQAZM.js} +8 -8
  48. package/dist/{chunk-JFKL3WAE.js → chunk-IWFLMU2N.js} +104 -19
  49. package/dist/{chunk-IHFUKJOR.js → chunk-K2FLNJVB.js} +8 -2
  50. package/dist/chunk-KJJLA674.js +121 -0
  51. package/dist/{chunk-BPZVDBHY.js → chunk-KO5QBV73.js} +1 -1
  52. package/dist/{chunk-WGVOWWVK.js → chunk-KQLGTGE5.js} +3 -3
  53. package/dist/{chunk-R2JEKLDZ.js → chunk-LVX6NK36.js} +3 -3
  54. package/dist/{chunk-6UYZB4TY.js → chunk-LW6HO6U3.js} +4 -4
  55. package/dist/{chunk-OZUQF4NB.js → chunk-MQZVBHEY.js} +123 -8
  56. package/dist/{chunk-7FCDA4RH.js → chunk-N3DQEVSI.js} +2 -2
  57. package/dist/{chunk-A4KQZXZI.js → chunk-NE55C6S5.js} +4 -2
  58. package/dist/{chunk-6RAD4BCC.js → chunk-OBXQRJWQ.js} +2 -2
  59. package/dist/{chunk-LBKDQKWV.js → chunk-OSSHSIMD.js} +1 -1
  60. package/dist/{chunk-TY6XOHEM.js → chunk-P7THMINS.js} +3 -3
  61. package/dist/{chunk-HMUF7FEO.js → chunk-PAGIICKN.js} +2 -2
  62. package/dist/{chunk-OSUKETIH.js → chunk-PJU63L6W.js} +1 -1
  63. package/dist/{chunk-GYE63V4P.js → chunk-POLR33RB.js} +20 -13
  64. package/dist/{chunk-7M4KAPAA.js → chunk-PUGIRFPX.js} +2 -2
  65. package/dist/{chunk-XGMNQQTJ.js → chunk-QFN7NVWM.js} +1 -1
  66. package/dist/{chunk-D2KNWIQ6.js → chunk-QFSCCQIR.js} +1 -1
  67. package/dist/{chunk-WTMUCJ6Z.js → chunk-QRKLPWEX.js} +1 -1
  68. package/dist/{chunk-XTLBLWOV.js → chunk-QVYVUCWD.js} +1 -1
  69. package/dist/{chunk-GK4AIFIH.js → chunk-SDYDNHEE.js} +34 -3
  70. package/dist/{chunk-2NCHQUPX.js → chunk-SQLK7SJL.js} +1 -1
  71. package/dist/{chunk-PMRBLBUP.js → chunk-T42U2W2R.js} +14 -2
  72. package/dist/{chunk-QXPCARFE.js → chunk-TAMQYQGJ.js} +1 -1
  73. package/dist/{chunk-PXSM4HPB.js → chunk-U3X3TPBW.js} +1 -1
  74. package/dist/{chunk-FWRNQOLT.js → chunk-UICWP23D.js} +1 -1
  75. package/dist/{chunk-OKCR3JTO.js → chunk-UM2GRYM3.js} +13 -10
  76. package/dist/{chunk-LJAU4TPS.js → chunk-VIVBA6E6.js} +2 -2
  77. package/dist/{chunk-DZEVA7DI.js → chunk-W35EKBS6.js} +2 -2
  78. package/dist/{chunk-YEIFI443.js → chunk-WPNE5NEP.js} +1 -1
  79. package/dist/{chunk-IW2CKH6A.js → chunk-XONFUK3M.js} +48 -25
  80. package/dist/{chunk-JLKMWY2T.js → chunk-Y6QL2LGO.js} +8 -5
  81. package/dist/{chunk-THXFSPLV.js → chunk-ZIRIDSDB.js} +1 -1
  82. package/dist/chunk-ZLW2V65P.js +209 -0
  83. package/dist/{chunk-6UM3R7PP.js → chunk-ZQQ3SEIE.js} +33 -32
  84. package/dist/{clean-KTHTV5G5.js → clean-YHGPY33K.js} +23 -22
  85. package/dist/cli.js +57 -159
  86. package/dist/{cloud-ARSZWALC.js → cloud-DOFI5ISR.js} +4 -4
  87. package/dist/{cloudrun-NM7RXOCL.js → cloudrun-KTZ4XDHL.js} +13 -12
  88. package/dist/commands/contrast-audit.browser.js +60 -4
  89. package/dist/commands/layout-audit.browser.js +68 -0
  90. package/dist/{compare-CY4UO3RW.js → compare-SMMIZN2C.js} +37 -36
  91. package/dist/{compiler-VTH2D3ID.js → compiler-TEXQWW6N.js} +14 -10
  92. package/dist/{component-FRUIAXIR.js → component-B3GCNGSS.js} +5 -5
  93. package/dist/{compositions-CUSY6ZYY.js → compositions-OQNZZTKF.js} +38 -33
  94. package/dist/{delete-KT3VHP4L.js → delete-EL5LVSEP.js} +4 -4
  95. package/dist/{deterministicFonts-F6WIVL2W.js → deterministicFonts-U2BIMGPG.js} +3 -3
  96. package/dist/{dist-7SZU7MA7.js → dist-5UVIRMSM.js} +7 -6
  97. package/dist/{dist-2GC6XKRQ.js → dist-XN234YFQ.js} +41 -39
  98. package/dist/{doctor-4ROTBL5U.js → doctor-UOL3OI2A.js} +17 -16
  99. package/dist/{dom-IROKGVJI.js → dom-37K6YOH4.js} +2 -2
  100. package/dist/{events-Q5PXT5UC.js → events-K2DB2PBC.js} +2 -2
  101. package/dist/{events-QJDVMKSR.js → events-NIZBS6S7.js} +3 -3
  102. package/dist/{feedback-PQ7TWESA.js → feedback-QMP4E6L7.js} +13 -12
  103. package/dist/{figma-JN5DDBDS.js → figma-2AUJRNVC.js} +3 -3
  104. package/dist/fontLocalizeCli.js +18 -17
  105. package/dist/{get-KT6OTERO.js → get-P5NC7SRM.js} +4 -4
  106. package/dist/{gpuPolicy-LCBWVGEH.js → gpuPolicy-7N5MCE2G.js} +15 -14
  107. package/dist/{grade-compare-VS3RP73G.js → grade-compare-HV5AFZ6P.js} +37 -36
  108. package/dist/{help-AD6FIZIO.js → help-3TSTXBLN.js} +1 -1
  109. package/dist/{history-ZRWYRY7R.js → history-D65XFJ6D.js} +6 -6
  110. package/dist/hyperframe-runtime.js +25 -25
  111. package/dist/hyperframe.manifest.json +1 -1
  112. package/dist/hyperframe.runtime.iife.js +25 -25
  113. package/dist/hyperframes-player.global.js +3 -3
  114. package/dist/hyperframes-slideshow.global.js +23 -23
  115. package/dist/{info-WBBQA2AX.js → info-TXV7MLFO.js} +17 -16
  116. package/dist/{init-A2XBDFGF.js → init-OSDMJZJV.js} +38 -37
  117. package/dist/{inspect-CLTZHA5O.js → inspect-RQQSAYIJ.js} +38 -37
  118. package/dist/{installer-WQDRVXH4.js → installer-CDOB32HE.js} +11 -10
  119. package/dist/{keyframes-3FYOK6H6.js → keyframes-V75Q6GRM.js} +10 -10
  120. package/dist/{lambda-Y2PA2BGS.js → lambda-RODV4RCX.js} +12 -11
  121. package/dist/{layout-4KP5O7IJ.js → layout-IZAI5SFC.js} +38 -37
  122. package/dist/{lint-V4GRFHOJ.js → lint-PLXOXY5R.js} +14 -13
  123. package/dist/{lintProject-RG2KGAXB.js → lintProject-OQ6H6XBR.js} +7 -6
  124. package/dist/{list-OQ4VED6E.js → list-BQBPNKDZ.js} +5 -5
  125. package/dist/{login-W47NKN5S.js → login-NP6F4FHC.js} +4 -4
  126. package/dist/{manager-DXB7JDHU.js → manager-GXYF4AVO.js} +2 -2
  127. package/dist/{manager-524RPYO7.js → manager-RFZNG5YT.js} +2 -2
  128. package/dist/{media-treatment-HJYL3EME.js → media-treatment-PXGMZ4A4.js} +22 -20
  129. package/dist/{models-DYBAD2GQ.js → models-CEZM6XZ7.js} +17 -16
  130. package/dist/{motionShot-7NE2YBB3.js → motionShot-R4GHYWYM.js} +25 -24
  131. package/dist/{normalize-IGLHCWTF.js → normalize-H6KUHHEI.js} +18 -7
  132. package/dist/{normalize-audio-INKCLMS2.js → normalize-audio-MQ7NFCOV.js} +10 -6
  133. package/dist/{open-TYC5THVY.js → open-AKQTGNXF.js} +5 -5
  134. package/dist/{pipeline-EVKEPQEW.js → pipeline-SYJYP2RM.js} +17 -16
  135. package/dist/{play-QMZEM6X3.js → play-NBH4B7PL.js} +31 -29
  136. package/dist/{present-Y7IK3C4W.js → present-XAX55CFS.js} +26 -25
  137. package/dist/{preview-5OQRYE6A.js → preview-OLANKNFA.js} +26 -25
  138. package/dist/{producer-Q6G6JU7B.js → producer-Q6YNZZUJ.js} +1 -1
  139. package/dist/{projectConfig-RJN3DKDB.js → projectConfig-EM26P45P.js} +13 -12
  140. package/dist/{publication-QCPGGN3U.js → publication-OXWJZKSX.js} +8 -7
  141. package/dist/{publish-VZLFIGYY.js → publish-4VBWP2UB.js} +17 -16
  142. package/dist/{remove-background-TKOEHBA5.js → remove-background-REB7427G.js} +19 -18
  143. package/dist/{render-XTXE5CRU.js → render-3CVZ2SZG.js} +13 -12
  144. package/dist/{render-KIIIF6PS.js → render-K25YOG3M.js} +19 -18
  145. package/dist/{render-X3NFNVEQ.js → render-TSE75QUL.js} +35 -34
  146. package/dist/{render-batch-M55YZLZ5.js → render-batch-GGUOK3DS.js} +13 -12
  147. package/dist/{renderCancellation-X5BEHAZU.js → renderCancellation-PZRWB53I.js} +15 -14
  148. package/dist/renderSetupWorker.js +7 -6
  149. package/dist/{resolver-GAMXRA42.js → resolver-S5VK6UCB.js} +10 -9
  150. package/dist/{sherpa-ZYTNFHD5.js → sherpa-LVIUEAGF.js} +18 -17
  151. package/dist/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  152. package/dist/skills/media-use/scripts/lib/cache.mjs +28 -14
  153. package/dist/skills/media-use/scripts/lib/cache.test.mjs +110 -0
  154. package/dist/skills/media-use/scripts/lib/duck.mjs +2 -1
  155. package/dist/skills/media-use/scripts/lib/duck.test.mjs +87 -0
  156. package/dist/skills/media-use/scripts/lib/probe.mjs +6 -1
  157. package/dist/skills/media-use/scripts/lib/probe.test.mjs +73 -0
  158. package/dist/skills/media-use/scripts/lib/words.mjs +1 -1
  159. package/dist/{skills-CZHVAD3J.js → skills-I65FU5HD.js} +5 -5
  160. package/dist/{skillsUpdateCheck-6WLLX53A.js → skillsUpdateCheck-J57RNNIV.js} +3 -3
  161. package/dist/{slideshow-EJ4IMY6P.js → slideshow-4OJEPWNZ.js} +1 -1
  162. package/dist/{snapshot-K7BTJPYQ.js → snapshot-YROOGY22.js} +42 -38
  163. package/dist/{src-3I3RH3V5.js → src-JO5JOV7Y.js} +16 -13
  164. package/dist/{src-YUW26JU5.js → src-X426BZAG.js} +17 -16
  165. package/dist/{staticProjectServer-IKCSGN2B.js → staticProjectServer-5VMBS262.js} +23 -22
  166. package/dist/studio/assets/{hyperframes-player-sAsRuV73.js → hyperframes-player-BXSuksFh.js} +3 -3
  167. package/dist/studio/assets/{index-D3Vij9t1.js → index-BgOVCqjo.js} +1 -1
  168. package/dist/studio/assets/{index-D5q2_7Gw.js → index-FgyO_5Kv.js} +1 -1
  169. package/dist/studio/assets/{index-B-wffzRH.js → index-J7jpL4pj.js} +150 -150
  170. package/dist/studio/index.html +1 -1
  171. package/dist/studio/index.js +122 -160
  172. package/dist/studio/index.js.map +1 -1
  173. package/dist/{studio-api-SQ3NXFSM.js → studio-api-VRBZUGAE.js} +22 -17
  174. package/dist/{studioServer-VVEO7XCH.js → studioServer-DBNKZ6I6.js} +50 -49
  175. package/dist/{synthesize-77PTU6C5.js → synthesize-C3IWDAXF.js} +2 -2
  176. package/dist/{telemetry-FQDKR5XA.js → telemetry-CXAX3TO3.js} +3 -3
  177. package/dist/{timeline-N6ZASFNE.js → timeline-VQ34WH7J.js} +91 -69
  178. package/dist/{tokens-2OIIBBCW.js → tokens-62R7VFAZ.js} +4 -4
  179. package/dist/{transcribe-4F6MK73N.js → transcribe-7KR7IPJA.js} +18 -17
  180. package/dist/{transcribe-7YTUCXDX.js → transcribe-XOHPPL2O.js} +11 -11
  181. package/dist/{tts-TOHSPWEG.js → tts-MUV42JXT.js} +6 -6
  182. package/dist/{updateCheck-AZ2COZFR.js → updateCheck-POYNH3B5.js} +2 -2
  183. package/dist/{upgrade-QAJEYB4X.js → upgrade-NBNOT7J2.js} +2 -2
  184. package/dist/{urlDownloader-LSMFEO3R.js → urlDownloader-3NS63A7B.js} +14 -13
  185. package/dist/{validate-GW5MDL36.js → validate-Y2QDHAEP.js} +40 -27
  186. package/dist/{video-PRNOKUK3.js → video-SJDMTSTL.js} +15 -14
  187. package/package.json +1 -1
  188. package/dist/chunk-J4UX3RS3.js +0 -3717
  189. /package/dist/{chunk-HBBJFK6I.js → chunk-APDLWWFG.js} +0 -0
@@ -4,18 +4,110 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ decodeHTMLAttribute
9
+ } from "./chunk-SDYDNHEE.js";
7
10
 
8
11
  // ../parsers/dist/assetResolution.js
9
12
  import { closeSync, constants, existsSync, fstatSync, openSync, readFileSync } from "fs";
10
13
  import { isAbsolute, join, posix, relative, resolve, sep } from "path";
11
- function decodeUrlPathVariants(path) {
12
- const variants = [path];
13
- try {
14
- const decoded = decodeURIComponent(path);
15
- if (decoded !== path) variants.unshift(decoded);
16
- } catch {
14
+ function readAttributeValue(html, at) {
15
+ while (/[\t\n\f\r ]/.test(html.charAt(at))) at++;
16
+ const quote = ['"', "'"].includes(html.charAt(at)) ? html.charAt(at) : "";
17
+ if (quote) at++;
18
+ const valueStart = at;
19
+ if (quote) {
20
+ const closing = html.indexOf(quote, at);
21
+ at = closing === -1 ? html.length : closing;
22
+ } else {
23
+ while (at < html.length && !/[\t\n\f\r >]/.test(html[at])) at++;
24
+ }
25
+ const valueEnd = at;
26
+ const end = quote ? Math.min(valueEnd + 1, html.length) : valueEnd;
27
+ return { value: html.slice(valueStart, valueEnd), valueStart, valueEnd, quote, end };
28
+ }
29
+ function readAttribute(html, start) {
30
+ let at = start;
31
+ while (at < html.length && !/[\t\n\f\r =/>]/.test(html[at])) at++;
32
+ if (at === start) return null;
33
+ const name = html.slice(start, at).toLowerCase();
34
+ const nameEnd = at;
35
+ while (/[\t\n\f\r ]/.test(html[at] ?? "")) at++;
36
+ if (html[at] !== "=") return { kind: "boolean", name, start, end: nameEnd };
37
+ return { kind: "value", name, start, ...readAttributeValue(html, at + 1) };
38
+ }
39
+ function readOpeningTag(html, start, name, at) {
40
+ const attributes = [];
41
+ while (at < html.length) {
42
+ while (/[\t\n\f\r /]/.test(html[at] ?? "")) at++;
43
+ if (at >= html.length || html[at] === ">") break;
44
+ const attribute = readAttribute(html, at);
45
+ if (attribute === null) {
46
+ at++;
47
+ continue;
48
+ }
49
+ attributes.push(attribute);
50
+ at = attribute.end;
51
+ }
52
+ const closed = html[at] === ">";
53
+ return {
54
+ name: name.toLowerCase(),
55
+ start,
56
+ bodyEnd: at,
57
+ end: closed ? at + 1 : at,
58
+ closed,
59
+ rawTextEnd: null,
60
+ attributes
61
+ };
62
+ }
63
+ function scanHtmlOpeningTags(html) {
64
+ const tags = [];
65
+ const opening = /<!--[\s\S]*?(?:--!?>|$)|<([a-z][^\t\n\f\r />]*)/gi;
66
+ let match;
67
+ while ((match = opening.exec(html)) !== null) {
68
+ if (!match[1]) continue;
69
+ const tag = readOpeningTag(html, match.index, match[1], opening.lastIndex);
70
+ tags.push(tag);
71
+ opening.lastIndex = tag.end;
72
+ if ([
73
+ "script",
74
+ "style",
75
+ "textarea",
76
+ "title",
77
+ "xmp",
78
+ "iframe",
79
+ "noembed",
80
+ "noframes",
81
+ "plaintext"
82
+ ].includes(tag.name)) {
83
+ if (tag.name === "plaintext") {
84
+ tag.rawTextEnd = html.length;
85
+ break;
86
+ }
87
+ const closing = new RegExp(`</${tag.name}(?=[\\t\\n\\f\\r />])`, "gi");
88
+ closing.lastIndex = tag.end;
89
+ const end = closing.exec(html);
90
+ tag.rawTextEnd = end?.index ?? html.length;
91
+ opening.lastIndex = tag.rawTextEnd;
92
+ }
17
93
  }
18
- return variants;
94
+ return tags;
95
+ }
96
+ function decodeAuthoredAttribute(value) {
97
+ return decodeHTMLAttribute(value);
98
+ }
99
+ function decodeUrlPathVariants(path) {
100
+ const decoded = decodeWellFormedEscapes(path);
101
+ return decoded === path ? [path] : [decoded, path];
102
+ }
103
+ function decodeWellFormedEscapes(path) {
104
+ return path.replace(/(?:%[0-9A-Fa-f]{2})+/g, (run) => {
105
+ try {
106
+ return decodeURIComponent(run);
107
+ } catch {
108
+ return run;
109
+ }
110
+ });
19
111
  }
20
112
  function isRemoteOrInlineUrl(url) {
21
113
  return /^(https?:|data:|blob:|\/\/|#)/i.test(url);
@@ -26,21 +118,14 @@ function hasUnresolvedTemplatingToken(url) {
26
118
  function isUnresolvedAssetPlaceholder(rawSrc) {
27
119
  return /^__[A-Z_]+__$/.test(rawSrc.trim()) || hasUnresolvedTemplatingToken(rawSrc);
28
120
  }
29
- var COMPOSITION_SRC_ATTR = /\bdata-composition-src\s*=\s*["']([^"']+)["']/i;
30
121
  function collectSubCompositionSrcs(html) {
31
- const scannable = maskNonScannableRanges(html);
32
122
  const srcs = [];
33
123
  const seen = /* @__PURE__ */ new Set();
34
- let cursor = 0;
35
- while (cursor < scannable.length) {
36
- const open = scannable.indexOf("<", cursor);
37
- if (open === -1) break;
38
- const close = scannable.indexOf(">", open + 1);
39
- if (close === -1) break;
40
- cursor = close + 1;
41
- const match = COMPOSITION_SRC_ATTR.exec(scannable.slice(open, cursor));
42
- if (!match) continue;
43
- const src = (match[1] ?? "").trim();
124
+ for (const tag of scanHtmlOpeningTags(html)) {
125
+ if (!tag.closed) continue;
126
+ const attribute = tag.attributes.find((attr) => attr.name === "data-composition-src");
127
+ if (attribute?.kind !== "value") continue;
128
+ const src = decodeAuthoredAttribute(attribute.value).trim();
44
129
  if (!src || seen.has(src)) continue;
45
130
  if (isUnresolvedAssetPlaceholder(src)) continue;
46
131
  if (isRemoteOrInlineUrl(src)) continue;
@@ -53,8 +53,14 @@ function formatRenderPipelineDetail(input) {
53
53
  return parts.length > 0 ? parts.join(" \xB7 ") : void 0;
54
54
  }
55
55
  function formatScreenshotFallbackHint(input) {
56
- if (input.platform !== "linux" || input.requestedGpuMode !== "auto") return void 0;
57
- if (input.captureMode !== "screenshot" || input.browserGpuMode !== "software") return void 0;
56
+ if (input.platform !== "linux" || input.requestedGpuMode !== "auto" && input.requestedGpuMode !== "hardware") {
57
+ return void 0;
58
+ }
59
+ if (input.captureMode !== "screenshot") return void 0;
60
+ if (input.browserGpuMode === "hardware") {
61
+ return "Screenshot capture (slower): BeginFrame did not run. Needs chrome-headless-shell and no --resolution upscale. A BeginFrame probe timeout can occur when browsers start together on one GPU; fewer --workers may help.";
62
+ }
63
+ if (input.browserGpuMode !== "software" || input.requestedGpuMode !== "auto") return void 0;
58
64
  return "Screenshot capture (slower): BeginFrame did not run. Needs chrome-headless-shell and no --resolution upscale. Heavy compositions can stall on software GL.";
59
65
  }
60
66
  function label(name, value) {
@@ -0,0 +1,121 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ isTextFile
9
+ } from "./chunk-K4WKGXRC.js";
10
+ import {
11
+ CliUsageError
12
+ } from "./chunk-PBN6GBJE.js";
13
+
14
+ // src/utils/reject-extra-positionals.ts
15
+ var ACCEPTS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set([
16
+ "compare",
17
+ "figma asset",
18
+ "skills update",
19
+ "timeline set"
20
+ ]);
21
+ var JOINS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set(["catalog", "tts"]);
22
+ var EXTRA_POSITIONAL_HINTS = {
23
+ add: "Run add once per item, or pass a single tag to install every item tagged with it."
24
+ };
25
+ function wantsJson(value) {
26
+ return value === true || typeof value === "string" && value !== "false" && value !== "0";
27
+ }
28
+ function declaredArgs(cmd) {
29
+ const raw = cmd.args;
30
+ return raw && typeof raw === "object" ? raw : {};
31
+ }
32
+ function usageLine(path, args) {
33
+ const parts = ["hyperframes", path];
34
+ let hasOptions = false;
35
+ for (const [name, def] of Object.entries(args)) {
36
+ if (def.type !== "positional") {
37
+ hasOptions = true;
38
+ continue;
39
+ }
40
+ const optional = def.required === false || def.default !== void 0;
41
+ parts.push(optional ? `[${name.toUpperCase()}]` : `<${name.toUpperCase()}>`);
42
+ }
43
+ if (hasOptions) parts.push("[OPTIONS]");
44
+ return parts.join(" ");
45
+ }
46
+ function resolveExtraPositionals(cmd, path, parsed) {
47
+ if (ACCEPTS_EXTRA_POSITIONALS.has(path)) return;
48
+ const args = declaredArgs(cmd);
49
+ const positionals = Object.entries(args).filter(([, def]) => def.type === "positional");
50
+ const given = (Array.isArray(parsed?._) ? parsed._ : []).map(String);
51
+ const extra = given.slice(positionals.length);
52
+ if (extra.length === 0) return;
53
+ const last = positionals.at(-1)?.[0];
54
+ const words = given.slice(positionals.length - 1);
55
+ const ttsFile = path === "tts" && isTextFile(words[0]);
56
+ if (parsed && last && JOINS_EXTRA_POSITIONALS.has(path) && !ttsFile) {
57
+ parsed[last] = words.join(" ");
58
+ return;
59
+ }
60
+ const plural = extra.length === 1 ? "" : "s";
61
+ const message = `Unexpected extra argument${plural} for hyperframes ${path}: ${extra.join(", ")}
62
+ Usage: ${usageLine(path, args)}` + (EXTRA_POSITIONAL_HINTS[path] ? `
63
+ ${EXTRA_POSITIONAL_HINTS[path]}` : "");
64
+ if (wantsJson(parsed?.json)) console.log(JSON.stringify({ ok: false, error: message }));
65
+ else console.error(message);
66
+ throw new CliUsageError(
67
+ `${extra.length} unexpected extra argument${plural} for hyperframes ${path}`,
68
+ {
69
+ presented: true
70
+ }
71
+ );
72
+ }
73
+
74
+ // src/utils/reject-unknown-flags.ts
75
+ var ALWAYS_KNOWN = /* @__PURE__ */ new Set(["help", "h", "version", "v", "json"]);
76
+ function nameVariants(name) {
77
+ const kebab = name.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase());
78
+ const camel = name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
79
+ return [name, kebab, camel];
80
+ }
81
+ function knownFlags(args) {
82
+ const known = new Set(ALWAYS_KNOWN);
83
+ for (const [name, def] of Object.entries(args ?? {})) {
84
+ for (const v of nameVariants(name)) known.add(v);
85
+ const alias = def?.alias;
86
+ if (typeof alias === "string") known.add(alias);
87
+ else if (Array.isArray(alias)) for (const a of alias) known.add(a);
88
+ }
89
+ return known;
90
+ }
91
+ function longFlagName(tok) {
92
+ const name = tok.slice(2).split("=")[0] ?? "";
93
+ return name.startsWith("no-") ? name.slice(3) : name;
94
+ }
95
+ function unknownFlagIn(tok, known) {
96
+ if (tok === "-" || !tok.startsWith("-")) return null;
97
+ if (tok.startsWith("--")) {
98
+ const name = longFlagName(tok);
99
+ return name && !known.has(name) ? `--${name}` : null;
100
+ }
101
+ for (const ch of tok.slice(1).split("=")[0] ?? "") {
102
+ if (!known.has(ch)) return `-${ch}`;
103
+ }
104
+ return null;
105
+ }
106
+ function assertKnownFlags(cmd, rawArgs) {
107
+ if (!Array.isArray(rawArgs)) return;
108
+ const rawDef = cmd.args;
109
+ const args = rawDef && typeof rawDef === "object" ? rawDef : void 0;
110
+ const known = knownFlags(args);
111
+ for (const tok of rawArgs) {
112
+ if (tok === "--") break;
113
+ const bad = unknownFlagIn(tok, known);
114
+ if (bad) throw new Error(`Unknown flag: ${bad}`);
115
+ }
116
+ }
117
+
118
+ export {
119
+ resolveExtraPositionals,
120
+ assertKnownFlags
121
+ };
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-DZEVA7DI.js";
9
+ } from "./chunk-W35EKBS6.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -8,13 +8,13 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-IDX52YJN.js";
11
+ } from "./chunk-33RZPZ4K.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
- } from "./chunk-YFT3BL7N.js";
14
+ } from "./chunk-4M4EC7JX.js";
15
15
  import {
16
16
  parseHTML
17
- } from "./chunk-GK4AIFIH.js";
17
+ } from "./chunk-SDYDNHEE.js";
18
18
 
19
19
  // ../producer/src/services/animatedGifPrep.ts
20
20
  import { createHash } from "crypto";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  errorBox
9
- } from "./chunk-IHFUKJOR.js";
9
+ } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  failCommand
12
12
  } from "./chunk-PBN6GBJE.js";
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-VC76R6W2.js";
17
17
  import {
18
18
  DOMParser
19
- } from "./chunk-GK4AIFIH.js";
19
+ } from "./chunk-SDYDNHEE.js";
20
20
 
21
21
  // ../core/dist/figma/client.js
22
22
  var FigmaClientError = class extends Error {
@@ -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-QJDVMKSR.js");
1281
+ const { trackCommandFailure } = await import("./events-NIZBS6S7.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -6,20 +6,20 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  errorBox
9
- } from "./chunk-IHFUKJOR.js";
9
+ } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  ensureDOMParser
12
- } from "./chunk-PFCFR3KZ.js";
12
+ } from "./chunk-442JNXRM.js";
13
13
  import {
14
14
  failCommand
15
15
  } from "./chunk-PBN6GBJE.js";
16
16
  import {
17
17
  formatVariableValidationIssue,
18
18
  validateVariables
19
- } from "./chunk-YFT3BL7N.js";
19
+ } from "./chunk-4M4EC7JX.js";
20
20
  import {
21
21
  extractCompositionMetadata
22
- } from "./chunk-OZUQF4NB.js";
22
+ } from "./chunk-MQZVBHEY.js";
23
23
  import {
24
24
  c
25
25
  } from "./chunk-ZTZA4UWZ.js";
@@ -8,6 +8,9 @@ import {
8
8
  require_lib,
9
9
  require_main
10
10
  } from "./chunk-DPVXBVLL.js";
11
+ import {
12
+ decodeHTMLAttribute
13
+ } from "./chunk-SDYDNHEE.js";
11
14
  import {
12
15
  ancestor,
13
16
  full,
@@ -4623,13 +4626,29 @@ function trackKindOf(node) {
4623
4626
  return { kind: "graphics", source: "tag" };
4624
4627
  }
4625
4628
  function decodeUrlPathVariants(path) {
4626
- const variants = [path];
4627
- try {
4628
- const decoded = decodeURIComponent(path);
4629
- if (decoded !== path) variants.unshift(decoded);
4630
- } catch {
4631
- }
4632
- return variants;
4629
+ const decoded = decodeWellFormedEscapes(path);
4630
+ return decoded === path ? [path] : [decoded, path];
4631
+ }
4632
+ function decodeWellFormedEscapes(path) {
4633
+ return path.replace(/(?:%[0-9A-Fa-f]{2})+/g, (run) => {
4634
+ try {
4635
+ return decodeURIComponent(run);
4636
+ } catch {
4637
+ return run;
4638
+ }
4639
+ });
4640
+ }
4641
+ function splitUrlSuffix(urlValue) {
4642
+ const queryIdx = urlValue.indexOf("?");
4643
+ const hashIdx = urlValue.indexOf("#");
4644
+ if (queryIdx < 0 && hashIdx < 0) return { basePath: urlValue, suffix: "" };
4645
+ let cutIdx = urlValue.length;
4646
+ if (queryIdx >= 0) cutIdx = Math.min(cutIdx, queryIdx);
4647
+ if (hashIdx >= 0) cutIdx = Math.min(cutIdx, hashIdx);
4648
+ return { basePath: urlValue.slice(0, cutIdx), suffix: urlValue.slice(cutIdx) };
4649
+ }
4650
+ function decodedUrlPath(url) {
4651
+ return decodeWellFormedEscapes(splitUrlSuffix(url).basePath);
4633
4652
  }
4634
4653
  function parseProgram2(script) {
4635
4654
  try {
@@ -4805,6 +4824,98 @@ function resolveAliasDisplayName(alias) {
4805
4824
  if (!slug) return void 0;
4806
4825
  return CANONICAL_FONT_DISPLAY_NAMES[slug];
4807
4826
  }
4827
+ function readAttributeValue(html, at) {
4828
+ while (/[\t\n\f\r ]/.test(html.charAt(at))) at++;
4829
+ const quote = ['"', "'"].includes(html.charAt(at)) ? html.charAt(at) : "";
4830
+ if (quote) at++;
4831
+ const valueStart = at;
4832
+ if (quote) {
4833
+ const closing = html.indexOf(quote, at);
4834
+ at = closing === -1 ? html.length : closing;
4835
+ } else {
4836
+ while (at < html.length && !/[\t\n\f\r >]/.test(html[at])) at++;
4837
+ }
4838
+ const valueEnd = at;
4839
+ const end = quote ? Math.min(valueEnd + 1, html.length) : valueEnd;
4840
+ return { value: html.slice(valueStart, valueEnd), valueStart, valueEnd, quote, end };
4841
+ }
4842
+ function readAttribute(html, start) {
4843
+ let at = start;
4844
+ while (at < html.length && !/[\t\n\f\r =/>]/.test(html[at])) at++;
4845
+ if (at === start) return null;
4846
+ const name = html.slice(start, at).toLowerCase();
4847
+ const nameEnd = at;
4848
+ while (/[\t\n\f\r ]/.test(html[at] ?? "")) at++;
4849
+ if (html[at] !== "=") return { kind: "boolean", name, start, end: nameEnd };
4850
+ return { kind: "value", name, start, ...readAttributeValue(html, at + 1) };
4851
+ }
4852
+ function readOpeningTag(html, start, name, at) {
4853
+ const attributes = [];
4854
+ while (at < html.length) {
4855
+ while (/[\t\n\f\r /]/.test(html[at] ?? "")) at++;
4856
+ if (at >= html.length || html[at] === ">") break;
4857
+ const attribute = readAttribute(html, at);
4858
+ if (attribute === null) {
4859
+ at++;
4860
+ continue;
4861
+ }
4862
+ attributes.push(attribute);
4863
+ at = attribute.end;
4864
+ }
4865
+ const closed = html[at] === ">";
4866
+ return {
4867
+ name: name.toLowerCase(),
4868
+ start,
4869
+ bodyEnd: at,
4870
+ end: closed ? at + 1 : at,
4871
+ closed,
4872
+ rawTextEnd: null,
4873
+ attributes
4874
+ };
4875
+ }
4876
+ function scanHtmlOpeningTags(html) {
4877
+ const tags = [];
4878
+ const opening = /<!--[\s\S]*?(?:--!?>|$)|<([a-z][^\t\n\f\r />]*)/gi;
4879
+ let match;
4880
+ while ((match = opening.exec(html)) !== null) {
4881
+ if (!match[1]) continue;
4882
+ const tag = readOpeningTag(html, match.index, match[1], opening.lastIndex);
4883
+ tags.push(tag);
4884
+ opening.lastIndex = tag.end;
4885
+ if ([
4886
+ "script",
4887
+ "style",
4888
+ "textarea",
4889
+ "title",
4890
+ "xmp",
4891
+ "iframe",
4892
+ "noembed",
4893
+ "noframes",
4894
+ "plaintext"
4895
+ ].includes(tag.name)) {
4896
+ if (tag.name === "plaintext") {
4897
+ tag.rawTextEnd = html.length;
4898
+ break;
4899
+ }
4900
+ const closing = new RegExp(`</${tag.name}(?=[\\t\\n\\f\\r />])`, "gi");
4901
+ closing.lastIndex = tag.end;
4902
+ const end = closing.exec(html);
4903
+ tag.rawTextEnd = end?.index ?? html.length;
4904
+ opening.lastIndex = tag.rawTextEnd;
4905
+ }
4906
+ }
4907
+ return tags;
4908
+ }
4909
+ var HTML_ATTRIBUTE_ENTITIES = {
4910
+ "&": ["&amp;"],
4911
+ '"': ["&quot;"],
4912
+ "'": ["&#39;", "&apos;"],
4913
+ "<": ["&lt;"],
4914
+ ">": ["&gt;"]
4915
+ };
4916
+ function decodeAuthoredAttribute(value) {
4917
+ return decodeHTMLAttribute(value);
4918
+ }
4808
4919
 
4809
4920
  export {
4810
4921
  MagicString,
@@ -4841,8 +4952,12 @@ export {
4841
4952
  topLevelElements,
4842
4953
  trackKindOf,
4843
4954
  decodeUrlPathVariants,
4955
+ decodedUrlPath,
4844
4956
  extractMediaSrcMutations,
4845
4957
  FONT_ALIAS_MAP,
4846
4958
  FONT_ALIAS_KEYS,
4847
- resolveAliasDisplayName
4959
+ resolveAliasDisplayName,
4960
+ scanHtmlOpeningTags,
4961
+ HTML_ATTRIBUTE_ENTITIES,
4962
+ decodeAuthoredAttribute
4848
4963
  };
@@ -9,13 +9,13 @@ import {
9
9
  } from "./chunk-6IHWCZ3W.js";
10
10
  import {
11
11
  stoppedByCancelSignal
12
- } from "./chunk-FWRNQOLT.js";
12
+ } from "./chunk-UICWP23D.js";
13
13
  import {
14
14
  DEFAULT_MODEL,
15
15
  ensureModel,
16
16
  ensureWhisper,
17
17
  hasFFmpeg
18
- } from "./chunk-PXSM4HPB.js";
18
+ } from "./chunk-U3X3TPBW.js";
19
19
  import {
20
20
  findFFmpeg,
21
21
  findFFprobe,
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseHTML
9
- } from "./chunk-GK4AIFIH.js";
9
+ } from "./chunk-SDYDNHEE.js";
10
10
 
11
11
  // ../parsers/dist/hfIds.js
12
12
  var EXCLUDED_TAGS = /* @__PURE__ */ new Set([
@@ -101,7 +101,9 @@ function assignHfIds(body) {
101
101
  });
102
102
  }
103
103
  function ensureHfIds(html) {
104
- const wrapped = !/<!doctype|<html[\s>]/i.test(html);
104
+ const wrapped = !/^(?:<!doctype|<html[\s>/])/i.test(
105
+ html.replace(/^(?:\s|<!--(?:>|->|[\s\S]*?-->))*/, "")
106
+ );
105
107
  const { document } = wrapped ? parseHTML(`<!DOCTYPE html><html><head></head><body>${html}</body></html>`) : parseHTML(html);
106
108
  if (!document.body) return html;
107
109
  assignHfIds(document.body);
@@ -18,10 +18,10 @@ import {
18
18
  CSS_URL_RE,
19
19
  isNonRelativeUrl,
20
20
  isPathInside
21
- } from "./chunk-TQFG7HTI.js";
21
+ } from "./chunk-ZLW2V65P.js";
22
22
  import {
23
23
  parseHTML
24
- } from "./chunk-GK4AIFIH.js";
24
+ } from "./chunk-SDYDNHEE.js";
25
25
 
26
26
  // src/utils/projectLink.ts
27
27
  import { randomUUID } from "crypto";
@@ -34,7 +34,7 @@ import {
34
34
  } from "./chunk-XUXGIA7H.js";
35
35
  import {
36
36
  VERSION
37
- } from "./chunk-DZEVA7DI.js";
37
+ } from "./chunk-W35EKBS6.js";
38
38
  import {
39
39
  c
40
40
  } from "./chunk-ZTZA4UWZ.js";
@@ -6,16 +6,16 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  readCompositionFps
9
- } from "./chunk-YEIFI443.js";
9
+ } from "./chunk-WPNE5NEP.js";
10
10
  import {
11
11
  errorBox
12
- } from "./chunk-IHFUKJOR.js";
12
+ } from "./chunk-K2FLNJVB.js";
13
13
  import {
14
14
  failUsage
15
15
  } from "./chunk-PBN6GBJE.js";
16
16
  import {
17
17
  parseFps
18
- } from "./chunk-YFT3BL7N.js";
18
+ } from "./chunk-4M4EC7JX.js";
19
19
 
20
20
  // src/browser/windowsCrash.ts
21
21
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -14,11 +14,11 @@ import {
14
14
  } from "./chunk-AWDFDFI3.js";
15
15
  import {
16
16
  isBlockedNetworkHost
17
- } from "./chunk-IDX52YJN.js";
17
+ } from "./chunk-33RZPZ4K.js";
18
18
  import {
19
19
  DOMParser,
20
20
  parseHTML
21
- } from "./chunk-GK4AIFIH.js";
21
+ } from "./chunk-SDYDNHEE.js";
22
22
 
23
23
  // src/capture/userAgent.ts
24
24
  var CAPTURE_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveCaptureBrowserGpuMode
9
- } from "./chunk-WTMUCJ6Z.js";
9
+ } from "./chunk-QRKLPWEX.js";
10
10
  import {
11
11
  requestCliExit
12
12
  } from "./chunk-PBN6GBJE.js";