@nodetool-ai/game-renderer 0.8.8 → 0.8.9-beta.1

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.
@@ -1 +1 @@
1
- 2026-10-25T16:17:41.903Z
1
+ 2026-10-31T09:11:21.942Z
@@ -1 +1 @@
1
- {"version":3,"file":"export-media.d.ts","sourceRoot":"","sources":["../src/export-media.ts"],"names":[],"mappings":"AAMA,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjI;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAMjG;AAED,gFAAgF;AAChF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/H"}
1
+ {"version":3,"file":"export-media.d.ts","sourceRoot":"","sources":["../src/export-media.ts"],"names":[],"mappings":"AAKA,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjI;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAMjG;AAED,gFAAgF;AAChF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/H"}
@@ -1,7 +1,6 @@
1
- import { spawn } from "node:child_process";
2
1
  import { randomUUID } from "node:crypto";
3
2
  import { GlobalFonts } from "@napi-rs/canvas";
4
- import { missingRuntimePackageError } from "@nodetool-ai/protocol/missing-runtime-package";
3
+ import { verifyDecodes } from "@nodetool-ai/runtime/media";
5
4
  import { inspectGameImageContainer } from "./renderer3d/assets/image-preparation.js";
6
5
  /** Checks the container, then fully decodes its image stream without retaining pixels. */
7
6
  export async function validateExportImage(bytes, format, signal) {
@@ -30,44 +29,21 @@ export function validateExportFont(bytes, assetId, signal) {
30
29
  export async function validateExportAudio(bytes, format, signal) {
31
30
  await validateExportMedia(bytes, { kind: "audio", format }, signal);
32
31
  }
32
+ /** Decodes the whole stream with libav's strict error detection, in process. */
33
33
  async function validateExportMedia(bytes, media, signal) {
34
34
  signal?.throwIfAborted();
35
35
  const label = media.kind === "audio" ? "Audio" : "Image";
36
- const input = media.kind === "audio" ? ["-f", media.format]
37
- : ["-f", "image2pipe", "-c:v", media.format === "jpeg" ? "mjpeg" : media.format];
38
- const output = media.kind === "audio" ? ["-map", "0:a:0", "-vn", "-sn", "-dn", "-f", "f32le"]
39
- : ["-map", "0:v:0", "-an", "-sn", "-dn", "-f", "rawvideo", "-pix_fmt", "rgba"];
40
- await new Promise((resolve, reject) => {
41
- const spawnOptions = { stdio: ["pipe", "pipe", "pipe"] };
42
- if (signal) {
43
- spawnOptions.signal = signal;
44
- }
45
- const child = spawn("ffmpeg", ["-hide_banner", "-nostdin", "-loglevel", "error", "-xerror", "-err_detect", "explode",
46
- "-threads", "1", "-protocol_whitelist", "pipe", ...input, "-i", "pipe:0", ...output, "-threads", "1", "pipe:1"], spawnOptions);
47
- let failure;
48
- let diagnostic = "";
49
- let decodedBytes = 0;
50
- child.stdout.on("data", (chunk) => { decodedBytes += chunk.length; });
51
- child.stderr.on("data", (chunk) => { diagnostic = (diagnostic + chunk.toString("utf8")).slice(-4096); });
52
- child.stdin.on("error", (cause) => { failure ??= new Error(`${label} input could not be decoded`, { cause }); });
53
- child.on("error", (error) => {
54
- failure = "code" in error && error.code === "ENOENT" ? missingRuntimePackageError("ffmpeg", "ffmpeg", error) : error;
55
- });
56
- child.on("close", (code) => {
57
- if (failure) {
58
- reject(failure);
59
- }
60
- else if (signal?.aborted) {
61
- reject(signal.reason);
62
- }
63
- else if (code !== 0 || diagnostic.trim() || decodedBytes === 0) {
64
- reject(new Error(`${label} could not be decoded (ffmpeg exit ${code}, ${decodedBytes} decoded bytes)${diagnostic ? `: ${diagnostic.trim()}` : ""}`));
65
- }
66
- else {
67
- resolve();
68
- }
36
+ try {
37
+ await verifyDecodes(bytes, {
38
+ kind: media.kind === "audio" ? "audio" : "video",
39
+ format: media.kind === "audio" ? media.format : `${media.format}_pipe`,
40
+ signal
69
41
  });
70
- child.stdin.end(bytes);
71
- });
42
+ }
43
+ catch (error) {
44
+ if (signal?.aborted)
45
+ throw signal.reason;
46
+ throw new Error(`${label} could not be decoded: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
47
+ }
72
48
  }
73
49
  //# sourceMappingURL=export-media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-media.js","sourceRoot":"","sources":["../src/export-media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export-media.js","sourceRoot":"","sources":["../src/export-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB,EAAE,MAA+B,EAAE,MAAoB;IAChH,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAAC,CAAC;IACzG,MAAM,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,KAAiB,EAAE,OAAe,EAAE,MAAoB;IACzF,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,oBAAoB,UAAU,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;IACnE,IAAI,CAAC;QAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,CAAC;YACzB,CAAC;QAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB,EAAE,MAA6B,EAAE,MAAoB;IAC9G,MAAM,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAMD,gFAAgF;AAChF,KAAK,UAAU,mBAAmB,CAAC,KAAiB,EAAE,KAAkB,EAAE,MAAoB;IAC5F,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE;YACzB,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;YAChD,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,OAAO;YACtE,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChI,CAAC;AACH,CAAC"}