Ograničeni QuickJS runtime

HPDFQuickJS i HPDFQuickJSStatic izlažu istu primenom kontrolisanu JavaScript vrednosnu evaluaciju API na Win32 i Win64

Odaberite režim postavljanja

Vezivanje DLL prihvata eksplicitnu putanju, vrednost okruženja HOTPDF_QUICKJS_DLL ili direktorijum platforme pronađen ispod pretka izvršnog fajla

Podrazumevane izgradnje smeštaju most na Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll ili Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

Vrednujte skriptu

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 pretvara finalnu JavaScript vrednost u UTF-8 tekst i čuva Unicode kada vraća Delphi string

EvalInt i EvalFloat dodaju strogu numeričku konverziju bez izlaganja vrednosti motora preko ABI granice

Limiti izvršenja

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

Podrazumevane vrednosti dozvoljavaju 64 MiB memorije motora, stek od 64 KiB, UTF-8 skriptu od 1 MiB, jednu sekundu zidnog vremena i milion provera prekida

Win32 statički runtime ograničava nulta ili veća tražena budžeta steka na 48 KiB da ostane unutar kompajler-sigurne granice rekurzije; DLL i Win64 režimi poštuju traženu vrednost direktno

Limiti memorije i steka su širi za ceo runtime dok se limiti skripte, vremena i prekida primenjuju na svako vrednovanje

Status i oporavak

Odbijeno ili prekinuto vrednovanje čisti svoj nadolazeći izuzetak i baferi, tako ista instanca motora može da izvrši kasniju važeću skriptu

Jedna instanca motora nije reentrantna; koristite jednu instancu po istovremenom radniku

XFA skriptno pisanje formi

Motor plošćenja XFA ponovo koristi ovaj runtime samo kada je THotPDF.XFAJavaScriptEnabled eksplicitno postavljen; isporučuje ograničenu fasadu podataka, izvorne tipizirane nizove, proverene zahteve instance i nema fajl, proces, pregledač ili mrežne objekte

TXFAFormScriptOptions.JavaScriptEvaluator može da prilagodi statički runtime bez forsiranja statičkih QuickJS objekata u svaku HotPDF aplikaciju

Pogledajte Ograničen XFA FormCalc i JavaScript

Reprodukovljiva izgradnja runtime-a

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

Skripta izgradnje proizvodi i statičke skupove objekata i oba most DLL-a iz objedinjenog izvora, a zatim matrica runtime-a kompajlira i vežba statičke i DLL sonde za Win32 i Win64