Avgränsad QuickJS-körtid

HPDFQuickJS och HPDFQuickJSStatic exponerar samma applikationskontrollerade JavaScript-utvärderings-API på Win32 och Win64

Välj ett distributionsläge

DLL-bindningen accepterar en explicit sökväg, miljövärdet HOTPDF_QUICKJS_DLL eller plattformskatalogen som hittas nedanför en körbar förälder

Standardversioner placerar bryggan på Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll eller Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

På Linux x86-64 läser HPDFQuickJS in den nativa libhpdfquickjs.so-bryggan byggd av tools/Build-HotPDFQuickJSLinux.sh; explicit sökväg och miljövariabeln följer samma ägarskaps- och ABI-regler

Linux-standardupptäckt kontrollerar exekverbarhetens katalog och Lib/thirdparty/QuickJS/bin/Linux64; nativ statisk OMF-distribution förblir Windows-specifik

Utvärdera ett skript

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 konverterar det slutliga JavaScript-värdet till UTF-8-text och bevarar Unicode när en Delphi-sträng returneras

EvalInt och EvalFloat lägger till strikt numerisk konvertering utan att exponera motorvärden över ABI-gränsen

Exekveringsbegränsningar

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);

Standardvärdena tillåter 64 MiB motorminne, en 64 KiB-stack, en 1 MiB UTF-8-uppsättning, en sekund väggtid och en miljon avbrottskontroller

Den statiska Win32-körtidens tak begränsar en noll- eller större begärd stackbudget till 48 KiB för att hålla sig inom den kompilatorsäkra rekursionsgränsen; DLL- och Win64-lägena respekterar det begärda värdet direkt

Minnes- och stackgränserna gäller hela körtiden medan skript-, tids- och avbrottsgränserna tillämpas på varje utvärdering

Status och återställning

En avvisad eller avbruten utvärdering rensar sitt väntande undantag och sina buffertar, så samma motorinstans kan köra ett senare giltigt skript

En motorinstans är inte reentrant; använd en instans per samtidig arbetare

XFA-formulärskript

XFA-utjämningsmotorn återanvänder denna körtid endast när THotPDF.XFAJavaScriptEnabled uttryckligen är inställd; den tillhandahåller en begränsad datafasad, inbyggda typade arrayer, validerade instansförfrågningar och inga fil-, process-, webbläsar- eller nätverksobjekt

TXFAFormScriptOptions.JavaScriptEvaluator kan anpassa den statiska körtiden utan att tvinga in statiska QuickJS-objekt i varje HotPDF-applikation

Se Avgränsad XFA FormCalc och JavaScript

Reproducerbar runtime-bygge

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

Byggskriptet producerar båda statiska objektuppsättningarna och båda brygg-DLL-filerna från den medföljande källkoden, och sedan kompilerar och övar runtime-matrisen statiska och DLL-prober för Win32 och Win64