Bounded QuickJS Runtime
HPDFQuickJS và HPDFQuickJSStatic phơi bày cùng một API đánh giá JavaScript do ứng dụng điều khiển trên Win32 và Win64
Choose a deployment mode
HPDFQuickJSnạp bridgequickjs.dlltrung lập ABI và giữ các giá trị QuickJS bên trong mã CHPDFQuickJSStaticliên kết các đối tượng OMF theo nền tảng cụ thể vào ứng dụng và không yêu cầu DLL runtime- Không bao gồm cả hai unit trong một chương trình vì chúng xuất bản cùng các tên kiểu công khai
Ràng buộc DLL chấp nhận một đường dẫn tường minh, giá trị môi trường HOTPDF_QUICKJS_DLL, hoặc thư mục nền tảng được tìm thấy dưới một tổ tiên thực thi
Các bản dựng mặc định đặt bridge tại Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll hoặc Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll
Evaluate a 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 chuyển giá trị JavaScript cuối thành văn bản UTF-8 và giữ Unicode khi trả về một chuỗi Delphi
EvalInt và EvalFloat thêm chuyển đổi số nghiêm ngặt mà không phơi bày giá trị engine qua ranh giới ABI
Execution limits
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);
Các mặc định cho phép 64 MiB bộ nhớ engine, một stack 64 KiB, một script UTF-8 1 MiB, một giây thời gian tường, và một triệu kiểm tra gián đoạn
Runtime tĩnh Win32 giới hạn một ngân sách stack được yêu cầu bằng zero hoặc lớn hơn ở 48 KiB để nằm trong ranh giới đệ quy an toàn trình biên dịch; các chế độ DLL và Win64 tôn trọng trực tiếp giá trị được yêu cầu
Giới hạn bộ nhớ và stack theo toàn runtime trong khi giới hạn script, thời gian, và gián đoạn được áp dụng cho mỗi lần đánh giá
Status and recovery
qjsSuccessbáo cáo một kết quả đã chuyển đổiqjsScriptErrorbáo cáo lỗi cú pháp, giá trị bị ném, và lỗi chuyển đổiqjsTimeLimitvàqjsInterruptLimitphân biệt hai ngân sách thực thiqjsBusy,qjsInvalidArgument,qjsResourceError, vàqjsUnavailablegiữ các lỗi cơ sở hạ tầng
Một lần đánh giá bị từ chối hoặc bị gián đoạn xóa ngoại lệ đang chờ và bộ đệm của nó, nên cùng một instance engine có thể thực thi một script hợp lệ sau đó
Một instance engine không thể nhập lại; dùng một instance cho mỗi worker đồng thời
XFA form scripting
Engine làm phẳng XFA chỉ tái sử dụng runtime này khi THotPDF.XFAJavaScriptEnabled được đặt một cách tường minh; nó cung cấp một facade dữ liệu bị hạn chế, mảng có kiểu gốc, yêu cầu instance đã xác thực, và không có đối tượng tệp, tiến trình, trình duyệt, hoặc mạng
TXFAFormScriptOptions.JavaScriptEvaluator có thể điều hợp runtime tĩnh mà không ép các đối tượng QuickJS tĩnh vào mọi ứng dụng HotPDF
Xem Bounded XFA FormCalc and JavaScript
Reproducible runtime build
powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1
Script xây dựng tạo cả hai tập đối tượng tĩnh và cả hai DLL bridge từ nguồn đi kèm, sau đó ma trận runtime biên dịch và chạy các probe tĩnh và DLL cho Win32 và Win64