hyperframes 0.8.139 → 0.8.140
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-VYJQ4S3P.js → add-7SPPQB64.js} +20 -22
- package/dist/{animatedGifPrep-IBMW6FZB.js → animatedGifPrep-HN3CJSFX.js} +15 -8
- package/dist/{asset-FLSUS73X.js → asset-AZMFUTRL.js} +3 -3
- package/dist/{assetCataloger-TGD7TRCR.js → assetCataloger-TQUWYLHE.js} +6 -3
- package/dist/{auth-EZXIN4M4.js → auth-XGY74R4A.js} +7 -7
- package/dist/{autoUpdate-ZPMY5T3X.js → autoUpdate-44NTJBQU.js} +2 -2
- package/dist/{backgroundChecks-JIDTAUFE.js → backgroundChecks-ET4DJEPG.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{batchRender-FNZ6TJYY.js → batchRender-HTWWNF3P.js} +11 -8
- package/dist/beat-analyzer.global.js +5 -2
- package/dist/{beats-EAA4U3YN.js → beats-4GYTZUZG.js} +24 -17
- package/dist/{benchmark-KKZQVK2Y.js → benchmark-CJQHE3QN.js} +20 -23
- package/dist/{browser-ZIVVJLJT.js → browser-NXOVPGDG.js} +14 -28
- package/dist/{bundleWithLocalizedFonts-2XWC3PEM.js → bundleWithLocalizedFonts-6PJP54TC.js} +5 -5
- package/dist/{capture-MKJHABUL.js → capture-5EHGRJZM.js} +2 -2
- package/dist/{capture-EFYPXI42.js → capture-EHOMO4MP.js} +22 -15
- package/dist/{catalog-EWX4BBI2.js → catalog-PTX5Z52R.js} +28 -30
- package/dist/{catch-up-FJFH7T4W.js → catch-up-I45SPSCU.js} +11 -25
- package/dist/{check-YJNVDCBP.js → check-LJ7LG7OI.js} +72 -54
- package/dist/{checkBrowser-I6SPPEGD.js → checkBrowser-6EK5E4PG.js} +81 -36
- package/dist/chunk-24OWOBQH.js +3656 -0
- package/dist/{chunk-SIKMUO45.js → chunk-2GMKWYEH.js} +12 -12
- package/dist/{chunk-GIDHR5OL.js → chunk-5IKJONRY.js} +1 -1
- package/dist/{chunk-GWV2Y36Q.js → chunk-6U3MN4HW.js} +5 -106
- package/dist/chunk-A4KQZXZI.js +116 -0
- package/dist/{chunk-PFI3VD77.js → chunk-ABJNXQUA.js} +10 -10
- package/dist/{chunk-HOIHGPWO.js → chunk-ASW6NWON.js} +1 -1
- package/dist/chunk-B3I3XJ47.js +3711 -0
- package/dist/{chunk-3RT6D4P6.js → chunk-BJ5JWOES.js} +1 -1
- package/dist/{chunk-4VZBKOQJ.js → chunk-BQKEGPPL.js} +1 -1
- package/dist/{chunk-SHB5VDMH.js → chunk-BRITLL56.js} +1 -1
- package/dist/{chunk-7SI7GCX6.js → chunk-C2JUHIG5.js} +6 -6
- package/dist/{chunk-TCWL4BKK.js → chunk-DDQ4LOML.js} +1 -1
- package/dist/{chunk-CDJ7FPPJ.js → chunk-DQNOPYAG.js} +1 -1
- package/dist/{chunk-JH556Q42.js → chunk-EDYBFSPE.js} +2 -2
- package/dist/{chunk-W7SAWBQC.js → chunk-F3SPK6SO.js} +1 -1
- package/dist/chunk-FXMKHHPO.js +123 -0
- package/dist/chunk-G75ENCEZ.js +283 -0
- package/dist/{chunk-PLNWWGE7.js → chunk-GQJZORQP.js} +1 -1
- package/dist/{chunk-Y6W4DVPS.js → chunk-HKCNZITN.js} +1 -1
- package/dist/{chunk-U3GEXWI5.js → chunk-IFY57LUW.js} +1 -1
- package/dist/{chunk-UQXOHEQ7.js → chunk-IRBESGJ7.js} +4 -4
- package/dist/chunk-JFKL3WAE.js +161 -0
- package/dist/{chunk-25DHUDOK.js → chunk-JSGANFFH.js} +12 -3
- package/dist/{chunk-UGI77E35.js → chunk-KECV5G4V.js} +165 -59
- package/dist/{chunk-EZ2P7LAP.js → chunk-KFQNMY36.js} +8 -8
- package/dist/{chunk-FLRCVYNE.js → chunk-KJLY2SDJ.js} +2 -2
- package/dist/{chunk-XOZ3J3LB.js → chunk-KMKWRIMC.js} +1 -1
- package/dist/{chunk-O6K5DWXM.js → chunk-KOEWEFHK.js} +1 -1
- package/dist/{chunk-IBRZUVTH.js → chunk-L2H2L22P.js} +2 -2
- package/dist/{chunk-BC3OY2ED.js → chunk-LQG6GPVK.js} +1 -1
- package/dist/{chunk-Z67RZ4XO.js → chunk-MHK5DE2P.js} +263 -1960
- package/dist/{chunk-A4X2YWNQ.js → chunk-MTVDXB6S.js} +18 -289
- package/dist/{chunk-CDMB3PRC.js → chunk-MU6C2VP6.js} +7 -7
- package/dist/{chunk-UMWROSIP.js → chunk-MUINFURL.js} +2 -2
- package/dist/{chunk-JTAYFSLO.js → chunk-PB3P4MKP.js} +1 -1
- package/dist/{chunk-JIIIBTN2.js → chunk-PE2I3AFA.js} +1 -1
- package/dist/{chunk-OENM2JVZ.js → chunk-PFJFHNU3.js} +3 -3
- package/dist/{chunk-EH4VUY27.js → chunk-PPKFM5WE.js} +2 -2
- package/dist/{chunk-DW32KBHN.js → chunk-PUBKHEEA.js} +13 -13
- package/dist/{chunk-DUQJF7FK.js → chunk-QBK7WKHT.js} +8 -8
- package/dist/{chunk-U3HX7WE6.js → chunk-QG3PDRSO.js} +1 -1
- package/dist/{chunk-EJ7OWYF2.js → chunk-QP3BRKGF.js} +1 -163
- package/dist/chunk-QZ3AZTXI.js +1740 -0
- package/dist/{chunk-YOL4QRSL.js → chunk-SLEPCESN.js} +2 -2
- package/dist/chunk-T76PLPD6.js +57 -0
- package/dist/{chunk-QXOFUKBF.js → chunk-TPECLKPA.js} +168 -165
- package/dist/{chunk-R7LWDIKB.js → chunk-TYT2TLJR.js} +1 -1
- package/dist/{chunk-Q73ISOVQ.js → chunk-U7E736AJ.js} +1 -1
- package/dist/chunk-USDEMXXL.js +110 -0
- package/dist/{chunk-VTVS4IIP.js → chunk-VVJFZU6B.js} +2 -2
- package/dist/{chunk-JX7Y57YY.js → chunk-WKTHUC2R.js} +1 -1
- package/dist/{chunk-NTIOLSFE.js → chunk-WQBA3MH4.js} +3 -3
- package/dist/{chunk-STA43FMY.js → chunk-WY5OODN5.js} +71 -3855
- package/dist/{chunk-X3TMMIDP.js → chunk-X3X3VETN.js} +8 -8
- package/dist/{chunk-ZTZ7NCJT.js → chunk-XTFJOR3K.js} +1 -1
- package/dist/chunk-YA62XGXS.js +45 -0
- package/dist/{clean-P4KTCOUA.js → clean-Y3AQITOX.js} +29 -20
- package/dist/cli.js +55 -55
- package/dist/{cloud-PDY7S4HU.js → cloud-TDPOMBZF.js} +7 -7
- package/dist/{cloudrun-54MA2W5H.js → cloudrun-FPAVAVHP.js} +11 -8
- package/dist/commands/layout-audit.browser.js +37 -8
- package/dist/commands/motion-signature.browser.js +51 -2
- package/dist/{compare-LDWVSPC5.js → compare-LHL225ND.js} +40 -31
- package/dist/{compiler-CWSZ4W7J.js → compiler-RTU3KTLF.js} +7 -3
- package/dist/{component-FIEGC22U.js → component-L2YX7J56.js} +4 -4
- package/dist/{compositions-JR7PX356.js → compositions-V2UZKG7S.js} +23 -16
- package/dist/{delete-FXA2IHOS.js → delete-OXZEXUQY.js} +8 -8
- package/dist/{dist-4JZWRWS6.js → dist-N33CM63P.js} +21 -15
- package/dist/{dist-OJTEVNJR.js → dist-NZSQCYOF.js} +3 -1
- package/dist/{doctor-OTDHPM6K.js → doctor-MWTPSIVD.js} +20 -13
- package/dist/{events-UAFTI24U.js → events-4TZGQZWF.js} +6 -22
- package/dist/{events-6T7M2VCO.js → events-7VJJGC3D.js} +10 -23
- package/dist/{feedback-ZGZODHB6.js → feedback-HSGAPVN7.js} +67 -45
- package/dist/{figma-D26EJ7ZB.js → figma-AMC6FAK3.js} +6 -6
- package/dist/fontLocalizeCli.js +17 -10
- package/dist/{get-IAREU7IK.js → get-Y7DFEFYM.js} +8 -8
- package/dist/{gpuPolicy-NS7WZRDJ.js → gpuPolicy-A45VSUKR.js} +15 -8
- package/dist/{grade-compare-ZXHFHCD2.js → grade-compare-ERSA3OUI.js} +40 -31
- package/dist/{help-RVNYHW3N.js → help-TW2AADLZ.js} +4 -4
- package/dist/{history-THP4VNMF.js → history-DKGDSVWF.js} +12 -30
- package/dist/hyperframe-runtime.js +59 -59
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +59 -59
- package/dist/hyperframes-player.global.js +3 -3
- package/dist/{info-EOFRHN5A.js → info-I3NRRNX4.js} +17 -20
- package/dist/{init-YLIJE4CG.js → init-5Y3ZWZNF.js} +48 -41
- package/dist/{inspect-3D56ONJD.js → inspect-BJQKBB3X.js} +39 -30
- package/dist/{installer-GRR2GDZK.js → installer-27K4JS2I.js} +8 -5
- package/dist/{keyframes-NXNCTQPK.js → keyframes-6V2NZO22.js} +14 -25
- package/dist/{lambda-VGRZD7TR.js → lambda-AIMF3K4A.js} +16 -13
- package/dist/{layout-Z5DOS6DU.js → layout-YAPEBTU4.js} +39 -30
- package/dist/{lint-YD6NJGR2.js → lint-3LWWUIV7.js} +17 -23
- package/dist/{lintProject-ANMPLBIT.js → lintProject-LM3XZRPZ.js} +3 -1
- package/dist/{list-XGDKILYN.js → list-NTSGEZJ6.js} +8 -8
- package/dist/{login-GD5SA4RD.js → login-ZTDFGCCW.js} +9 -9
- package/dist/{logout-Q654A3SI.js → logout-GJXZQKOA.js} +5 -5
- package/dist/{media-treatment-TY4X4GQQ.js → media-treatment-ARHX446F.js} +21 -20
- package/dist/{models-MXRDH4WJ.js → models-VHNQVTHG.js} +19 -12
- package/dist/{motionShot-6LKR3C2E.js → motionShot-35HCSNCI.js} +22 -15
- package/dist/{normalize-O76AC4HE.js → normalize-IGLHCWTF.js} +0 -4
- package/dist/{normalize-audio-5ADDZKPJ.js → normalize-audio-AUC73JH3.js} +13 -26
- package/dist/{open-JXAMO325.js → open-C5LVNU3U.js} +11 -25
- package/dist/{pipeline-Q5MOPIIX.js → pipeline-4GDTK54T.js} +15 -8
- package/dist/{play-3SPH5GWZ.js → play-U7UANF7Z.js} +38 -32
- package/dist/{preflight-2PWAPKWC.js → preflight-Y5DN5D37.js} +3 -18
- package/dist/{present-ZTJQDKXZ.js → present-X6V6TX3E.js} +32 -26
- package/dist/{preview-4A3XZR6J.js → preview-K43RTRU2.js} +33 -26
- package/dist/{producer-5ZKKKQPB.js → producer-PVMFMW23.js} +1 -1
- package/dist/{projectConfig-WA4CS4SN.js → projectConfig-PI6MEN2T.js} +10 -7
- package/dist/{publication-CLG2FRRI.js → publication-67C7KVTL.js} +6 -3
- package/dist/{publish-YTT2WMXO.js → publish-RBV7EAMH.js} +27 -20
- package/dist/{refresh-K24ETHMA.js → refresh-MFITBIKV.js} +5 -5
- package/dist/{remove-background-W35INR3B.js → remove-background-Z2ECZX2Q.js} +22 -15
- package/dist/{render-7A4P5WMU.js → render-2GQMQBU3.js} +10 -7
- package/dist/{render-KICXUPNR.js → render-EFU4BZRZ.js} +23 -26
- package/dist/{render-WUBFQMAH.js → render-YBS3XGRJ.js} +52 -32
- package/dist/{render-batch-N7EFGE6S.js → render-batch-QC64OTB5.js} +11 -8
- package/dist/{renderCancellation-LYQPPFAO.js → renderCancellation-NTVU7IMB.js} +15 -8
- package/dist/renderSetupWorker.js +4 -2
- package/dist/{resolver-YTT2NENF.js → resolver-GBWYG3EI.js} +8 -5
- package/dist/{sherpa-353MW4UV.js → sherpa-ZW6PWJS4.js} +16 -9
- package/dist/skills/hyperframes/references/capability-menu.md +1 -1
- package/dist/skills/hyperframes-cli/SKILL.md +5 -0
- package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
- package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
- package/dist/skills/media-use/SKILL.md +6 -4
- package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +28 -0
- package/dist/skills/media-use/audio/scripts/lib/host-audio.test.mjs +106 -0
- package/dist/skills/media-use/references/setup-providers.md +3 -2
- package/dist/skills/media-use/scripts/lib/heygen-cli.mjs +21 -1
- package/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +14 -0
- package/dist/skills/media-use/scripts/resolve.mjs +11 -6
- package/dist/{skills-2XJIOEBT.js → skills-VKZAX5AS.js} +15 -30
- package/dist/{skillsUpdateCheck-LMCCWGNO.js → skillsUpdateCheck-PAY2OPDE.js} +3 -3
- package/dist/{snapshot-WBRSTLJ2.js → snapshot-SD5R3NWX.js} +41 -32
- package/dist/{src-YWFJILQF.js → src-7SSERHNP.js} +19 -11
- package/dist/{src-ZS3BLTZ5.js → src-RXTXL3VL.js} +16 -9
- package/dist/{staticProjectServer-4VKVHPNG.js → staticProjectServer-XELJXX4J.js} +24 -16
- package/dist/{status-73MBN37B.js → status-JA6SKQVH.js} +7 -24
- package/dist/studio/assets/{hyperframes-player-CckOoCJ8.js → hyperframes-player-BLuyxnK7.js} +1 -1
- package/dist/studio/assets/{index-DsEkE5_G.js → index-CWfuDCoA.js} +1 -1
- package/dist/studio/assets/{index-BmIPrb8I.js → index-Dr3Bo9uH.js} +1 -1
- package/dist/studio/assets/{index-Br1Whc0f.js → index-VAHDM_zL.js} +204 -204
- package/dist/studio/{chunk-E422JDF5.js → chunk-H2DUOXTF.js} +2 -1
- package/dist/studio/index.d.ts +19 -3
- package/dist/studio/index.html +1 -1
- package/dist/studio/index.js +6498 -5813
- package/dist/studio/index.js.map +1 -1
- package/dist/studio/player.js +1 -1
- package/dist/{studio-api-5V4TVSQV.js → studio-api-4FNUZPJ4.js} +40 -28
- package/dist/{studioServer-M5XY3HYC.js → studioServer-GHLL3F2M.js} +99 -68
- package/dist/{system-RCRNX5VF.js → system-OQLOGGPJ.js} +2 -19
- package/dist/{telemetry-LOBRQGUD.js → telemetry-7AO77PMH.js} +8 -23
- package/dist/{timeline-3JCP6PXU.js → timeline-6LTHSRXM.js} +32 -22
- package/dist/{tokens-MLMIJBVF.js → tokens-K6B46KNL.js} +3 -3
- package/dist/{transcribe-KNFXDEAX.js → transcribe-CLLISRLZ.js} +16 -9
- package/dist/{transcribe-POH25ZPX.js → transcribe-K2OU6FZF.js} +20 -44
- package/dist/{updateCheck-5ITBSBST.js → updateCheck-X6UQBS6I.js} +2 -2
- package/dist/{upgrade-K6OK4FKT.js → upgrade-BZFKEADI.js} +5 -5
- package/dist/{urlDownloader-TJJQKADT.js → urlDownloader-VAVUXYEQ.js} +14 -7
- package/dist/{validate-PPPOBJHB.js → validate-VO5KEXWN.js} +26 -19
- package/dist/{video-OB22HWXZ.js → video-JV6Y4UJR.js} +18 -11
- package/package.json +1 -1
- package/dist/chunk-HYYSJI5D.js +0 -3742
- package/dist/{chunk-I465DBM6.js → chunk-246MOR5U.js} +3 -3
- package/dist/{deploy-MX76RZ36.js → deploy-5G4Z6LPA.js} +1 -1
- package/dist/{destroy-H2TZBYHH.js → destroy-GFQLTIY3.js} +1 -1
- package/dist/{docs-QAPJEGLS.js → docs-MPOM3PHH.js} +3 -3
- package/dist/{policies-FSDZVS2E.js → policies-4FEXMXPK.js} +3 -3
- package/dist/{progress-FBIEEB7Y.js → progress-5AM2MZ7V.js} +3 -3
- package/dist/{sites-TNVKZS73.js → sites-HZMADOA3.js} +1 -1
- package/dist/studio/{chunk-E422JDF5.js.map → chunk-H2DUOXTF.js.map} +0 -0
- package/dist/{telemetry-2YC4SGQU.js → telemetry-W5AKPI4R.js} +3 -3
- package/dist/{tts-FU35O6YB.js → tts-TOHSPWEG.js} +4 -4
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
parseStrictFiniteTimingNumber,
|
|
18
18
|
resolveNaturalMediaTimelineDuration,
|
|
19
19
|
resolveTimedImageDurationSeconds
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-B3I3XJ47.js";
|
|
21
21
|
import {
|
|
22
22
|
COMPOSITION_ATTRIBUTES,
|
|
23
23
|
parseStartExpression
|
|
@@ -1305,52 +1305,6 @@ function copyMediaVisualStyles(targetStyle, sourceStyle, properties = MEDIA_VISU
|
|
|
1305
1305
|
}
|
|
1306
1306
|
}
|
|
1307
1307
|
|
|
1308
|
-
// ../core/dist/telemetryRedaction.js
|
|
1309
|
-
var MAX_TELEMETRY_STRING_LENGTH = 240;
|
|
1310
|
-
function truncateTelemetryString(value, maxLength) {
|
|
1311
|
-
if (value.length <= maxLength)
|
|
1312
|
-
return value;
|
|
1313
|
-
return `${value.slice(0, maxLength - 1)}\u2026`;
|
|
1314
|
-
}
|
|
1315
|
-
function redactUrlQueryStrings(value) {
|
|
1316
|
-
return value.replace(/\b(https?:\/\/[^\s?]+)\?[^\s]*/g, "$1?\u2026");
|
|
1317
|
-
}
|
|
1318
|
-
var SEGMENT = String.raw`[^\s/\\'"]+`;
|
|
1319
|
-
var SEGMENT_NODOT = String.raw`[^\s/\\'".]+`;
|
|
1320
|
-
var TOKEN_TAIL = String.raw`[^\s'")]*`;
|
|
1321
|
-
var ABSOLUTE_PATH = new RegExp(String.raw`(?<![:\w/\\])(?:[A-Za-z]:)?(?:[\\/]${SEGMENT}){2,}${TOKEN_TAIL}`, "g");
|
|
1322
|
-
var RELATIVE_PATH = new RegExp(String.raw`(?<![\w/\\.])\.{1,2}(?:[\\/]${SEGMENT})+${TOKEN_TAIL}`, "g");
|
|
1323
|
-
var ASSET_BASENAME = /(?<![\w/\\])[^\s/\\'"]+\.(?:mp4|mov|mkv|webm|avi|m4v|mpe?g|ts|mp3|wav|aac|m4a|flac|ogg|opus|png|jpe?g|gif|webp|svg|html?|json|srt|vtt|ass)\b/gi;
|
|
1324
|
-
var BARE_RELATIVE_PATH = new RegExp([
|
|
1325
|
-
// Two or more separators: `customer/acme/video.mp4`. No extension needed —
|
|
1326
|
-
// that much structure is already a path.
|
|
1327
|
-
String.raw`(?<![^\s'\"(=,\[])(?:${SEGMENT}[\\/]){2,}${SEGMENT}${TOKEN_TAIL}`,
|
|
1328
|
-
// One separator, but the last segment carries a file extension:
|
|
1329
|
-
// `assets/bgm.mp3`. That segment is dot-free on purpose — SEGMENT includes
|
|
1330
|
-
// `.`, so a greedy one swallows the extension this rule needs.
|
|
1331
|
-
String.raw`(?<![^\s'\"(=,\[])${SEGMENT}[\\/]${SEGMENT_NODOT}\.\w{1,8}\b${TOKEN_TAIL}`
|
|
1332
|
-
].join("|"), "g");
|
|
1333
|
-
function redactKnownPaths(value, paths) {
|
|
1334
|
-
if (typeof value !== "string")
|
|
1335
|
-
return "";
|
|
1336
|
-
let out = value;
|
|
1337
|
-
for (const path of paths) {
|
|
1338
|
-
if (typeof path !== "string" || path.length === 0)
|
|
1339
|
-
continue;
|
|
1340
|
-
const basename = path.split(/[\\/]/).pop() ?? "";
|
|
1341
|
-
for (const literal of [path, basename].filter((v) => v.length > 2)) {
|
|
1342
|
-
out = out.split(literal).join("[path]");
|
|
1343
|
-
}
|
|
1344
|
-
}
|
|
1345
|
-
return out;
|
|
1346
|
-
}
|
|
1347
|
-
function redactFilePaths(value) {
|
|
1348
|
-
return value.replace(/file:\/\/[^\s'")]+/g, "[file-url]").replace(RELATIVE_PATH, "[path]").replace(BARE_RELATIVE_PATH, "[path]").replace(ABSOLUTE_PATH, "[path]").replace(ASSET_BASENAME, "[file]");
|
|
1349
|
-
}
|
|
1350
|
-
function redactTelemetryString(value, maxLength = MAX_TELEMETRY_STRING_LENGTH) {
|
|
1351
|
-
return truncateTelemetryString(redactFilePaths(redactUrlQueryStrings(value)), maxLength);
|
|
1352
|
-
}
|
|
1353
|
-
|
|
1354
1308
|
// ../core/dist/projectRule.js
|
|
1355
1309
|
var PROJECT_MARKER_FILES = ["hyperframes.json", "meta.json", "project.json"];
|
|
1356
1310
|
function isHyperframesProject(fileNames) {
|
|
@@ -4761,112 +4715,6 @@ function isComponentItem(item) {
|
|
|
4761
4715
|
return item.type === "hyperframes:component";
|
|
4762
4716
|
}
|
|
4763
4717
|
|
|
4764
|
-
// ../core/dist/canary.js
|
|
4765
|
-
function fnv1a32(input) {
|
|
4766
|
-
let hash = 2166136261;
|
|
4767
|
-
for (let i = 0; i < input.length; i++) {
|
|
4768
|
-
hash ^= input.charCodeAt(i);
|
|
4769
|
-
hash = hash + ((hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24)) >>> 0;
|
|
4770
|
-
}
|
|
4771
|
-
return hash >>> 0;
|
|
4772
|
-
}
|
|
4773
|
-
function canaryBucket(feature, unitId) {
|
|
4774
|
-
return fnv1a32(`${feature}:${unitId}`) % 100;
|
|
4775
|
-
}
|
|
4776
|
-
function evaluateCanary(input) {
|
|
4777
|
-
if (input.override === true)
|
|
4778
|
-
return { enabled: true, reason: "forced_on" };
|
|
4779
|
-
if (input.override === false)
|
|
4780
|
-
return { enabled: false, reason: "forced_off" };
|
|
4781
|
-
const pct = Math.max(0, Math.min(100, Math.trunc(input.percentage)));
|
|
4782
|
-
if (pct <= 0)
|
|
4783
|
-
return { enabled: false, reason: "out_of_cohort" };
|
|
4784
|
-
if (pct >= 100)
|
|
4785
|
-
return { enabled: true, reason: "in_cohort" };
|
|
4786
|
-
if (input.exclude)
|
|
4787
|
-
return { enabled: false, reason: "excluded" };
|
|
4788
|
-
const unitId = input.unitId?.trim();
|
|
4789
|
-
if (!unitId)
|
|
4790
|
-
return { enabled: false, reason: "no_unit_id" };
|
|
4791
|
-
const bucket = canaryBucket(input.feature, unitId);
|
|
4792
|
-
return bucket < pct ? { enabled: true, reason: "in_cohort", bucket } : { enabled: false, reason: "out_of_cohort", bucket };
|
|
4793
|
-
}
|
|
4794
|
-
function parseCanaryOverride(raw) {
|
|
4795
|
-
const v = raw?.trim().toLowerCase();
|
|
4796
|
-
if (v === void 0 || v === "")
|
|
4797
|
-
return void 0;
|
|
4798
|
-
if (v === "1" || v === "true" || v === "on" || v === "yes")
|
|
4799
|
-
return true;
|
|
4800
|
-
if (v === "0" || v === "false" || v === "off" || v === "no")
|
|
4801
|
-
return false;
|
|
4802
|
-
return void 0;
|
|
4803
|
-
}
|
|
4804
|
-
var CANARY_FEATURE_PREFIX = "$feature/canary-";
|
|
4805
|
-
function canaryFeatureKey(name) {
|
|
4806
|
-
return `${CANARY_FEATURE_PREFIX}${name}`;
|
|
4807
|
-
}
|
|
4808
|
-
function canaryReasonKey(name) {
|
|
4809
|
-
return `canary_reason_${name.replace(/[^A-Za-z0-9]+/g, "_")}`;
|
|
4810
|
-
}
|
|
4811
|
-
function canaryFeatureProperties(entries) {
|
|
4812
|
-
const props = {};
|
|
4813
|
-
for (const entry of entries) {
|
|
4814
|
-
props[canaryFeatureKey(entry.name)] = entry.enabled ? "true" : "false";
|
|
4815
|
-
if (entry.reason !== void 0)
|
|
4816
|
-
props[canaryReasonKey(entry.name)] = entry.reason;
|
|
4817
|
-
}
|
|
4818
|
-
return props;
|
|
4819
|
-
}
|
|
4820
|
-
|
|
4821
|
-
// ../core/dist/canaryRegistry.js
|
|
4822
|
-
var CANARIES = [
|
|
4823
|
-
// ── Calibration ──────────────────────────────────────────────────────────
|
|
4824
|
-
// Two INERT canaries that gate nothing. They exist to validate the rollout
|
|
4825
|
-
// mechanism against real traffic before anything real depends on it, and
|
|
4826
|
-
// they answer questions the synthetic tests cannot:
|
|
4827
|
-
//
|
|
4828
|
-
// 1. Does a requested percentage land on target in the wild? The unit
|
|
4829
|
-
// tests use generated UUIDs and weight every install equally; real
|
|
4830
|
-
// render volume is heavily skewed toward a few heavy installs, so the
|
|
4831
|
-
// render-weighted share could differ from the install-weighted one.
|
|
4832
|
-
// 2. How fast does CUMULATIVE exposure drift above the target? Install
|
|
4833
|
-
// ids churn (measured: 24.7x more distinct ids over 30 days than in
|
|
4834
|
-
// any single day), so the set of installs enrolled AT SOME POINT grows
|
|
4835
|
-
// even though the instantaneous share stays flat. That drift is the
|
|
4836
|
-
// real limit on a canary's blast-radius guarantee.
|
|
4837
|
-
// 3. Are two canaries actually independent on real ids, not just on
|
|
4838
|
-
// generated ones? Overlap should be ~p1*p2, not ~min(p1,p2).
|
|
4839
|
-
//
|
|
4840
|
-
// Two different percentages so the answer is a line, not a point.
|
|
4841
|
-
// Delete both once the calibration window is read.
|
|
4842
|
-
{
|
|
4843
|
-
name: "calibration-10",
|
|
4844
|
-
percentage: 10,
|
|
4845
|
-
description: "Inert. Validates rollout accuracy and cumulative-exposure drift at 10%.",
|
|
4846
|
-
owner: "vance",
|
|
4847
|
-
sunsetAfter: "2026-09-15"
|
|
4848
|
-
},
|
|
4849
|
-
{
|
|
4850
|
-
name: "calibration-50",
|
|
4851
|
-
percentage: 50,
|
|
4852
|
-
description: "Inert. Second calibration point, and an independence check against calibration-10.",
|
|
4853
|
-
owner: "vance",
|
|
4854
|
-
sunsetAfter: "2026-09-15"
|
|
4855
|
-
}
|
|
4856
|
-
];
|
|
4857
|
-
function findCanary(name) {
|
|
4858
|
-
return CANARIES.find((c) => c.name === name);
|
|
4859
|
-
}
|
|
4860
|
-
function canaryEnvVar(name) {
|
|
4861
|
-
return `HF_CANARY_${name.toUpperCase().replace(/[^A-Z0-9]+/g, "_")}`;
|
|
4862
|
-
}
|
|
4863
|
-
function overdueCanaries(now = /* @__PURE__ */ new Date()) {
|
|
4864
|
-
return CANARIES.filter((c) => {
|
|
4865
|
-
const sunsetEnd = Date.parse(`${c.sunsetAfter}T23:59:59.999Z`);
|
|
4866
|
-
return Number.isFinite(sunsetEnd) && now.getTime() > sunsetEnd;
|
|
4867
|
-
}).map((c) => c.name);
|
|
4868
|
-
}
|
|
4869
|
-
|
|
4870
4718
|
// ../core/dist/vfx/fractalNoise.frag.js
|
|
4871
4719
|
var HASH_CONSTANTS = {
|
|
4872
4720
|
/** Odd 32-bit multipliers, one per lattice axis plus one for the seed. */
|
|
@@ -5701,8 +5549,6 @@ export {
|
|
|
5701
5549
|
quantizeSeekTime,
|
|
5702
5550
|
exportClipWindow,
|
|
5703
5551
|
copyMediaVisualStyles,
|
|
5704
|
-
redactKnownPaths,
|
|
5705
|
-
redactTelemetryString,
|
|
5706
5552
|
PROJECT_MARKER_FILES,
|
|
5707
5553
|
isHyperframesProject,
|
|
5708
5554
|
createGSAPFrameAdapter,
|
|
@@ -5728,14 +5574,6 @@ export {
|
|
|
5728
5574
|
isExampleItem,
|
|
5729
5575
|
isBlockItem,
|
|
5730
5576
|
isComponentItem,
|
|
5731
|
-
canaryBucket,
|
|
5732
|
-
evaluateCanary,
|
|
5733
|
-
parseCanaryOverride,
|
|
5734
|
-
canaryFeatureProperties,
|
|
5735
|
-
CANARIES,
|
|
5736
|
-
findCanary,
|
|
5737
|
-
canaryEnvVar,
|
|
5738
|
-
overdueCanaries,
|
|
5739
5577
|
HF_VFX_ATTR,
|
|
5740
5578
|
HF_VFX_CHAIN_VERSION,
|
|
5741
5579
|
HF_VFX,
|