@hyperframes/core 0.8.15 → 0.8.17
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/compiler/mediaRenderIds.d.ts +0 -1
- package/dist/compiler/mediaRenderIds.d.ts.map +1 -1
- package/dist/compiler/mediaRenderIds.js +6 -18
- package/dist/compiler/mediaRenderIds.js.map +1 -1
- package/dist/compiler/timingCompiler.d.ts +4 -1
- package/dist/compiler/timingCompiler.d.ts.map +1 -1
- package/dist/compiler/timingCompiler.js +22 -16
- package/dist/compiler/timingCompiler.js.map +1 -1
- package/dist/generated/runtime-inline.js +1 -1
- package/dist/generated/runtime-inline.js.map +1 -1
- package/dist/hyperframe.runtime.iife.js +25 -25
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/bridge.d.ts +28 -0
- package/dist/runtime/bridge.d.ts.map +1 -0
- package/dist/runtime/bridge.js +137 -0
- package/dist/runtime/bridge.js.map +1 -0
- package/dist/runtime/protocol.d.ts +1 -1
- package/dist/runtime/protocol.d.ts.map +1 -1
- package/dist/runtime/protocol.js +1 -0
- package/dist/runtime/protocol.js.map +1 -1
- package/dist/runtime/types.d.ts +24 -9
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/webAudioRoute.d.ts +106 -0
- package/dist/runtime/webAudioRoute.d.ts.map +1 -0
- package/dist/runtime/webAudioRoute.js +221 -0
- package/dist/runtime/webAudioRoute.js.map +1 -0
- package/package.json +8 -4
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { HF_AUDIO_AUTOMATION_ATTR } from "../audioAutomation.js";
|
|
2
|
+
import { HF_AUDIO_FX_ATTR } from "../audioFx.js";
|
|
3
|
+
import { HF_AUDIO_GROUP_ATTR } from "../audioGroups.js";
|
|
4
|
+
import { postRuntimeMessage } from "./bridge.js";
|
|
5
|
+
/** Fired when the runtime withholds Web Audio capture from a media element. */
|
|
6
|
+
const DIAGNOSTIC_BYPASS_CODE = "runtime_web_audio_bypass";
|
|
7
|
+
function getAttr(el, name) {
|
|
8
|
+
return typeof el.getAttribute === "function" ? el.getAttribute(name) : null;
|
|
9
|
+
}
|
|
10
|
+
function hasAttr(el, name) {
|
|
11
|
+
return getAttr(el, name) !== null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* `crossorigin` is an enumerated attribute whose invalid-value default is
|
|
15
|
+
* `anonymous`, so PRESENCE is the opt-in — `crossorigin=""` and even
|
|
16
|
+
* `crossorigin="garbage"` both make the fetch a CORS request. Comparing the
|
|
17
|
+
* value against `"anonymous"` would wrongly block those.
|
|
18
|
+
*
|
|
19
|
+
* Two independent reads, because a spec-faithful host and a permissive one
|
|
20
|
+
* disagree about where the truth lives:
|
|
21
|
+
* - `getAttribute` is the primary read and covers every real browser: the
|
|
22
|
+
* markup is unambiguous regardless of what the IDL getter does with it.
|
|
23
|
+
* - `el.crossOrigin` is a secondary read for a host that sets the IDL
|
|
24
|
+
* property without reflecting it back to the attribute — some
|
|
25
|
+
* jsdom-style test/preview hosts do this. The check is `!= null`
|
|
26
|
+
* (covers both `null` and `undefined`), not a truthiness check, ON
|
|
27
|
+
* PURPOSE: `crossorigin=""` is a valid, common opt-in (see above), and
|
|
28
|
+
* its IDL fallback value is the empty string — a falsy value that
|
|
29
|
+
* `Boolean(el.crossOrigin)` would silently misread as "not opted in",
|
|
30
|
+
* reintroducing the exact silent-audio bug this module exists to close.
|
|
31
|
+
*/
|
|
32
|
+
function hasCorsOptIn(el) {
|
|
33
|
+
if (hasAttr(el, "crossorigin"))
|
|
34
|
+
return true;
|
|
35
|
+
return el.crossOrigin != null;
|
|
36
|
+
}
|
|
37
|
+
function baseUri(el) {
|
|
38
|
+
if (typeof el.baseURI === "string" && el.baseURI)
|
|
39
|
+
return el.baseURI;
|
|
40
|
+
return typeof document !== "undefined" ? document.baseURI : "";
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The URLs whose origin could decide this element's route.
|
|
44
|
+
*
|
|
45
|
+
* Order matters and mirrors the HTML resource selection algorithm. Once
|
|
46
|
+
* `currentSrc` is set the browser has COMMITTED to that resource, so it is the
|
|
47
|
+
* only candidate that can matter; a `<source>` sibling it passed over must not
|
|
48
|
+
* cost a same-origin element its Web Audio graph. A `src` attribute is equally
|
|
49
|
+
* definitive — the spec has it win outright over `<source>` children. Only
|
|
50
|
+
* before selection settles (no `currentSrc`, no `src`) do the `<source>`
|
|
51
|
+
* candidates matter, and there the conservative read is right: any of them
|
|
52
|
+
* could be the one that gets picked.
|
|
53
|
+
*/
|
|
54
|
+
function routeCandidates(el) {
|
|
55
|
+
const current = typeof el.currentSrc === "string" ? el.currentSrc : "";
|
|
56
|
+
if (current)
|
|
57
|
+
return [current];
|
|
58
|
+
const srcAttr = getAttr(el, "src");
|
|
59
|
+
if (srcAttr)
|
|
60
|
+
return [srcAttr];
|
|
61
|
+
if (typeof el.querySelectorAll !== "function")
|
|
62
|
+
return [];
|
|
63
|
+
const sources = [];
|
|
64
|
+
for (const source of Array.from(el.querySelectorAll("source"))) {
|
|
65
|
+
const value = source.getAttribute("src");
|
|
66
|
+
if (value)
|
|
67
|
+
sources.push(value);
|
|
68
|
+
}
|
|
69
|
+
return sources;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Whether this URL would make MediaElementSource silent. Only http(s) is
|
|
73
|
+
* judged: `blob:` and `data:` are same-origin by construction, and a `file:`
|
|
74
|
+
* page's opaque origin can't be compared meaningfully — so those keep the
|
|
75
|
+
* pre-existing behaviour rather than losing Web Audio on a guess. The guard
|
|
76
|
+
* changes behaviour ONLY in the case that is already known-broken.
|
|
77
|
+
*/
|
|
78
|
+
function isCorsSilenced(rawUrl, el) {
|
|
79
|
+
if (typeof window === "undefined")
|
|
80
|
+
return false;
|
|
81
|
+
let url;
|
|
82
|
+
try {
|
|
83
|
+
url = new URL(rawUrl, baseUri(el));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (url.protocol !== "http:" && url.protocol !== "https:")
|
|
89
|
+
return false;
|
|
90
|
+
if (url.origin === window.location.origin)
|
|
91
|
+
return false;
|
|
92
|
+
return !hasCorsOptIn(el);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Whether resource selection has settled enough for a verdict to be a FACT
|
|
96
|
+
* rather than a guess. `currentSrc`/`src` are both definitive per the HTML
|
|
97
|
+
* resource-selection algorithm (see `routeCandidates` above); before either
|
|
98
|
+
* is set, a verdict can only be built from `<source>` children, any of which
|
|
99
|
+
* the browser may still pass over before committing.
|
|
100
|
+
*
|
|
101
|
+
* `classifyWebAudioMediaRoute` itself stays unsettled-tolerant on purpose —
|
|
102
|
+
* the schedule path needs *a* verdict even before selection settles, and
|
|
103
|
+
* conservatively withholding the node there costs nothing but a decode-only
|
|
104
|
+
* fallback. This predicate exists for the one caller that must NOT act on a
|
|
105
|
+
* guess: the discovery-time diagnostic, which drops a message in a human's
|
|
106
|
+
* lap and only gets to say it once (see `reportWebAudioMediaRoute`'s latch).
|
|
107
|
+
*/
|
|
108
|
+
export function isRouteSelectionSettled(el) {
|
|
109
|
+
const current = typeof el.currentSrc === "string" ? el.currentSrc : "";
|
|
110
|
+
if (current)
|
|
111
|
+
return true;
|
|
112
|
+
return hasAttr(el, "src");
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Pure — no node creation, no diagnostics, no element mutation. Called from
|
|
116
|
+
* both the schedule path (where it withholds the node) and the discovery path
|
|
117
|
+
* (where it only reports), which is the point: `hyperframes check` never calls
|
|
118
|
+
* `play()`, so a verdict reachable only from the transport would be invisible
|
|
119
|
+
* to the very gate meant to surface it.
|
|
120
|
+
*/
|
|
121
|
+
export function classifyWebAudioMediaRoute(el) {
|
|
122
|
+
for (const candidate of routeCandidates(el)) {
|
|
123
|
+
if (isCorsSilenced(candidate, el)) {
|
|
124
|
+
return { kind: "decode-only", reason: "cross_origin_no_cors", asset: candidate };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { kind: "web-audio" };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Processing the native HTMLMediaElement fallback cannot reproduce. The track
|
|
131
|
+
* stays AUDIBLE either way — silence is the bug being fixed, so failing closed
|
|
132
|
+
* would just reinstate it — but these authored intentions are quietly dropped,
|
|
133
|
+
* which is worth saying out loud.
|
|
134
|
+
*
|
|
135
|
+
* Wider than the FX/automation pair the schedule path already tests: group
|
|
136
|
+
* membership carries a whole shared bus (chain, fader, its own automation
|
|
137
|
+
* clock), and an above-unity `data-volume` cannot survive a route whose only
|
|
138
|
+
* gain stage is `el.volume`, which the spec pins to [0,1].
|
|
139
|
+
*/
|
|
140
|
+
export function nativeUnexpressibleProcessing(el) {
|
|
141
|
+
const lost = [];
|
|
142
|
+
if (hasAttr(el, HF_AUDIO_FX_ATTR))
|
|
143
|
+
lost.push("fx-chain");
|
|
144
|
+
if (hasAttr(el, HF_AUDIO_AUTOMATION_ATTR))
|
|
145
|
+
lost.push("automation");
|
|
146
|
+
if (hasAttr(el, HF_AUDIO_GROUP_ATTR))
|
|
147
|
+
lost.push("audio-group");
|
|
148
|
+
const volume = Number.parseFloat(getAttr(el, "data-volume") ?? "");
|
|
149
|
+
if (Number.isFinite(volume) && volume > 1)
|
|
150
|
+
lost.push("above-unity-gain");
|
|
151
|
+
return lost;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Render never plays through Web Audio at all: the producer mixes offline from
|
|
155
|
+
* the source files, and that mix applies the FX chain itself (see
|
|
156
|
+
* `applyAudioFxChain` in `packages/engine/src/services/audioMixer.ts`). So a
|
|
157
|
+
* bypass is not a fact about the render, and `lostProcessing` would be an
|
|
158
|
+
* outright false claim there — the offline mix DOES reproduce the chain the
|
|
159
|
+
* line says native output cannot. The engine forwards every console line to
|
|
160
|
+
* producer stdout, so an ungated report would also land in every render log.
|
|
161
|
+
*
|
|
162
|
+
* Reporting is all that is gated: `classifyWebAudioMediaRoute` stays pure and
|
|
163
|
+
* the routing decision is unchanged, which costs nothing in render because the
|
|
164
|
+
* element is not the audio source there in the first place.
|
|
165
|
+
*
|
|
166
|
+
* Same signal `mediaProxy.ts`'s `isRenderMode` gates on. The `<video>` half of
|
|
167
|
+
* that check (the injected render-frame sibling) is deliberately not mirrored:
|
|
168
|
+
* only `<audio>` ever reaches this module.
|
|
169
|
+
*/
|
|
170
|
+
function isRenderMode() {
|
|
171
|
+
// Read through an inline cast rather than the ambient `Window` augmentation
|
|
172
|
+
// in `window.d.ts`: that augmentation is only in scope for programs that
|
|
173
|
+
// include it (core's own tsconfig does), and this module is also exported
|
|
174
|
+
// as `./runtime/web-audio-route` for non-runtime consumers (e.g. the studio
|
|
175
|
+
// asset sidebar's preview player, `AudioRow.tsx`) whose tsconfig doesn't
|
|
176
|
+
// pull it in. This is a plain existence check, so the cast costs nothing.
|
|
177
|
+
return (typeof window !== "undefined" &&
|
|
178
|
+
!!window
|
|
179
|
+
.__HF_EXPORT_RENDER_SEEK_CONFIG);
|
|
180
|
+
}
|
|
181
|
+
// One diagnostic per element. Latched only when something is actually emitted,
|
|
182
|
+
// so an early "web-audio" verdict taken before the resource selection settled
|
|
183
|
+
// can't suppress the real one at `loadedmetadata`.
|
|
184
|
+
const diagnosedElements = new WeakSet();
|
|
185
|
+
/**
|
|
186
|
+
* Emit the one-time diagnostic for a non-Web-Audio verdict.
|
|
187
|
+
*
|
|
188
|
+
* The bypass always reports: it is an accident by definition, and the whole
|
|
189
|
+
* complaint in #3458 is that nothing was said.
|
|
190
|
+
*/
|
|
191
|
+
export function reportWebAudioMediaRoute(el, route) {
|
|
192
|
+
if (route.kind === "web-audio")
|
|
193
|
+
return;
|
|
194
|
+
if (isRenderMode())
|
|
195
|
+
return;
|
|
196
|
+
if (diagnosedElements.has(el))
|
|
197
|
+
return;
|
|
198
|
+
const lost = nativeUnexpressibleProcessing(el);
|
|
199
|
+
diagnosedElements.add(el);
|
|
200
|
+
const details = {
|
|
201
|
+
asset: route.asset,
|
|
202
|
+
reason: route.reason,
|
|
203
|
+
lostProcessing: lost,
|
|
204
|
+
note: "cross-origin media without a `crossorigin` opt-in is silent through createMediaElementSource (Web Audio spec); using native playback instead",
|
|
205
|
+
};
|
|
206
|
+
postRuntimeMessage({
|
|
207
|
+
source: "hf-preview",
|
|
208
|
+
type: "diagnostic",
|
|
209
|
+
code: DIAGNOSTIC_BYPASS_CODE,
|
|
210
|
+
details,
|
|
211
|
+
});
|
|
212
|
+
// The stable code lives in the console text so the CLI's scraper
|
|
213
|
+
// (packages/cli/src/utils/checkBrowser.ts) can match a token, not prose —
|
|
214
|
+
// same contract mediaProxy.ts's diagnostics use.
|
|
215
|
+
const lostNote = lost.length > 0
|
|
216
|
+
? ` Native playback cannot reproduce: ${lost.join(", ")} — proxy or download the asset to a same-origin URL to keep it.`
|
|
217
|
+
: "";
|
|
218
|
+
console.info(`[hyperframes] ${DIAGNOSTIC_BYPASS_CODE}: "${route.asset}" (${route.reason}): ` +
|
|
219
|
+
`Web Audio capture withheld; the track plays through native HTMLMediaElement output.${lostNote}`);
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=webAudioRoute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webAudioRoute.js","sourceRoot":"","sources":["../../src/runtime/webAudioRoute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperframes/core",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -171,6 +171,10 @@
|
|
|
171
171
|
"import": "./dist/runtime/stackingContext.js",
|
|
172
172
|
"types": "./dist/runtime/stackingContext.d.ts"
|
|
173
173
|
},
|
|
174
|
+
"./runtime/web-audio-route": {
|
|
175
|
+
"import": "./dist/runtime/webAudioRoute.js",
|
|
176
|
+
"types": "./dist/runtime/webAudioRoute.d.ts"
|
|
177
|
+
},
|
|
174
178
|
"./compiler/html-document": {
|
|
175
179
|
"import": "./dist/compiler/htmlDocument.js",
|
|
176
180
|
"types": "./dist/compiler/htmlDocument.d.ts"
|
|
@@ -274,9 +278,9 @@
|
|
|
274
278
|
"bpm-detective": "^2.0.5",
|
|
275
279
|
"linkedom": "^0.18.12",
|
|
276
280
|
"postcss": "^8.5.8",
|
|
277
|
-
"@hyperframes/parsers": "0.8.
|
|
278
|
-
"@hyperframes/
|
|
279
|
-
"@hyperframes/
|
|
281
|
+
"@hyperframes/parsers": "0.8.17",
|
|
282
|
+
"@hyperframes/lint": "0.8.17",
|
|
283
|
+
"@hyperframes/studio-server": "0.8.17"
|
|
280
284
|
},
|
|
281
285
|
"devDependencies": {
|
|
282
286
|
"@types/jsdom": "^28.0.0",
|