refactor: decouple from site-specific CDN references #5
No files matched your search
@@ -14,8 +14,8 @@ const viewerSource = fs.readFileSync(
|
||||
|
|
||||
);
|
||||
const interceptorSource = fs.readFileSync(
|
||||
path.join(__dirname, '../src/inject/interceptors.js'),
|
||||
'utf-8'
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'utf-8'
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
/* ========================================================================== */
|
||||
/* Helpers */
|
||||
@@ -1027,21 +1027,48 @@ describe('HLS QA: iframe and multi-frame scenarios', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
});
|
||||
|
||||
it('should scrape video elements from all frames', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const indexSource = fs.readFileSync(
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
path.join(__dirname, '../src/viewer/index.js'),
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'utf-8'
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
it('should scrape video elements from all frames', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const indexSource = fs.readFileSync(
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
path.join(__dirname, '../src/viewer/index.js'),
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'utf-8'
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
// Verify scrapeTab runs in all frames
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const scrapeMatch = indexSource.match(/scrapeTab[\s\S]*?executeScript[\s\S]*?\}/);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('scrapeTab function not found');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch[0].includes('allFrames: true')) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('scrapeTab must use allFrames: true');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// Verify scrapeTab runs in all frames
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const scrapeMatch = indexSource.match(/scrapeTab[\s\S]*?executeScript[\s\S]*?\}/);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('scrapeTab function not found');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch[0].includes('allFrames: true')) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('scrapeTab must use allFrames: true');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
it('deep probe + scrape must run in the MAIN world (see page globals)', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// The deep probe and scraper read page globals (window.Hls, player
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// instances, video._goon_hls_manifest) and window.__goon_plugin_data,
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// which the main-world interceptors write. The isolated world cannot see
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// these, so a missing `world: 'MAIN'` makes every main-world strategy find
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// 0 manifests — the "detects nothing on pages with just <video> elements"
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// regression. Guard the exact executeScript calls that run each function.
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const indexSource = fs.readFileSync(
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
path.join(__dirname, '../src/viewer/index.js'),
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'utf-8'
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// Capture each call's target + func block (world: 'MAIN' lives on the
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// target: line, which precedes func:).
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const probeMatch = indexSource.match(/executeScript\(\{[\s\S]*?func: m3u8DeepProbeFn/);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!probeMatch) throw new Error('deep probe executeScript call not found');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!probeMatch[0].includes("world: 'MAIN'")) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('deep probe (m3u8DeepProbeFn) must use world: "MAIN" to see page globals');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const scrapeMatch = indexSource.match(/executeScript\(\{[\s\S]*?func: scrapeFn/);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch) throw new Error('scrape executeScript call not found');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!scrapeMatch[0].includes("world: 'MAIN'")) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error('scrape (scrapeFn) must use world: "MAIN" to see page globals');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
it('should inject interceptors into all frames (content_scripts.all_frames)', () => {
|
||||
const manifestSource = fs.readFileSync(
|
||||
@@ -1211,6 +1238,73 @@ describe('HLS QA: Edge cases', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
if (intercepted.length !== 1) {
|
||||
throw new Error(`Expected 1 intercept for /manifest URL, got ${intercepted.length}`);
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
/* ========================================================================== */
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
/* Test: deep probe must not report route-template / nav "manifests" */
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
/* ========================================================================== */
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
describe('HLS QA: route-template / nav URL rejection', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const probeMatch = indexSource.match(/function m3u8DeepProbeFn\(\)[\s\S]*?^}/m);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!probeMatch) throw new Error('Could not find m3u8DeepProbeFn in index.js');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const probeFnSource = probeMatch[0];
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
function runProbeWin(url, globals) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const dom = new JSDOM(
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'<!DOCTYPE html><html><body><video></video></body></html>',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
{ url, runScripts: 'dangerously' });
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const win = dom.window;
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
for (const [k, v] of Object.entries(globals)) win[k] = v;
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const result = win.eval(`(${probeFnSource})();`);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!Array.isArray(result)) throw new Error('m3u8DeepProbeFn did not return an array');
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
return result;
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// Reproduces thisvid.com: pageContext.langUrls holds server-side route
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// TEMPLATES / nav links (e.g. /playlists/, /playlist/%1%/video/%2%/) that the
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// old /playlist|/manifest substring check misclassified as "manifests".
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const TEMPLATE_URLS = [
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/liked/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/popular/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/commented/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/updated/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/largest/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlist/%1%/video/%2%/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/playlists/?category=%DIR%',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/members/%ID%/playlists/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
'https://thisvid.com/my/playlists/%ID%/',
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
];
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
it('route templates / nav links are NOT reported as manifests', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const result = runProbeWin('https://thisvid.com/videos/redneck/', {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
pageContext: { langUrls: TEMPLATE_URLS },
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
kvsplayer: { config: { langUrls: TEMPLATE_URLS } },
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
__goon_plugin_data: { manifests: [], sources: [] },
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const urls = result.map(m => m.url);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const leaked = TEMPLATE_URLS.filter(u => urls.includes(u));
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (leaked.length > 0) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error(`template/nav URLs leaked as manifests: ${leaked.join(', ')}`);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
it('a real .m3u8 with a %2B token is still found (no over-rejection)', () => {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// %2B is a valid percent-encoded token, not a placeholder — it must survive.
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const real = 'https://cdn.example.com/live/master.m3u8?h=a%2Bb%2Fc&e=1234';
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const result = runProbeWin('https://thisvid.com/videos/redneck/', {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
hls: { url: real },
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
pageContext: { langUrls: TEMPLATE_URLS },
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (!result.some(m => m.url === real)) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error(`real manifest with %2B token was dropped: ${real} — got: ${result.map(m => m.url).join(', ')}`);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
// And the templates still must not leak in the same run.
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
const leaked = TEMPLATE_URLS.filter(u => result.some(m => m.url === u));
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
if (leaked.length > 0) {
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
throw new Error(`templates leaked alongside real manifest: ${leaked.join(', ')}`);
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
}
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
});
|
||||
|
robot
commented
[BLOCKING] F1 [BLOCKING] F1
This new suite hangs the entire `npm test` runner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) does `for (const key of Object.keys(window)) { walk(window[key], ...) }` and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects. `walk` (index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because __tests__/run.mjs loads hls_qa.test.mjs, `npm test` never completes -> the repo's canonical test command is broken.
**Suggested fix:** Give the walker a visited set (WeakSet) so each object is walked at most once: `const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }`. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.
|
||||
@@ -122,7 +122,11 @@ function m3u8DeepProbeFn() {
|
||||
function probeLog(...args) {
|
||||
try { console.log('[goon-probe]', ...args); } catch(e) {}
|
||||
}
|
||||
probeLog('Deep probe started on:', window.location.href, 'World:', typeof chrome !== 'undefined' ? 'ISOLATED' : 'MAIN');
|
||||
// NOTE: the probe is injected with chrome.scripting's `world: 'MAIN'`, so it
|
||||
// runs in the page's main world and can see page globals. `typeof chrome` is
|
||||
// NOT a reliable world discriminator (extensions expose `chrome` in the
|
||||
// isolated world too), so don't infer it that way.
|
||||
probeLog('Deep probe started on:', window.location.href, '(main world)');
|
||||
|
||||
// Helpers available in the MAIN world context
|
||||
function resolveUrl(url) {
|
||||
@@ -134,14 +138,23 @@ function m3u8DeepProbeFn() {
|
||||
} catch { return null; }
|
||||
}
|
||||
|
||||
function isManifestUrl(url) {
|
||||
function isManifestUrl(url) {
|
||||
if (!url) return false;
|
||||
const u = url.toLowerCase();
|
||||
return u.includes('.m3u8') || u.includes('.hlsvod') ||
|
||||
(u.includes('/hls/') && u.includes('http')) ||
|
||||
(u.includes('/playlist') && u.includes('http')) ||
|
||||
(u.includes('/manifest') && u.includes('http'));
|
||||
}
|
||||
// Dynamic route TEMPLATES (e.g. /playlist/%1%/ or /videos/{id}/) are nav
|
||||
// links, not fetchable manifests. A placeholder is a `%` that is NOT the
|
||||
// start of a valid %-encoded hex pair (so real tokens like %2B, %2F are
|
||||
// preserved) or a {name} brace token — so genuine %-encoded auth tokens are
|
||||
// never mistaken for template placeholders.
|
||||
if (/%(?!([0-9A-Fa-f]{2}))/i.test(u) || /\{[a-z0-9_]+\}/i.test(u)) return false;
|
||||
// .m3u8 / .hlsvod / /hls/ are concrete HLS signals.
|
||||
if (u.includes('.m3u8') || u.includes('.hlsvod') || u.includes('/hls/')) return true;
|
||||
// Plural collection paths are nav menus, not manifests.
|
||||
if (u.includes('/playlists') || u.includes('/manifests')) return false;
|
||||
// A singular manifest-ish path segment with no concrete file may still be a
|
||||
// real (rare, extensionless) endpoint, so allow it when it carries http.
|
||||
return (u.includes('/manifest') || u.includes('/playlist')) && u.includes('http');
|
||||
}
|
||||
|
||||
function walk(obj, path, depth) {
|
||||
if (depth > 5) return;
|
||||
@@ -666,8 +679,9 @@ async function probeHlsManifests(tabId) {
|
||||
log('probeHlsManifests: executing deep probe on tab', tabId);
|
||||
const raw = await chrome.scripting.executeScript({
|
||||
target: { tabId, allFrames: true },
|
||||
world: 'MAIN',
|
||||
func: m3u8DeepProbeFn,
|
||||
});
|
||||
});
|
||||
// When allFrames is true, destroyed / sandboxed frames may return null entries.
|
||||
// Guard: ensure raw is an array, then filter to objects with a defined .result.
|
||||
const manifests = Array.isArray(raw)
|
||||
@@ -778,13 +792,14 @@ async function queryVideoRequests(tabId) {
|
||||
* @param {Array} manifests - HLS manifests found by probing
|
||||
* @returns {Promise<Object|null>} scrape result or null on error
|
||||
*/
|
||||
async function scrapeTab(tabId, manifests) {
|
||||
try {
|
||||
async function scrapeTab(tabId, manifests) {
|
||||
try {
|
||||
const raw = await chrome.scripting.executeScript({
|
||||
target: { tabId, allFrames: true },
|
||||
world: 'MAIN',
|
||||
func: scrapeFn,
|
||||
args: [manifests],
|
||||
});
|
||||
args: [manifests],
|
||||
});
|
||||
// When allFrames is true, destroyed / sandboxed frames may return null entries.
|
||||
// Guard: ensure raw is an array, then filter to objects with a defined .result.
|
||||
const frameResults = Array.isArray(raw)
|
||||
@@ -871,23 +886,33 @@ function filterManifests(manifests) {
|
||||
* Rejects malformed paths; a manifest-like URL must live in a directory (have a
|
||||
* path separator), which filters out obviously-broken single-segment paths.
|
||||
*/
|
||||
function isValidManifestUrl(url) {
|
||||
if (!url || typeof url !== 'string') return false;
|
||||
let urlObj;
|
||||
try {
|
||||
urlObj = new URL(url);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
const path = urlObj.pathname.toLowerCase();
|
||||
const isManifestLike = path.includes('.m3u8') || path.includes('.hlsvod') ||
|
||||
(path.includes('/playlist') && !path.endsWith('.ts')) ||
|
||||
(path.includes('/master') && path.includes('.m3u'));
|
||||
// Not a manifest path — allow it (it may be a direct media source, not HLS).
|
||||
if (!isManifestLike) return true;
|
||||
// A manifest path must sit in a directory, not be a bare top-level file.
|
||||
return path.includes('/');
|
||||
}
|
||||
function isValidManifestUrl(url) {
|
||||
if (!url || typeof url !== 'string') return false;
|
||||
// Dynamic route templates / nav links are not fetchable manifests. A
|
||||
// placeholder is a `%` not followed by two hex digits (real %2B etc. are
|
||||
// kept) or a {name} brace token.
|
||||
if (/%(?!([0-9A-Fa-f]{2}))/i.test(url) || /\{[a-z0-9_]+\}/i.test(url)) return false;
|
||||
let urlObj;
|
||||
try {
|
||||
urlObj = new URL(url);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
const path = urlObj.pathname.toLowerCase();
|
||||
// Plural collection paths and trailing-slash directory listings are nav menus,
|
||||
// not manifest files (e.g. /playlists/, /playlists/liked/, /playlist/%id%/).
|
||||
if (path.includes('/playlists') || path.includes('/manifests') || path.endsWith('/')) {
|
||||
return false;
|
||||
}
|
||||
const isManifestLike = path.includes('.m3u8') || path.includes('.hlsvod') ||
|
||||
(path.includes('/master') && path.includes('.m3u')) ||
|
||||
(path.includes('/playlist') && !path.endsWith('.ts')) ||
|
||||
path.includes('/manifest');
|
||||
// Not a manifest path — allow it (it may be a direct media source, not HLS).
|
||||
if (!isManifestLike) return true;
|
||||
// A manifest path must sit in a directory, not be a bare top-level file.
|
||||
return path.includes('/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a normalized video entry from a scraped video object.
|
||||
@@ -1150,6 +1175,7 @@ findBtn.addEventListener('click', async () => {
|
||||
try {
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId: activeTab.id },
|
||||
world: 'MAIN',
|
||||
func: () => {
|
||||
const diag = [];
|
||||
// Check interceptor data
|
||||
|
||||
[BLOCKING] F1
This new suite hangs the entire
npm testrunner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) doesfor (const key of Object.keys(window)) { walk(window[key], ...) }and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects.walk(index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because tests/run.mjs loads hls_qa.test.mjs,npm testnever completes -> the repo's canonical test command is broken.Suggested fix: Give the walker a visited set (WeakSet) so each object is walked at most once:
const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.[BLOCKING] F1
This new suite hangs the entire
npm testrunner (>30s at 100% CPU, exit 124; reproduced in isolation). runProbeWin evaluates m3u8DeepProbeFn in a live JSDOM window; Strategy H (src/viewer/index.js:484) doesfor (const key of Object.keys(window)) { walk(window[key], ...) }and window/_parent/_top/frames/_globalObject/_globalProxy are circular Proxy objects.walk(index.js:161) has a depth cap of 5 but NO visited-set / cycle detection, so it recurses unboundedly over thousands of proxied window keys and never returns. Because tests/run.mjs loads hls_qa.test.mjs,npm testnever completes -> the repo's canonical test command is broken.Suggested fix: Give the walker a visited set (WeakSet) so each object is walked at most once:
const seen = new WeakSet(); function walk(obj,...){ if (obj && typeof obj==='object'){ if(seen.has(obj)) return; seen.add(obj);} ... }. Additionally cap Strategy H's window-key scan (window has hundreds of keys; only the handful of genuine player globals matter) — e.g. skip built-in global keys or cap the scan. Alternatively, scope the new test so it stubs only the window globals under test (pageContext, kvsplayer, __goon_plugin_data) instead of a full JSDOM window, avoiding the circular globals entirely.