@hyperframes/producer 0.9.21 → 0.9.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -331,7 +331,7 @@ function buildVirtualTimeShim(options) {
331
331
  } catch (e) {}
332
332
  }
333
333
  ` : "";
334
- const seekToTimeReseedCall = seedRandomFromFrame ? "reseedRngFromTime(safeTimeMs);\n " : "";
334
+ const seekToTimeReseedCall = seedRandomFromFrame ? "reseedRngFromTime(safeTimeMs);\n " : "";
335
335
  return String.raw`(function() {
336
336
  if (window.__HF_VIRTUAL_TIME__) return;
337
337
 
@@ -472,6 +472,20 @@ ${seededRandomBlock}
472
472
  if (!cancelTimer(id)) originalClearInterval(id);
473
473
  };
474
474
 
475
+ function seekToTime(nextTimeMs) {
476
+ var safeTimeMs = Math.max(0, Number(nextTimeMs) || 0);
477
+ if (!rendering && window.__renderReady === true) {
478
+ rendering = true;
479
+ // A worker whose first frame is past the start plays the film's first frame first, so timers the
480
+ // page starts there keep the schedule a one-worker render gives them.
481
+ if (safeTimeMs > 0) seekToTime(0);
482
+ }
483
+ ${seekToTimeReseedCall}fireDueTimers(safeTimeMs);
484
+ virtualNowMs = safeTimeMs;
485
+ flushAnimationFrame();
486
+ return virtualNowMs;
487
+ }
488
+
475
489
  window.__HF_VIRTUAL_TIME__ = {
476
490
  originalSetTimeout: originalSetTimeout,
477
491
  originalClearTimeout: originalClearTimeout,
@@ -479,14 +493,7 @@ ${seededRandomBlock}
479
493
  originalClearInterval: originalClearInterval,
480
494
  originalRequestAnimationFrame: originalRequestAnimationFrame,
481
495
  originalCancelAnimationFrame: originalCancelAnimationFrame,
482
- seekToTime: function(nextTimeMs) {
483
- var safeTimeMs = Math.max(0, Number(nextTimeMs) || 0);
484
- if (window.__renderReady === true) rendering = true;
485
- ${seekToTimeReseedCall}fireDueTimers(safeTimeMs);
486
- virtualNowMs = safeTimeMs;
487
- flushAnimationFrame();
488
- return virtualNowMs;
489
- },
496
+ seekToTime: seekToTime,
490
497
  getTime: function() {
491
498
  return virtualNowMs;
492
499
  },
@@ -16892,13 +16899,14 @@ var RenderChunkValidationError = class extends Error {
16892
16899
  this.code = code;
16893
16900
  }
16894
16901
  };
16902
+ var chunkFrameInjectorDependencies = { createVideoFrameInjector: createVideoFrameInjector3 };
16895
16903
  function createChunkVideoFrameInjectorFactory(frameLookup, options) {
16896
16904
  if (!(frameLookup instanceof Promise))
16897
- return () => createVideoFrameInjector3(frameLookup, options);
16905
+ return () => chunkFrameInjectorDependencies.createVideoFrameInjector(frameLookup, options);
16898
16906
  return () => {
16899
16907
  let hook;
16900
16908
  return async (page, time, heldVideoTime) => {
16901
- hook ??= createVideoFrameInjector3(await frameLookup, options);
16909
+ hook ??= chunkFrameInjectorDependencies.createVideoFrameInjector(await frameLookup, options);
16902
16910
  await hook?.(page, time, heldVideoTime);
16903
16911
  };
16904
16912
  };
@@ -348,7 +348,7 @@ function buildVirtualTimeShim(options) {
348
348
  } catch (e) {}
349
349
  }
350
350
  ` : "";
351
- const seekToTimeReseedCall = seedRandomFromFrame ? "reseedRngFromTime(safeTimeMs);\n " : "";
351
+ const seekToTimeReseedCall = seedRandomFromFrame ? "reseedRngFromTime(safeTimeMs);\n " : "";
352
352
  return String.raw`(function() {
353
353
  if (window.__HF_VIRTUAL_TIME__) return;
354
354
 
@@ -489,6 +489,20 @@ ${seededRandomBlock}
489
489
  if (!cancelTimer(id)) originalClearInterval(id);
490
490
  };
491
491
 
492
+ function seekToTime(nextTimeMs) {
493
+ var safeTimeMs = Math.max(0, Number(nextTimeMs) || 0);
494
+ if (!rendering && window.__renderReady === true) {
495
+ rendering = true;
496
+ // A worker whose first frame is past the start plays the film's first frame first, so timers the
497
+ // page starts there keep the schedule a one-worker render gives them.
498
+ if (safeTimeMs > 0) seekToTime(0);
499
+ }
500
+ ${seekToTimeReseedCall}fireDueTimers(safeTimeMs);
501
+ virtualNowMs = safeTimeMs;
502
+ flushAnimationFrame();
503
+ return virtualNowMs;
504
+ }
505
+
492
506
  window.__HF_VIRTUAL_TIME__ = {
493
507
  originalSetTimeout: originalSetTimeout,
494
508
  originalClearTimeout: originalClearTimeout,
@@ -496,14 +510,7 @@ ${seededRandomBlock}
496
510
  originalClearInterval: originalClearInterval,
497
511
  originalRequestAnimationFrame: originalRequestAnimationFrame,
498
512
  originalCancelAnimationFrame: originalCancelAnimationFrame,
499
- seekToTime: function(nextTimeMs) {
500
- var safeTimeMs = Math.max(0, Number(nextTimeMs) || 0);
501
- if (window.__renderReady === true) rendering = true;
502
- ${seekToTimeReseedCall}fireDueTimers(safeTimeMs);
503
- virtualNowMs = safeTimeMs;
504
- flushAnimationFrame();
505
- return virtualNowMs;
506
- },
513
+ seekToTime: seekToTime,
507
514
  getTime: function() {
508
515
  return virtualNowMs;
509
516
  },
@@ -16,6 +16,9 @@ export declare class RenderChunkValidationError extends Error {
16
16
  readonly code: RenderChunkValidationCode;
17
17
  constructor(code: RenderChunkValidationCode, message: string);
18
18
  }
19
+ export declare const chunkFrameInjectorDependencies: {
20
+ createVideoFrameInjector: typeof createVideoFrameInjector;
21
+ };
19
22
  /** One injector per browser session: a hook reused on a fresh page can skip its first injection. */
20
23
  export declare function createChunkVideoFrameInjectorFactory(frameLookup: FrameLookupTable | Promise<FrameLookupTable> | null, options?: Parameters<typeof createVideoFrameInjector>[1]): () => BeforeCaptureHook | null;
21
24
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperframes/producer",
3
- "version": "0.9.21",
3
+ "version": "0.9.22",
4
4
  "description": "HTML-to-video rendering engine using Chrome's BeginFrame API",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,11 +35,11 @@
35
35
  "postcss": "^8.4.0",
36
36
  "puppeteer": "~25.11.0",
37
37
  "puppeteer-core": "^25.11.0",
38
- "@hyperframes/engine": "0.9.21",
39
- "@hyperframes/parsers": "0.9.21",
40
- "@hyperframes/studio-server": "0.9.21",
41
- "@hyperframes/lint": "0.9.21",
42
- "@hyperframes/core": "0.9.21"
38
+ "@hyperframes/core": "0.9.22",
39
+ "@hyperframes/parsers": "0.9.22",
40
+ "@hyperframes/lint": "0.9.22",
41
+ "@hyperframes/engine": "0.9.22",
42
+ "@hyperframes/studio-server": "0.9.22"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.0.10",
@@ -48,7 +48,7 @@
48
48
  "tsx": "^4.21.0",
49
49
  "typescript": "^5.7.2",
50
50
  "vitest": "^4.1.11",
51
- "@hyperframes/aws-lambda": "0.9.21"
51
+ "@hyperframes/aws-lambda": "0.9.22"
52
52
  },
53
53
  "engines": {
54
54
  "node": ">=22"