Afgrænset QuickJS-kørselstid

HPDFQuickJS og HPDFQuickJSStatic tilbyder den samme programstyrede JavaScript-evaluerings-API på Win32 og Win64

Vælg en udrulningstilstand

DLL-bindingen accepterer en eksplicit sti, miljøværdien HOTPDF_QUICKJS_DLL eller platformsbiblioteket fundet under en eksekverbar overordnet mappe

Standardbygninger placerer broen i Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll eller Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

På Linux x86-64 indlæser HPDFQuickJS den native libhpdfquickjs.so-bro bygget af tools/Build-HotPDFQuickJSLinux.sh; eksplicit sti og miljøvariabel følger samme ownership- og ABI-regler

Linux default discovery tjekker den eksekverbares mappe og Lib/thirdparty/QuickJS/bin/Linux64; native statisk OMF-deployment forbliver Windows-specifikt

Evaluer et 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 konverterer den endelige JavaScript-værdi til UTF-8-tekst og bevarer Unicode ved retur af en Delphi-streng

EvalInt og EvalFloat tilføjer streng numerisk konvertering uden at eksponere motorværdier på tværs af ABI-grænsen

Udførelsesgrænser

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ærdierne tillader 64 MiB motormemory, en 64 KiB stak, et 1 MiB UTF-8-script, ét sekunds vægtid og én million afbrydelsestjek

Win32s statiske kørselsmiljø begrænser et ønsket stakbudget på nul eller derover til 48 KiB for at holde sig inden for compilerens sikre rekursionsgrænse, mens DLL- og Win64-tilstande følger den ønskede værdi direkte

Hukommelses- og stakgrænser gælder hele kørselsmiljøet, mens script-, tids- og afbrydelsesgrænser anvendes på hver evaluering

Status og genopretning

En afvist eller afbrudt evaluering rydder sin ventende undtagelse og buffere, så den samme motorinstans kan udføre et senere gyldigt script

En motorinstans er ikke reentrant, så brug én instans pr. samtidig worker

XFA-formularscripting

XFA-fladningsmotoren genbruger kun dette kørselsmiljø, når THotPDF.XFAJavaScriptEnabled er angivet eksplicit, og den leverer en begrænset datafacade, oprindelige typed arrays, validerede instansanmodninger samt ingen fil-, proces-, browser- eller netværksobjekter

TXFAFormScriptOptions.JavaScriptEvaluator kan tilpasse den statiske kørselsvariant uden at tvinge statiske QuickJS-objekter ind i enhver HotPDF-applikation

Se Afgrænset XFA FormCalc og JavaScript

Reproducerbar bygning af kørselsmiljøet

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

Byggescriptet producerer begge statiske objektsæt og begge bro-DLL'er fra den medfølgende kilde, hvorefter kørselsmatrixen kompilerer og afprøver statiske og DLL-prober for Win32 og Win64