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

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

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