@hyperframes/producer 0.9.1 → 0.9.3

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
@@ -82,6 +82,7 @@ import { join, extname, resolve as resolve2, sep } from "node:path";
82
82
  import { injectScriptsAtHeadStart, injectScriptsIntoHtml } from "@hyperframes/core/compiler";
83
83
  import { fpsToNumber } from "@hyperframes/core";
84
84
  import { stripSdrPngColourTags } from "@hyperframes/core/compiler/png-colour-tags";
85
+ import { openRangeEnd } from "@hyperframes/studio-server/media-range";
85
86
 
86
87
  // src/services/hyperframeRuntimeLoader.ts
87
88
  import { createHash } from "node:crypto";
@@ -239,7 +240,7 @@ var MIME_TYPES = {
239
240
  ".ttf": "font/ttf",
240
241
  ".otf": "font/otf"
241
242
  };
242
- function parseRangeHeader(header, size) {
243
+ function parseRangeHeader(header, size, contentType = "application/octet-stream") {
243
244
  if (!header) return { kind: "absent" };
244
245
  const match = /^\s*bytes\s*=\s*(.*?)\s*$/i.exec(header);
245
246
  if (!match) return { kind: "absent" };
@@ -264,7 +265,7 @@ function parseRangeHeader(header, size) {
264
265
  if (!Number.isFinite(start)) return { kind: "absent" };
265
266
  if (rawEnd === "") {
266
267
  if (start >= size) return { kind: "unsatisfiable" };
267
- return { kind: "satisfiable", start, end: size - 1 };
268
+ return { kind: "satisfiable", start, end: openRangeEnd(start, size - 1, contentType) };
268
269
  }
269
270
  if (!/^\d+$/.test(rawEnd)) return { kind: "absent" };
270
271
  const requestedEnd = Number(rawEnd);
@@ -736,7 +737,7 @@ function createFileServer(options) {
736
737
  }
737
738
  const totalSize = stat.size;
738
739
  const rangeHeader = c.req.header("range");
739
- const rangeRequest = parseRangeHeader(rangeHeader, totalSize);
740
+ const rangeRequest = parseRangeHeader(rangeHeader, totalSize, contentType);
740
741
  if (rangeRequest.kind === "unsatisfiable") {
741
742
  return new Response(null, {
742
743
  status: 416,
@@ -103,6 +103,7 @@ import { join, extname, resolve as resolve2, sep } from "node:path";
103
103
  import { injectScriptsAtHeadStart, injectScriptsIntoHtml } from "@hyperframes/core/compiler";
104
104
  import { fpsToNumber } from "@hyperframes/core";
105
105
  import { stripSdrPngColourTags } from "@hyperframes/core/compiler/png-colour-tags";
106
+ import { openRangeEnd } from "@hyperframes/studio-server/media-range";
106
107
 
107
108
  // src/services/hyperframeRuntimeLoader.ts
108
109
  import { createHash } from "node:crypto";
@@ -260,7 +261,7 @@ var MIME_TYPES = {
260
261
  ".ttf": "font/ttf",
261
262
  ".otf": "font/otf"
262
263
  };
263
- function parseRangeHeader(header, size) {
264
+ function parseRangeHeader(header, size, contentType = "application/octet-stream") {
264
265
  if (!header) return { kind: "absent" };
265
266
  const match = /^\s*bytes\s*=\s*(.*?)\s*$/i.exec(header);
266
267
  if (!match) return { kind: "absent" };
@@ -285,7 +286,7 @@ function parseRangeHeader(header, size) {
285
286
  if (!Number.isFinite(start)) return { kind: "absent" };
286
287
  if (rawEnd === "") {
287
288
  if (start >= size) return { kind: "unsatisfiable" };
288
- return { kind: "satisfiable", start, end: size - 1 };
289
+ return { kind: "satisfiable", start, end: openRangeEnd(start, size - 1, contentType) };
289
290
  }
290
291
  if (!/^\d+$/.test(rawEnd)) return { kind: "absent" };
291
292
  const requestedEnd = Number(rawEnd);
@@ -757,7 +758,7 @@ function createFileServer(options) {
757
758
  }
758
759
  const totalSize = stat.size;
759
760
  const rangeHeader = c.req.header("range");
760
- const rangeRequest = parseRangeHeader(rangeHeader, totalSize);
761
+ const rangeRequest = parseRangeHeader(rangeHeader, totalSize, contentType);
761
762
  if (rangeRequest.kind === "unsatisfiable") {
762
763
  return new Response(null, {
763
764
  status: 416,
@@ -64,7 +64,7 @@ export type RangeRequest = {
64
64
  *
65
65
  * Supports the three forms of `bytes=...`:
66
66
  * - `bytes=START-END`: closed range, both bounds inclusive.
67
- * - `bytes=START-`: open-ended, serve from START to EOF.
67
+ * - `bytes=start-`: open-ended, from start to EOF (audio/video: see `openRangeEnd`).
68
68
  * - `bytes=-SUFFIX`: last SUFFIX bytes.
69
69
  *
70
70
  * Multi-range requests (`bytes=0-99,200-299`) are treated as `absent`. The
@@ -74,7 +74,7 @@ export type RangeRequest = {
74
74
  *
75
75
  * Exported for unit tests; not part of the public package surface.
76
76
  */
77
- export declare function parseRangeHeader(header: string | null | undefined, size: number): RangeRequest;
77
+ export declare function parseRangeHeader(header: string | null | undefined, size: number, contentType?: string): RangeRequest;
78
78
  /**
79
79
  * Options for {@link buildVirtualTimeShim}.
80
80
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperframes/producer",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
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/core": "0.9.1",
39
- "@hyperframes/engine": "0.9.1",
40
- "@hyperframes/lint": "0.9.1",
41
- "@hyperframes/parsers": "0.9.1",
42
- "@hyperframes/studio-server": "0.9.1"
38
+ "@hyperframes/engine": "0.9.3",
39
+ "@hyperframes/core": "0.9.3",
40
+ "@hyperframes/lint": "0.9.3",
41
+ "@hyperframes/parsers": "0.9.3",
42
+ "@hyperframes/studio-server": "0.9.3"
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.1"
51
+ "@hyperframes/aws-lambda": "0.9.3"
52
52
  },
53
53
  "engines": {
54
54
  "node": ">=22"