Omeđeno QuickJS izvođenje

HPDFQuickJS i HPDFQuickJSStatic izlažu isto programom kontrolirano API sučelje za vrednovanje JavaScripta na Win32 i Win64

Odabir načina primjene

DLL sučelje prihvaća eksplicitnu putanju, vrijednost okoline HOTPDF_QUICKJS_DLL ili platformski direktorij pronađen ispod neke izvršne nadređene datoteke

Zadane gradnje smještaju most na Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll ili Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

Vrednovanje skripte

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 konačnu JavaScript vrijednost u tekst UTF-8 i čuva Unicode pri vraćanju Delphi niza

EvalInt i EvalFloat dodaju strogu numeričku pretvorbu bez izlaganja vrijednosti stroja preko granice ABI-ja

Ograničenja 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);

Zadane vrijednosti dopuštaju 64 MiB memorije stroja, stog od 64 KiB, UTF-8 skriptu od 1 MiB, jednu sekundu zidnog vremena i milijun provjera prekida

Statičko izvođenje na Win32 ograničava zatraženi proračun stoga od nule ili veći na 48 KiB kako bi ostao unutar kompilatoru sigurne granice rekurzije; DLL i Win64 načini poštuju zatraženu vrijednost izravno

Ograničenja memorije i stoga su široka za cijelo izvođenje dok se ograničenja skripte, vremena i prekida primjenjuju na svako vrednovanje

Status i oporavak

Odbijeno ili prekinuto vrednovanje čisti svoju čekajuću iznimku i međuspremnike, pa ista instanca stroja može izvršiti kasniju ispravnu skriptu

Jedna instanca stroja nije reentrantna; koristite po jednu instancu po istodobnom radniku

XFA skriptiranje obrasca

Stroj za izravnavanje XFA-ja ponovno koristi ovo izvođenje samo kada je THotPDF.XFAJavaScriptEnabled izričito postavljen; on osigurava ograničenu podatkovnu fasadu, izvorne tipkane nizove, provjerene zahtjeve instanci i nikakve datotečne, procesne, pregledničke ili mrežne objekte

TXFAFormScriptOptions.JavaScriptEvaluator može prilagoditi statičko izvođenje bez prisiljavanja statičkih QuickJS objekata u svaku HotPDF aplikaciju

Pogledajte Omeđeni XFA FormCalc i JavaScript

Ponovljiva gradnja izvođenja

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

Skripta gradnje proizvodi oba seta statičkih objekata i obje most DLL datoteke iz priloženog izvora, a zatim matrica izvođenja sastavlja i vježba statičke i DLL sonde za Win32 i Win64