Runtime QuickJS acotado

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

Elija un modo de implementación

El enlace DLL acepta una ruta explícita, el valor de entorno HOTPDF_QUICKJS_DLL o el directorio de plataforma que se encuentra debajo de un ejecutable ancestro

Las compilaciones predeterminadas colocan el puente en Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll o Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

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

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

Evaluar 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 conserva Unicode al devolver una cadena Delphi

EvalInt y EvalFloat añaden conversión numérica estricta sin exponer los valores del motor a través del límite 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 predeterminados permiten 64 MiB de memoria del motor, una pila de 64 KiB, un script UTF-8 de 1 MiB, un segundo de tiempo de pared y un millón de comprobaciones de interrupción

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

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

Estado y recuperación

Una evaluación rechazada o interrumpida limpia su excepción pendiente y sus búferes, por lo que la misma instancia de motor puede ejecutar un script válido posterior

Una instancia de motor no es reentrante; use una instancia por trabajador concurrente

Scripting de formularios XFA

El motor de aplanado XFA reutiliza este runtime solo cuando THotPDF.XFAJavaScriptEnabled se establece explícitamente; proporciona una fachada de datos restringida, matrices tipadas nativas, solicitudes de instancia validadas y ningún objeto de archivo, proceso, navegador o red

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

Véase FormCalc y JavaScript XFA acotados

Compilación reproducible del runtime

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

El script de compilación produce ambos conjuntos de objetos estáticos y ambas DLL puente a partir del código fuente incluido, y luego la matriz de runtime compila y ejercita las sondas estáticas y DLL para Win32 y Win64