Sınırlı QuickJS Runtime
HPDFQuickJS ve HPDFQuickJSStatic, Win32 ve Win64 üzerinde aynı uygulama kontrollü JavaScript evaluation API'sini sunar
Dağıtım modu seçimi
HPDFQuickJS, ABI-nötrquickjs.dllbridge'ini yükler ve QuickJS değerlerini C kodunun içinde tutarHPDFQuickJSStatic, platforma özel OMF object'lerini uygulamaya bağlar ve runtime DLL gerektirmez- Aynı public type adlarını yayınladıkları için iki unit'i tek programda bir araya eklemeyin
DLL binding'i açık bir yol, HOTPDF_QUICKJS_DLL environment değeri ya da executable atasının altında bulunan platform dizinini kabul eder
Varsayılan derlemeler bridge'i Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll veya Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll konumuna yerleştirir
Linux x86-64'te HPDFQuickJS, tools/Build-HotPDFQuickJSLinux.sh tarafından derlenen native libhpdfquickjs.so köprüsünü yükler; açık yol ve environment variable aynı ownership ve ABI kurallarını izler
Linux default keşfâ, executable dizinini ve Lib/thirdparty/QuickJS/bin/Linux64'i denetler; native statik OMF dağıtımı Windows'a özgü kalır
Script çalıştırma
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, nihai JavaScript değerini UTF-8 metnine dönüştürür ve Delphi string'i döndürürken Unicode'u korur
EvalInt ve EvalFloat, engine değerlerini ABI sınırının karşısına çıkarmadan katı sayısal dönüşüm ekler
Yürütme limitleri
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);
Varsayılanlar 64 MiB engine belleği, 64 KiB stack, 1 MiB UTF-8 script, bir saniye duvar süresi ve bir milyon interrupt kontrolüne izin verir
Win32 static runtime, derleyici-güvenli recursion sınırının içinde kalmak için sıfır veya daha büyük istenen stack bütçesini 48 KiB ile sınırlar; DLL ve Win64 modları istenen değeri doğrudan dikkate alır
Bellek ve stack limitleri tüm runtime'ı kapsarken script, süre ve interrupt limitleri her evaluation'a uygulanır
Durum ve kurtarma
qjsSuccessdönüştürülmüş bir sonuç bildirirqjsScriptErrorsyntax hatalarını, fırlatılan değerleri ve dönüşüm başarısızlıklarını bildirirqjsTimeLimitveqjsInterruptLimitiki yürütme bütçesini birbirinden ayırırqjsBusy,qjsInvalidArgument,qjsResourceErrorveqjsUnavailablealtyapı hatalarını olduğu gibi korur
Reddedilen veya kesilen bir evaluation bekleyen exception'ını ve buffer'larını temizler, böylece aynı engine instance'ı daha sonra geçerli bir script çalıştırabilir
Tek bir engine instance reentrant değildir; her eşzamanlı worker için bir instance kullanın
XFA form scripting
XFA flattening engine, THotPDF.XFAJavaScriptEnabled açıkça ayarlandığında bu runtime'ı yeniden kullanır; kısıtlı bir data facade, native typed array'ler ve doğrulanmış instance istekleri sunar, dosya, process, browser veya network object'leri içermez
TXFAFormScriptOptions.JavaScriptEvaluator, static QuickJS object'lerini her HotPDF uygulamasına zorlamadan static runtime'ı uyarlayabilir
Ayrıca bkz. Sınırlı XFA FormCalc ve JavaScript
Tekrarlanabilir runtime derlemesi
powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1
Build script, paketlenmiş kaynaktan her iki static object setini ve her iki bridge DLL'ini üretir; ardından runtime matrix, Win32 ve Win64 için static ve DLL probe'larını derler ve çalıştırır