hyperframes 0.8.158 → 0.8.160

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 (171) hide show
  1. package/README.md +24 -0
  2. package/dist/{add-VBBOJ3RB.js → add-OGBTJCU4.js} +11 -11
  3. package/dist/{animatedGifPrep-MTJRHJ5G.js → animatedGifPrep-YAJTDXB7.js} +6 -6
  4. package/dist/api.js +16 -16
  5. package/dist/{asset-3MLXYJCT.js → asset-DKQFFGPP.js} +2 -2
  6. package/dist/{assetCataloger-DI7FC5KZ.js → assetCataloger-BIDQA34M.js} +2 -2
  7. package/dist/audio-GK4OVVTH.js +2086 -0
  8. package/dist/{auth-RJCTHSMH.js → auth-AQMRAFXN.js} +1 -1
  9. package/dist/{autoUpdate-VD6R34HF.js → autoUpdate-NFQB7V2X.js} +2 -2
  10. package/dist/{backgroundChecks-CWWIZDTW.js → backgroundChecks-7JKE2FIU.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-FTZ67377.js → batchRender-C2JCG5EK.js} +3 -3
  13. package/dist/{beats-6CN4BEXJ.js → beats-C3ZSK2R2.js} +12 -12
  14. package/dist/{benchmark-4QSNJZXI.js → benchmark-RRU67WEY.js} +8 -8
  15. package/dist/{browser-H7PRFBJV.js → browser-K4TP4ZM2.js} +5 -5
  16. package/dist/{bundleWithLocalizedFonts-IVO43QBQ.js → bundleWithLocalizedFonts-SLBVWQ7O.js} +2 -2
  17. package/dist/{capture-GZSY7LZJ.js → capture-T2TBROMS.js} +2 -2
  18. package/dist/{capture-IEEQTPAS.js → capture-ZPRK3TOZ.js} +10 -10
  19. package/dist/{catalog-PD25CVG3.js → catalog-IMIHQ4KX.js} +11 -11
  20. package/dist/{catch-up-2TGBK342.js → catch-up-UY5MJWOG.js} +4 -4
  21. package/dist/{check-HFNJEV3O.js → check-6NAJSJHQ.js} +135 -124
  22. package/dist/{checkBrowser-767LAZKF.js → checkBrowser-JWNQFYTY.js} +38 -36
  23. package/dist/{chunk-YIJMVFEJ.js → chunk-22QHO26F.js} +1 -1
  24. package/dist/{chunk-7F3B5YYT.js → chunk-2742O5DO.js} +178 -23
  25. package/dist/{chunk-EEEUI3ON.js → chunk-2ZLYSXZC.js} +16 -9
  26. package/dist/{chunk-L6AJC7UQ.js → chunk-37LNY2EC.js} +1 -1
  27. package/dist/{chunk-EY6ISRP3.js → chunk-3XPVZLAR.js} +1 -1
  28. package/dist/{chunk-DISITOR6.js → chunk-4ID635FL.js} +1 -1
  29. package/dist/{chunk-EDEFAJI5.js → chunk-4VYNMVMC.js} +12 -12
  30. package/dist/chunk-6JR2XUEE.js +127 -0
  31. package/dist/{chunk-7FGHFHWD.js → chunk-6MCASYIS.js} +31 -11
  32. package/dist/{chunk-3MQBIZHG.js → chunk-7OFNPEKR.js} +7 -7
  33. package/dist/{chunk-BB2SFTMY.js → chunk-A2DMF2Q6.js} +6 -5
  34. package/dist/{chunk-LAAGHMRC.js → chunk-B5FZ2CQM.js} +6 -2
  35. package/dist/{chunk-SLUFA6UM.js → chunk-B7RUGHBT.js} +1 -1
  36. package/dist/{chunk-3UMNI4XZ.js → chunk-D2WGLWIK.js} +3 -3
  37. package/dist/{chunk-3FRK53UC.js → chunk-D33YJZOH.js} +1 -1
  38. package/dist/{chunk-54DMWFQZ.js → chunk-D3ZWBHZP.js} +2 -15
  39. package/dist/{chunk-PKHDQELW.js → chunk-D46G5IQH.js} +11 -11
  40. package/dist/{chunk-ZZ3ZWTOI.js → chunk-DJZEIVAP.js} +3 -3
  41. package/dist/{chunk-J7WFHOCW.js → chunk-ERTJPFCH.js} +1 -1
  42. package/dist/{chunk-QRPYTJBW.js → chunk-EVRUR7DW.js} +1 -1
  43. package/dist/{chunk-QH2PL6J4.js → chunk-FRGYHRP6.js} +1 -1
  44. package/dist/{chunk-T243WV6D.js → chunk-G642IIVK.js} +2 -2
  45. package/dist/{chunk-GPUVPZRK.js → chunk-GG37I7B3.js} +1 -1
  46. package/dist/chunk-GJQHHAAX.js +336 -0
  47. package/dist/{chunk-Y6E2PW7Z.js → chunk-GOASXWDD.js} +2 -2
  48. package/dist/{chunk-4R6OZQGX.js → chunk-GOTCGKX6.js} +79 -4
  49. package/dist/{chunk-H6BWNY56.js → chunk-ICZVCVD3.js} +1 -1
  50. package/dist/{chunk-YVD5M26L.js → chunk-IGTGLGML.js} +2 -2
  51. package/dist/{chunk-KEGTYA7V.js → chunk-IK3SOMZ4.js} +5 -3
  52. package/dist/{chunk-6PIGOKTE.js → chunk-JGYHWVXQ.js} +339 -67
  53. package/dist/{chunk-2XUQPJ3W.js → chunk-KRE55WLI.js} +1 -1
  54. package/dist/{chunk-NNQP5TNO.js → chunk-KWRBEDJI.js} +3 -3
  55. package/dist/{chunk-FJT35XBA.js → chunk-LYIG2GZ5.js} +2 -2
  56. package/dist/{chunk-T76NSAXO.js → chunk-MMV6IY6U.js} +6 -4
  57. package/dist/{chunk-4YDQQQY6.js → chunk-MP676E4B.js} +2 -2
  58. package/dist/{chunk-LAPUMJOC.js → chunk-MYGXKD7A.js} +5 -5
  59. package/dist/{chunk-LQXHRO6F.js → chunk-N2NDDTYW.js} +2 -2
  60. package/dist/{chunk-J6SJCYAQ.js → chunk-OMJA7JP6.js} +5 -5
  61. package/dist/chunk-P47XYVEQ.js +3795 -0
  62. package/dist/{chunk-NFX4K6OW.js → chunk-P4QE7SSN.js} +1 -1
  63. package/dist/{chunk-EGKIQS5J.js → chunk-PBNV5V5G.js} +1 -1
  64. package/dist/{chunk-56QTFOWH.js → chunk-PINFPWRV.js} +5 -119
  65. package/dist/{chunk-IRRRH66M.js → chunk-PLEMSN3E.js} +115 -13
  66. package/dist/{chunk-23VDPRQ3.js → chunk-PPF65XAF.js} +1 -1
  67. package/dist/{chunk-SGIZMTWO.js → chunk-Q3TFX4OZ.js} +1 -1
  68. package/dist/{chunk-XSEGMQYA.js → chunk-QABAVWEX.js} +26 -3
  69. package/dist/{chunk-7ZWOLEGS.js → chunk-RTS7BGEC.js} +1 -1
  70. package/dist/{chunk-YB26LWR2.js → chunk-SB5DX6AD.js} +2 -2
  71. package/dist/{chunk-J4SSEVRU.js → chunk-SHVDJON6.js} +2 -2
  72. package/dist/{chunk-W2SNLHKF.js → chunk-TTFDAWCS.js} +1 -1
  73. package/dist/{chunk-RU6AIVON.js → chunk-TU2CQJO3.js} +2 -2
  74. package/dist/{chunk-Z347DFOL.js → chunk-V2FQQILJ.js} +8 -8
  75. package/dist/{chunk-DCQCGE2W.js → chunk-VD7WQYTO.js} +22 -20
  76. package/dist/{chunk-SHEVPNUR.js → chunk-VZ6LCTOZ.js} +1 -1
  77. package/dist/{chunk-SQHWDFTV.js → chunk-X3SCQP2A.js} +1 -1
  78. package/dist/{chunk-LBT4AMSF.js → chunk-XRKMITSS.js} +1 -1
  79. package/dist/{chunk-OTG5H2VM.js → chunk-XTLV6UVP.js} +3 -3
  80. package/dist/{clean-FQUVFH6H.js → clean-RRE6PMKZ.js} +24 -23
  81. package/dist/cli.js +54 -53
  82. package/dist/{cloud-BHAYVT6F.js → cloud-OIR6K7TS.js} +4 -4
  83. package/dist/{cloudrun-STLNWUBW.js → cloudrun-BIQXBUDO.js} +3 -3
  84. package/dist/{compare-2FRBIK5Z.js → compare-E57W737I.js} +31 -30
  85. package/dist/{compiler-VFJVUZWR.js → compiler-57M6W5WY.js} +3 -3
  86. package/dist/{component-DRKXJVXB.js → component-I2O4AX56.js} +3 -3
  87. package/dist/{compositions-D3SN64J3.js → compositions-B6NKZHIN.js} +10 -10
  88. package/dist/{delete-NA5WC2IR.js → delete-DTUNBC6K.js} +2 -2
  89. package/dist/{dist-SVTSOG4Q.js → dist-4JFB3WAR.js} +2 -2
  90. package/dist/{dist-2VXSQLXO.js → dist-ROVMAL74.js} +1 -1
  91. package/dist/{doctor-VXCMPOY3.js → doctor-SCNB73Z3.js} +12 -12
  92. package/dist/{events-ZJEPMUWT.js → events-6LQNRKHZ.js} +3 -3
  93. package/dist/{events-QAHWXFFG.js → events-Q37UJL36.js} +2 -2
  94. package/dist/{feedback-UGOQ57TU.js → feedback-FOEBE2OW.js} +9 -9
  95. package/dist/{ffmpeg-2ROTISBL.js → ffmpeg-7BYARPLM.js} +4 -2
  96. package/dist/{figma-YO2MJZDP.js → figma-54MRTBKH.js} +3 -3
  97. package/dist/fontLocalizeCli.js +9 -9
  98. package/dist/{get-WMJAYRNF.js → get-EPGHM2SA.js} +2 -2
  99. package/dist/{gpuPolicy-VXNJ4UBN.js → gpuPolicy-VGE3I5J4.js} +6 -6
  100. package/dist/{grade-compare-QZ7BG2AP.js → grade-compare-LOJWX6SK.js} +33 -32
  101. package/dist/{help-AR4MX2AH.js → help-6FPZI3WP.js} +2 -1
  102. package/dist/{history-NF764OFQ.js → history-GRXSUA5R.js} +12 -11
  103. package/dist/hyperframe-runtime.js +56 -56
  104. package/dist/hyperframe.manifest.json +1 -1
  105. package/dist/hyperframe.runtime.iife.js +56 -56
  106. package/dist/hyperframes-player.global.js +3 -3
  107. package/dist/{info-476ERK4G.js → info-LV7DFCLD.js} +7 -7
  108. package/dist/{init-M6YUOBBZ.js → init-3J7BSAC3.js} +29 -29
  109. package/dist/{inspect-QYPUG3UZ.js → inspect-5RON554C.js} +30 -29
  110. package/dist/{installer-HF5BXXXM.js → installer-T3STEB4U.js} +4 -4
  111. package/dist/{keyframes-MTZRE34W.js → keyframes-KHXTHI5C.js} +6 -6
  112. package/dist/{lambda-ZCX7KGTY.js → lambda-4KCSMIM6.js} +4 -4
  113. package/dist/{layout-DLX4HQFL.js → layout-DVWWT2TR.js} +30 -29
  114. package/dist/{lint-OQ5QWCHZ.js → lint-Q5WFB5ST.js} +9 -9
  115. package/dist/{lintProject-JGHKRO5L.js → lintProject-BGDYHF3F.js} +1 -1
  116. package/dist/{list-AZ6OIOIK.js → list-RFEUTW6N.js} +2 -2
  117. package/dist/{login-DJPYT4YZ.js → login-WBHWA4M2.js} +4 -4
  118. package/dist/{manager-JNJE54OQ.js → manager-B6MVBM2E.js} +3 -3
  119. package/dist/{manager-ZLJD3EAY.js → manager-HEUPD2YB.js} +2 -2
  120. package/dist/{media-treatment-4YKC4LGB.js → media-treatment-WRHVNWLS.js} +15 -14
  121. package/dist/{models-WHDUQZQZ.js → models-OA4MXEYG.js} +12 -12
  122. package/dist/{motionShot-KEHC5AMK.js → motionShot-BZLRN3SS.js} +13 -13
  123. package/dist/{normalize-audio-ATAQGUPX.js → normalize-audio-4YXE3RIF.js} +7 -7
  124. package/dist/{open-4DXBEX2U.js → open-MCGYEFML.js} +7 -7
  125. package/dist/{parakeetRunner-5PNBGCGH.js → parakeetRunner-DBLHMD5T.js} +13 -13
  126. package/dist/{pipeline-QA2422UI.js → pipeline-FSY65OQ4.js} +8 -8
  127. package/dist/{play-SKTSHZM5.js → play-WXOV3BD7.js} +28 -27
  128. package/dist/{preflight-BH2XUQBS.js → preflight-G5KP7ZKA.js} +4 -4
  129. package/dist/{present-KSQ5GASH.js → present-RVG4J6CJ.js} +23 -22
  130. package/dist/{preview-TDD3QDR3.js → preview-PDUQR2JQ.js} +24 -24
  131. package/dist/{producer-PQMZ7OYH.js → producer-C5V2A3YL.js} +1 -1
  132. package/dist/{projectConfig-EYYDESVO.js → projectConfig-X2IEHCSK.js} +6 -6
  133. package/dist/{publication-MJY3XYYV.js → publication-JEANCWBW.js} +2 -2
  134. package/dist/{publish-5TZIKVLW.js → publish-VX5OH4ST.js} +12 -12
  135. package/dist/{remove-background-HT73ZUIG.js → remove-background-IXCISD26.js} +9 -9
  136. package/dist/{render-ADBL3C7S.js → render-5BGU3FXU.js} +57 -35
  137. package/dist/{render-YTJ3SMCD.js → render-ISUT7Q3X.js} +3 -3
  138. package/dist/{render-KJCDJEGI.js → render-JNJVFBFF.js} +13 -13
  139. package/dist/{render-batch-AFB2XK3I.js → render-batch-2C6RUP3F.js} +3 -3
  140. package/dist/renderSetupWorker.js +4 -4
  141. package/dist/{resolver-F2D2YCSQ.js → resolver-KTNKZVIB.js} +4 -4
  142. package/dist/{sherpa-IBKSF6GX.js → sherpa-GFRG3TMM.js} +12 -12
  143. package/dist/skills/hyperframes-cli/SKILL.md +5 -4
  144. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +8 -0
  145. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +1 -1
  146. package/dist/{skills-E75DFHGG.js → skills-LKJA27ZN.js} +5 -5
  147. package/dist/{skillsUpdateCheck-EPTKOBR6.js → skillsUpdateCheck-RFZJKZC4.js} +3 -3
  148. package/dist/{snapshot-Z6T4I5TE.js → snapshot-EOYA4MLG.js} +86 -50
  149. package/dist/{src-NDI4KNT3.js → src-GPUDUKY6.js} +7 -5
  150. package/dist/{src-4GCHM2LX.js → src-IMCQRH4P.js} +8 -8
  151. package/dist/{staticProjectServer-ITNEQNQ7.js → staticProjectServer-S3NK3V4S.js} +18 -15
  152. package/dist/studio/assets/{hyperframes-player-DX8LgKgb.js → hyperframes-player-CXL23NEv.js} +1 -1
  153. package/dist/studio/assets/{index-BdnuQ7ta.js → index-Bl_xrA5T.js} +1 -1
  154. package/dist/studio/assets/{index-DB0YwjiT.js → index-CejKvBNw.js} +1 -1
  155. package/dist/studio/assets/{index-7Ljcoa9s.js → index-D7BvLHtZ.js} +7 -7
  156. package/dist/studio/index.html +1 -1
  157. package/dist/{studio-api-JMWUSAG7.js → studio-api-YM5HLXUS.js} +16 -11
  158. package/dist/{studioServer-MWZNMAVJ.js → studioServer-CEXJK5TC.js} +60 -59
  159. package/dist/{telemetry-D6A2TRK6.js → telemetry-7AWYECPL.js} +3 -3
  160. package/dist/{timeline-VIF4G3IT.js → timeline-G7H373XX.js} +48 -353
  161. package/dist/{tokens-ORS6MFMG.js → tokens-GYH7NXXA.js} +2 -2
  162. package/dist/{transcribe-DNRG7OGE.js → transcribe-CIC7WAT5.js} +17 -17
  163. package/dist/{transcribe-DZ6O6EG5.js → transcribe-FL6NGWHF.js} +11 -11
  164. package/dist/{updateCheck-YY4BPYNT.js → updateCheck-MQ44KGUR.js} +2 -2
  165. package/dist/{upgrade-CUDVTTF5.js → upgrade-OL47SID3.js} +2 -2
  166. package/dist/{urlDownloader-INLS5A6I.js → urlDownloader-KDJGLR2Y.js} +5 -5
  167. package/dist/{usage-EC3KFUIJ.js → usage-HG4WMM7A.js} +33 -5
  168. package/dist/{validate-CQCQVHUX.js → validate-TDCH6X3C.js} +22 -21
  169. package/dist/{video-3GLT6U6Z.js → video-AHO4CDCK.js} +6 -6
  170. package/package.json +1 -1
  171. package/dist/chunk-LPOTN5GW.js +0 -3795
@@ -48,6 +48,7 @@ import {
48
48
  } from "./chunk-SDYDNHEE.js";
49
49
  import {
50
50
  parse,
51
+ parseExpressionAt,
51
52
  simple
52
53
  } from "./chunk-TYXH3EKP.js";
53
54
  import {
@@ -3763,10 +3764,12 @@ function trackKindOf(node) {
3763
3764
  // ../lint/dist/index.js
3764
3765
  import { createHash } from "crypto";
3765
3766
  import { existsSync as existsSync2, readFileSync, readdirSync } from "fs";
3766
- import { dirname, extname, join as join2, relative, resolve } from "path";
3767
+ import { dirname as dirname2, extname, join as join3, relative as relative2, resolve } from "path";
3767
3768
  import { execFile } from "child_process";
3768
3769
  import { existsSync } from "fs";
3769
3770
  import { join } from "path";
3771
+ import { realpathSync } from "fs";
3772
+ import { dirname, join as join2, relative } from "path";
3770
3773
  var COMPOSITION_ID_IN_CSS_PATTERN = /\[data-composition-id=["']([^"']+)["']\]/g;
3771
3774
  var TIMELINE_REGISTRY_INIT_PATTERN = /window\.__timelines\s*=\s*window\.__timelines\s*\|\|\s*\{\}|window\.__timelines\s*=\s*\{\}|window\.__timelines\s*\?\?=\s*\{\}/i;
3772
3775
  var TIMELINE_REGISTRY_OBJECT_LITERAL_PATTERN = /window\.__timelines\s*=\s*\{\s*(?:["'][^"']+["']|[A-Za-z_$][\w$]*)\s*:/i;
@@ -5249,10 +5252,10 @@ var coreRules = [
5249
5252
  }
5250
5253
  ];
5251
5254
  for (const script of scripts) {
5252
- const withoutComments = stripJsComments(script.content);
5253
- const executable = stripStringLiterals(withoutComments);
5255
+ const withoutComments2 = stripJsComments(script.content);
5256
+ const executable = stripStringLiterals(withoutComments2);
5254
5257
  for (const { pattern, label, hint, scansStrings } of patterns) {
5255
- const match = pattern.exec(scansStrings ? withoutComments : executable);
5258
+ const match = pattern.exec(scansStrings ? withoutComments2 : executable);
5256
5259
  if (match) {
5257
5260
  findings.push({
5258
5261
  ...locate(script, match.index),
@@ -7608,8 +7611,8 @@ function collectStaticCssVariableDefinitions(tags, styles) {
7608
7611
  ];
7609
7612
  const definitionPattern = /(?:^|[;{])\s*(--[A-Za-z0-9_-]+)\s*:/gm;
7610
7613
  for (const source of sources) {
7611
- const withoutComments = source.replace(/\/\*[\s\S]*?\*\//g, " ");
7612
- for (const match of withoutComments.matchAll(definitionPattern)) {
7614
+ const withoutComments2 = source.replace(/\/\*[\s\S]*?\*\//g, " ");
7615
+ for (const match of withoutComments2.matchAll(definitionPattern)) {
7613
7616
  if (match[1]) definitions.add(match[1]);
7614
7617
  }
7615
7618
  }
@@ -7803,8 +7806,8 @@ function targetedSelectorTokens(selector) {
7803
7806
  const compounds = group.trim().split(/[\s>+~]+/).filter(Boolean);
7804
7807
  const last = compounds[compounds.length - 1];
7805
7808
  if (!last) continue;
7806
- const simple2 = last.match(/[#.][A-Za-z0-9_-]+/g);
7807
- if (simple2) for (const token of simple2) tokens.add(token);
7809
+ const simple3 = last.match(/[#.][A-Za-z0-9_-]+/g);
7810
+ if (simple3) for (const token of simple3) tokens.add(token);
7808
7811
  }
7809
7812
  return tokens;
7810
7813
  }
@@ -8006,8 +8009,8 @@ function firstParamMemberAccessHazard(fn) {
8006
8009
  while ((match = pattern.exec(fn.body)) !== null) {
8007
8010
  const member = match[1] ?? "";
8008
8011
  const after = fn.body.slice(match.index + match[0].length);
8009
- const isCall = /^\s*\(/.test(after);
8010
- if (isCall && NUMBER_METHODS.has(member)) continue;
8012
+ const isCall2 = /^\s*\(/.test(after);
8013
+ if (isCall2 && NUMBER_METHODS.has(member)) continue;
8011
8014
  return member;
8012
8015
  }
8013
8016
  return null;
@@ -10068,6 +10071,110 @@ var structureRules = [
10068
10071
  ];
10069
10072
  }
10070
10073
  ];
10074
+ function withoutComments(source) {
10075
+ return source.replace(/\/\*[\s\S]*?\*\/|\/\/[^\r\n]*/g, (text) => text.replace(/[^\r\n]/g, " "));
10076
+ }
10077
+ function staticShaders(source) {
10078
+ const shaders = [];
10079
+ try {
10080
+ const ast = parse(source, {
10081
+ ecmaVersion: "latest",
10082
+ sourceType: "module",
10083
+ allowReturnOutsideFunction: true
10084
+ });
10085
+ simple(ast, {
10086
+ Literal(node) {
10087
+ if (typeof node.value !== "string") return;
10088
+ shaders.push({
10089
+ text: node.value,
10090
+ start: node.start + 1,
10091
+ exactOffsets: source.slice(node.start + 1, node.end - 1) === node.value
10092
+ });
10093
+ },
10094
+ TemplateLiteral(node) {
10095
+ if (node.expressions.length !== 0) return;
10096
+ const value = node.quasis[0]?.value;
10097
+ if (value?.cooked == null) return;
10098
+ shaders.push({
10099
+ text: value.cooked,
10100
+ start: node.start + 1,
10101
+ exactOffsets: source.slice(node.start + 1, node.end - 1) === value.cooked
10102
+ });
10103
+ }
10104
+ });
10105
+ } catch {
10106
+ }
10107
+ return shaders.filter(({ text }) => /\bvoid\s+main\s*\(/.test(withoutComments(text)));
10108
+ }
10109
+ function isNumber(node, value) {
10110
+ return node?.type === "Literal" && node.value === value;
10111
+ }
10112
+ function isCall(node, name) {
10113
+ return node?.type === "CallExpression" && node.callee.type === "Identifier" && node.callee.name === name;
10114
+ }
10115
+ function unboundedCosine(node) {
10116
+ if (node.type !== "CallExpression") return false;
10117
+ if (isCall(node, "dot")) return node.arguments.length === 2;
10118
+ if (!isCall(node, "max") || node.arguments.length !== 2) return false;
10119
+ const a = argumentAt(node, 0);
10120
+ const b = argumentAt(node, 1);
10121
+ return zeroFlooredDot(a, b) || zeroFlooredDot(b, a);
10122
+ }
10123
+ function argumentAt(call, index) {
10124
+ const node = call.arguments[index];
10125
+ return node?.type === "SpreadElement" ? void 0 : node;
10126
+ }
10127
+ function zeroFlooredDot(a, b) {
10128
+ return isCall(a, "dot") && isNumber(b, 0);
10129
+ }
10130
+ function unsafeCosinePower(call) {
10131
+ if (call.arguments.length !== 2) return false;
10132
+ const [base] = call.arguments;
10133
+ return base?.type === "BinaryExpression" && base.operator === "-" && base.left.type !== "PrivateIdentifier" && isNumber(base.left, 1) && unboundedCosine(base.right);
10134
+ }
10135
+ function unsafePowOffsets(source) {
10136
+ const offsets = [];
10137
+ const masked = withoutComments(source);
10138
+ for (const match of masked.matchAll(/\bpow\s*\(/g)) {
10139
+ try {
10140
+ const expression = parseExpressionAt(masked, match.index, { ecmaVersion: "latest" });
10141
+ simple(expression, {
10142
+ CallExpression(node) {
10143
+ if (node.start === match.index && unsafeCosinePower(node)) offsets.push(node.start);
10144
+ }
10145
+ });
10146
+ } catch {
10147
+ }
10148
+ }
10149
+ return offsets;
10150
+ }
10151
+ function shaderDomainOffsets(source, glsl = false) {
10152
+ const shaders = glsl ? [{ text: source, start: 0, exactOffsets: true }] : staticShaders(source);
10153
+ return shaders.flatMap(
10154
+ ({ text, start, exactOffsets }) => unsafePowOffsets(text).map((offset) => exactOffsets ? start + offset : void 0)
10155
+ );
10156
+ }
10157
+ function shaderDomainWarning() {
10158
+ return {
10159
+ code: "shader_unbounded_cosine_pow",
10160
+ severity: "warning",
10161
+ message: "Shader pow(1 - dot(...), ...) can receive a negative base when the cosine exceeds 1, including through GPU rounding. Undefined GLSL results can spread through glow or transmission textures as black artifacts.",
10162
+ fixHint: "Bound the cosine on both sides: pow(1.0 - clamp(dot(normal, view), 0.0, 1.0), exponent). A lower-only max(dot(...), 0.0) does not bound the upper end. Inspect the affected frames on the target GPU."
10163
+ };
10164
+ }
10165
+ var shaderRules = [
10166
+ ({ scripts, locate }) => scripts.flatMap((script) => {
10167
+ const tag = `<script ${script.attrs}>`;
10168
+ if (readAttr(tag, "src") !== null) return [];
10169
+ const type = readAttr(tag, "type") ?? "";
10170
+ const glsl = /^(?:x-shader\/x-(?:fragment|vertex)|text\/glsl)$/i.test(type);
10171
+ if (type && !glsl && !/^(?:module|(?:text|application)\/javascript)$/i.test(type)) return [];
10172
+ return shaderDomainOffsets(script.content, glsl).map((offset) => ({
10173
+ ...shaderDomainWarning(),
10174
+ ...locate(script, offset)
10175
+ }));
10176
+ })
10177
+ ];
10071
10178
  var RULE_GROUPS = [
10072
10179
  { group: "core", rules: coreRules },
10073
10180
  { group: "media", rules: mediaRules },
@@ -10078,7 +10185,8 @@ var RULE_GROUPS = [
10078
10185
  { group: "textures", rules: textureRules },
10079
10186
  { group: "fonts", rules: fontRules },
10080
10187
  { group: "slideshow", rules: slideshowRules },
10081
- { group: "structure", rules: structureRules }
10188
+ { group: "structure", rules: structureRules },
10189
+ { group: "shaders", rules: shaderRules }
10082
10190
  ];
10083
10191
  var LINT_RULE_COUNT = RULE_GROUPS.reduce((n, g) => n + g.rules.length, 0);
10084
10192
  var LINT_RULE_GROUP_COUNTS = Object.fromEntries(
@@ -10090,7 +10198,8 @@ function dedupeKeyFor(finding) {
10090
10198
  finding.severity,
10091
10199
  finding.selector || "",
10092
10200
  finding.elementId || "",
10093
- finding.message
10201
+ finding.message,
10202
+ ...finding.code === "shader_unbounded_cosine_pow" ? [finding.line, finding.column] : []
10094
10203
  ].join("|");
10095
10204
  }
10096
10205
  async function runRules(ctx, filePath) {
@@ -10128,7 +10237,7 @@ async function lintHyperframeHtml(html, options = {}) {
10128
10237
  const { findings: rawFindings, timings } = await runRules(ctx, options.filePath);
10129
10238
  const locate = createSourceLocator(html);
10130
10239
  const findings = rawFindings.map((finding) => {
10131
- if (finding.line !== void 0 || finding.code === "invalid_inline_script_syntax" || finding.code === "non_deterministic_code" || [
10240
+ if (finding.line !== void 0 || finding.code === "shader_unbounded_cosine_pow" || finding.code === "invalid_inline_script_syntax" || finding.code === "non_deterministic_code" || [
10132
10241
  "gsap_infinite_repeat",
10133
10242
  "gsap_repeat_ceil_overshoot",
10134
10243
  "gsap_repeat_floor_unclamped"
@@ -10438,6 +10547,51 @@ async function lintHevcPreviewCodec(candidates) {
10438
10547
  }
10439
10548
  ];
10440
10549
  }
10550
+ function isAuthoredScript(path) {
10551
+ return /\.(?:js|mjs|cjs)$/i.test(path) && !/(?:\.min\.js$|(?:^|[/\\])(?:vendor|node_modules)[/\\])/i.test(path);
10552
+ }
10553
+ function localScript(projectDir, src, compSrcPath) {
10554
+ if (/^(?:[a-z][a-z\d+.-]*:|\/\/|#)/i.test(src)) return;
10555
+ const besideFile = src.startsWith("/") ? src : join2(dirname(compSrcPath ?? "index.html"), src);
10556
+ const asset = resolveExistingLocalAsset(projectDir, besideFile);
10557
+ if (!asset) return;
10558
+ try {
10559
+ const file = realpathSync(asset.resolved);
10560
+ if (!isWithinProjectRoot(realpathSync(projectDir), file)) return;
10561
+ if (!isAuthoredScript(relative(projectDir, file))) return;
10562
+ return file;
10563
+ } catch {
10564
+ return;
10565
+ }
10566
+ }
10567
+ function linkedScripts(projectDir, { html, compSrcPath }) {
10568
+ const files = [];
10569
+ for (const script of parseHtmlStructure(html).scripts) {
10570
+ const tag = `<script ${script.attrs}>`;
10571
+ const type = readDecodedAttr(tag, "type") ?? "";
10572
+ if (type && !/^(?:module|(?:text|application)\/javascript)$/i.test(type)) continue;
10573
+ const src = readDecodedAttr(tag, "src");
10574
+ if (!src) continue;
10575
+ const file = localScript(projectDir, src, compSrcPath);
10576
+ if (file) files.push(file);
10577
+ }
10578
+ return files;
10579
+ }
10580
+ function lintProjectShaderScripts(projectDir, sources) {
10581
+ const files = new Set(sources.flatMap((source) => linkedScripts(projectDir, source)));
10582
+ const findings = [];
10583
+ for (const file of files) {
10584
+ const read = readProjectFile(file);
10585
+ if (read.kind !== "file") continue;
10586
+ for (const offset of shaderDomainOffsets(read.text)) {
10587
+ findings.push({
10588
+ ...shaderDomainWarning(),
10589
+ ...offset === void 0 ? { file } : sourcePosition(read.text, offset, file)
10590
+ });
10591
+ }
10592
+ }
10593
+ return findings;
10594
+ }
10441
10595
  function parseSubCompHtml(html) {
10442
10596
  return parseHTML(html).document;
10443
10597
  }
@@ -10468,7 +10622,7 @@ function collectLocalStylesheets(projectDir, document, compSrcPath) {
10468
10622
  if (!rel.split(/\s+/).some((part) => part.toLowerCase() === "stylesheet")) continue;
10469
10623
  const href = link.getAttribute("href") ?? "";
10470
10624
  if (!isLocalStylesheetHref(href)) continue;
10471
- const besideFile = compSrcPath ? join2(dirname(compSrcPath), href) : href;
10625
+ const besideFile = compSrcPath ? join3(dirname2(compSrcPath), href) : href;
10472
10626
  const stylesheet = resolveExistingLocalAsset(projectDir, besideFile) ?? (compSrcPath && staysInsideProjectRoot(href) ? resolveExistingLocalAsset(projectDir, href) : null);
10473
10627
  if (!stylesheet) continue;
10474
10628
  const read = readProjectFile(stylesheet.resolved);
@@ -10485,7 +10639,7 @@ function collectExternalStyles(projectDir, html, compSrcPath) {
10485
10639
  document,
10486
10640
  compSrcPath
10487
10641
  )) {
10488
- styles.push({ href, content, file: join2(projectDir, rootRelativePath), rootRelativePath });
10642
+ styles.push({ href, content, file: join3(projectDir, rootRelativePath), rootRelativePath });
10489
10643
  }
10490
10644
  return styles;
10491
10645
  }
@@ -10512,12 +10666,12 @@ function collectCssSources(projectDir, html, compSrcPath) {
10512
10666
  function resolveCssAssetCandidates(projectDir, url, htmlCompSrcPath, cssRootRelativePath) {
10513
10667
  if (url.startsWith("/")) return resolveLocalAssetCandidates(projectDir, url);
10514
10668
  if (cssRootRelativePath) {
10515
- return resolveLocalAssetCandidates(projectDir, join2(dirname(cssRootRelativePath), url));
10669
+ return resolveLocalAssetCandidates(projectDir, join3(dirname2(cssRootRelativePath), url));
10516
10670
  }
10517
10671
  if (htmlCompSrcPath) {
10518
10672
  return resolveLocalAssetCandidates(
10519
10673
  projectDir,
10520
- rewriteAssetPath(htmlCompSrcPath, url, (path) => existsSync2(join2(projectDir, path)))
10674
+ rewriteAssetPath(htmlCompSrcPath, url, (path) => existsSync2(join3(projectDir, path)))
10521
10675
  );
10522
10676
  }
10523
10677
  return resolveLocalAssetCandidates(projectDir, url);
@@ -10527,7 +10681,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10527
10681
  if (entryFile && !isWithinProjectRoot(projectDir, indexPath)) {
10528
10682
  throw new Error(`Explicit lint entry is outside the project directory: ${entryFile}`);
10529
10683
  }
10530
- const rootFile = relative(resolve(projectDir), indexPath).replace(/\\/g, "/") || "index.html";
10684
+ const rootFile = relative2(resolve(projectDir), indexPath).replace(/\\/g, "/") || "index.html";
10531
10685
  const rootCompSrcPath = rootFile === "index.html" ? void 0 : rootFile;
10532
10686
  const results = [];
10533
10687
  let totalErrors = 0;
@@ -10553,7 +10707,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10553
10707
  const relPath = rel ? `${rel}/${entry.name}` : entry.name;
10554
10708
  if (entry.isDirectory()) {
10555
10709
  if (!rel && entry.name === "components") continue;
10556
- out.push(...collectHtmlFiles(join2(dir, entry.name), relPath));
10710
+ out.push(...collectHtmlFiles(join3(dir, entry.name), relPath));
10557
10711
  } else if (entry.isFile() && entry.name.endsWith(".html") && !entry.name.startsWith("._")) {
10558
10712
  out.push(relPath);
10559
10713
  }
@@ -10562,7 +10716,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10562
10716
  };
10563
10717
  const files = collectHtmlFiles(compositionsDir, "").sort();
10564
10718
  for (const file of files) {
10565
- const filePath = join2(compositionsDir, file);
10719
+ const filePath = join3(compositionsDir, file);
10566
10720
  const html = readFileSync(filePath, "utf-8");
10567
10721
  const compSrcPath = `compositions/${file}`;
10568
10722
  allHtmlSources.push({ html, compSrcPath });
@@ -10585,6 +10739,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10585
10739
  }
10586
10740
  }
10587
10741
  const projectFindings = [
10742
+ ...lintProjectShaderScripts(projectDir, allHtmlSources),
10588
10743
  ...lintProjectAudioFiles(projectDir, allHtmlSources),
10589
10744
  ...lintAudioSrcNotFound(projectDir, allHtmlSources),
10590
10745
  ...lintMissingLocalAsset(projectDir, allHtmlSources),
@@ -10680,7 +10835,7 @@ function lintAudioSrcNotFound(projectDir, htmlSources) {
10680
10835
  const src = mediaSrcOf(match);
10681
10836
  if (/^(https?:|data:|blob:)/i.test(src)) continue;
10682
10837
  if (isUnresolvedAssetPlaceholder(src)) continue;
10683
- const rootRelative = compSrcPath ? rewriteAssetPath(compSrcPath, src, (path) => existsSync2(join2(projectDir, path))) : src;
10838
+ const rootRelative = compSrcPath ? rewriteAssetPath(compSrcPath, src, (path) => existsSync2(join3(projectDir, path))) : src;
10684
10839
  if (!existsSync2(resolveProjectRelativeSrc(rootRelative, projectDir))) {
10685
10840
  const file = sourceFile(projectDir, compSrcPath);
10686
10841
  missingByFile.set(file, (missingByFile.get(file) ?? /* @__PURE__ */ new Set()).add(src));
@@ -10714,7 +10869,7 @@ function lintMissingLocalAsset(projectDir, htmlSources) {
10714
10869
  const src = cleanAssetUrl(rawSrc);
10715
10870
  if (!src) continue;
10716
10871
  if (isRemoteOrInlineUrl(src)) continue;
10717
- const rootRelative = compSrcPath ? rewriteAssetPath(compSrcPath, src, (path) => existsSync2(join2(projectDir, path))) : src;
10872
+ const rootRelative = compSrcPath ? rewriteAssetPath(compSrcPath, src, (path) => existsSync2(join3(projectDir, path))) : src;
10718
10873
  const resolvedAsset = resolveExistingLocalAsset(projectDir, rootRelative);
10719
10874
  if (resolvedAsset) continue;
10720
10875
  const resolvedKey = resolve(projectDir, rootRelative);
@@ -10783,7 +10938,7 @@ function lintMultipleRootCompositions(projectDir) {
10783
10938
  const rootCompositions = [];
10784
10939
  for (const file of rootHtmlFiles) {
10785
10940
  if (file === "caption-skin.html") continue;
10786
- const content = readFileSync(join2(projectDir, file), "utf-8");
10941
+ const content = readFileSync(join3(projectDir, file), "utf-8");
10787
10942
  if (/data-composition-id/i.test(content)) {
10788
10943
  rootCompositions.push(file);
10789
10944
  }
@@ -16,7 +16,7 @@ import {
16
16
  EncoderInterruptedError,
17
17
  encoderFailureError,
18
18
  prepareAnimatedGifInputs
19
- } from "./chunk-T76NSAXO.js";
19
+ } from "./chunk-MMV6IY6U.js";
20
20
  import {
21
21
  parseEncoderOptions
22
22
  } from "./chunk-KLIKCX6Q.js";
@@ -45,6 +45,7 @@ import {
45
45
  assertConfiguredFfmpegBinariesExist,
46
46
  assertMediaPayload,
47
47
  assertSwiftShader,
48
+ audioFailureDiagnostics,
48
49
  augmentPageNavigationTimeoutError,
49
50
  augmentProtocolTimeoutError,
50
51
  blitRgb48leAffine,
@@ -150,7 +151,7 @@ import {
150
151
  validateEngineConfigSnapshot,
151
152
  verifyDiskDrawElementSamples,
152
153
  writeCapturedFrame
153
- } from "./chunk-IRRRH66M.js";
154
+ } from "./chunk-PLEMSN3E.js";
154
155
  import {
155
156
  assignBundledRuntimeCompositionIds,
156
157
  buildVariablesByCompScript,
@@ -163,7 +164,7 @@ import {
163
164
  isTemplateEntry,
164
165
  parsesAsScript,
165
166
  prepareFlattenedInnerRoot
166
- } from "./chunk-FJT35XBA.js";
167
+ } from "./chunk-LYIG2GZ5.js";
167
168
  import {
168
169
  LOW_MEMORY_TOTAL_MB_THRESHOLD,
169
170
  getCgroupMemoryLimitMb,
@@ -187,7 +188,7 @@ import {
187
188
  resolveAbsoluteMediaStartSeconds,
188
189
  resolveAuthoredTimingWindow,
189
190
  toFps
190
- } from "./chunk-SGIZMTWO.js";
191
+ } from "./chunk-Q3TFX4OZ.js";
191
192
  import {
192
193
  COMPOSITION_SOURCE_URL,
193
194
  HF_COLOR_GRADING_ATTR,
@@ -215,7 +216,7 @@ import {
215
216
  shouldClampResolvedMediaDuration,
216
217
  sourceTimeAt,
217
218
  styleElementsFor
218
- } from "./chunk-LPOTN5GW.js";
219
+ } from "./chunk-P47XYVEQ.js";
219
220
  import {
220
221
  MAX_AUDIO_GAIN
221
222
  } from "./chunk-UJKQWGFF.js";
@@ -239,7 +240,7 @@ import {
239
240
  } from "./chunk-TWWSYAKJ.js";
240
241
  import {
241
242
  lintHyperframeHtml
242
- } from "./chunk-7F3B5YYT.js";
243
+ } from "./chunk-2742O5DO.js";
243
244
  import {
244
245
  isUnresolvedAssetPlaceholder,
245
246
  readProjectFile,
@@ -8304,6 +8305,9 @@ function appendAutoDetectedVideoAudio(composition, extracted) {
8304
8305
 
8305
8306
  // ../producer/src/services/render/stages/audioStage.ts
8306
8307
  import { join as join16 } from "path";
8308
+ function triggerFirst(failures, trigger) {
8309
+ return [trigger, ...(failures ?? []).filter((failure) => failure !== trigger)];
8310
+ }
8307
8311
  async function runAudioStage(input) {
8308
8312
  const {
8309
8313
  projectDir,
@@ -8369,7 +8373,8 @@ async function runAudioStage(input) {
8369
8373
  if (interrupted) {
8370
8374
  throw encoderFailureError("Audio processing failed", {
8371
8375
  error: interrupted.detail,
8372
- failureReason: "external_interruption"
8376
+ failureReason: "external_interruption",
8377
+ audioFailures: audioFailureDiagnostics(triggerFirst(audioResult.failures, interrupted))
8373
8378
  });
8374
8379
  }
8375
8380
  hasAudio = audioResult.success;
@@ -11765,6 +11770,7 @@ async function executeRenderPipeline(input) {
11765
11770
  message: `Audio mix failed; output would be video-only: ${audioResult.audioError}`,
11766
11771
  details: {
11767
11772
  mediaType: "audio",
11773
+ audioFailures: audioFailureDiagnostics(audioFailures),
11768
11774
  failureReasons: [...new Set(audioFailures.map((failure) => failure.reason))],
11769
11775
  failureStages: [...new Set(audioFailures.map((failure) => failure.stage))],
11770
11776
  failureOwner,
@@ -14416,7 +14422,7 @@ function startServer(options = {}) {
14416
14422
  });
14417
14423
  async function shutdown(signal) {
14418
14424
  log.info(`Received ${signal}, shutting down`);
14419
- const { drainBrowserPool } = await import("./src-NDI4KNT3.js");
14425
+ const { drainBrowserPool } = await import("./src-GPUDUKY6.js");
14420
14426
  await drainBrowserPool().catch(() => {
14421
14427
  });
14422
14428
  const handle = await Promise.race([
@@ -15222,6 +15228,7 @@ function applyDistributedAudioWarningPolicy(job, audioError, audioFailures = [],
15222
15228
  message: `Audio mix failed; output would be video-only: ${audioError}`,
15223
15229
  details: {
15224
15230
  mediaType: "audio",
15231
+ audioFailures: audioFailureDiagnostics(audioFailures),
15225
15232
  failureReasons: [...new Set(audioFailures.map((failure) => failure.reason))],
15226
15233
  failureStages: [...new Set(audioFailures.map((failure) => failure.stage))],
15227
15234
  failureOwner,
@@ -15602,7 +15609,7 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
15602
15609
  if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
15603
15610
  if (probeResult.probeSession) {
15604
15611
  try {
15605
- const { closeCaptureSession: closeCaptureSession2 } = await import("./src-NDI4KNT3.js");
15612
+ const { closeCaptureSession: closeCaptureSession2 } = await import("./src-GPUDUKY6.js");
15606
15613
  await closeCaptureSession2(probeResult.probeSession);
15607
15614
  } catch (err) {
15608
15615
  log.warn("[plan] probe session close failed", {
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  trackCommandFailure
12
- } from "./chunk-2XUQPJ3W.js";
12
+ } from "./chunk-KRE55WLI.js";
13
13
  import {
14
14
  failCommand
15
15
  } from "./chunk-PBN6GBJE.js";
@@ -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-RU6AIVON.js";
9
+ } from "./chunk-TU2CQJO3.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -9,7 +9,7 @@ import {
9
9
  formatPreviewProxyBox,
10
10
  hdrToSdrToneMapFilter,
11
11
  parseFirstFrameColour
12
- } from "./chunk-SGIZMTWO.js";
12
+ } from "./chunk-Q3TFX4OZ.js";
13
13
  import {
14
14
  decodeAuthoredAttribute,
15
15
  scanHtmlOpeningTags
@@ -4,26 +4,26 @@ 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
- serveStaticProjectHtml
9
- } from "./chunk-4R6OZQGX.js";
10
7
  import {
11
8
  AUDIT_SEEK_OPTIONS,
12
9
  installPageFunctionGuard,
13
10
  seekCompositionTimeline,
14
11
  waitForCompositionFonts,
15
12
  waitForRuntimeReady
16
- } from "./chunk-7FGHFHWD.js";
13
+ } from "./chunk-6MCASYIS.js";
17
14
  import {
18
15
  launchManagedBrowser,
19
16
  resolveManagedGpuMode
20
- } from "./chunk-LAAGHMRC.js";
17
+ } from "./chunk-B5FZ2CQM.js";
21
18
  import {
22
19
  resolveDiagnosticNavigationTimeoutMs
23
- } from "./chunk-J7WFHOCW.js";
20
+ } from "./chunk-ERTJPFCH.js";
24
21
  import {
25
22
  resolveProject
26
- } from "./chunk-L6AJC7UQ.js";
23
+ } from "./chunk-37LNY2EC.js";
24
+ import {
25
+ serveStaticProjectHtml
26
+ } from "./chunk-GOTCGKX6.js";
27
27
  import {
28
28
  defineCommand
29
29
  } from "./chunk-S3S4TGEH.js";
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  printDeprecationNotice,
39
39
  withMeta
40
- } from "./chunk-QH2PL6J4.js";
40
+ } from "./chunk-FRGYHRP6.js";
41
41
  import {
42
42
  normalizeErrorMessage
43
43
  } from "./chunk-KNU5COPB.js";
@@ -708,7 +708,7 @@ async function collectTweenBoundaries(page) {
708
708
  });
709
709
  }
710
710
  async function bundleProjectHtml(projectDir) {
711
- const { bundleToSingleHtml } = await import("./compiler-VFJVUZWR.js");
711
+ const { bundleToSingleHtml } = await import("./compiler-57M6W5WY.js");
712
712
  return bundleToSingleHtml(projectDir);
713
713
  }
714
714
  async function alignViewportToComposition(page, url) {
@@ -728,15 +728,15 @@ async function alignViewportToComposition(page, url) {
728
728
  });
729
729
  }
730
730
  async function runLayoutAudit(projectDir, opts) {
731
- const { ensureBrowser } = await import("./manager-ZLJD3EAY.js");
731
+ const { ensureBrowser } = await import("./manager-HEUPD2YB.js");
732
732
  const puppeteer = await import("puppeteer-core");
733
- const { buildChromeArgs } = await import("./src-NDI4KNT3.js");
733
+ const { buildChromeArgs } = await import("./src-GPUDUKY6.js");
734
734
  const {
735
735
  assertWebGpuAdapterAvailable,
736
736
  compositionRequiresWebGpu,
737
737
  resolveLocalBrowserGpuMode,
738
738
  resolveLocalWebGpu
739
- } = await import("./gpuPolicy-VXNJ4UBN.js");
739
+ } = await import("./gpuPolicy-VGE3I5J4.js");
740
740
  const html = await bundleProjectHtml(projectDir);
741
741
  const server = await serveStaticProjectHtml(
742
742
  projectDir,