Runtime QuickJS acotado

HPDFQuickJS y HPDFQuickJSStatic exponen la misma API de evaluación JavaScript controlada por la aplicación en Win32 y Win64

Elección del modo de despliegue

El binding por DLL acepta una ruta explícita, el valor de entorno HOTPDF_QUICKJS_DLL o el directorio de plataforma encontrado bajo un ancestro del ejecutable

Las builds por defecto colocan el bridge en Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll o Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

En Linux x86-64, HPDFQuickJS carga el bridge nativo libhpdfquickjs.so construido por tools/Build-HotPDFQuickJSLinux.sh; la ruta explícita y la variable de entorno siguen las mismas reglas de propiedad y de ABI

El descubrimiento por defecto en Linux comprueba el directorio del ejecutable y Lib/thirdparty/QuickJS/bin/Linux64; el despliegue nativo de OMF estáticos sigue siendo específico de Windows

Evaluación de un script

uses
  HPDFQuickJS;

var
  Engine: THPDFQuickJS;
  EvalResult: THPDFQuickJSResult;
begin
  Engine := THPDFQuickJS.Create;
  try
    if not Engine.Available then
      raise Exception.Create(Engine.LoadError);
    EvalResult := Engine.Eval('JSON.stringify([1, 2, 3].map(x => x * 2))');
    if not EvalResult.Success then
      raise Exception.Create(EvalResult.Error);
  finally
    Engine.Free;
  end;
end;

Eval convierte el valor JavaScript final a texto UTF-8 y preserva Unicode al devolver un string de Delphi

EvalInt y EvalFloat añaden conversión numérica estricta sin exponer valores del motor a través del límite de ABI

Límites de ejecución

Limits := THPDFQuickJSLimits.CreateDefault;
Limits.MemoryBytes := 32 * 1024 * 1024;
Limits.StackBytes := 64 * 1024;
Limits.MaxScriptBytes := 256 * 1024;
Limits.TimeoutMs := 250;
Limits.MaxInterruptChecks := 250000;
Engine := THPDFQuickJS.Create(Limits);

Los valores por defecto permiten 64 MiB de memoria del motor, un stack de 64 KiB, un script UTF-8 de 1 MiB, un segundo de tiempo real y un millón de chequeos de interrupción

El runtime estático en Win32 acota un presupuesto de stack solicitado de cero o mayor a 48 KiB para mantenerse dentro del límite de recursión seguro del compilador; los modos DLL y Win64 respetan directamente el valor solicitado

Los límites de memoria y stack aplican a todo el runtime, mientras que los límites de script, tiempo e interrupciones se aplican a cada evaluación

Estado y recuperación

Una evaluación rechazada o interrumpida limpia su excepción pendiente y sus buffers, así que la misma instancia del motor puede ejecutar después un script válido

Una instancia del motor no es reentrante; use una instancia por worker concurrente

Scripting de formularios XFA

El motor de aplanado XFA reutiliza este runtime solo cuando THotPDF.XFAJavaScriptEnabled se activa explícitamente; suministra una fachada de datos restringida, typed arrays nativos, solicitudes de instancia validadas y ningún objeto de archivo, proceso, navegador ni red

TXFAFormScriptOptions.JavaScriptEvaluator puede adaptar el runtime estático sin forzar objetos estáticos de QuickJS en cada aplicación HotPDF

Consulte Bounded XFA FormCalc and JavaScript

Build reproducible del runtime

powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1

El script de build produce ambos conjuntos de objetos estáticos y ambos DLL de bridge desde el fuente incluido; luego la matriz de runtime compila y ejercita las sondas estáticas y de DLL para Win32 y Win64