diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml index d2b609b64..639739b0c 100644 --- a/.github/workflows/android_build.yml +++ b/.github/workflows/android_build.yml @@ -8,9 +8,9 @@ on: workflow_dispatch: env: - JAVET_NODE_VERSION: 20.8.0 - JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_NODE_VERSION: 20.9.0 + JAVET_V8_VERSION: 11.9.169.6 + JAVET_VERSION: 3.0.1 ROOT: /home/runner/work/Javet jobs: @@ -37,7 +37,7 @@ jobs: uses: nttld/setup-ndk@v1 with: ndk-version: r25b - local-cache: true + local-cache: false - name: Setup Path run: | @@ -61,6 +61,7 @@ jobs: gclient sync -D cd v8 python3 tools/dev/v8gen.py arm.release -- 'target_os="android"' 'target_cpu="arm"' 'v8_target_cpu="arm"' v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false + ninja -C out.gn/arm.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/arm.release v8_monolith - name: Setup JDK 11 @@ -108,7 +109,7 @@ jobs: uses: nttld/setup-ndk@v1 with: ndk-version: r25b - local-cache: true + local-cache: false - name: Setup Path run: | @@ -132,6 +133,7 @@ jobs: gclient sync -D cd v8 python3 tools/dev/v8gen.py arm64.release -- 'target_os="android"' 'target_cpu="arm64"' 'v8_target_cpu="arm64"' v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false + ninja -C out.gn/arm64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/arm64.release v8_monolith - name: Setup JDK 11 @@ -179,7 +181,7 @@ jobs: uses: nttld/setup-ndk@v1 with: ndk-version: r25b - local-cache: true + local-cache: false - name: Setup Path run: | @@ -203,6 +205,7 @@ jobs: gclient sync -D cd v8 python3 tools/dev/v8gen.py ia32.release -- 'target_os="android"' 'target_cpu="x86"' 'v8_target_cpu="x86"' v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false + ninja -C out.gn/ia32.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/ia32.release v8_monolith - name: Setup JDK 11 @@ -250,7 +253,7 @@ jobs: uses: nttld/setup-ndk@v1 with: ndk-version: r25b - local-cache: true + local-cache: false - name: Setup Path run: | @@ -274,6 +277,7 @@ jobs: gclient sync -D cd v8 python3 tools/dev/v8gen.py x64.release -- 'target_os="android"' 'target_cpu="x64"' 'v8_target_cpu="x64"' v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false + ninja -C out.gn/x64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/x64.release v8_monolith - name: Setup JDK 11 diff --git a/.github/workflows/linux_build_artifact.yml b/.github/workflows/linux_build_artifact.yml index 59c4e9e3e..033ddefbb 100644 --- a/.github/workflows/linux_build_artifact.yml +++ b/.github/workflows/linux_build_artifact.yml @@ -17,9 +17,9 @@ on: env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }} - JAVET_NODE_VERSION: 20.8.0 - JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_NODE_VERSION: 20.9.0 + JAVET_V8_VERSION: 11.9.169.6 + JAVET_VERSION: 3.0.1 jobs: javet_linux_x86_64: diff --git a/.github/workflows/linux_build_node_v8_image.yml b/.github/workflows/linux_build_node_v8_image.yml index 59aa16c69..7c24f8152 100644 --- a/.github/workflows/linux_build_node_v8_image.yml +++ b/.github/workflows/linux_build_node_v8_image.yml @@ -21,9 +21,9 @@ on: env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }} - JAVET_NODE_VERSION: 20.8.0 - JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_NODE_VERSION: 20.9.0 + JAVET_V8_VERSION: 11.9.169.6 + JAVET_VERSION: 3.0.1 # if we skip a job using a job level `if` condition, then any dependent jobs also don't run. # we can skip a step of the job, using a step level `if` condition. diff --git a/.github/workflows/linux_x86_64_build.yml b/.github/workflows/linux_x86_64_build.yml index 7ca7ba855..97dda9993 100644 --- a/.github/workflows/linux_x86_64_build.yml +++ b/.github/workflows/linux_x86_64_build.yml @@ -7,9 +7,9 @@ on: workflow_dispatch: env: - JAVET_NODE_VERSION: 20.8.0 - JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_NODE_VERSION: 20.9.0 + JAVET_V8_VERSION: 11.9.169.6 + JAVET_VERSION: 3.0.1 ROOT: /home/runner/work/Javet jobs: @@ -52,6 +52,7 @@ jobs: gclient sync -D cd v8 python3 tools/dev/v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false + ninja -C out.gn/x64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/x64.release v8_monolith - name: Setup JDK 8 diff --git a/.github/workflows/macos_arm64_build.yml b/.github/workflows/macos_arm64_build.yml index d03d7dcc6..efb2bfcd3 100644 --- a/.github/workflows/macos_arm64_build.yml +++ b/.github/workflows/macos_arm64_build.yml @@ -7,9 +7,9 @@ on: workflow_dispatch: env: - JAVET_NODE_VERSION: 20.8.0 + JAVET_NODE_VERSION: 11.8.172.15 JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_VERSION: 3.0.1 ROOT: /Users/runner/work/Javet jobs: @@ -53,6 +53,7 @@ jobs: cd v8 python3 tools/dev/v8gen.py arm64.release -- v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false gn gen out.gn/arm64.release + ninja -C out.gn/arm64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/arm64.release v8_monolith - name: Setup JDK 8 diff --git a/.github/workflows/macos_x86_64_build.yml b/.github/workflows/macos_x86_64_build.yml index 7193901af..26a566d8d 100644 --- a/.github/workflows/macos_x86_64_build.yml +++ b/.github/workflows/macos_x86_64_build.yml @@ -7,9 +7,9 @@ on: workflow_dispatch: env: - JAVET_NODE_VERSION: 20.8.0 - JAVET_V8_VERSION: 11.8.172.15 - JAVET_VERSION: 3.0.0 + JAVET_NODE_VERSION: 20.9.0 + JAVET_V8_VERSION: 11.9.169.6 + JAVET_VERSION: 3.0.1 ROOT: /Users/runner/work/Javet jobs: @@ -53,6 +53,7 @@ jobs: cd v8 python3 tools/dev/v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false gn gen out.gn/x64.release + ninja -C out.gn/x64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./ ninja -C out.gn/x64.release v8_monolith - name: Setup JDK 8 diff --git a/.gitignore b/.gitignore index c6a0b6d06..7f3a42107 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,8 @@ _build pom.xml.releaseBackup release.properties target + +# ------------------------------------------------------------------------------ +# JNI + +cpp/build* diff --git a/.sdkmanrc b/.sdkmanrc deleted file mode 100644 index 281f1ec43..000000000 --- a/.sdkmanrc +++ /dev/null @@ -1,2 +0,0 @@ -gradle=7.2 -java=8.0.312-zulu diff --git a/README.rst b/README.rst index ff8943f59..3c37fe7d9 100644 --- a/README.rst +++ b/README.rst @@ -3,10 +3,10 @@ Javet |Maven Central| |Discord| |Donate| -|Linux x86_64 Build| |MacOS arm64 Build| |MacOS x86_64 Build| |Android Build| +|Linux x86_64 Build| |MacOS x86_64 Build| |Android Build| .. |Maven Central| image:: https://img.shields.io/maven-central/v/com.caoccao.javet/javet?style=for-the-badge - :target: https://search.maven.org/search?q=g:com.caoccao.javet + :target: https://central.sonatype.com/search?q=g:com.caoccao.javet .. |Discord| image:: https://img.shields.io/discord/870518906115211305?label=join%20our%20Discord&style=for-the-badge :target: https://discord.gg/R4vvKU96gw @@ -17,9 +17,6 @@ Javet .. |Linux x86_64 Build| image:: https://github.com/caoccao/Javet/actions/workflows/linux_x86_64_build.yml/badge.svg :target: https://github.com/caoccao/Javet/actions/workflows/linux_x86_64_build.yml -.. |MacOS arm64 Build| image:: https://github.com/caoccao/Javet/actions/workflows/macos_arm64_build.yml/badge.svg - :target: https://github.com/caoccao/Javet/actions/workflows/macos_arm64_build.yml - .. |MacOS x86_64 Build| image:: https://github.com/caoccao/Javet/actions/workflows/macos_x86_64_build.yml/badge.svg :target: https://github.com/caoccao/Javet/actions/workflows/macos_x86_64_build.yml @@ -38,13 +35,13 @@ Major Features =========== ======= ======= ======= ======= CPU Arch Android Linux MacOS Windows =========== ======= ======= ======= ======= -x86 ✔ ❌ ❌ ❌ -x86_64 ✔ ✔ ✔ ✔ -arm ✔ ❌ ❌ ❌ -arm64 ✔ ✔ ✔ ❌ +x86 ✔️ ❌ ❌ ❌ +x86_64 ✔️ ✔️ ✔️ ✔️ +arm ✔️ ❌ ❌ ❌ +arm64 ✔️ ✔️ ✔️ ❌ =========== ======= ======= ======= ======= -* Node.js ``v20.8.0`` + V8 ``v11.8.172.15`` +* Node.js ``v20.9.0`` + V8 ``v11.9.169.6`` * Dynamic switch between Node.js and V8 mode (`Which mode do you prefer? `_) * Polyfill V8 mode with `Javenode `_ * V8 API exposure in JVM @@ -53,6 +50,7 @@ arm64 ✔ ✔ ✔ ❌ * Javet engine pool * Easy spring integration * Live debug with Chrome DevTools +* AST Analysis with `JavetSanitizer `_ Quick Start =========== @@ -69,21 +67,21 @@ Maven com.caoccao.javet javet - 3.0.0 + 3.0.1 com.caoccao.javet javet-linux-arm64 - 3.0.0 + 3.0.1 com.caoccao.javet javet-macos - 3.0.0 + 3.0.1 Gradle Kotlin DSL @@ -91,20 +89,20 @@ Gradle Kotlin DSL .. code-block:: kotlin - implementation("com.caoccao.javet:javet:3.0.0") // Linux and Windows (x86_64) - implementation("com.caoccao.javet:javet-linux-arm64:3.0.0") // Linux (arm64) - implementation("com.caoccao.javet:javet-macos:3.0.0") // Mac OS (x86_64 and arm64) - implementation("com.caoccao.javet:javet-android:3.0.0") // Android (arm, arm64, x86 and x86_64) + implementation("com.caoccao.javet:javet:3.0.1") // Linux and Windows (x86_64) + implementation("com.caoccao.javet:javet-linux-arm64:3.0.1") // Linux (arm64) + implementation("com.caoccao.javet:javet-macos:3.0.1") // Mac OS (x86_64 and arm64) + implementation("com.caoccao.javet:javet-android:3.0.1") // Android (arm, arm64, x86 and x86_64) Gradle Groovy DSL ^^^^^^^^^^^^^^^^^ .. code-block:: groovy - implementation 'com.caoccao.javet:javet:3.0.0' // Linux and Windows (x86_64) - implementation 'com.caoccao.javet:javet-linux-arm64:3.0.0' // Linux (arm64) - implementation 'com.caoccao.javet:javet-macos:3.0.0' // Mac OS (x86_64 and arm64) - implementation 'com.caoccao.javet:javet-android:3.0.0' // Android (arm, arm64, x86 and x86_64) + implementation 'com.caoccao.javet:javet:3.0.1' // Linux and Windows (x86_64) + implementation 'com.caoccao.javet:javet-linux-arm64:3.0.1' // Linux (arm64) + implementation 'com.caoccao.javet:javet-macos:3.0.1' // Mac OS (x86_64 and arm64) + implementation 'com.caoccao.javet:javet-android:3.0.1' // Android (arm, arm64, x86 and x86_64) Hello Javet ----------- @@ -129,12 +127,18 @@ Sponsors License ======= -`APACHE LICENSE, VERSION 2.0 `_. +`APACHE LICENSE, VERSION 2.0 `_ + +Blog +==== + +* `Performance Comparison of GraalJS, Javet and Nashorn `_ +* `How to Elegantly Expose JsonNode in V8 `_ +* `How to Compromise V8 on JVM `_ Documents ========= * `Javet Intro `_ -* `Performance Comparison of GraalJS, Javet and Nashorn `_ * `Javet Javadoc `_ * `Javet Document Portal `_ diff --git a/android/javet-android/build.gradle.kts b/android/javet-android/build.gradle.kts index 6b5867225..d01c76f80 100644 --- a/android/javet-android/build.gradle.kts +++ b/android/javet-android/build.gradle.kts @@ -21,7 +21,7 @@ plugins { id("com.android.library") } -version = "3.0.0" +version = "3.0.1" android { compileSdk = 30 diff --git a/android/javet-android/src/main/AndroidManifest.xml b/android/javet-android/src/main/AndroidManifest.xml index 0e560ce5d..7fc157416 100644 --- a/android/javet-android/src/main/AndroidManifest.xml +++ b/android/javet-android/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/android/pom.xml b/android/pom.xml index 349bf20d7..ca3f00ee0 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -3,7 +3,7 @@ com.caoccao.javet javet-android - 3.0.0 + 3.0.1 javet aar Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding V8 in Java. @@ -29,7 +29,7 @@ scm:git:git://github.com/caoccao/Javet.git scm:git:git@github.com:caoccao/caoccao.git https://github.com/caoccao/Javet - 3.0.0 + 3.0.1 diff --git a/build.gradle.kts b/build.gradle.kts index fb8eeface..a60c44c6e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ repositories { } group = "com.caoccao.javet" -version = "3.0.0" +version = "3.0.1" dependencies { testImplementation("org.eclipse.jetty.websocket:websocket-server:9.4.51.v20230217") diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 70d5d3eef..9dcef6ec3 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -152,7 +152,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(JAVET_LIB_ARCH x86_64) set(JAVET_LIB_ARCH x86_64) # Generate PDB file - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /MP") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /MP /O2 /Ob2 /GS-") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") add_definitions(-D_ITERATOR_DEBUG_LEVEL=0 -D_WIN32) list(APPEND includeDirs $ENV{JAVA_HOME}/include/win32) @@ -185,8 +185,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_library(Javet SHARED ${sourceFiles}) add_library(JavetStatic STATIC ${sourceFiles}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-invalid-offsetof ") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof ") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-invalid-offsetof -O3 ") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -O3 ") if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "(arm64|x86_64|aarch64)") set(JAVET_LIB_SYSTEM "linux") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated ") @@ -231,8 +231,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android set(JAVET_LIB_SYSTEM "android") add_definitions(-D__ANDROID__) list(APPEND includeDirs $ENV{JAVA_HOME}/include/linux) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unknown-pragmas -Wno-unused-function -Wno-unused-variable -O3 -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fPIC ") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -Wno-unused-function -Wno-unused-variable -O3 -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fPIC ") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unknown-pragmas -Wno-unused-function -Wno-unused-variable -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fPIC ") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -Wno-unused-function -Wno-unused-variable -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fPIC ") if(DEFINED V8_DIR) foreach(importLibrary ${importLibraries}) set_target_properties(${importLibrary} PROPERTIES IMPORTED_LOCATION ${V8_RELEASE_DIR}/obj/lib${importLibrary}.a) diff --git a/cpp/build-android.sh b/cpp/build-android.sh index 88832620b..8208724e1 100755 --- a/cpp/build-android.sh +++ b/cpp/build-android.sh @@ -2,15 +2,15 @@ # Usage for V8: sh build-android.sh -DV8_DIR=${HOME}/v8 -DCMAKE_ANDROID_NDK=${HOME}/android -DCMAKE_ANDROID_ARCH=arm64 # Usage for Node: sh build-android.sh -DNODE_DIR=${HOME}/node -DCMAKE_ANDROID_NDK=${HOME}/android -DCMAKE_ANDROID_ARCH=arm64 -JAVET_VERSION=3.0.0 -rm -rf build_anroid -mkdir build_anroid -cd build_anroid -mkdir -p ../../build_anroid/libs +JAVET_VERSION=3.0.1 +rm -rf build_android +mkdir build_android +cd build_android +mkdir -p ../../build/libs cmake ../ -DCMAKE_SYSTEM_NAME=Android -DJAVET_VERSION=${JAVET_VERSION} "$@" \ - && make -j4 + && make -j$(nproc) if [ $? -eq 0 ]; then - cp -f *.a ../../build_anroid/libs + cp -f *.a ../../build/libs echo Build Completed else echo Build Failed diff --git a/cpp/build-linux-arm64.sh b/cpp/build-linux-arm64.sh index 29bec66df..bc3f164ef 100644 --- a/cpp/build-linux-arm64.sh +++ b/cpp/build-linux-arm64.sh @@ -2,16 +2,16 @@ # Usage for V8: sh build-linux-arm64.sh -DV8_DIR=${HOME}/v8 # Usage for Node: sh build-linux-arm64.sh -DNODE_DIR=${HOME}/node -JAVET_VERSION=3.0.0 +JAVET_VERSION=3.0.1 rm -rf build_linux_arm64 mkdir build_linux_arm64 cd build_linux_arm64 -mkdir -p ../../build_linux_arm64/libs +mkdir -p ../../build/libs cmake ../ -DJAVET_VERSION=${JAVET_VERSION} "$@" \ - && make -j4 \ + && make -j$(proc) \ && strip --strip-unneeded -R .note -R .comment ../../src/main/resources/libjavet-*-linux-arm64.v.${JAVET_VERSION}.so if [ $? -eq 0 ]; then - cp -f *.a ../../build_linux_arm64/libs + cp -f *.a ../../build/libs echo Build Completed else echo Build Failed diff --git a/cpp/build-linux-x86_64.sh b/cpp/build-linux-x86_64.sh index 57f7b3274..2cf3ca7da 100644 --- a/cpp/build-linux-x86_64.sh +++ b/cpp/build-linux-x86_64.sh @@ -2,17 +2,17 @@ # Usage for V8: sh build-linux-x86_64.sh -DV8_DIR=${HOME}/v8 # Usage for Node: sh build-linux-x86_64.sh -DNODE_DIR=${HOME}/node -JAVET_VERSION=3.0.0 +JAVET_VERSION=3.0.1 rm -rf build_linux_x86_64 mkdir build_linux_x86_64 cd build_linux_x86_64 -mkdir -p ../../build_linux_x86_64/libs +mkdir -p ../../build/libs cmake ../ -DJAVET_VERSION=${JAVET_VERSION} "$@" \ - && make -j4 \ + && make -j$(nproc) \ && execstack -c ../../src/main/resources/libjavet-*-linux-x86_64.v.${JAVET_VERSION}.so \ && strip --strip-unneeded -R .note -R .comment ../../src/main/resources/libjavet-*-linux-x86_64.v.${JAVET_VERSION}.so if [ $? -eq 0 ]; then - cp -f *.a ../../build_linux_x86_64/libs + cp -f *.a ../../build/libs echo Build Completed else echo Build Failed diff --git a/cpp/build-macos.sh b/cpp/build-macos.sh index 3f575f905..644babed3 100755 --- a/cpp/build-macos.sh +++ b/cpp/build-macos.sh @@ -2,15 +2,15 @@ # Usage for V8: sh build-macos.sh -DV8_DIR=${HOME}/v8 # Usage for Node: sh build-macos.sh -DNODE_DIR=${HOME}/node -JAVET_VERSION=3.0.0 +JAVET_VERSION=3.0.1 rm -rf build_macos mkdir build_macos cd build_macos -mkdir -p ../../build_macos/libs +mkdir -p ../../build/libs cmake ../ -DJAVET_VERSION=${JAVET_VERSION} "$@" \ - && make -j4 + && make -j$(nproc) if [ $? -eq 0 ]; then - cp -f *.a ../../build_macos/libs + cp -f *.a ../../build/libs echo Build Completed else echo Build Failed diff --git a/cpp/build-windows.cmd b/cpp/build-windows.cmd index 4283743e5..7c3bf8de6 100644 --- a/cpp/build-windows.cmd +++ b/cpp/build-windows.cmd @@ -1,15 +1,15 @@ @echo off REM Usage for V8: build -DV8_DIR=C:\v8 REM Usage for Node: build -DNODE_DIR=C:\node -SET JAVET_VERSION=3.0.0 +SET JAVET_VERSION=3.0.1 rd /s/q build_windows mkdir build_windows cd build_windows -mkdir ..\..\build_windows\libs +mkdir ..\..\build\libs cmake ..\ -G "Visual Studio 17 2022" -A x64 -DJAVET_VERSION=%JAVET_VERSION% %* ^ && cmake --build . -- /p:CharacterSet=Unicode /p:Configuration=Release /p:Platform=x64 IF %ERRORLEVEL% EQU 0 ( -copy /y Release\*.lib ..\..\build_windows\libs +copy /y Release\*.lib ..\..\build\libs echo Build Completed ) ELSE ( echo Build Failed diff --git a/cpp/jni/com_caoccao_javet_interop_V8Native.h b/cpp/jni/com_caoccao_javet_interop_V8Native.h index b4f479e92..044693ee1 100644 --- a/cpp/jni/com_caoccao_javet_interop_V8Native.h +++ b/cpp/jni/com_caoccao_javet_interop_V8Native.h @@ -607,6 +607,14 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_mapSetUndefin JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_moduleCompile (JNIEnv *, jobject, jlong, jstring, jbyteArray, jboolean, jstring, jint, jint, jint, jboolean, jboolean); +/* + * Class: com_caoccao_javet_interop_V8Native + * Method: moduleCreate + * Signature: (JLjava/lang/String;JI)Ljava/lang/Object; + */ +JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_moduleCreate + (JNIEnv *, jobject, jlong, jstring, jlong, jint); + /* * Class: com_caoccao_javet_interop_V8Native * Method: moduleEvaluate @@ -671,6 +679,22 @@ JNIEXPORT jint JNICALL Java_com_caoccao_javet_interop_V8Native_moduleGetStatus JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleInstantiate (JNIEnv *, jobject, jlong, jlong, jint); +/* + * Class: com_caoccao_javet_interop_V8Native + * Method: moduleIsSourceTextModule + * Signature: (JJI)Z + */ +JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleIsSourceTextModule + (JNIEnv *, jobject, jlong, jlong, jint); + +/* + * Class: com_caoccao_javet_interop_V8Native + * Method: moduleIsSyntheticModule + * Signature: (JJI)Z + */ +JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleIsSyntheticModule + (JNIEnv *, jobject, jlong, jlong, jint); + /* * Class: com_caoccao_javet_interop_V8Native * Method: objectCreate diff --git a/cpp/jni/javet_callbacks.cpp b/cpp/jni/javet_callbacks.cpp index 3ac556457..25bc727c1 100644 --- a/cpp/jni/javet_callbacks.cpp +++ b/cpp/jni/javet_callbacks.cpp @@ -285,6 +285,66 @@ namespace Javet { } } + V8MaybeLocalValue JavetSyntheticModuleEvaluationStepsCallback( + V8LocalContext v8Context, + V8LocalModule v8LocalModule) { + FETCH_JNI_ENV(GlobalJavaVM); + Javet::Exceptions::ClearJNIException(jniEnv); + if (v8Context.IsEmpty()) { + LOG_ERROR("JavetSyntheticModuleEvaluationStepsCallback: V8 context is empty."); + } + else { + auto v8Isolate = v8Context->GetIsolate(); + auto v8Runtime = Javet::V8Runtime::FromV8Context(v8Context); + if (v8Runtime == nullptr) { + LOG_ERROR("JavetSyntheticModuleEvaluationStepsCallback: V8 runtime is empty."); + } + else { + V8TryCatch v8TryCatch(v8Isolate); + auto v8GlobalObject = v8Runtime->v8GlobalObject.Get(v8Isolate); + std::string stringKey("module:{}" + std::to_string(v8LocalModule->GetIdentityHash())); + auto v8LocalStringKey = Javet::Converter::ToV8String(v8Context, stringKey.c_str()); + auto v8LocalPrivateKey = v8::Private::ForApi(v8Isolate, v8LocalStringKey); + auto v8MaybeLocalValue = v8GlobalObject->GetPrivate(v8Context, v8LocalPrivateKey); + if (v8MaybeLocalValue.IsEmpty()) { + LOG_ERROR("JavetSyntheticModuleEvaluationStepsCallback: Module " << stringKey << " is not found."); + } + else { + v8GlobalObject->DeletePrivate(v8Context, v8LocalPrivateKey); + auto v8LocalObject = v8MaybeLocalValue.ToLocalChecked().As(); + auto v8MaybeLocalArray = v8LocalObject->GetPropertyNames(v8Context); + if (v8MaybeLocalArray.IsEmpty()) { + LOG_ERROR("JavetSyntheticModuleEvaluationStepsCallback: Module " << stringKey << " is empty."); + } + else { + auto v8LocalArray = v8MaybeLocalArray.ToLocalChecked(); + int length = v8LocalArray->Length(); + for (int i = 0; i < length; ++i) { + auto v8MaybeLocalKey = v8LocalArray->Get(v8Context, i); + if (!v8MaybeLocalKey.IsEmpty()) { + auto v8LocalValueKey = v8MaybeLocalKey.ToLocalChecked(); + if (v8LocalValueKey->IsString() || v8LocalValueKey->IsStringObject()) { + auto v8LocalStringKey = v8LocalValueKey.As(); + auto v8MaybeLocalValueValue = v8LocalObject->Get(v8Context, v8LocalStringKey); + if (!v8MaybeLocalValueValue.IsEmpty()) { + auto v8MaybeBool = v8LocalModule->SetSyntheticModuleExport( + v8Isolate, v8LocalStringKey, v8MaybeLocalValueValue.ToLocalChecked()); + v8MaybeBool.FromMaybe(false); + } + } + } + } + if (v8TryCatch.HasCaught()) { + Javet::Exceptions::ThrowJavetExecutionException(jniEnv, v8Runtime, v8Context, v8TryCatch); + } + } + } + return v8::Undefined(v8Isolate); + } + } + return V8MaybeLocalValue(); + } + JavetCallbackContextReference::JavetCallbackContextReference(JNIEnv* jniEnv, const jobject callbackContext) noexcept : v8PersistentCallbackContextHandlePointer(nullptr) { jniEnv->CallVoidMethod(callbackContext, jmethodIDJavetCallbackContextSetHandle, TO_JAVA_LONG(this)); @@ -294,7 +354,7 @@ namespace Javet { const v8::FunctionCallbackInfo& args) noexcept { FETCH_JNI_ENV(GlobalJavaVM); Javet::Exceptions::ClearJNIException(jniEnv); - v8::Isolate* v8Isolate = args.GetIsolate(); + auto v8Isolate = args.GetIsolate(); V8IsolateScope v8IsolateScope(v8Isolate); V8HandleScope v8HandleScope(v8Isolate); auto v8Context = v8Isolate->GetCurrentContext(); @@ -355,7 +415,7 @@ namespace Javet { const V8LocalName& propertyName, const v8::PropertyCallbackInfo& args) noexcept { FETCH_JNI_ENV(GlobalJavaVM); - v8::Isolate* v8Isolate = args.GetIsolate(); + auto v8Isolate = args.GetIsolate(); V8IsolateScope v8IsolateScope(v8Isolate); V8HandleScope v8HandleScope(v8Isolate); auto v8Context = v8Isolate->GetCurrentContext(); @@ -411,7 +471,7 @@ namespace Javet { const V8LocalValue& propertyValue, const v8::PropertyCallbackInfo& args) noexcept { FETCH_JNI_ENV(GlobalJavaVM); - v8::Isolate* v8Isolate = args.GetIsolate(); + auto v8Isolate = args.GetIsolate(); V8IsolateScope v8IsolateScope(v8Isolate); V8HandleScope v8HandleScope(v8Isolate); auto v8Context = v8Isolate->GetCurrentContext(); diff --git a/cpp/jni/javet_callbacks.h b/cpp/jni/javet_callbacks.h index 53d63e6b8..de9ebefd0 100644 --- a/cpp/jni/javet_callbacks.h +++ b/cpp/jni/javet_callbacks.h @@ -38,6 +38,11 @@ namespace Javet { v8::Isolate* v8Isolate, v8::GCType v8GCType, v8::GCCallbackFlags v8GCCallbackFlags) noexcept; + V8MaybeLocalModule JavetModuleResolveCallback( + V8LocalContext v8Context, + V8LocalString specifier, + V8LocalFixedArray importAssertions, + V8LocalModule referrer) noexcept; void JavetPropertyGetterCallback( V8LocalName propertyName, const v8::PropertyCallbackInfo& info) noexcept; @@ -49,12 +54,9 @@ namespace Javet { void OOMErrorCallback(const char* location, const v8::OOMDetails& oomDetails) noexcept; #endif void JavetPromiseRejectCallback(v8::PromiseRejectMessage message) noexcept; - - V8MaybeLocalModule JavetModuleResolveCallback( + V8MaybeLocalValue JavetSyntheticModuleEvaluationStepsCallback( V8LocalContext v8Context, - V8LocalString specifier, - V8LocalFixedArray importAssertions, - V8LocalModule referrer) noexcept; + V8LocalModule v8LocalModule); class JavetCallbackContextReference { public: diff --git a/cpp/jni/javet_converter.cpp b/cpp/jni/javet_converter.cpp index b79bdf2bf..83c5fa144 100644 --- a/cpp/jni/javet_converter.cpp +++ b/cpp/jni/javet_converter.cpp @@ -543,13 +543,13 @@ namespace Javet { ToV8PersistentReference(v8Context, v8Script)); } +#ifdef ENABLE_NODE jobject ToExternalV8Value( JNIEnv* jniEnv, const V8Runtime* v8Runtime, const V8LocalContext& v8Context, const V8InternalObject& v8InternalObject) noexcept { auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); -#ifdef ENABLE_NODE if (v8InternalObject.IsJSObject() || v8InternalObject.IsPrimitive() || v8InternalObject.IsJSArray() || v8InternalObject.IsJSTypedArray()) { auto v8LocalObject = v8::Utils::ToLocal(v8::internal::handle(v8InternalObject, v8InternalIsolate)); @@ -570,7 +570,15 @@ namespace Javet { else if (v8InternalObject.IsCode()) { LOG_DEBUG("Converter: Code is not supported."); } + return ToExternalV8ValueUndefined(jniEnv, v8Runtime); + } #else + jobject ToExternalV8Value( + JNIEnv* jniEnv, + const V8Runtime* v8Runtime, + const V8LocalContext& v8Context, + const v8::internal::Tagged& v8InternalObject) noexcept { + auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); if (v8::internal::IsJSObject(v8InternalObject) || v8::internal::IsPrimitive(v8InternalObject) || v8::internal::IsJSArray(v8InternalObject) || v8::internal::IsJSTypedArray(v8InternalObject)) { auto v8LocalObject = v8::Utils::ToLocal(v8::internal::handle(v8InternalObject, v8InternalIsolate)); @@ -591,9 +599,9 @@ namespace Javet { else if (v8::internal::IsCode(v8InternalObject)) { LOG_DEBUG("Converter: Code is not supported."); } -#endif return ToExternalV8ValueUndefined(jniEnv, v8Runtime); } +#endif jobject ToExternalV8Value( JNIEnv* jniEnv, diff --git a/cpp/jni/javet_converter.h b/cpp/jni/javet_converter.h index 15db65e71..38e03420d 100644 --- a/cpp/jni/javet_converter.h +++ b/cpp/jni/javet_converter.h @@ -152,7 +152,11 @@ namespace Javet { JNIEnv* jniEnv, const V8Runtime* v8Runtime, const V8LocalContext& v8Context, +#ifdef ENABLE_NODE const V8InternalObject& v8InternalObject) noexcept; +#else + const v8::internal::Tagged& v8InternalObject) noexcept; +#endif jobject ToExternalV8Value( JNIEnv* jniEnv, @@ -319,17 +323,29 @@ namespace Javet { static inline V8InternalContext ToV8InternalContext( const V8LocalContext& v8LocalContext) noexcept { +#ifdef ENABLE_NODE return V8InternalContext::cast(*v8::Utils::OpenHandle(*v8LocalContext)); +#else + return *V8InternalContext::cast(*v8::Utils::OpenHandle(*v8LocalContext)); +#endif } static inline V8InternalJSFunction ToV8InternalJSFunction( const V8LocalValue& v8LocalValue) noexcept { +#ifdef ENABLE_NODE return V8InternalJSFunction::cast(*v8::Utils::OpenHandle(*v8LocalValue)); +#else + return *V8InternalJSFunction::cast(*v8::Utils::OpenHandle(*v8LocalValue)); +#endif } static inline V8InternalScript ToV8InternalScript( const V8LocalScript& v8LocalScript) noexcept { +#ifdef ENABLE_NODE return V8InternalScript::cast(*v8::Utils::OpenHandle(*v8LocalScript)); +#else + return *V8InternalScript::cast(*v8::Utils::OpenHandle(*v8LocalScript)); +#endif } } } diff --git a/cpp/jni/javet_jni_function.cpp b/cpp/jni/javet_jni_function.cpp index 347f633fc..e541fc95e 100644 --- a/cpp/jni/javet_jni_function.cpp +++ b/cpp/jni/javet_jni_function.cpp @@ -71,13 +71,13 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionCanDi RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { +#ifdef ENABLE_NODE return v8InternalShared.CanDiscardCompiled(); +#else + return v8InternalShared->CanDiscardCompiled(); +#endif } } return false; @@ -147,13 +147,8 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionCopyS auto sourceV8LocalValue = sourceV8PersistentValuePointer->Get(v8Context->GetIsolate()); auto targetV8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); auto sourceV8InternalFunction = Javet::Converter::ToV8InternalJSFunction(sourceV8LocalValue); -#ifdef ENABLE_NODE auto targetV8InternalShared = targetV8InternalFunction.shared(); auto sourceV8InternalShared = sourceV8InternalFunction.shared(); -#else - auto targetV8InternalShared = *targetV8InternalFunction.shared(); - auto sourceV8InternalShared = *sourceV8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(sourceV8InternalShared) && IS_USER_DEFINED_FUNCTION(targetV8InternalShared)) { V8InternalDisallowGarbageCollection disallowGarbageCollection; auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); @@ -161,11 +156,19 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionCopyS targetV8InternalShared = *v8InternalIsolate->factory()->CloneSharedFunctionInfo( v8::internal::handle(sourceV8InternalShared, v8InternalIsolate)); // Clone the scope info +#ifdef ENABLE_NODE auto sourceScopeInfo = sourceV8InternalShared.scope_info(); +#else + auto sourceScopeInfo = sourceV8InternalShared->scope_info(); +#endif auto emptyBlocklistHandle = V8InternalStringSet::New(v8InternalIsolate); auto targetScopeInfo = *V8InternalScopeInfo::RecreateWithBlockList( v8InternalIsolate, v8::internal::handle(sourceScopeInfo, v8InternalIsolate), emptyBlocklistHandle); +#ifdef ENABLE_NODE targetV8InternalShared.set_raw_scope_info(targetScopeInfo); +#else + targetV8InternalShared->set_raw_scope_info(targetScopeInfo); +#endif targetV8InternalFunction.set_shared(targetV8InternalShared, V8InternalWriteBarrierMode::UPDATE_WRITE_BARRIER); success = true; } @@ -209,13 +212,13 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionDisca RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { +#ifdef ENABLE_NODE if (v8InternalShared.CanDiscardCompiled()) { +#else + if (v8InternalShared->CanDiscardCompiled()) { +#endif auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); V8InternalSharedFunctionInfo::DiscardCompiled(v8InternalIsolate, v8::internal::handle(v8InternalShared, v8InternalIsolate)); return true; @@ -230,19 +233,19 @@ JNIEXPORT jobjectArray JNICALL Java_com_caoccao_javet_interop_V8Native_functionG RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); +#ifdef ENABLE_NODE + if (IS_USER_DEFINED_FUNCTION(v8InternalShared) && v8InternalShared.is_wrapped()) { #else - auto v8InternalShared = *v8InternalFunction.shared(); + if (IS_USER_DEFINED_FUNCTION(v8InternalShared) && v8InternalShared->is_wrapped()) { #endif - if (IS_USER_DEFINED_FUNCTION(v8InternalShared) && v8InternalShared.is_wrapped()) { auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); auto wrappedArguments = v8InternalScript.wrapped_arguments(); #else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); - auto wrappedArguments = *v8InternalScript.wrapped_arguments(); + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + auto wrappedArguments = *v8InternalScript->wrapped_arguments(); #endif auto length = wrappedArguments.length(); if (length > 0) { @@ -265,18 +268,15 @@ JNIEXPORT jbyteArray JNICALL Java_com_caoccao_javet_interop_V8Native_functionGet if (IS_V8_FUNCTION(v8ValueType)) { RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); + if (v8InternalScript.is_wrapped()) { #else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + if (v8InternalScript->is_wrapped()) { #endif - if (v8InternalScript.is_wrapped()) { V8TryCatch v8TryCatch(v8Context->GetIsolate()); std::unique_ptr cachedDataPointer; cachedDataPointer.reset(v8::ScriptCompiler::CreateCodeCacheForFunction(v8LocalValue.As())); @@ -413,25 +413,27 @@ JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_functionGetScr if (IS_V8_FUNCTION(v8ValueType)) { V8InternalDisallowGarbageCollection disallowGarbageCollection; auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); auto v8InternalSource = V8InternalString::cast(v8InternalScript.source()); -#else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); - auto v8InternalSource = *V8InternalString::cast(v8InternalScript.source()); -#endif const int startPosition = v8InternalShared.StartPosition(); const int endPosition = v8InternalShared.EndPosition(); const int sourceLength = v8InternalSource.length(); auto sourceCode = v8InternalSource.ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, 0, sourceLength); +#else + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + auto v8InternalSource = V8InternalString::cast(v8InternalScript->source()); + const int startPosition = v8InternalShared->StartPosition(); + const int endPosition = v8InternalShared->EndPosition(); + const int sourceLength = v8InternalSource->length(); + auto sourceCode = v8InternalSource->ToCString( + V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, + 0, sourceLength); +#endif return jniEnv->NewObject( Javet::Converter::jclassIV8ValueFunctionScriptSource, Javet::Converter::jmethodIDIV8ValueFunctionScriptSourceConstructor, @@ -448,24 +450,25 @@ JNIEXPORT jstring JNICALL Java_com_caoccao_javet_interop_V8Native_functionGetSou RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); auto v8InternalSource = V8InternalString::cast(v8InternalScript.source()); -#else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); - auto v8InternalSource = *V8InternalString::cast(v8InternalScript.source()); -#endif const int startPosition = v8InternalShared.StartPosition(); const int endPosition = v8InternalShared.EndPosition(); auto sourceCode = v8InternalSource.ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, startPosition, endPosition - startPosition); +#else + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + auto v8InternalSource = V8InternalString::cast(v8InternalScript->source()); + const int startPosition = v8InternalShared->StartPosition(); + const int endPosition = v8InternalShared->EndPosition(); + auto sourceCode = v8InternalSource->ToCString( + V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, + startPosition, endPosition - startPosition); +#endif return Javet::Converter::ToJavaString(jniEnv, sourceCode.get()); } } @@ -477,13 +480,13 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionIsCom RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { +#ifdef ENABLE_NODE return v8InternalShared.is_compiled(); +#else + return v8InternalShared->is_compiled(); +#endif } } return false; @@ -494,13 +497,13 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionIsWra RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); if (IS_V8_FUNCTION(v8ValueType)) { auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { +#ifdef ENABLE_NODE return v8InternalShared.is_wrapped(); +#else + return v8InternalShared->is_wrapped(); +#endif } } return false; @@ -528,18 +531,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc if (IS_V8_FUNCTION(v8ValueType)) { V8InternalDisallowGarbageCollection disallowGarbageCollection; auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { #ifdef ENABLE_NODE auto v8InternalScopeInfo = v8InternalShared.scope_info(); + if (v8InternalScopeInfo.scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { #else - auto v8InternalScopeInfo = *v8InternalShared.scope_info(); + auto v8InternalScopeInfo = v8InternalShared->scope_info(); + if (v8InternalScopeInfo->scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { #endif - if (v8InternalScopeInfo.scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); auto mSourceCode = (jstring)jniEnv->CallObjectMethod(mScriptSource, Javet::Converter::jmethodIDIV8ValueFunctionScriptGetCode); auto umSourceCode = Javet::Converter::ToV8String(jniEnv, v8Context, mSourceCode); @@ -547,20 +547,27 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc const int endPosition = jniEnv->CallIntMethod(mScriptSource, Javet::Converter::jmethodIDIV8ValueFunctionScriptGetEndPosition); #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); -#else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); -#endif auto v8InternalSource = v8::Utils::OpenHandle(*umSourceCode); -#ifdef ENABLE_NODE bool sourceCodeEquals = v8InternalScript.source().StrictEquals(*v8InternalSource); + bool positionEquals = startPosition == v8InternalShared.StartPosition() && endPosition == v8InternalShared.EndPosition(); #else - bool sourceCodeEquals = V8InternalObject::StrictEquals(v8InternalScript.source(), *v8InternalSource); + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + auto v8InternalSource = v8::Utils::OpenHandle(*umSourceCode); + bool sourceCodeEquals = V8InternalObject::StrictEquals(v8InternalScript->source(), *v8InternalSource); + bool positionEquals = startPosition == v8InternalShared->StartPosition() && endPosition == v8InternalShared->EndPosition(); #endif - bool positionEquals = startPosition == v8InternalShared.StartPosition() && endPosition == v8InternalShared.EndPosition(); if (!sourceCodeEquals || !positionEquals) { +#ifdef ENABLE_NODE if (v8InternalShared.CanDiscardCompiled()) { +#else + if (v8InternalShared->CanDiscardCompiled()) { +#endif V8InternalSharedFunctionInfo::DiscardCompiled(v8InternalIsolate, v8::internal::handle(v8InternalShared, v8InternalIsolate)); +#ifdef ENABLE_NODE v8InternalShared.set_allows_lazy_compilation(true); +#else + v8InternalShared->set_allows_lazy_compilation(true); +#endif } if (!sourceCodeEquals) { auto v8InternalScriptHandle = v8::internal::handle(v8InternalScript, v8InternalIsolate); @@ -571,7 +578,7 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc v8InternalShared.set_script(*clonedV8InternalScript); #else auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle, v8InternalSource); - v8InternalShared.set_script(*clonedV8InternalScript, v8::kReleaseStore); + v8InternalShared->set_script(*clonedV8InternalScript, v8::kReleaseStore); #endif } else { @@ -583,7 +590,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc } } if (!positionEquals) { +#ifdef ENABLE_NODE v8InternalScopeInfo.SetPositionInfo(startPosition, endPosition); +#else + v8InternalScopeInfo->SetPositionInfo(startPosition, endPosition); +#endif } success = true; } @@ -601,29 +612,29 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo if (IS_V8_FUNCTION(v8ValueType)) { V8InternalDisallowGarbageCollection disallowGarbageCollection; auto v8InternalFunction = Javet::Converter::ToV8InternalJSFunction(v8LocalValue); -#ifdef ENABLE_NODE auto v8InternalShared = v8InternalFunction.shared(); -#else - auto v8InternalShared = *v8InternalFunction.shared(); -#endif if (IS_USER_DEFINED_FUNCTION(v8InternalShared)) { #ifdef ENABLE_NODE auto v8InternalScopeInfo = v8InternalShared.scope_info(); + while (v8InternalScopeInfo.scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { #else - auto v8InternalScopeInfo = *v8InternalShared.scope_info(); + auto v8InternalScopeInfo = v8InternalShared->scope_info(); + while (v8InternalScopeInfo->scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { #endif - while (v8InternalScopeInfo.scope_type() == V8InternalScopeType::FUNCTION_SCOPE) { auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script()); auto v8InternalSource = V8InternalString::cast(v8InternalScript.source()); -#else - auto v8InternalScript = *V8InternalScript::cast(v8InternalShared.script()); - auto v8InternalSource = *V8InternalString::cast(v8InternalScript.source()); -#endif const int startPosition = v8InternalShared.StartPosition(); const int endPosition = v8InternalShared.EndPosition(); const int sourceLength = v8InternalSource.length(); +#else + auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); + auto v8InternalSource = V8InternalString::cast(v8InternalScript->source()); + const int startPosition = v8InternalShared->StartPosition(); + const int endPosition = v8InternalShared->EndPosition(); + const int sourceLength = v8InternalSource->length(); +#endif // Build the new source code. auto umSourceCode = Javet::Converter::ToV8String(jniEnv, v8Context, mSourceCode); @@ -631,9 +642,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo V8LocalString newSourceCode; if (startPosition > 0) { int utf8Length = 0; +#ifdef ENABLE_NODE auto stdStringHeader(v8InternalSource.ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, 0, startPosition, &utf8Length)); +#else + auto stdStringHeader(v8InternalSource->ToCString( + V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, + 0, startPosition, &utf8Length)); +#endif auto v8MaybeLocalStringHeader = v8::String::NewFromUtf8( v8Context->GetIsolate(), stdStringHeader.get(), v8::NewStringType::kNormal, utf8Length); if (v8MaybeLocalStringHeader.IsEmpty()) { @@ -651,9 +668,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo } if (endPosition < sourceLength) { int utf8Length = 0; +#ifdef ENABLE_NODE auto stdStringFooter(v8InternalSource.ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, endPosition, sourceLength - endPosition, &utf8Length)); +#else + auto stdStringFooter(v8InternalSource->ToCString( + V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, + endPosition, sourceLength - endPosition, &utf8Length)); +#endif auto v8MaybeLocalStringFooter = v8::String::NewFromUtf8( v8Context->GetIsolate(), stdStringFooter.get(), v8::NewStringType::kNormal, utf8Length); if (v8MaybeLocalStringFooter.IsEmpty()) { @@ -683,17 +706,25 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo auto newV8InternalSource = v8::Utils::OpenHandle(*newSourceCode); #ifdef ENABLE_NODE bool sourceCodeEquals = v8InternalSource.StrictEquals(*newV8InternalSource); + bool positionEquals = newEndPosition == v8InternalShared.EndPosition(); #else bool sourceCodeEquals = V8InternalObject::StrictEquals(v8InternalSource, *newV8InternalSource); + bool positionEquals = newEndPosition == v8InternalShared->EndPosition(); #endif - bool positionEquals = newEndPosition == v8InternalShared.EndPosition(); if (!sourceCodeEquals || !positionEquals) { // Discard compiled data and set lazy compile. +#ifdef ENABLE_NODE if (v8InternalShared.CanDiscardCompiled()) { V8InternalSharedFunctionInfo::DiscardCompiled(v8InternalIsolate, v8::internal::handle(v8InternalShared, v8InternalIsolate)); v8InternalShared.set_allows_lazy_compilation(true); } +#else + if (v8InternalShared->CanDiscardCompiled()) { + V8InternalSharedFunctionInfo::DiscardCompiled(v8InternalIsolate, v8::internal::handle(v8InternalShared, v8InternalIsolate)); + v8InternalShared->set_allows_lazy_compilation(true); + } +#endif if (!sourceCodeEquals) { auto v8InternalScriptHandle = v8::internal::handle(v8InternalScript, v8InternalIsolate); if (mCloneScript) { @@ -703,7 +734,7 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo v8InternalShared.set_script(*clonedV8InternalScript); #else auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle, newV8InternalSource); - v8InternalShared.set_script(*clonedV8InternalScript, v8::kReleaseStore); + v8InternalShared->set_script(*clonedV8InternalScript, v8::kReleaseStore); #endif } else { @@ -715,7 +746,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo } } if (!positionEquals) { +#ifdef ENABLE_NODE v8InternalScopeInfo.SetPositionInfo(startPosition, newEndPosition); +#else + v8InternalScopeInfo->SetPositionInfo(startPosition, newEndPosition); +#endif } success = true; } diff --git a/cpp/jni/javet_jni_module.cpp b/cpp/jni/javet_jni_module.cpp index 0d68c90c0..18e2a0a95 100644 --- a/cpp/jni/javet_jni_module.cpp +++ b/cpp/jni/javet_jni_module.cpp @@ -52,6 +52,51 @@ JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_moduleCompile return nullptr; } +JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_moduleCreate +(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jstring mModuleName, jlong v8ValueHandle, jint v8ValueType) { + RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); + if (v8LocalValue->IsObject()) { + V8TryCatch v8TryCatch(v8Context->GetIsolate()); + auto v8LocalObject = v8LocalValue.As(); + auto v8MaybeLocalArray = v8LocalObject->GetPropertyNames(v8Context); + if (v8MaybeLocalArray.IsEmpty()) { + if (Javet::Exceptions::HandlePendingException(jniEnv, v8Runtime, v8Context)) { + return nullptr; + } + } + else { + auto v8LocalArray = v8MaybeLocalArray.ToLocalChecked(); + std::vector exportNames; + int length = v8LocalArray->Length(); + for (int i = 0; i < length; ++i) { + auto v8MaybeLocalValue = v8LocalArray->Get(v8Context, i); + if (!v8MaybeLocalValue.IsEmpty()) { + auto v8LocalValueKey = v8MaybeLocalValue.ToLocalChecked(); + if (v8LocalValueKey->IsString() || v8LocalValueKey->IsStringObject()) { + exportNames.emplace_back(v8LocalValueKey.As()); + } + } + } + auto v8LocalModule = v8::Module::CreateSyntheticModule( + v8Context->GetIsolate(), + Javet::Converter::ToV8String(jniEnv, v8Context, mModuleName), + exportNames, + Javet::Callback::JavetSyntheticModuleEvaluationStepsCallback); + std::string stringKey("module:{}" + std::to_string(v8LocalModule->GetIdentityHash())); + auto v8LocalStringKey = Javet::Converter::ToV8String(v8Context, stringKey.c_str()); + auto v8LocalPrivateKey = v8::Private::ForApi(v8Context->GetIsolate(), v8LocalStringKey); + auto v8GlobalObject = v8Runtime->v8GlobalObject.Get(v8Context->GetIsolate()); + v8GlobalObject->SetPrivate(v8Context, v8LocalPrivateKey, v8LocalObject); + if (v8TryCatch.HasCaught()) { + return Javet::Exceptions::ThrowJavetExecutionException(jniEnv, v8Runtime, v8Context, v8TryCatch); + } + return Javet::Converter::ToExternalV8Module(jniEnv, v8Runtime, v8Context, v8LocalModule); + } + } + Javet::Exceptions::ClearJNIException(jniEnv); + return Javet::Converter::ToExternalV8ValueUndefined(jniEnv, v8Runtime); +} + JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_moduleEvaluate (JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle, jint v8ValueType, jboolean mResultRequired) { RUNTIME_AND_MODULE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); @@ -172,3 +217,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleInstant } return false; } + +JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleIsSourceTextModule +(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle, jint v8ValueType) { + RUNTIME_AND_MODULE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); + return v8LocalModule->IsSourceTextModule(); +} + +JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_moduleIsSyntheticModule +(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle, jint v8ValueType) { + RUNTIME_AND_MODULE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle); + return v8LocalModule->IsSyntheticModule(); +} diff --git a/cpp/jni/javet_resource_node.rc b/cpp/jni/javet_resource_node.rc index e86b11691..ff5eb5eb9 100644 --- a/cpp/jni/javet_resource_node.rc +++ b/cpp/jni/javet_resource_node.rc @@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,0,0,0 - PRODUCTVERSION 3,0,0,0 + FILEVERSION 3,0,1,0 + PRODUCTVERSION 3,0,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -79,12 +79,12 @@ BEGIN BEGIN VALUE "CompanyName", "caoccao.com" VALUE "FileDescription", "caoccao.com" - VALUE "FileVersion", "3.0.0.0" - VALUE "InternalName", "libjavet-node-windows-x86_64.v.3.0.0.dll" + VALUE "FileVersion", "3.0.1.0" + VALUE "InternalName", "libjavet-node-windows-x86_64.v.3.0.1.dll" VALUE "LegalCopyright", "Copyright (C) 2021-2023" - VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.3.0.0.dll" + VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.3.0.1.dll" VALUE "ProductName", "Javet Windows" - VALUE "ProductVersion", "3.0.0.0" + VALUE "ProductVersion", "3.0.1.0" END END BLOCK "VarFileInfo" diff --git a/cpp/jni/javet_resource_v8.rc b/cpp/jni/javet_resource_v8.rc index 607e0f1d8..b3e7f7953 100644 --- a/cpp/jni/javet_resource_v8.rc +++ b/cpp/jni/javet_resource_v8.rc @@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,0,0,0 - PRODUCTVERSION 3,0,0,0 + FILEVERSION 3,0,1,0 + PRODUCTVERSION 3,0,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -79,12 +79,12 @@ BEGIN BEGIN VALUE "CompanyName", "caoccao.com" VALUE "FileDescription", "caoccao.com" - VALUE "FileVersion", "3.0.0.0" - VALUE "InternalName", "libjavet-v8-windows-x86_64.v.3.0.0.dll" + VALUE "FileVersion", "3.0.1.0" + VALUE "InternalName", "libjavet-v8-windows-x86_64.v.3.0.1.dll" VALUE "LegalCopyright", "Copyright (C) 2021-2023" - VALUE "OriginalFilename", "libjavet-v8-windows-x86_64.v.3.0.0.dll" + VALUE "OriginalFilename", "libjavet-v8-windows-x86_64.v.3.0.1.dll" VALUE "ProductName", "Javet Windows" - VALUE "ProductVersion", "3.0.0.0" + VALUE "ProductVersion", "3.0.1.0" END END BLOCK "VarFileInfo" diff --git a/cpp/jni/javet_v8_internal.h b/cpp/jni/javet_v8_internal.h index 0660637e1..1a81a7e17 100644 --- a/cpp/jni/javet_v8_internal.h +++ b/cpp/jni/javet_v8_internal.h @@ -83,12 +83,11 @@ constexpr auto CONVERT_OFFSET_FOR_SCOPE_INFO(T offset) { return (offset - V8InternalHeapObject::kHeaderSize) / v8::internal::kTaggedSize; } -template -constexpr auto IS_API_FUNCTION(T v8InternalShared) { - return !v8InternalShared.native() && v8InternalShared.IsApiFunction(); -} - template constexpr auto IS_USER_DEFINED_FUNCTION(T v8InternalShared) { +#ifdef ENABLE_NODE return !v8InternalShared.native() && !v8InternalShared.IsApiFunction() && v8InternalShared.IsUserJavaScript(); +#else + return !v8InternalShared->native() && !v8InternalShared->IsApiFunction() && v8InternalShared->IsUserJavaScript(); +#endif } diff --git a/cpp/jni/javet_v8_runtime.cpp b/cpp/jni/javet_v8_runtime.cpp index 48d3d831f..094c26c55 100644 --- a/cpp/jni/javet_v8_runtime.cpp +++ b/cpp/jni/javet_v8_runtime.cpp @@ -311,7 +311,11 @@ namespace Javet { jobject V8Runtime::SafeToExternalV8Value( JNIEnv * jniEnv, const V8LocalContext & v8Context, +#ifdef ENABLE_NODE const V8InternalObject & v8InternalObject) noexcept { +#else + const v8::internal::Tagged& v8InternalObject) noexcept { +#endif V8TryCatch v8TryCatch(v8Context->GetIsolate()); jobject externalV8Value = Javet::Converter::ToExternalV8Value(jniEnv, this, v8Context, v8InternalObject); if (v8TryCatch.HasCaught()) { diff --git a/cpp/jni/javet_v8_runtime.h b/cpp/jni/javet_v8_runtime.h index e17ae462a..1f03dd2d5 100644 --- a/cpp/jni/javet_v8_runtime.h +++ b/cpp/jni/javet_v8_runtime.h @@ -143,7 +143,11 @@ namespace Javet { jobject SafeToExternalV8Value( JNIEnv* jniEnv, const V8LocalContext& v8Context, +#ifdef ENABLE_NODE const V8InternalObject& v8InternalObject) noexcept; +#else + const v8::internal::Tagged& v8InternalObject) noexcept; +#endif jobject SafeToExternalV8Value( JNIEnv* jniEnv, diff --git a/docker/android/base.Dockerfile b/docker/android/base.Dockerfile index dde3ae715..b3d1a0f65 100644 --- a/docker/android/base.Dockerfile +++ b/docker/android/base.Dockerfile @@ -13,9 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Usage: docker build -t sjtucaocao/javet-android:3.0.0 -f docker/android/base.Dockerfile . +# Usage: docker build -t sjtucaocao/javet-android:3.0.1 -f docker/android/base.Dockerfile . -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_V8_VERSION=11.9.169.6 FROM ubuntu:20.04 WORKDIR / diff --git a/docker/android/build.Dockerfile b/docker/android/build.Dockerfile index bcc6db3d1..cf2198364 100644 --- a/docker/android/build.Dockerfile +++ b/docker/android/build.Dockerfile @@ -15,7 +15,7 @@ # Usage: docker build -t javet-android:local -f docker/android/build.Dockerfile . -FROM sjtucaocao/javet-android:3.0.0 +FROM sjtucaocao/javet-android:3.0.1 WORKDIR / # Copy Javet diff --git a/docker/linux-arm64/base_all_in_one.Dockerfile b/docker/linux-arm64/base_all_in_one.Dockerfile index 73043da28..f7268c35d 100644 --- a/docker/linux-arm64/base_all_in_one.Dockerfile +++ b/docker/linux-arm64/base_all_in_one.Dockerfile @@ -13,10 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Usage: docker build -t sjtucaocao/javet-arm64:3.0.0 -f docker/linux-arm64/base_all_in_one.Dockerfile . +# Usage: docker build -t sjtucaocao/javet-arm64:3.0.1 -f docker/linux-arm64/base_all_in_one.Dockerfile . ARG JAVET_NODE_VERSION=18.15.0 -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_V8_VERSION=11.9.169.6 FROM ubuntu:20.04 WORKDIR / diff --git a/docker/linux-arm64/base_gradle.Dockerfile b/docker/linux-arm64/base_gradle.Dockerfile index 0327ca4f9..19c444910 100644 --- a/docker/linux-arm64/base_gradle.Dockerfile +++ b/docker/linux-arm64/base_gradle.Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:arm64-3.0.0 \ +# -t sjtucaocao/javet:arm64-3.0.1 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ # -f docker/linux-arm64/base_gradle.Dockerfile . diff --git a/docker/linux-arm64/base_v8.Dockerfile b/docker/linux-arm64/base_v8.Dockerfile index 8717fc27a..fc10bcf09 100644 --- a/docker/linux-arm64/base_v8.Dockerfile +++ b/docker/linux-arm64/base_v8.Dockerfile @@ -14,13 +14,13 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:arm64-base-v8_11.8.172.15 \ +# -t sjtucaocao/javet:arm64-base-v8_11.9.169.6 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ -# --build-arg JAVET_V8_VERSION=11.8.172.15 \ +# --build-arg JAVET_V8_VERSION=11.9.169.6 \ # -f docker/linux-arm64/base_v8.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_V8_VERSION=11.9.169.6 FROM ${JAVET_REPO}:arm64-base-jvm diff --git a/docker/linux-arm64/build_artifact.Dockerfile b/docker/linux-arm64/build_artifact.Dockerfile index 59c5ebaee..168ec9a77 100644 --- a/docker/linux-arm64/build_artifact.Dockerfile +++ b/docker/linux-arm64/build_artifact.Dockerfile @@ -18,13 +18,13 @@ # --build-arg JAVET_REPO=sjtucaocao/javet \ # --build-arg JAVET_NODE_VERSION=18.12.1 \ # --build-arg JAVET_V8_VERSION=10.8.168.20 \ -# --build-arg JAVET_VERSION=3.0.0 \ +# --build-arg JAVET_VERSION=3.0.1 \ # -f docker/linux-arm64/build_artifact.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet ARG JAVET_NODE_VERSION=18.12.1 ARG JAVET_V8_VERSION=10.8.168.20 -ARG JAVET_VERSION=3.0.0 +ARG JAVET_VERSION=3.0.1 FROM ${JAVET_REPO}:arm64-base-node_${JAVET_NODE_VERSION} as base-node diff --git a/docker/linux-x86_64/base_all_in_one.Dockerfile b/docker/linux-x86_64/base_all_in_one.Dockerfile index 2f9507013..2596e6dac 100644 --- a/docker/linux-x86_64/base_all_in_one.Dockerfile +++ b/docker/linux-x86_64/base_all_in_one.Dockerfile @@ -13,10 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Usage: docker build -t sjtucaocao/javet:3.0.0 -f docker/linux-x86_64/base_all_in_one.Dockerfile . +# Usage: docker build -t sjtucaocao/javet:3.0.1 -f docker/linux-x86_64/base_all_in_one.Dockerfile . -ARG JAVET_NODE_VERSION=20.8.0 -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_NODE_VERSION=20.9.0 +ARG JAVET_V8_VERSION=11.9.169.6 FROM ubuntu:20.04 WORKDIR / diff --git a/docker/linux-x86_64/base_gradle.Dockerfile b/docker/linux-x86_64/base_gradle.Dockerfile index 7b6b2cc20..97adbf122 100644 --- a/docker/linux-x86_64/base_gradle.Dockerfile +++ b/docker/linux-x86_64/base_gradle.Dockerfile @@ -14,7 +14,7 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:x86_64-3.0.0 \ +# -t sjtucaocao/javet:x86_64-3.0.1 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ # -f docker/linux-x86_64/base_gradle.Dockerfile . diff --git a/docker/linux-x86_64/base_node.Dockerfile b/docker/linux-x86_64/base_node.Dockerfile index 6f3ec482a..4e3e66dab 100644 --- a/docker/linux-x86_64/base_node.Dockerfile +++ b/docker/linux-x86_64/base_node.Dockerfile @@ -14,13 +14,13 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:x86_64-base-node_20.8.0 \ +# -t sjtucaocao/javet:x86_64-base-node_20.9.0 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ -# --build-arg JAVET_NODE_VERSION=20.8.0 \ +# --build-arg JAVET_NODE_VERSION=20.9.0 \ # -f docker/linux-x86_64/base_node.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet -ARG JAVET_NODE_VERSION=20.8.0 +ARG JAVET_NODE_VERSION=20.9.0 FROM ${JAVET_REPO}:x86_64-base-jvm diff --git a/docker/linux-x86_64/base_v8.Dockerfile b/docker/linux-x86_64/base_v8.Dockerfile index cb9049a81..685dee5ae 100644 --- a/docker/linux-x86_64/base_v8.Dockerfile +++ b/docker/linux-x86_64/base_v8.Dockerfile @@ -14,13 +14,13 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:x86_64-base-v8_11.8.172.15 \ +# -t sjtucaocao/javet:x86_64-base-v8_11.9.169.6 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ -# --build-arg JAVET_V8_VERSION=11.8.172.15 \ +# --build-arg JAVET_V8_VERSION=11.9.169.6 \ # -f docker/linux-x86_64/base_v8.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_V8_VERSION=11.9.169.6 FROM ${JAVET_REPO}:x86_64-base-jvm diff --git a/docker/linux-x86_64/build_all_in_one.Dockerfile b/docker/linux-x86_64/build_all_in_one.Dockerfile index b99a6d2d6..706534272 100644 --- a/docker/linux-x86_64/build_all_in_one.Dockerfile +++ b/docker/linux-x86_64/build_all_in_one.Dockerfile @@ -15,7 +15,7 @@ # Usage: docker build -t javet:local -f docker/linux-x86_64/build_all_in_one.Dockerfile . -FROM sjtucaocao/javet:3.0.0 +FROM sjtucaocao/javet:3.0.1 WORKDIR / # Copy Javet diff --git a/docker/linux-x86_64/build_artifact.Dockerfile b/docker/linux-x86_64/build_artifact.Dockerfile index 9411f3f81..f459c6e82 100644 --- a/docker/linux-x86_64/build_artifact.Dockerfile +++ b/docker/linux-x86_64/build_artifact.Dockerfile @@ -18,13 +18,13 @@ # --build-arg JAVET_REPO=sjtucaocao/javet \ # --build-arg JAVET_NODE_VERSION=18.12.1 \ # --build-arg JAVET_V8_VERSION=10.8.168.20 \ -# --build-arg JAVET_VERSION=3.0.0 \ +# --build-arg JAVET_VERSION=3.0.1 \ # -f docker/linux-x86_64/build_artifact.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet ARG JAVET_NODE_VERSION=18.12.1 ARG JAVET_V8_VERSION=10.8.168.20 -ARG JAVET_VERSION=3.0.0 +ARG JAVET_VERSION=3.0.1 FROM ${JAVET_REPO}:x86_64-base-node_${JAVET_NODE_VERSION} as base-v8 diff --git a/docker/windows-x86_64/base.Dockerfile b/docker/windows-x86_64/base.Dockerfile index e7735403a..04a33901d 100644 --- a/docker/windows-x86_64/base.Dockerfile +++ b/docker/windows-x86_64/base.Dockerfile @@ -29,10 +29,10 @@ # The following dockerfile has been out of date because it still uses # Visual Studio 2019 Community. Please contact the maintainer if you want an upgrade. -# Usage: docker build -t sjtucaocao/javet-windows:3.0.0 -m 4G -f docker/windows-x86_64/base.Dockerfile . +# Usage: docker build -t sjtucaocao/javet-windows:3.0.1 -m 4G -f docker/windows-x86_64/base.Dockerfile . -ARG JAVET_NODE_VERSION=20.8.0 -ARG JAVET_V8_VERSION=11.8.172.15 +ARG JAVET_NODE_VERSION=20.9.0 +ARG JAVET_V8_VERSION=11.9.169.6 # https://hub.docker.com/_/microsoft-windows FROM mcr.microsoft.com/windows:20H2-amd64 diff --git a/docker/windows-x86_64/build.Dockerfile b/docker/windows-x86_64/build.Dockerfile index d27791f63..124bab59c 100644 --- a/docker/windows-x86_64/build.Dockerfile +++ b/docker/windows-x86_64/build.Dockerfile @@ -15,7 +15,7 @@ # Usage: docker build -t javet:local -f docker/windows-x86_64/build.Dockerfile . -FROM sjtucaocao/javet-windows:3.0.0 +FROM sjtucaocao/javet-windows:3.0.1 SHELL ["cmd", "/S", "/C"] WORKDIR / diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 175b1e97e..fd5ac10f0 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '3.0.0', + VERSION: '3.0.1', LANGUAGE: 'en, zh-CN', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/conf.py b/docs/conf.py index 532f9b766..8fefa731a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,7 @@ author = 'Sam Cao' # The full version, including alpha/beta/rc tags -release = '3.0.0' +release = '3.0.1' # -- General configuration --------------------------------------------------- diff --git a/docs/development/build.html b/docs/development/build.html index 6ba65c9df..d4ea415ae 100644 --- a/docs/development/build.html +++ b/docs/development/build.html @@ -6,7 +6,7 @@ - Build Javet - Javet 3.0.0 documentation + Build Javet - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation
diff --git a/docs/development/build.rst b/docs/development/build.rst index 1ab0d39dc..14ff8e317 100644 --- a/docs/development/build.rst +++ b/docs/development/build.rst @@ -24,11 +24,11 @@ Build Environment Linux Environment ----------------- -* Ubuntu 20.04+ +* Ubuntu 22.04+ * CMake 3.25.1+ * JDK 8 * Gradle 8.1+ -* GCC 10+ +* GCC 11+ * Python 3.9+ MacOS Environment @@ -56,7 +56,7 @@ Windows Environment Android Environment ------------------- -* Ubuntu 20.04+ or Ubuntu 20.04+ in the WSL2 on the Latest Windows 10 +* Ubuntu 22.04+ or Ubuntu 22.04+ in the WSL2 on the Latest Windows 10 * CMake 3.25.1+ * JDK 8 * Gradle 8.1+ diff --git a/docs/development/build_javet_from_scratch.html b/docs/development/build_javet_from_scratch.html index 38f236fd9..d52039b11 100644 --- a/docs/development/build_javet_from_scratch.html +++ b/docs/development/build_javet_from_scratch.html @@ -6,7 +6,7 @@ - Build Javet from Scratch - Javet 3.0.0 documentation + Build Javet from Scratch - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -716,7 +716,7 @@

Build Javet for Android

- + diff --git a/docs/development/build_javet_with_docker.html b/docs/development/build_javet_with_docker.html index 7f2ef8fcd..f0de98787 100644 --- a/docs/development/build_javet_with_docker.html +++ b/docs/development/build_javet_with_docker.html @@ -6,7 +6,7 @@ - Build Javet with Docker - Javet 3.0.0 documentation + Build Javet with Docker - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -490,7 +490,7 @@

Build Javet for Android on Linux or Windows +

diff --git a/docs/development/debug_with_chrome_developer_tools.html b/docs/development/debug_with_chrome_developer_tools.html index 90d53d1c0..0fe082b3c 100644 --- a/docs/development/debug_with_chrome_developer_tools.html +++ b/docs/development/debug_with_chrome_developer_tools.html @@ -6,7 +6,7 @@ - Debug with Chrome Developer Tools - Javet 3.0.0 documentation + Debug with Chrome Developer Tools - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -458,7 +458,7 @@

Customization +

diff --git a/docs/development/design.html b/docs/development/design.html index e9d58a13c..44f50c506 100644 --- a/docs/development/design.html +++ b/docs/development/design.html @@ -6,7 +6,7 @@ - Javet Design - Javet 3.0.0 documentation + Javet Design - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -577,7 +577,7 @@

Memory Leak Detection

- + diff --git a/docs/development/index.html b/docs/development/index.html index 04061a8cd..5bafe1a64 100644 --- a/docs/development/index.html +++ b/docs/development/index.html @@ -6,7 +6,7 @@ - Development - Javet 3.0.0 documentation + Development - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -390,7 +390,7 @@

Development +

diff --git a/docs/development/performance.html b/docs/development/performance.html index fdb961fd1..c604022f9 100644 --- a/docs/development/performance.html +++ b/docs/development/performance.html @@ -6,7 +6,7 @@ - Javet Performance - Javet 3.0.0 documentation + Javet Performance - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -352,7 +352,7 @@

Javet Performance +

diff --git a/docs/development/test.html b/docs/development/test.html index be0bf54ee..41a66aea2 100644 --- a/docs/development/test.html +++ b/docs/development/test.html @@ -6,7 +6,7 @@ - Test Javet - Javet 3.0.0 documentation + Test Javet - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -353,7 +353,7 @@

Test Javet +

diff --git a/docs/development/tools.html b/docs/development/tools.html index a944279b4..17544b74a 100644 --- a/docs/development/tools.html +++ b/docs/development/tools.html @@ -6,7 +6,7 @@ - Development Tools - Javet 3.0.0 documentation + Development Tools - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -404,7 +404,7 @@

Python 3.8+ (Optional)

- + diff --git a/docs/faq/background/history_with_j2v8.html b/docs/faq/background/history_with_j2v8.html index 951710722..c9005dca4 100644 --- a/docs/faq/background/history_with_j2v8.html +++ b/docs/faq/background/history_with_j2v8.html @@ -6,7 +6,7 @@ - History with J2V8 - Javet 3.0.0 documentation + History with J2V8 - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -449,7 +449,7 @@

Why not Deploy J2V8 to Maven Repository? +

diff --git a/docs/faq/background/index.html b/docs/faq/background/index.html index 3c8fb7098..cd8ca7235 100644 --- a/docs/faq/background/index.html +++ b/docs/faq/background/index.html @@ -6,7 +6,7 @@ - Background - Javet 3.0.0 documentation + Background - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -357,7 +357,7 @@

Background +

diff --git a/docs/faq/background/what_is_the_motivation.html b/docs/faq/background/what_is_the_motivation.html index d1a69e9d8..52da190bb 100644 --- a/docs/faq/background/what_is_the_motivation.html +++ b/docs/faq/background/what_is_the_motivation.html @@ -6,7 +6,7 @@ - What is the Motivation? - Javet 3.0.0 documentation + What is the Motivation? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -355,7 +355,7 @@

What is the Motivation?

- + diff --git a/docs/faq/development/how_to_think_in_javet.html b/docs/faq/development/how_to_think_in_javet.html index 47e83e046..b96af63fc 100644 --- a/docs/faq/development/how_to_think_in_javet.html +++ b/docs/faq/development/how_to_think_in_javet.html @@ -6,7 +6,7 @@ - How to Think in Javet? - Javet 3.0.0 documentation + How to Think in Javet? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -410,7 +410,7 @@

Learn from Unit Test

- + diff --git a/docs/faq/development/index.html b/docs/faq/development/index.html index 9ac6ea391..1f204658e 100644 --- a/docs/faq/development/index.html +++ b/docs/faq/development/index.html @@ -6,7 +6,7 @@ - Development - Javet 3.0.0 documentation + Development - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -359,7 +359,7 @@

Development +

diff --git a/docs/faq/development/where_are_es6_api_in_v8_mode.html b/docs/faq/development/where_are_es6_api_in_v8_mode.html index 72afadab2..9278831fd 100644 --- a/docs/faq/development/where_are_es6_api_in_v8_mode.html +++ b/docs/faq/development/where_are_es6_api_in_v8_mode.html @@ -6,7 +6,7 @@ - Where are ES6 API in V8 Mode? - Javet 3.0.0 documentation + Where are ES6 API in V8 Mode? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -353,7 +353,7 @@

Where are ES6 API in V8 Mode? +

diff --git a/docs/faq/development/where_are_the_examples.html b/docs/faq/development/where_are_the_examples.html index 27876798e..dcb0cf656 100644 --- a/docs/faq/development/where_are_the_examples.html +++ b/docs/faq/development/where_are_the_examples.html @@ -6,7 +6,7 @@ - Where are the Examples? - Javet 3.0.0 documentation + Where are the Examples? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -358,7 +358,7 @@

Where are the Examples?

- + diff --git a/docs/faq/development/why_is_the_inspector_disabled_in_node_js_mode.html b/docs/faq/development/why_is_the_inspector_disabled_in_node_js_mode.html index aa79ec370..34e640414 100644 --- a/docs/faq/development/why_is_the_inspector_disabled_in_node_js_mode.html +++ b/docs/faq/development/why_is_the_inspector_disabled_in_node_js_mode.html @@ -6,7 +6,7 @@ - Why is the Inspector Disabled in Node.js Mode? - Javet 3.0.0 documentation + Why is the Inspector Disabled in Node.js Mode? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -356,7 +356,7 @@

Why is the Inspector Disabled in Node.js Mode? +

diff --git a/docs/faq/environment/can_javet_support_legacy_linux.html b/docs/faq/environment/can_javet_support_legacy_linux.html index 5e8cae20c..7948b2b1c 100644 --- a/docs/faq/environment/can_javet_support_legacy_linux.html +++ b/docs/faq/environment/can_javet_support_legacy_linux.html @@ -6,7 +6,7 @@ - Can Javet Support Legacy Linux? - Javet 3.0.0 documentation + Can Javet Support Legacy Linux? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -381,7 +381,7 @@

Can Javet Support Legacy Linux? +

diff --git a/docs/faq/environment/index.html b/docs/faq/environment/index.html index c81d30972..992ce1cf0 100644 --- a/docs/faq/environment/index.html +++ b/docs/faq/environment/index.html @@ -6,7 +6,7 @@ - Environment - Javet 3.0.0 documentation + Environment - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -356,7 +356,7 @@

Environment +

diff --git a/docs/faq/index.html b/docs/faq/index.html index 10bc10b8d..8854c2102 100644 --- a/docs/faq/index.html +++ b/docs/faq/index.html @@ -6,7 +6,7 @@ - FAQ - Javet 3.0.0 documentation + FAQ - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -378,7 +378,7 @@

FAQ#

- + diff --git a/docs/faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.html b/docs/faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.html index df8262971..0e0a7b559 100644 --- a/docs/faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.html +++ b/docs/faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.html @@ -6,7 +6,7 @@ - A dynamic link library (DLL) initialization routine failed - Javet 3.0.0 documentation + A dynamic link library (DLL) initialization routine failed - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -352,7 +352,7 @@

A dynamic link library (DLL) initialization routine failed +

diff --git a/docs/faq/troubleshooting/can_i18n_be_supported.html b/docs/faq/troubleshooting/can_i18n_be_supported.html index ad26d8bc8..e7faeb24c 100644 --- a/docs/faq/troubleshooting/can_i18n_be_supported.html +++ b/docs/faq/troubleshooting/can_i18n_be_supported.html @@ -6,7 +6,7 @@ - Can i18n be Supported? - Javet 3.0.0 documentation + Can i18n be Supported? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -358,7 +358,7 @@

Can i18n be Supported?

- + diff --git a/docs/faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.html b/docs/faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.html index 24b5181ee..cdd2d76b3 100644 --- a/docs/faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.html +++ b/docs/faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.html @@ -6,7 +6,7 @@ - Can I Debug Javet in Chrome DevTools? - Javet 3.0.0 documentation + Can I Debug Javet in Chrome DevTools? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -353,7 +353,7 @@

Can I Debug Javet in Chrome DevTools? +

diff --git a/docs/faq/troubleshooting/index.html b/docs/faq/troubleshooting/index.html index 49d3dacb8..a65a9e2f4 100644 --- a/docs/faq/troubleshooting/index.html +++ b/docs/faq/troubleshooting/index.html @@ -6,7 +6,7 @@ - Troubleshooting - Javet 3.0.0 documentation + Troubleshooting - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -359,7 +359,7 @@

Troubleshooting +

diff --git a/docs/faq/troubleshooting/why_node_js_crashes_when_being_closed.html b/docs/faq/troubleshooting/why_node_js_crashes_when_being_closed.html index 22155064b..9a975fab9 100644 --- a/docs/faq/troubleshooting/why_node_js_crashes_when_being_closed.html +++ b/docs/faq/troubleshooting/why_node_js_crashes_when_being_closed.html @@ -6,7 +6,7 @@ - Why Node.js Crashes When being Closed? - Javet 3.0.0 documentation + Why Node.js Crashes When being Closed? - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -416,7 +416,7 @@

NodeRuntime.lowMemoryNotification() +

diff --git a/docs/genindex.html b/docs/genindex.html index ca54e231c..b5acf67e1 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index - Javet 3.0.0 documentation + Index - Javet 3.0.1 documentation @@ -123,7 +123,7 @@
@@ -149,7 +149,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -332,7 +332,7 @@

Index

- + diff --git a/docs/index.html b/docs/index.html index 202a2e52c..bf34e9ddb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,7 @@ - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -301,8 +301,8 @@

Javet#

-

Maven Central Discord Donate

-

Linux x86_64 Build MacOS arm64 Build MacOS x86_64 Build Android Build

+

Maven Central Discord Donate

+

Linux x86_64 Build MacOS x86_64 Build Android Build

Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding Node.js and V8 in Java.

If you like my work, please Star this project. And, you may follow me @sjtucaocao, or visit https://sjtucaocao.medium.com/ or https://caoccao.blogspot.com/. And the official support channel is at discord.

💖 If you like my work, please donate to support me. If you have a retired Mac OS (x86_64) device and are fine with mailing it to me, that will be great because I don't have such device to support the community. Thank you for supporting Javet.

@@ -321,34 +321,34 @@

Major Features

x86

-

+

✔️

x86_64

-

-

-

-

+

✔️

+

✔️

+

✔️

+

✔️

arm

-

+

✔️

arm64

-

-

-

+

✔️

+

✔️

+

✔️

@@ -369,40 +370,40 @@

Maven#< <dependency> <groupId>com.caoccao.javet</groupId> <artifactId>javet</artifactId> - <version>3.0.0</version> + <version>3.0.1</version> </dependency> <!-- Linux (arm64) --> <dependency> <groupId>com.caoccao.javet</groupId> <artifactId>javet-linux-arm64</artifactId> - <version>3.0.0</version> + <version>3.0.1</version> </dependency> <!-- Mac OS (x86_64 and arm64) --> <dependency> <groupId>com.caoccao.javet</groupId> <artifactId>javet-macos</artifactId> - <version>3.0.0</version> + <version>3.0.1</version> </dependency>

Gradle Kotlin DSL#

-
implementation("com.caoccao.javet:javet:3.0.0") // Linux and Windows (x86_64)
-implementation("com.caoccao.javet:javet-linux-arm64:3.0.0") // Linux (arm64)
-implementation("com.caoccao.javet:javet-macos:3.0.0") // Mac OS (x86_64 and arm64)
-implementation("com.caoccao.javet:javet-android:3.0.0") // Android (arm, arm64, x86 and x86_64)
+
implementation("com.caoccao.javet:javet:3.0.1") // Linux and Windows (x86_64)
+implementation("com.caoccao.javet:javet-linux-arm64:3.0.1") // Linux (arm64)
+implementation("com.caoccao.javet:javet-macos:3.0.1") // Mac OS (x86_64 and arm64)
+implementation("com.caoccao.javet:javet-android:3.0.1") // Android (arm, arm64, x86 and x86_64)
 

Gradle Groovy DSL#

-
implementation 'com.caoccao.javet:javet:3.0.0' // Linux and Windows (x86_64)
-implementation 'com.caoccao.javet:javet-linux-arm64:3.0.0' // Linux (arm64)
-implementation 'com.caoccao.javet:javet-macos:3.0.0' // Mac OS (x86_64 and arm64)
-implementation 'com.caoccao.javet:javet-android:3.0.0' // Android (arm, arm64, x86 and x86_64)
+
implementation 'com.caoccao.javet:javet:3.0.1' // Linux and Windows (x86_64)
+implementation 'com.caoccao.javet:javet-linux-arm64:3.0.1' // Linux (arm64)
+implementation 'com.caoccao.javet:javet-macos:3.0.1' // Mac OS (x86_64 and arm64)
+implementation 'com.caoccao.javet:javet-android:3.0.1' // Android (arm, arm64, x86 and x86_64)
 
@@ -428,10 +429,21 @@

Sponsors

License#

-

APACHE LICENSE, VERSION 2.0.

+

APACHE LICENSE, VERSION 2.0

+
+
+

Blog#

+

Documents#

+
diff --git a/docs/index.rst b/docs/index.rst index a7f62883e..063dcd8b5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,6 @@ .. include:: ../README.rst :start-line: 0 - :end-line: 135 + :end-line: 142 .. toctree:: :maxdepth: 2 diff --git a/docs/reference/converters/bridge_converter.html b/docs/reference/converters/bridge_converter.html index 5960b0ef0..a34023963 100644 --- a/docs/reference/converters/bridge_converter.html +++ b/docs/reference/converters/bridge_converter.html @@ -6,7 +6,7 @@ - Bridge Converter - Javet 3.0.0 documentation + Bridge Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -490,7 +490,7 @@

How to Cast Java Objects to JavaScript Objects? +

diff --git a/docs/reference/converters/custom_converter.html b/docs/reference/converters/custom_converter.html index 06e8e38a8..679007b71 100644 --- a/docs/reference/converters/custom_converter.html +++ b/docs/reference/converters/custom_converter.html @@ -6,7 +6,7 @@ - Custom Converter - Javet 3.0.0 documentation + Custom Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -503,7 +503,7 @@

Ready! Go! +

diff --git a/docs/reference/converters/index.html b/docs/reference/converters/index.html index d75cf0530..5a925581e 100644 --- a/docs/reference/converters/index.html +++ b/docs/reference/converters/index.html @@ -6,7 +6,7 @@ - Converters - Javet 3.0.0 documentation + Converters - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -500,7 +500,7 @@

Can Built-in Converter be Ignored? +

diff --git a/docs/reference/converters/object_converter.html b/docs/reference/converters/object_converter.html index 2873fbd45..11aecd344 100644 --- a/docs/reference/converters/object_converter.html +++ b/docs/reference/converters/object_converter.html @@ -6,7 +6,7 @@ - Object Converter - Javet 3.0.0 documentation + Object Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -617,7 +617,7 @@

How does It Work? +

diff --git a/docs/reference/converters/primitive_converter.html b/docs/reference/converters/primitive_converter.html index ce42d5a56..58a68e9e9 100644 --- a/docs/reference/converters/primitive_converter.html +++ b/docs/reference/converters/primitive_converter.html @@ -6,7 +6,7 @@ - Primitive Converter - Javet 3.0.0 documentation + Primitive Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -459,7 +459,7 @@

From JavaScript to Java

- + diff --git a/docs/reference/converters/proxy_converter.html b/docs/reference/converters/proxy_converter.html index 1bb3952a9..2011dfeb8 100644 --- a/docs/reference/converters/proxy_converter.html +++ b/docs/reference/converters/proxy_converter.html @@ -6,7 +6,7 @@ - Proxy Converter - Javet 3.0.0 documentation + Proxy Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
@@ -151,7 +151,7 @@
- Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -572,7 +572,7 @@

Dynamic: Anonymous Object for Class -
  • Copy JavetDynamicObjectFactory.java to your project. As Javet doesn't reference ByteBuddy directly, JavetDynamicObjectFactory has to stay at the test project.

  • +
  • Copy JavetReflectionObjectFactory.java to your project. As Javet doesn't reference ByteBuddy directly, JavetReflectionObjectFactory has to stay at the test project.

  • Define a simple class DynamicClass for adding two integers.

  • public class DynamicClass {
    @@ -595,10 +595,10 @@ 

    Dynamic: Anonymous Object for Class -
  • Inject the implementation from JavaScript. Please note that dynamic object support is disabled by default and JavetDynamicObjectFactory needs to be set to the converter config for JavetProxyConverter to enable this feature.

  • +
  • Inject the implementation from JavaScript. Please note that dynamic object support is disabled by default and JavetReflectionObjectFactory needs to be set to the converter config for JavetProxyConverter to enable this feature.

  • diff --git a/docs/reference/converters/proxy_converter.rst b/docs/reference/converters/proxy_converter.rst index 661763d21..4726de003 100644 --- a/docs/reference/converters/proxy_converter.rst +++ b/docs/reference/converters/proxy_converter.rst @@ -292,7 +292,7 @@ This feature is similar to the dynamic anonymous object for interface, but it al // Gradle Groovy DSL implementation 'net.bytebuddy:byte-buddy:1.12.17' -2. Copy :extsource3:`JavetDynamicObjectFactory.java <../../../src/test/java/com/caoccao/javet/interop/proxy/JavetDynamicObjectFactory.java>` to your project. As Javet doesn't reference ``ByteBuddy`` directly, ``JavetDynamicObjectFactory`` has to stay at the test project. +2. Copy :extsource3:`JavetReflectionObjectFactory.java <../../../src/test/java/com/caoccao/javet/interop/proxy/JavetReflectionObjectFactory.java>` to your project. As Javet doesn't reference ``ByteBuddy`` directly, ``JavetReflectionObjectFactory`` has to stay at the test project. 3. Define a simple class ``DynamicClass`` for adding two integers. @@ -316,12 +316,12 @@ This feature is similar to the dynamic anonymous object for interface, but it al } }; -5. Inject the implementation from JavaScript. Please note that dynamic object support is disabled by default and ``JavetDynamicObjectFactory`` needs to be set to the converter config for ``JavetProxyConverter`` to enable this feature. +5. Inject the implementation from JavaScript. Please note that dynamic object support is disabled by default and ``JavetReflectionObjectFactory`` needs to be set to the converter config for ``JavetProxyConverter`` to enable this feature. .. code-block:: java try { - javetProxyConverter.getConfig().setDynamicObjectFactory(JavetDynamicObjectFactory.getInstance()); + javetProxyConverter.getConfig().setReflectionObjectFactory(JavetReflectionObjectFactory.getInstance()); v8Runtime.getGlobalObject().set("a", anonymous); String codeString = "a.test({\n" + " add: (a, b) => a + b,\n" + @@ -329,7 +329,7 @@ This feature is similar to the dynamic anonymous object for interface, but it al v8Runtime.getExecutor(codeString).executeVoid(); v8Runtime.getGlobalObject().delete("a"); } finally { - javetProxyConverter.getConfig().setDynamicObjectFactory(null); + javetProxyConverter.getConfig().setReflectionObjectFactory(null); v8Runtime.lowMemoryNotification(); } diff --git a/docs/reference/index.html b/docs/reference/index.html index f7ac1f862..167d2a8f7 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -6,7 +6,7 @@ - Reference - Javet 3.0.0 documentation + Reference - Javet 3.0.1 documentation @@ -125,7 +125,7 @@

    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -362,7 +362,7 @@

    Reference +

    diff --git a/docs/reference/javadoc/allclasses-frame.html b/docs/reference/javadoc/allclasses-frame.html index 04a3a7dc4..f07a5ed0f 100644 --- a/docs/reference/javadoc/allclasses-frame.html +++ b/docs/reference/javadoc/allclasses-frame.html @@ -3,7 +3,7 @@ -All Classes (javet 3.0.0 API) +All Classes (javet 3.0.1 API) @@ -75,7 +75,7 @@

    All Classes

  • IV8Executor
  • IV8InspectorListener
  • IV8Module
  • -
  • IV8ModuleResolver
  • +
  • IV8ModuleResolver
  • IV8Native
  • IV8RuntimeObserver
  • IV8Script
  • @@ -98,6 +98,7 @@

    All Classes

  • IV8ValueSet
  • IV8ValueTypedArray
  • JavetBridgeConverter
  • +
  • JavetBuiltInModuleResolver
  • JavetCallbackContext
  • JavetCallbackReceiver
  • JavetCallbackType
  • diff --git a/docs/reference/javadoc/allclasses-noframe.html b/docs/reference/javadoc/allclasses-noframe.html index f2079db6a..63886f23a 100644 --- a/docs/reference/javadoc/allclasses-noframe.html +++ b/docs/reference/javadoc/allclasses-noframe.html @@ -3,7 +3,7 @@ -All Classes (javet 3.0.0 API) +All Classes (javet 3.0.1 API) @@ -75,7 +75,7 @@

    All Classes

  • IV8Executor
  • IV8InspectorListener
  • IV8Module
  • -
  • IV8ModuleResolver
  • +
  • IV8ModuleResolver
  • IV8Native
  • IV8RuntimeObserver
  • IV8Script
  • @@ -98,6 +98,7 @@

    All Classes

  • IV8ValueSet
  • IV8ValueTypedArray
  • JavetBridgeConverter
  • +
  • JavetBuiltInModuleResolver
  • JavetCallbackContext
  • JavetCallbackReceiver
  • JavetCallbackType
  • diff --git a/docs/reference/javadoc/com/caoccao/javet/annotations/CheckReturnValue.html b/docs/reference/javadoc/com/caoccao/javet/annotations/CheckReturnValue.html index 22392fc22..80c4c3d09 100644 --- a/docs/reference/javadoc/com/caoccao/javet/annotations/CheckReturnValue.html +++ b/docs/reference/javadoc/com/caoccao/javet/annotations/CheckReturnValue.html @@ -3,7 +3,7 @@ -CheckReturnValue (javet 3.0.0 API) +CheckReturnValue (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/annotations/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/annotations/package-summary.html index adb8d7160..0bad3d6f8 100644 --- a/docs/reference/javadoc/com/caoccao/javet/annotations/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/annotations/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.annotations (javet 3.0.0 API) +com.caoccao.javet.annotations (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/entities/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/entities/package-summary.html index 81db8ab4e..630648a52 100644 --- a/docs/reference/javadoc/com/caoccao/javet/entities/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/entities/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.entities (javet 3.0.0 API) +com.caoccao.javet.entities (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/enums/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/enums/package-summary.html index e68cf076e..971f5ffc0 100644 --- a/docs/reference/javadoc/com/caoccao/javet/enums/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/enums/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.enums (javet 3.0.0 API) +com.caoccao.javet.enums (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/exceptions/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/exceptions/package-summary.html index ac88ce354..0bfde339f 100644 --- a/docs/reference/javadoc/com/caoccao/javet/exceptions/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/exceptions/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.exceptions (javet 3.0.0 API) +com.caoccao.javet.exceptions (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interception/logging/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interception/logging/package-summary.html index 69dd0aa08..dd3e4656c 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interception/logging/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interception/logging/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interception.logging (javet 3.0.0 API) +com.caoccao.javet.interception.logging (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interception/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interception/package-summary.html index 6e82c78b5..818801867 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interception/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interception/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interception (javet 3.0.0 API) +com.caoccao.javet.interception (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -30,7 +30,6 @@

    Interfaces

  • IJavetUniConsumer
  • IJavetUniFunction
  • IJavetUniIndexedConsumer
  • -
  • IV8ModuleResolver
  • diff --git a/docs/reference/javadoc/com/caoccao/javet/interfaces/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interfaces/package-summary.html index ab354b8e4..443949df4 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interfaces/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interfaces/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interfaces (javet 3.0.0 API) +com.caoccao.javet.interfaces (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/binding/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/binding/package-summary.html index a4f5b8c18..cc4f6e2b4 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/binding/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/binding/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.binding (javet 3.0.0 API) +com.caoccao.javet.interop.binding (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ +IV8ModuleResolver (javet 3.0.1 API) + + + + + + + + + + + +
    +
    com.caoccao.javet.interop.callback
    +

    Class JavetBuiltInModuleResolver

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • com.caoccao.javet.interop.callback.JavetBuiltInModuleResolver
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      IV8ModuleResolver
      +
      +
      +
      +
      public class JavetBuiltInModuleResolver
      +extends java.lang.Object
      +implements IV8ModuleResolver
      +
      The type Javet built in module resolver is for resolving the Node.js built-in modules.
      +
      +
      Since:
      +
      3.0.1
      +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        static java.lang.StringPREFIX_NODE +
        The constant PREFIX_NODE.
        +
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        IV8Moduleresolve(V8Runtime v8Runtime, + java.lang.String resourceName, + IV8Module v8ModuleReferrer) +
        Resolve V8 module.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          PREFIX_NODE

          +
          public static final java.lang.String PREFIX_NODE
          +
          The constant PREFIX_NODE.
          +
          +
          Since:
          +
          3.0.1
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          JavetBuiltInModuleResolver

          +
          public JavetBuiltInModuleResolver()
          +
        • +
        +
      • +
      + + +
    • +
    +
    +
    + + + + + + + diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/callback/JavetCallbackContext.html b/docs/reference/javadoc/com/caoccao/javet/interop/callback/JavetCallbackContext.html index b93dd6c3e..d1a6c7b65 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/callback/JavetCallbackContext.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/callback/JavetCallbackContext.html @@ -3,7 +3,7 @@ -JavetCallbackContext (javet 3.0.0 API) +JavetCallbackContext (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -24,9 +24,11 @@

    Interfaces

  • IJavetDirectCallable.ThisAndResult
  • IJavetGCCallback
  • IJavetPromiseRejectCallback
  • +
  • IV8ModuleResolver
  • Classes

      +
    • JavetBuiltInModuleResolver
    • JavetCallbackContext
    • JavetGCCallback
    • JavetPromiseRejectCallback
    • diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/callback/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/callback/package-summary.html index de1cc2949..27853e928 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/callback/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/callback/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.callback (javet 3.0.0 API) +com.caoccao.javet.interop.callback (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/converters/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/converters/package-summary.html index 252e688cb..f7f6e16b2 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/converters/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/converters/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.converters (javet 3.0.0 API) +com.caoccao.javet.interop.converters (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/engine/observers/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/engine/observers/package-summary.html index 758992706..789a7820d 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/engine/observers/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/engine/observers/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.engine.observers (javet 3.0.0 API) +com.caoccao.javet.interop.engine.observers (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/engine/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/engine/package-summary.html index faac7ec27..e888b81eb 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/engine/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/engine/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.engine (javet 3.0.0 API) +com.caoccao.javet.interop.engine (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/executors/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/executors/package-summary.html index cd70515b6..65a30aea4 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/executors/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/executors/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.executors (javet 3.0.0 API) +com.caoccao.javet.interop.executors (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/loader/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/loader/package-summary.html index d10a7a36b..2f2fe0e00 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/loader/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/loader/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.loader (javet 3.0.0 API) +com.caoccao.javet.interop.loader (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/monitoring/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/monitoring/package-summary.html index 18a3d66fd..514084e9f 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/monitoring/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/monitoring/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.monitoring (javet 3.0.0 API) +com.caoccao.javet.interop.monitoring (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/options/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/options/package-summary.html index 78f23a576..1c3be101d 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/options/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/options/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.options (javet 3.0.0 API) +com.caoccao.javet.interop.options (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/package-summary.html index 35e6cd3fc..4fb4e83df 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop (javet 3.0.0 API) +com.caoccao.javet.interop (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/interop/proxy/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/interop/proxy/package-summary.html index 078777f27..ed9d5dc69 100644 --- a/docs/reference/javadoc/com/caoccao/javet/interop/proxy/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/interop/proxy/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.interop.proxy (javet 3.0.0 API) +com.caoccao.javet.interop.proxy (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/node/modules/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/node/modules/package-summary.html index 3142cccf2..7ff112691 100644 --- a/docs/reference/javadoc/com/caoccao/javet/node/modules/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/node/modules/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.node.modules (javet 3.0.0 API) +com.caoccao.javet.node.modules (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/utils/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/utils/package-summary.html index 6232f45ee..3e1c94a41 100644 --- a/docs/reference/javadoc/com/caoccao/javet/utils/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/utils/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.utils (javet 3.0.0 API) +com.caoccao.javet.utils (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/utils/receivers/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/utils/receivers/package-summary.html index d226afda7..bbb5cb546 100644 --- a/docs/reference/javadoc/com/caoccao/javet/utils/receivers/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/utils/receivers/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.utils.receivers (javet 3.0.0 API) +com.caoccao.javet.utils.receivers (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/values/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/values/package-summary.html index b8a2b9197..116400518 100644 --- a/docs/reference/javadoc/com/caoccao/javet/values/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/values/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.values (javet 3.0.0 API) +com.caoccao.javet.values (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/values/primitive/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/values/primitive/package-summary.html index a2046c222..897675d79 100644 --- a/docs/reference/javadoc/com/caoccao/javet/values/primitive/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/values/primitive/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.values.primitive (javet 3.0.0 API) +com.caoccao.javet.values.primitive (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,13 +11,13 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/values/reference/builtin/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/values/reference/builtin/package-summary.html index 0ff3d03ff..8246b0fbb 100644 --- a/docs/reference/javadoc/com/caoccao/javet/values/reference/builtin/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/values/reference/builtin/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.values.reference.builtin (javet 3.0.0 API) +com.caoccao.javet.values.reference.builtin (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/values/reference/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/values/reference/package-summary.html index ddf8d4f2d..669ad83c4 100644 --- a/docs/reference/javadoc/com/caoccao/javet/values/reference/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/values/reference/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.values.reference (javet 3.0.0 API) +com.caoccao.javet.values.reference (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/com/caoccao/javet/values/virtual/package-summary.html b/docs/reference/javadoc/com/caoccao/javet/values/virtual/package-summary.html index 789b1c240..2cd457bce 100644 --- a/docs/reference/javadoc/com/caoccao/javet/values/virtual/package-summary.html +++ b/docs/reference/javadoc/com/caoccao/javet/values/virtual/package-summary.html @@ -3,7 +3,7 @@ -com.caoccao.javet.values.virtual (javet 3.0.0 API) +com.caoccao.javet.values.virtual (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ diff --git a/docs/reference/javadoc/overview-summary.html b/docs/reference/javadoc/overview-summary.html index 913d4fb9b..00cf3b27b 100644 --- a/docs/reference/javadoc/overview-summary.html +++ b/docs/reference/javadoc/overview-summary.html @@ -3,7 +3,7 @@ -Overview (javet 3.0.0 API) +Overview (javet 3.0.1 API) @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@ +
    diff --git a/docs/reference/resource_management/load_and_unload.html b/docs/reference/resource_management/load_and_unload.html index d2ca3ecd4..6627819eb 100644 --- a/docs/reference/resource_management/load_and_unload.html +++ b/docs/reference/resource_management/load_and_unload.html @@ -6,7 +6,7 @@ - Load and Unload - Javet 3.0.0 documentation + Load and Unload - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -515,7 +515,7 @@

    Can Javet Libraries be Removed from the Jar File?

    - + diff --git a/docs/reference/resource_management/lock.html b/docs/reference/resource_management/lock.html index 88cc042df..ea80d37dd 100644 --- a/docs/reference/resource_management/lock.html +++ b/docs/reference/resource_management/lock.html @@ -6,7 +6,7 @@ - Know the Lock - Javet 3.0.0 documentation + Know the Lock - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -418,7 +418,7 @@

    Coroutines or Virtual Threads +

    diff --git a/docs/reference/resource_management/memory_management.html b/docs/reference/resource_management/memory_management.html index ed4219abd..0d51cacd8 100644 --- a/docs/reference/resource_management/memory_management.html +++ b/docs/reference/resource_management/memory_management.html @@ -6,7 +6,7 @@ - Memory Management - Javet 3.0.0 documentation + Memory Management - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -655,7 +655,7 @@

    Statistics +

    diff --git a/docs/reference/resource_management/modularization.html b/docs/reference/resource_management/modularization.html index 2fb2c9cf5..2d7485c55 100644 --- a/docs/reference/resource_management/modularization.html +++ b/docs/reference/resource_management/modularization.html @@ -6,7 +6,7 @@ - Modularization - Javet 3.0.0 documentation + Modularization - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -462,6 +462,20 @@

    Manual Patch Native Modules on Windows +

    Dynamically Import Built-in Modules#

    +

    The Node.js module resolution callback doesn't allow the embedder to relay the calls as a default callback. If the embedder sets its own callback, the Node.js built-in modules will not be reachable any more.

    +

    There is workaround: create a new module that calls require internally by registering JavetBuiltInModuleResolver as the module resolver.

    +
    v8Runtime.setV8ModuleResolver(new JavetBuiltInModuleResolver());
    +v8Runtime.getExecutor(
    +                "import * as fs from 'node:fs';\n" +
    +                        "globalThis.a = fs.existsSync('/path-not-found');")
    +        .setModule(true).executeVoid();
    +assertFalse(v8Runtime.getGlobalObject().getBoolean("a"));
    +
    +
    +

    The application may extend the capability of JavetBuiltInModuleResolver to gain granular control over the built-in modules.

    +

    V8 Mode#

    @@ -538,6 +552,33 @@

    On-demand +

    Synthetic Module#

    +

    A synthetic module in V8 is a module that is created by the V8 JavaScript engine at runtime. Synthetic modules are typically used to implement new features in JavaScript, such as the module proposal for JSON imports.

    +

    Synthetic modules have a number of advantages over traditional JavaScript modules. First, they can be created and evaluated at runtime, which allows for more flexibility and dynamism. Second, synthetic modules can be isolated from the rest of the code, which makes them more secure.

    +

    Synthetic modules are implemented in V8 using a special type of module called a "Module Record". Module Records are responsible for managing the exports and imports of a module. When a synthetic module is evaluated, V8 creates a new Module Record for the module. This Module Record is then used to resolve imports and exports.

    +

    The following code snippet shows how to create and import a synthetic module.

    +
    v8Runtime.setV8ModuleResolver((v8Runtime, resourceName, v8ModuleReferrer) -> {
    +    try (V8ValueObject v8ValueObject = v8Runtime.createV8ValueObject()) {
    +        v8ValueObject.set("a", 1);
    +        try (V8ValueFunction v8ValueFunction = v8Runtime.createV8ValueFunction("(x) => x + 1")) {
    +            v8ValueObject.set("b", v8ValueFunction);
    +        }
    +        V8Module v8Module = v8Runtime.createV8Module("test.js", v8ValueObject);
    +        assertFalse(v8Module.isSourceTextModule());
    +        assertTrue(v8Module.isSyntheticModule());
    +        return v8Module;
    +    }
    +});
    +v8Runtime.getExecutor("import { a, b } from 'test.js';\n" +
    +                "globalThis.a = a;\n" +
    +                "globalThis.b = b;\n")
    +        .setModule(true).executeVoid();
    +assertEquals(1, v8Runtime.getGlobalObject().getInteger("a"));
    +assertEquals(2, v8Runtime.getGlobalObject().invokeInteger("b", 1));
    +
    +
    +

    Internals#

    How Javet and V8 work internally for supporting modules can be found at Javet Design.

    @@ -610,6 +651,7 @@

    InternalsManual Patch Native Modules on Windows +
  • Dynamically Import Built-in Modules
  • V8 Mode
  • +
  • Synthetic Module
  • Internals
  • @@ -629,7 +672,7 @@

    Internals + diff --git a/docs/reference/resource_management/modularization.rst b/docs/reference/resource_management/modularization.rst index 8188ccc6e..95547f638 100644 --- a/docs/reference/resource_management/modularization.rst +++ b/docs/reference/resource_management/modularization.rst @@ -157,6 +157,24 @@ Apart from rebuilding the native modules on Windows, there is also a manual way 5. Change the DLL name from ``node.exe`` to ``libjavet-node-windows-x86_64.v.x.x.x.dll`` where ``x.x.x`` needs to be replaced with the actual Javet version. 6. Save the change. +Dynamically Import Built-in Modules +----------------------------------- + +The Node.js module resolution callback doesn't allow the embedder to relay the calls as a default callback. If the embedder sets its own callback, the Node.js built-in modules will not be reachable any more. + +There is workaround: create a new module that calls `require` internally by registering `JavetBuiltInModuleResolver` as the module resolver. + +.. code-block:: java + + v8Runtime.setV8ModuleResolver(new JavetBuiltInModuleResolver()); + v8Runtime.getExecutor( + "import * as fs from 'node:fs';\n" + + "globalThis.a = fs.existsSync('/path-not-found');") + .setModule(true).executeVoid(); + assertFalse(v8Runtime.getGlobalObject().getBoolean("a")); + +The application may extend the capability of `JavetBuiltInModuleResolver` to gain granular control over the built-in modules. + V8 Mode ======= @@ -242,6 +260,38 @@ Here is an example. Assuming ``test.js`` depends on ``module.js``, the code look It is V8 that performs the dependency analysis. Javet just relays the callback to application and actively caches the compiled modules so that the module resolver is only called one time per module. +Synthetic Module +================ + +A synthetic module in V8 is a module that is created by the V8 JavaScript engine at runtime. Synthetic modules are typically used to implement new features in JavaScript, such as the module proposal for JSON imports. + +Synthetic modules have a number of advantages over traditional JavaScript modules. First, they can be created and evaluated at runtime, which allows for more flexibility and dynamism. Second, synthetic modules can be isolated from the rest of the code, which makes them more secure. + +Synthetic modules are implemented in V8 using a special type of module called a "Module Record". Module Records are responsible for managing the exports and imports of a module. When a synthetic module is evaluated, V8 creates a new Module Record for the module. This Module Record is then used to resolve imports and exports. + +The following code snippet shows how to create and import a synthetic module. + +.. code-block:: java + + v8Runtime.setV8ModuleResolver((v8Runtime, resourceName, v8ModuleReferrer) -> { + try (V8ValueObject v8ValueObject = v8Runtime.createV8ValueObject()) { + v8ValueObject.set("a", 1); + try (V8ValueFunction v8ValueFunction = v8Runtime.createV8ValueFunction("(x) => x + 1")) { + v8ValueObject.set("b", v8ValueFunction); + } + V8Module v8Module = v8Runtime.createV8Module("test.js", v8ValueObject); + assertFalse(v8Module.isSourceTextModule()); + assertTrue(v8Module.isSyntheticModule()); + return v8Module; + } + }); + v8Runtime.getExecutor("import { a, b } from 'test.js';\n" + + "globalThis.a = a;\n" + + "globalThis.b = b;\n") + .setModule(true).executeVoid(); + assertEquals(1, v8Runtime.getGlobalObject().getInteger("a")); + assertEquals(2, v8Runtime.getGlobalObject().invokeInteger("b", 1)); + Internals ========= diff --git a/docs/reference/resource_management/performance.html b/docs/reference/resource_management/performance.html index 90d7d85de..8fa0eaedc 100644 --- a/docs/reference/resource_management/performance.html +++ b/docs/reference/resource_management/performance.html @@ -6,7 +6,7 @@ - Javet Performance - Javet 3.0.0 documentation + Javet Performance - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -447,7 +447,7 @@

    Highlights +

    diff --git a/docs/reference/tips/best_practices.html b/docs/reference/tips/best_practices.html index e7d1d45fa..3e1aa5080 100644 --- a/docs/reference/tips/best_practices.html +++ b/docs/reference/tips/best_practices.html @@ -6,7 +6,7 @@ - Best Practices - Javet 3.0.0 documentation + Best Practices - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -427,7 +427,7 @@

    Node.js#<

    - + diff --git a/docs/reference/tips/index.html b/docs/reference/tips/index.html index 47f5160a7..01ad22ef8 100644 --- a/docs/reference/tips/index.html +++ b/docs/reference/tips/index.html @@ -6,7 +6,7 @@ - Tips - Javet 3.0.0 documentation + Tips - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -356,7 +356,7 @@

    Tips#

    - + diff --git a/docs/reference/todo_list.html b/docs/reference/todo_list.html index da21dbd26..eefc08dbd 100644 --- a/docs/reference/todo_list.html +++ b/docs/reference/todo_list.html @@ -6,7 +6,7 @@ - TODO List - Javet 3.0.0 documentation + TODO List - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -356,7 +356,7 @@

    TODO List +

    diff --git a/docs/reference/troubleshooting/error_codes.html b/docs/reference/troubleshooting/error_codes.html index ebcfb65a1..80e1324ba 100644 --- a/docs/reference/troubleshooting/error_codes.html +++ b/docs/reference/troubleshooting/error_codes.html @@ -6,7 +6,7 @@ - Error Codes - Javet 3.0.0 documentation + Error Codes - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -557,7 +557,7 @@

    Backward Compatibility

    - + diff --git a/docs/reference/troubleshooting/index.html b/docs/reference/troubleshooting/index.html index 093d1cf69..8b118c24b 100644 --- a/docs/reference/troubleshooting/index.html +++ b/docs/reference/troubleshooting/index.html @@ -6,7 +6,7 @@ - Troubleshooting - Javet 3.0.0 documentation + Troubleshooting - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -358,7 +358,7 @@

    Troubleshooting +

    diff --git a/docs/reference/troubleshooting/logging.html b/docs/reference/troubleshooting/logging.html index 882b3f397..d49f00b8e 100644 --- a/docs/reference/troubleshooting/logging.html +++ b/docs/reference/troubleshooting/logging.html @@ -6,7 +6,7 @@ - Logging - Javet 3.0.0 documentation + Logging - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -440,7 +440,7 @@

    Step 2: Inject the Logger +

    diff --git a/docs/reference/troubleshooting/termination.html b/docs/reference/troubleshooting/termination.html index 79f780cb2..bfed2e776 100644 --- a/docs/reference/troubleshooting/termination.html +++ b/docs/reference/troubleshooting/termination.html @@ -6,7 +6,7 @@ - Termination - Javet 3.0.0 documentation + Termination - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -434,7 +434,7 @@

    How about Debug Mode?

    - + diff --git a/docs/reference/v8_values/index.html b/docs/reference/v8_values/index.html index e5471b596..b3901d483 100644 --- a/docs/reference/v8_values/index.html +++ b/docs/reference/v8_values/index.html @@ -6,7 +6,7 @@ - V8 Values - Javet 3.0.0 documentation + V8 Values - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -358,7 +358,7 @@

    V8 Values +

    diff --git a/docs/reference/v8_values/v8_collection.html b/docs/reference/v8_values/v8_collection.html index 0ab172cff..4cb997d2a 100644 --- a/docs/reference/v8_values/v8_collection.html +++ b/docs/reference/v8_values/v8_collection.html @@ -6,7 +6,7 @@ - V8 Collection - Javet 3.0.0 documentation + V8 Collection - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -530,7 +530,7 @@

    V8ValueMap +

    diff --git a/docs/reference/v8_values/v8_function.html b/docs/reference/v8_values/v8_function.html index 949b5f43b..175d1ce66 100644 --- a/docs/reference/v8_values/v8_function.html +++ b/docs/reference/v8_values/v8_function.html @@ -6,7 +6,7 @@ - V8 Function - Javet 3.0.0 documentation + V8 Function - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -1064,7 +1064,7 @@

    How to Handle Argument Count Mismatches? +

    diff --git a/docs/reference/v8_values/v8_promise.html b/docs/reference/v8_values/v8_promise.html index 3baff1e87..8e8c27b26 100644 --- a/docs/reference/v8_values/v8_promise.html +++ b/docs/reference/v8_values/v8_promise.html @@ -6,7 +6,7 @@ - V8 Promise - Javet 3.0.0 documentation + V8 Promise - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -484,7 +484,7 @@

    Unhandled Rejection +

    diff --git a/docs/release_notes/index.html b/docs/release_notes/index.html index 9926a40dc..65fe293cf 100644 --- a/docs/release_notes/index.html +++ b/docs/release_notes/index.html @@ -6,7 +6,7 @@ - Release Notes - Javet 3.0.0 documentation + Release Notes - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -406,7 +406,7 @@

    Release Notes +

    diff --git a/docs/release_notes/release_notes_0_7.html b/docs/release_notes/release_notes_0_7.html index 1808445e2..caf9efcda 100644 --- a/docs/release_notes/release_notes_0_7.html +++ b/docs/release_notes/release_notes_0_7.html @@ -6,7 +6,7 @@ - Release Notes 0.7.x - Javet 3.0.0 documentation + Release Notes 0.7.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -406,7 +406,7 @@

    0.7.0 Birth with V8 v8.9

    - + diff --git a/docs/release_notes/release_notes_0_8.html b/docs/release_notes/release_notes_0_8.html index f198d770d..b32b66989 100644 --- a/docs/release_notes/release_notes_0_8.html +++ b/docs/release_notes/release_notes_0_8.html @@ -6,7 +6,7 @@ - Release Notes 0.8.x - Javet 3.0.0 documentation + Release Notes 0.8.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -463,7 +463,7 @@

    0.8.0 First Time with Node.js +

    diff --git a/docs/release_notes/release_notes_0_9.html b/docs/release_notes/release_notes_0_9.html index 2d47e9f28..7afc4ee25 100644 --- a/docs/release_notes/release_notes_0_9.html +++ b/docs/release_notes/release_notes_0_9.html @@ -6,7 +6,7 @@ - Release Notes 0.9.x - Javet 3.0.0 documentation + Release Notes 0.9.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -514,7 +514,7 @@

    0.9.0 V8 v9.1 +

    diff --git a/docs/release_notes/release_notes_1_0.html b/docs/release_notes/release_notes_1_0.html index 0ff609668..30ae9260b 100644 --- a/docs/release_notes/release_notes_1_0.html +++ b/docs/release_notes/release_notes_1_0.html @@ -6,7 +6,7 @@ - Release Notes 1.0.x - Javet 3.0.0 documentation + Release Notes 1.0.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -442,7 +442,7 @@

    1.0.0 First Time with Node.js v16 +

    diff --git a/docs/release_notes/release_notes_1_1.html b/docs/release_notes/release_notes_1_1.html index 5d8457ccd..f451587c3 100644 --- a/docs/release_notes/release_notes_1_1.html +++ b/docs/release_notes/release_notes_1_1.html @@ -6,7 +6,7 @@ - Release Notes 1.1.x - Javet 3.0.0 documentation + Release Notes 1.1.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -434,7 +434,7 @@

    1.1.0 V8 v9.8 +

    diff --git a/docs/release_notes/release_notes_2_0.html b/docs/release_notes/release_notes_2_0.html index 04daa9932..be745ff9c 100644 --- a/docs/release_notes/release_notes_2_0.html +++ b/docs/release_notes/release_notes_2_0.html @@ -6,7 +6,7 @@ - Release Notes 2.0.x - Javet 3.0.0 documentation + Release Notes 2.0.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -407,7 +407,7 @@

    2.0.0 Node.js v18.10 +

    diff --git a/docs/release_notes/release_notes_2_1.html b/docs/release_notes/release_notes_2_1.html index 54cc52b70..f61bfab9a 100644 --- a/docs/release_notes/release_notes_2_1.html +++ b/docs/release_notes/release_notes_2_1.html @@ -6,7 +6,7 @@ - Release Notes 2.1.x - Javet 3.0.0 documentation + Release Notes 2.1.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -382,7 +382,7 @@

    2.1.0 V8 v11.1 +

    diff --git a/docs/release_notes/release_notes_2_2.html b/docs/release_notes/release_notes_2_2.html index 71be6b336..435ea832f 100644 --- a/docs/release_notes/release_notes_2_2.html +++ b/docs/release_notes/release_notes_2_2.html @@ -6,7 +6,7 @@ - Release Notes 2.2.x - Javet 3.0.0 documentation + Release Notes 2.2.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -394,7 +394,7 @@

    2.2.0 V8 v11.4 +

    diff --git a/docs/release_notes/release_notes_3_0.html b/docs/release_notes/release_notes_3_0.html index e809b8e73..7a4af772b 100644 --- a/docs/release_notes/release_notes_3_0.html +++ b/docs/release_notes/release_notes_3_0.html @@ -6,7 +6,7 @@ - Release Notes 3.0.x - Javet 3.0.0 documentation + Release Notes 3.0.x - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -301,6 +301,20 @@

    Release Notes 3.0.x#

    +
    +

    3.0.1 V8 v11.9#

    +
      +
    • Upgraded V8 to v11.9.169.6 (2023-10-25)

    • +
    • Upgraded Node.js to v20.9.0 (2023-10-24)

    • +
    • Upgraded to Ubuntu 22.04

    • +
    • Upgraded GCC to v11 on Linux

    • +
    • Turned on a few compiler options for performance

    • +
    • Added isSourceTextModule(), isSyntheticModule() to V8Module

    • +
    • Added createV8Module() to V8Runtime

    • +
    • Added freeze() to V8ValueBuiltInObject

    • +
    • Added JavetBuiltInModuleResolver

    • +
    +

    3.0.0 V8 v11.8#

    diff --git a/docs/release_notes/release_notes_3_0.rst b/docs/release_notes/release_notes_3_0.rst index a2892e238..bff3d8393 100644 --- a/docs/release_notes/release_notes_3_0.rst +++ b/docs/release_notes/release_notes_3_0.rst @@ -2,6 +2,19 @@ Release Notes 3.0.x =================== +3.0.1 V8 v11.9 +-------------- + +* Upgraded V8 to ``v11.9.169.6`` (2023-10-25) +* Upgraded Node.js to ``v20.9.0`` `(2023-10-24) `_ +* Upgraded to Ubuntu 22.04 +* Upgraded GCC to v11 on Linux +* Turned on a few compiler options for performance +* Added ``isSourceTextModule()``, ``isSyntheticModule()`` to ``V8Module`` +* Added ``createV8Module()`` to ``V8Runtime`` +* Added ``freeze()`` to ``V8ValueBuiltInObject`` +* Added ``JavetBuiltInModuleResolver`` + 3.0.0 V8 v11.8 -------------- diff --git a/docs/search.html b/docs/search.html index 5735d44ee..6d06636ba 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search - Javet 3.0.0 documentation + Search - Javet 3.0.1 documentation @@ -122,7 +122,7 @@
    @@ -148,7 +148,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -337,7 +337,7 @@
    - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 96a62d3cf..a99f22b17 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["development/build", "development/build_javet_from_scratch", "development/build_javet_with_docker", "development/debug_with_chrome_developer_tools", "development/design", "development/index", "development/performance", "development/test", "development/tools", "faq/background/history_with_j2v8", "faq/background/index", "faq/background/what_is_the_motivation", "faq/development/how_to_think_in_javet", "faq/development/index", "faq/development/where_are_es6_api_in_v8_mode", "faq/development/where_are_the_examples", "faq/development/why_is_the_inspector_disabled_in_node_js_mode", "faq/environment/can_javet_support_legacy_linux", "faq/environment/index", "faq/index", "faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed", "faq/troubleshooting/can_i18n_be_supported", "faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools", "faq/troubleshooting/index", "faq/troubleshooting/why_node_js_crashes_when_being_closed", "index", "reference/converters/bridge_converter", "reference/converters/custom_converter", "reference/converters/index", "reference/converters/object_converter", "reference/converters/primitive_converter", "reference/converters/proxy_converter", "reference/index", "reference/javadoc/index", "reference/resource_management/index", "reference/resource_management/load_and_unload", "reference/resource_management/lock", "reference/resource_management/memory_management", "reference/resource_management/modularization", "reference/resource_management/performance", "reference/tips/best_practices", "reference/tips/index", "reference/todo_list", "reference/troubleshooting/error_codes", "reference/troubleshooting/index", "reference/troubleshooting/logging", "reference/troubleshooting/termination", "reference/v8_values/index", "reference/v8_values/v8_collection", "reference/v8_values/v8_function", "reference/v8_values/v8_promise", "release_notes/index", "release_notes/release_notes_0_7", "release_notes/release_notes_0_8", "release_notes/release_notes_0_9", "release_notes/release_notes_1_0", "release_notes/release_notes_1_1", "release_notes/release_notes_2_0", "release_notes/release_notes_2_1", "release_notes/release_notes_2_2", "release_notes/release_notes_3_0", "tutorial/advanced/expose_json_node_in_v8", "tutorial/advanced/index", "tutorial/advanced/interact_with_node_js", "tutorial/advanced/java_and_javascript_interop", "tutorial/advanced/object_converter", "tutorial/basic/engine_pool", "tutorial/basic/hello_javet", "tutorial/basic/index", "tutorial/basic/installation", "tutorial/basic/interception", "tutorial/basic/javet_shell", "tutorial/basic/node_js_mode_and_v8_mode", "tutorial/basic/polyfill", "tutorial/basic/spring_integration", "tutorial/index", "tutorial/migration_guides/index", "tutorial/migration_guides/migrate_from_j2v8"], "filenames": ["development/build.rst", "development/build_javet_from_scratch.rst", "development/build_javet_with_docker.rst", "development/debug_with_chrome_developer_tools.rst", "development/design.rst", "development/index.rst", "development/performance.rst", "development/test.rst", "development/tools.rst", "faq/background/history_with_j2v8.rst", "faq/background/index.rst", "faq/background/what_is_the_motivation.rst", "faq/development/how_to_think_in_javet.rst", "faq/development/index.rst", "faq/development/where_are_es6_api_in_v8_mode.rst", "faq/development/where_are_the_examples.rst", "faq/development/why_is_the_inspector_disabled_in_node_js_mode.rst", "faq/environment/can_javet_support_legacy_linux.rst", "faq/environment/index.rst", "faq/index.rst", "faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.rst", "faq/troubleshooting/can_i18n_be_supported.rst", "faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.rst", "faq/troubleshooting/index.rst", "faq/troubleshooting/why_node_js_crashes_when_being_closed.rst", "index.rst", "reference/converters/bridge_converter.rst", "reference/converters/custom_converter.rst", "reference/converters/index.rst", "reference/converters/object_converter.rst", "reference/converters/primitive_converter.rst", "reference/converters/proxy_converter.rst", "reference/index.rst", "reference/javadoc/index.rst", "reference/resource_management/index.rst", "reference/resource_management/load_and_unload.rst", "reference/resource_management/lock.rst", "reference/resource_management/memory_management.rst", "reference/resource_management/modularization.rst", "reference/resource_management/performance.rst", "reference/tips/best_practices.rst", "reference/tips/index.rst", "reference/todo_list.rst", "reference/troubleshooting/error_codes.rst", "reference/troubleshooting/index.rst", "reference/troubleshooting/logging.rst", "reference/troubleshooting/termination.rst", "reference/v8_values/index.rst", "reference/v8_values/v8_collection.rst", "reference/v8_values/v8_function.rst", "reference/v8_values/v8_promise.rst", "release_notes/index.rst", "release_notes/release_notes_0_7.rst", "release_notes/release_notes_0_8.rst", "release_notes/release_notes_0_9.rst", "release_notes/release_notes_1_0.rst", "release_notes/release_notes_1_1.rst", "release_notes/release_notes_2_0.rst", "release_notes/release_notes_2_1.rst", "release_notes/release_notes_2_2.rst", "release_notes/release_notes_3_0.rst", "tutorial/advanced/expose_json_node_in_v8.rst", "tutorial/advanced/index.rst", "tutorial/advanced/interact_with_node_js.rst", "tutorial/advanced/java_and_javascript_interop.rst", "tutorial/advanced/object_converter.rst", "tutorial/basic/engine_pool.rst", "tutorial/basic/hello_javet.rst", "tutorial/basic/index.rst", "tutorial/basic/installation.rst", "tutorial/basic/interception.rst", "tutorial/basic/javet_shell.rst", "tutorial/basic/node_js_mode_and_v8_mode.rst", "tutorial/basic/polyfill.rst", "tutorial/basic/spring_integration.rst", "tutorial/index.rst", "tutorial/migration_guides/index.rst", "tutorial/migration_guides/migrate_from_j2v8.rst"], "titles": ["Build Javet", "Build Javet from Scratch", "Build Javet with Docker", "Debug with Chrome Developer Tools", "Javet Design", "Development", "Javet Performance", "Test Javet", "Development Tools", "History with J2V8", "Background", "What is the Motivation?", "How to Think in Javet?", "Development", "Where are ES6 API in V8 Mode?", "Where are the Examples?", "Why is the Inspector Disabled in Node.js Mode?", "Can Javet Support Legacy Linux?", "Environment", "FAQ", "A dynamic link library (DLL) initialization routine failed", "Can i18n be Supported?", "Can I Debug Javet in Chrome DevTools?", "Troubleshooting", "Why Node.js Crashes When being Closed?", "Javet", "Bridge Converter", "Custom Converter", "Converters", "Object Converter", "Primitive Converter", "Proxy Converter", "Reference", "API Reference", "Resource Management", "Load and Unload", "Know the Lock", "Memory Management", "Modularization", "Javet Performance", "Best Practices", "Tips", "TODO List", "Error Codes", "Troubleshooting", "Logging", "Termination", "V8 Values", "V8 Collection", "V8 Function", "V8 Promise", "Release Notes", "Release Notes 0.7.x", "Release Notes 0.8.x", "Release Notes 0.9.x", "Release Notes 1.0.x", "Release Notes 1.1.x", "Release Notes 2.0.x", "Release Notes 2.1.x", "Release Notes 2.2.x", "Release Notes 3.0.x", "Expose JsonNode in V8", "Advanced", "Interact with Node.js", "Java and JavaScript Interop", "Object Converter", "Javet Engine Pool", "Hello Javet", "Basic", "Installation", "Interception", "Javet Shell", "Node.js Mode and V8 Mode", "Polyfill", "Spring Integration", "Tutorial", "Migration Guides", "Migrate from J2V8"], "terms": {"It": [0, 2, 4, 9, 12, 16, 21, 25, 27, 28, 31, 36, 37, 38, 39, 40, 49, 66, 71, 72, 77], "": [0, 2, 4, 9, 11, 24, 27, 31, 36, 37, 38, 39, 40, 43, 49, 50, 61, 63, 65, 72, 77], "quit": [0, 4, 11, 12, 28, 31, 37, 45, 46, 49, 61, 63, 66, 77], "hard": [0, 9, 50, 77], "develop": [0, 19, 22, 25, 43, 50, 52, 61, 77], "successfulli": [0, 2, 3], "variou": [0, 59, 77], "reason": [0, 4, 9, 21, 24, 43, 50, 63, 77], "node": [0, 2, 3, 5, 7, 9, 13, 14, 19, 20, 21, 23, 25, 35, 36, 37, 39, 42, 43, 49, 50, 51, 54, 56, 58, 59, 60, 61, 62, 66, 68, 69, 71, 74, 75], "j": [0, 2, 5, 7, 9, 13, 14, 19, 20, 21, 23, 25, 35, 36, 37, 39, 42, 43, 49, 50, 51, 52, 54, 56, 58, 59, 60, 62, 66, 68, 69, 75], "need": [0, 3, 9, 27, 28, 29, 31, 36, 37, 38, 49, 50, 61, 64, 69, 77], "built": [0, 2, 3, 7, 26, 29, 37, 39, 43, 46, 49, 50, 53, 54, 58, 61, 77], "static": [0, 1, 16, 27, 49, 54, 56, 63], "librari": [0, 2, 3, 4, 7, 12, 19, 21, 23, 38, 43, 45, 49, 54], "monolith": 0, "everi": [0, 4, 12, 28, 36, 37, 49], "o": [0, 2, 4, 25, 36, 43, 49, 61, 77], "platform": [0, 5], "ha": [0, 4, 8, 9, 12, 16, 27, 29, 31, 35, 37, 38, 45, 48, 49, 50, 53, 61, 77], "its": [0, 4, 9, 31, 36, 37, 38, 49, 50], "own": [0, 4, 9, 27, 29, 31, 35, 37, 38, 49, 50], "pitfal": 0, "which": [0, 3, 4, 7, 9, 12, 15, 17, 24, 25, 28, 29, 31, 35, 37, 38, 39, 46, 49, 61, 64, 70, 72, 73, 77], "usual": [0, 27, 31, 38, 46, 49, 50, 63], "make": [0, 1, 2, 16, 28, 29, 37, 38, 50, 63, 73, 77], "frustrat": [0, 9], "even": [0, 9, 77], "desper": 0, "here": [0, 3, 4, 9, 11, 27, 31, 35, 37, 38, 39, 49, 50, 63, 64, 65], "ar": [0, 1, 2, 3, 4, 8, 9, 12, 13, 17, 19, 24, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 40, 43, 46, 49, 50, 52, 53, 54, 61, 63, 64, 65, 69, 70, 72, 77], "3": [0, 1, 5, 9, 17, 24, 25, 26, 31, 35, 38, 39, 48, 49, 51, 67, 69, 70, 71], "wai": [0, 4, 12, 24, 25, 26, 27, 35, 37, 38, 40, 46, 49, 50, 54, 61, 63, 66, 70, 74], "docker": [0, 5, 9], "from": [0, 2, 4, 5, 9, 11, 15, 16, 17, 24, 28, 31, 36, 38, 39, 40, 43, 46, 49, 50, 53, 54, 55, 56, 61, 63, 64, 66, 67, 70, 71, 75, 76], "scratch": [0, 5, 11], "all": [0, 1, 3, 4, 9, 24, 26, 27, 29, 31, 35, 37, 38, 49, 53, 55, 61, 63, 65, 77], "them": [0, 3, 31, 37, 49, 61], "share": [0, 1, 4, 36, 38, 49, 50, 63, 77], "same": [0, 4, 16, 36, 37, 38, 40, 49, 50, 61, 77], "next": [0, 28, 49], "section": [0, 38, 49], "ubuntu": [0, 2, 17, 38, 53, 56, 69], "20": [0, 2, 24, 53, 55, 56, 57, 58, 59, 69], "04": [0, 2, 17, 52, 53, 56, 58, 69], "cmake": [0, 1, 9], "25": [0, 55, 57], "1": [0, 4, 9, 12, 17, 26, 27, 29, 31, 35, 38, 39, 40, 46, 48, 49, 51, 61, 64, 65, 69, 70, 71, 72, 73, 77], "jdk": [0, 5, 27, 45, 61], "8": [0, 3, 5, 9, 17, 25, 27, 37, 39, 51, 55, 58, 61, 63, 69], "gradl": [0, 1, 2, 5, 9, 31], "gcc": [0, 17, 53, 60], "10": [0, 2, 37, 39, 46, 55, 60, 61, 69], "python": [0, 1, 5], "9": [0, 9, 17, 51, 63], "catalina": [0, 69], "latest": [0, 2, 72], "brew": 0, "xcode": 0, "11": [0, 27, 55, 56, 57], "4": [0, 9, 31, 35, 37, 38, 39, 48, 49, 51, 63, 70, 71], "16": [0, 17, 37, 39, 53, 54, 56, 57, 58, 59, 69], "visual": [0, 5, 57, 58], "studio": [0, 5, 57, 58], "2022": [0, 5, 56, 57, 58], "commun": [0, 3, 5, 9, 16, 25], "24": [0, 53, 58, 69], "come": [0, 4, 36, 38, 39], "sdk": [0, 45, 74], "windbg": 0, "wsl2": [0, 2], "option": [0, 5, 16, 30, 38, 40, 49, 54, 56, 61, 70, 72], "ndk": [0, 56], "r25b": 0, "30": [0, 57], "javet_hom": [0, 1], "i": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 43, 45, 46, 48, 50, 53, 54, 61, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 77], "home": 0, "directori": [0, 4, 38, 73], "node_hom": [0, 1], "v8_home": [0, 1], "depot_tools_hom": [0, 1], "googl": [0, 3], "depot": 0, "tool": [0, 1, 2, 5, 17, 22, 25, 52], "android_ndk_hom": [0, 1], "android_sdk_hom": 0, "descript": [0, 31, 37], "custom": [0, 4, 5, 28, 38, 40, 49, 53, 54, 56], "libcxx": 0, "off": [0, 1, 3, 4, 37], "The": [0, 1, 2, 3, 4, 7, 9, 12, 15, 16, 20, 24, 26, 27, 28, 31, 35, 36, 37, 38, 43, 46, 49, 50, 61, 63, 64, 69, 70, 71, 72, 77], "offici": [0, 1, 9, 15, 17, 25], "releas": [0, 1, 4, 9, 25, 37, 43, 77], "doesn": [0, 3, 4, 9, 29, 31, 35, 36, 37, 38, 43, 45, 46, 49, 74, 77], "t": [0, 3, 4, 9, 16, 24, 25, 27, 28, 29, 31, 35, 36, 37, 38, 43, 45, 46, 49, 71, 72, 74, 77], "support": [0, 1, 2, 4, 8, 9, 16, 18, 19, 23, 25, 29, 30, 31, 35, 37, 38, 43, 46, 48, 49, 53, 54, 55, 56, 57, 59, 60, 69, 72, 77], "debug": [0, 4, 5, 16, 19, 23, 25, 45, 49], "extern": [0, 37], "startup": 0, "data": [0, 4, 28, 37, 38, 49, 52, 57], "i18n": [0, 1, 19, 23, 43, 56], "pleas": [0, 1, 2, 3, 4, 11, 16, 17, 21, 22, 25, 28, 31, 35, 36, 37, 38, 40, 46, 49, 50, 51, 61, 64, 65, 66, 67, 69, 70, 71, 73, 77], "contact": [0, 1, 9, 16, 17, 21, 51, 69, 77], "maintain": [0, 16, 17, 21, 51, 69, 77], "privat": [0, 16, 17, 21, 27, 29, 31, 49, 61, 69, 70], "thi": [0, 3, 4, 9, 11, 12, 17, 20, 24, 25, 27, 28, 29, 31, 35, 36, 37, 38, 50, 56, 61, 63, 64, 70, 72, 77], "pointer": [0, 37, 49], "compress": 0, "sandbox": 0, "snapshot": [0, 17, 57], "follow": [1, 2, 3, 4, 15, 17, 21, 24, 25, 27, 29, 37, 38, 40, 43, 45, 48, 49, 50, 61, 63, 70, 72], "guid": [1, 25, 75], "If": [1, 2, 12, 24, 25, 28, 29, 30, 31, 37, 38, 40, 46, 49, 69, 70, 71, 77], "you": [1, 2, 3, 8, 9, 12, 15, 22, 24, 25, 27, 31, 36, 37, 45, 49, 50, 51, 69, 73, 74, 77], "face": [1, 4], "ani": [1, 9, 28, 29, 30, 31, 38, 43, 45, 46, 49, 77], "issu": [1, 4, 11, 24, 36, 37, 38, 40, 53, 54, 55, 58, 60], "mai": [1, 2, 3, 4, 9, 12, 15, 24, 25, 26, 28, 31, 35, 36, 37, 38, 40, 45, 46, 49, 74], "sjtucaocao": [1, 2, 25], "clone": [1, 2, 57], "sourc": [1, 3, 16, 28, 36, 38, 43, 46, 61, 64, 65, 66, 67, 70, 71, 73, 77], "code": [1, 3, 4, 9, 12, 16, 27, 28, 29, 36, 37, 38, 39, 40, 44, 46, 50, 54, 55, 59, 61, 64, 65, 66, 67, 70, 71, 73, 77], "checkout": 1, "proper": 1, "version": [1, 3, 4, 8, 11, 25, 31, 38, 51, 69, 72], "also": [1, 2, 4, 9, 11, 12, 28, 30, 31, 35, 36, 37, 38, 45, 49, 50, 63, 77], "sure": [1, 2, 9, 16, 28, 37, 38, 63, 73], "arg": [1, 27, 49, 63], "gn": 1, "file": [1, 4, 9, 21, 37, 38, 50, 63, 73], "look": [1, 4, 9, 11, 38, 54], "like": [1, 3, 9, 11, 12, 25, 38, 40, 43, 49, 56, 71], "is_debug": 1, "fals": [1, 16, 26, 28, 31, 35, 37, 38, 49, 63, 64], "target_cpu": 1, "v8_monolith": 1, "true": [1, 11, 16, 26, 28, 31, 35, 37, 38, 46, 49, 61, 63, 64, 65, 71], "v8_use_external_startup_data": 1, "is_component_build": 1, "v8_enable_i18n_support": 1, "v8_enable_pointer_compress": 1, "v8_static_librari": 1, "symbol_level": 1, "0": [1, 3, 9, 17, 25, 26, 27, 29, 31, 37, 38, 40, 46, 48, 49, 51, 61, 63, 65, 69, 70, 73, 77], "use_custom_libcxx": 1, "v8_enable_sandbox": 1, "x64": [1, 38], "To": [1, 3, 9, 21, 28, 35, 42, 64], "enabl": [1, 2, 3, 12, 16, 21, 31, 37, 49, 50, 53, 54, 64], "set": [1, 3, 4, 7, 9, 12, 26, 27, 28, 29, 31, 35, 37, 38, 45, 48, 50, 53, 59, 61, 63, 64, 65, 70], "export": [1, 38], "path": [1, 17, 35, 38, 43, 59, 63], "cd": [1, 2, 38], "ninja": 1, "c": [1, 31, 38, 49, 56, 57, 58, 61, 65], "out": [1, 25, 37, 38, 43, 46, 61, 63, 64, 65, 67, 70, 71, 77], "python3": [1, 9], "script": [1, 4, 9, 12, 38, 40, 46, 49, 53, 57, 66, 71, 73], "patch_v8_build": 1, "py": 1, "p": [1, 31], "requir": [1, 8, 12, 35, 38, 39, 40, 46, 49, 50, 63], "depot_tools_win_toolchain": 1, "gen": 1, "id": [1, 3, 4, 43, 49], "v": [1, 5, 9, 25, 38], "solut": [1, 11, 29, 49], "dev": [1, 39], "v8gen": 1, "arm": [1, 25, 55, 69], "target_o": 1, "v8_target_cpu": 1, "ia32": 1, "x86": [1, 25, 54, 55, 69], "A": [1, 4, 19, 23, 27, 38, 49], "few": [1, 2, 3, 8, 9, 11, 12, 27, 28, 31, 37, 49, 52, 53, 64, 65, 71], "certain": [1, 3, 4, 12, 49, 50, 54], "warn": [1, 45, 53], "error": [1, 9, 35, 38, 44, 45, 49, 50, 54, 55, 56, 59], "so": [1, 2, 4, 7, 9, 12, 14, 16, 17, 24, 26, 27, 28, 29, 31, 35, 36, 37, 38, 40, 45, 49, 50, 57, 61, 63, 65, 69, 73, 74, 77], "msvc": [1, 38], "stop": [1, 9, 58], "compil": [1, 4, 31, 38, 43, 49, 64, 77], "turn": [1, 3, 4, 37, 53], "those": [1, 3, 4, 12, 24, 37, 38, 49], "lt": 1, "patch_node_build": 1, "configur": 1, "without": [1, 2, 3, 4, 24, 29, 31, 35, 36, 49, 55, 59, 61, 77], "intl": 1, "j4": 1, "first": [1, 3, 35, 38, 49, 52, 77], "thin": 1, "disabl": [1, 12, 13, 19, 31, 37, 40, 46, 50, 57], "second": [1, 3, 15, 21, 46, 49], "mani": [1, 9, 11, 37, 49, 77], "posit": [1, 39, 49], "independ": [1, 39], "link": [1, 19, 23, 37, 38], "phase": 1, "broken": [1, 9, 37, 49], "fpic": 1, "usr": [1, 17], "bin": [1, 17], "ld": 1, "libnod": 1, "node_bind": 1, "reloc": 1, "r_x86_64_tpoff32": 1, "against": [1, 49], "_zn4nodel23thread_local_modpending": 1, "can": [1, 2, 3, 4, 12, 18, 19, 23, 24, 29, 31, 37, 38, 40, 50, 63, 64, 72, 73, 74, 77], "us": [1, 3, 4, 8, 11, 24, 28, 30, 35, 37, 39, 40, 45, 49, 66, 77], "when": [1, 4, 9, 19, 20, 23, 31, 37, 38, 40, 46, 49, 50, 56, 58, 77], "object": [1, 4, 12, 24, 37, 40, 48, 53, 54, 55, 56, 61, 62, 64, 66, 70, 75, 77], "recompil": 1, "vcbuild": 1, "bat": 1, "vs2022": 1, "onc": [1, 27, 28, 37, 38, 43, 63], "readi": 1, "navig": [1, 38], "cpp": 1, "access": [1, 12, 31, 35, 37, 43, 49], "execut": [1, 3, 4, 31, 38, 39, 40, 43, 46, 48, 49, 50, 61, 66, 67, 71], "correspond": [1, 2, 4, 24, 37, 38, 40, 49], "command": [1, 71], "sh": [1, 38], "dnode_dir": 1, "dv8_dir": 1, "maco": [1, 9, 25, 35, 69], "cmd": [1, 38], "after": [1, 3, 9, 29, 31, 35, 38, 40, 46, 49, 50, 61, 77], "while": [1, 2, 31, 46, 63, 71], "place": [1, 4, 9, 24, 28, 37, 77], "folder": [1, 40, 63], "src": 1, "main": [1, 27, 31, 64], "resourc": [1, 4, 12, 15, 25, 28, 32, 36, 38, 43, 46, 50, 61, 67, 70, 71, 74], "libjavet": [1, 35, 38], "dylib": 1, "dll": [1, 19, 23, 38], "arch": [1, 25, 55], "dcmake_android_ndk": 1, "dcmake_android_arch": 1, "jnilib": 1, "armeabi": 1, "v7a": 1, "v8a": 1, "mode": [1, 5, 7, 13, 17, 19, 20, 21, 24, 25, 35, 37, 39, 40, 49, 50, 53, 54, 56, 59, 66, 68, 69, 75, 77], "append": [1, 31, 64], "denable_i18n": 1, "test": [1, 2, 4, 5, 9, 15, 16, 17, 25, 31, 36, 38, 39, 49, 50, 52, 63, 69, 73], "jar": [1, 4, 9], "lib": [1, 38, 55], "aar": 1, "output": [1, 27, 49, 61, 63, 64, 65], "As": [2, 3, 4, 12, 26, 29, 31, 35, 37, 45, 49, 74], "regard": [2, 3], "mac": [2, 9, 25, 77], "contributor": 2, "welcom": [2, 71], "interest": [2, 9], "Or": [2, 16], "have": [2, 9, 16, 25, 27, 29, 31, 37, 38, 49, 50, 73, 77], "wait": [2, 3, 55, 63], "long": [2, 29, 30, 31, 36, 49, 61], "git": 2, "network": 2, "connect": [2, 3, 4, 66], "up": [2, 3, 4, 12, 31, 36, 37, 38, 54, 55, 63], "run": [2, 4, 27, 31, 36, 37, 38, 39, 46, 73], "repositori": [2, 17], "imag": [2, 9], "avail": [2, 3, 4, 20, 35, 43, 49, 72], "http": [2, 3, 4, 6, 25, 39, 63], "com": [2, 6, 25, 37, 38, 45, 69], "r": [2, 17, 64], "caoccao": [2, 6, 25, 37, 38, 45, 69], "f": [2, 4], "x86_64": [2, 25, 38, 55, 69], "build_artifact": 2, "dockerfil": [2, 54, 58], "pull": 2, "5gb": 2, "actual": [2, 3, 4, 9, 12, 28, 36, 37, 38, 43, 49, 61, 63], "take": [2, 4, 9, 11, 24, 30, 31, 37, 38, 49, 53, 55, 61, 63, 66, 71, 77], "minut": [2, 4, 28], "includ": [2, 9, 26, 35, 49, 77], "depend": [2, 4, 9, 31, 38, 45, 49, 74], "maven": [2, 5, 31], "central": [2, 8], "instruct": [2, 37], "insid": [2, 3, 4, 31, 37, 50], "perform": [2, 3, 4, 5, 9, 24, 25, 26, 28, 29, 34, 35, 37, 38, 40, 49, 52, 55, 59, 61, 63, 66, 70, 77], "base_jvm": 2, "base": [2, 7, 31, 37, 49, 54, 56, 57, 61, 77], "jvm": [2, 4, 21, 25, 28, 31, 35, 36, 52, 63, 65, 66, 72, 77], "base_nod": 2, "base_v8": 2, "v8": [2, 3, 5, 7, 9, 11, 12, 13, 19, 21, 24, 25, 28, 29, 31, 32, 35, 36, 39, 40, 42, 43, 46, 51, 62, 63, 64, 65, 66, 68, 69, 70, 71, 74, 75], "base_gradl": 2, "final": [2, 27, 28, 29, 31, 37, 38, 43, 46, 49, 50, 61], "artifact": 2, "base_all_in_on": 2, "build_all_in_on": 2, "updat": [2, 17, 35, 49, 53, 54, 55, 56, 58], "daemon": [2, 37, 46], "json": [2, 3, 26, 61, 65], "storag": 2, "opt": 2, "dm": 2, "bases": 2, "120gb": 2, "size": [2, 4, 21, 26, 29, 35, 37, 43], "restart": [2, 77], "m": [2, 61], "4g": 2, "roughli": 2, "5": [2, 3, 24, 37, 38, 51, 63, 69, 70, 71], "hour": [2, 9], "internet": 2, "stabl": 2, "dai": [2, 40], "just": [2, 3, 9, 12, 27, 29, 35, 36, 37, 38, 39, 49, 64, 77], "fail": [2, 19, 23, 38, 43, 46, 49, 56], "forev": [2, 37], "larg": [2, 16], "60": 2, "gb": 2, "effici": [2, 15, 54], "push": [2, 48, 49, 50, 59], "Of": [2, 37, 38, 49, 77], "cours": [2, 37, 38, 49, 77], "wise": [2, 17, 49, 61, 69], "workflow": 2, "11gb": 2, "devtool": [3, 19, 23, 25], "aka": 3, "web": [3, 37, 40], "directli": [3, 31, 35, 37, 49, 61, 64, 77], "browser": [3, 40], "help": [3, 40], "edit": [3, 49], "page": 3, "fly": 3, "diagnos": 3, "problem": [3, 9, 27, 49], "quickli": 3, "ultim": 3, "build": [3, 4, 5, 8, 11, 16, 17, 21, 25, 38, 49, 53, 54, 58, 69], "better": [3, 4, 35, 36, 39, 49, 61], "websit": 3, "faster": 3, "javet": [3, 5, 8, 9, 13, 14, 15, 16, 18, 19, 20, 23, 24, 26, 27, 28, 29, 31, 34, 37, 40, 42, 43, 45, 46, 48, 49, 50, 52, 54, 59, 63, 64, 65, 68, 69, 70, 72, 73, 74, 75], "ship": 3, "demo": 3, "applic": [3, 4, 12, 16, 24, 27, 28, 29, 31, 35, 36, 37, 38, 39, 46, 49, 50, 63, 64, 66, 70, 71, 77], "demonstr": 3, "how": [3, 4, 7, 11, 13, 15, 19, 24, 27, 35, 36, 38, 54, 61, 77], "work": [3, 4, 9, 12, 24, 25, 35, 36, 37, 38, 49, 50, 61, 63, 69, 77], "live": [3, 25, 36, 37, 49], "normal": [3, 37, 46, 63], "java": [3, 4, 9, 14, 25, 27, 28, 31, 35, 36, 37, 38, 50, 55, 62, 63, 65, 70, 73, 75, 77], "consol": [3, 4, 27, 49, 50, 61, 63, 66, 67, 70, 71], "an": [3, 4, 9, 11, 12, 14, 25, 26, 28, 31, 35, 36, 37, 38, 39, 40, 45, 46, 49, 50, 65, 70, 71, 72], "interact": [3, 4, 27, 53, 62, 71, 75], "appear": [3, 49], "doe": [3, 4, 16, 24, 35, 37, 46, 49, 77], "arbitrari": [3, 4, 12, 28, 29, 31, 64, 77], "what": [3, 9, 10, 15, 19, 28, 37, 38, 61, 77], "done": [3, 77], "let": [3, 9, 24, 27, 31, 38, 61, 63, 71], "undefin": [3, 28, 31, 38, 49, 61, 71], "b": [3, 26, 28, 31, 38, 49, 61, 64, 65, 71, 73], "7": [3, 17, 37, 51, 63, 69, 70, 71, 77], "inspect": [3, 16, 49], "remot": 3, "target": [3, 7, 28, 29, 61, 77], "click": 3, "voil\u00e0": [3, 31, 63], "screenshot": 3, "show": [3, 4, 31, 37, 49, 50], "evalu": [3, 4, 38, 56, 77], "auto": [3, 17, 35, 53], "complet": [3, 4, 7, 29, 31, 37, 38, 40, 46, 49, 54, 55, 63, 64, 77], "enjoi": 3, "listen": [3, 24, 37, 50, 63], "port": [3, 51, 63], "9229": 3, "default": [3, 4, 21, 28, 29, 31, 35, 37, 38, 46, 49, 64, 70, 72], "becaus": [3, 4, 8, 9, 16, 24, 25, 26, 27, 28, 29, 31, 35, 36, 37, 39, 40, 43, 49, 50, 61, 66, 72, 73, 77], "constantli": 3, "queri": 3, "127": [3, 37], "tell": [3, 24, 31, 35, 37, 38, 63, 70], "flavor": [3, 15, 49, 71], "via": [3, 4, 31, 37, 38, 40, 46, 49, 50, 63, 70], "websocket": 3, "address": [3, 24, 37, 38, 40, 49, 63], "protocol": 3, "current": [3, 4, 9, 43, 49], "v1": [3, 51, 55, 69], "api": [3, 4, 9, 11, 12, 13, 19, 25, 27, 28, 31, 32, 35, 36, 37, 38, 45, 49, 50, 52, 53, 55, 59, 61, 63, 65, 73, 77], "doc": [3, 39, 53, 55], "chromedevtool": 3, "github": 3, "io": [3, 16], "upgrad": [3, 8, 9, 11, 17, 42, 53, 54, 55, 56, 57, 58, 59, 60], "request": 3, "respons": [3, 35, 38, 49], "accept": [3, 16, 28, 45, 49, 50, 54], "switch": [3, 25, 35, 36, 40, 53], "w": 3, "send": [3, 28, 37, 63], "messag": [3, 37, 43, 45], "method": [3, 12, 27, 29, 31, 43, 49, 61], "runtim": [3, 4, 17, 21, 31, 35, 36, 38, 40, 43, 46, 49, 54, 55, 56, 58, 61, 63, 66, 67, 70, 71, 72, 77], "param": 3, "notif": [3, 37], "executioncontextcr": 3, "context": [3, 12, 24, 36, 37, 38, 39, 40, 58], "origin": [3, 4, 49], "name": [3, 4, 12, 27, 29, 35, 38, 43, 45, 49, 55, 58, 61, 70, 73, 74], "inspector": [3, 13, 19], "00000000": 3, "uniqueid": 3, "result": [3, 4, 28, 36, 40, 50, 67, 71], "debugg": [3, 49], "maxscriptscaches": 3, "100000000": 3, "debuggerid": 3, "setpauseonexcept": 3, "state": [3, 49], "none": [3, 49], "setasynccallstackdepth": 3, "maxdepth": [3, 43], "32": [3, 37], "profil": 3, "6": [3, 8, 9, 38, 51, 57, 63, 69, 70, 71], "getisolateid": 3, "setblackboxpattern": 3, "pattern": [3, 12, 15, 29, 46], "runifwaitingfordebugg": 3, "pars": 3, "expos": [3, 4, 28, 29, 31, 37, 38, 42, 49, 50, 55, 62, 75, 77], "callback": [3, 24, 37, 38, 43, 49, 53, 54, 55, 56, 58, 59, 63], "iv8inspectorlisten": 3, "rest": 3, "refer": [3, 11, 24, 25, 31, 35, 36, 38, 39, 40, 46, 49, 50, 58, 60, 61, 64, 65, 66, 67, 69, 70, 71, 73, 77], "detail": [3, 4, 11, 21, 22, 36, 46, 49, 50, 61, 64, 65, 66, 67, 69, 70, 71, 72, 73, 77], "ye": [3, 4, 17, 22, 24, 28, 29, 31, 35, 36, 38, 48, 49, 69, 73], "feel": [3, 38, 49], "free": [3, 4, 12, 29, 36, 37, 38, 49, 53, 66, 77], "server": [3, 28, 69], "your": [3, 9, 17, 31, 35, 40, 45, 74, 77], "environ": [3, 4, 5, 17, 19, 25, 36, 38, 39, 53, 55, 66], "creat": [3, 16, 21, 26, 29, 31, 36, 37, 38, 45, 46, 49, 50, 54, 59, 61, 63, 64, 65, 66, 67, 70, 71, 74, 77], "showcas": 3, "further": 3, "some": [3, 4, 9, 12, 14, 17, 20, 24, 28, 35, 37, 39, 49, 50, 55, 59, 61, 66, 73, 77], "tip": [3, 25, 32], "integr": [3, 9, 25, 45, 52, 68, 75], "embed": [3, 4, 9, 21, 25, 39, 40], "jetti": 3, "Be": [3, 31, 37, 40, 50], "care": [3, 30, 31, 36, 37, 38, 40, 50], "host": [3, 4, 21, 35, 38, 61, 63, 67, 70, 71], "togeth": [3, 63], "otherwis": [3, 29, 30, 35, 36, 49], "refus": 3, "add": [3, 17, 26, 27, 29, 31, 37, 38, 48, 49, 50, 65, 70, 73, 77], "intercept": [3, 5, 31, 37, 38, 52, 54, 68, 75], "event": [3, 40, 50, 63, 77], "In": [3, 4, 12, 16, 24, 26, 28, 31, 35, 36, 37, 38, 39, 40, 46, 49, 50, 61, 63, 77], "practic": [3, 4, 12, 41], "decent": [3, 9, 48, 50], "jackson": [3, 61], "gson": [3, 61], "interpret": [3, 4], "process": [3, 24, 27, 50], "why": [3, 12, 13, 19, 23, 35, 37, 73], "breakpoint": 3, "befor": [3, 12, 24, 28, 35, 37, 38, 63], "right": [3, 35], "featur": [3, 4, 5, 8, 9, 12, 29, 35, 37, 38, 43, 48, 49, 50, 51, 64, 69, 72, 73, 77], "enforc": 3, "authent": 3, "author": 3, "chang": [3, 16, 28, 29, 36, 38, 43, 54, 55, 59, 64, 70], "There": [4, 9, 12, 17, 26, 27, 28, 35, 37, 38, 43, 49, 61, 72], "vagu": 4, "boundari": 4, "between": [4, 9, 25, 28, 29, 37, 40, 49, 53, 61, 64], "definit": 4, "mixtur": 4, "both": [4, 28, 35, 37, 43, 50, 54, 72, 77], "trade": 4, "No": [4, 9, 27, 28, 35, 38, 46, 48, 49, 63], "copi": [4, 31, 35, 37], "valu": [4, 25, 27, 28, 29, 30, 32, 35, 37, 38, 43, 48, 52, 53, 54, 55, 61, 70], "Not": [4, 49, 69], "possibl": [4, 29, 36, 40, 61], "weak": 4, "keep": [4, 28, 31, 36, 37, 40, 61], "footprint": 4, "jni": [4, 8, 35, 37, 49, 55, 56, 58], "recycl": [4, 24, 28, 31, 37, 39, 40, 67], "close": [4, 9, 12, 16, 19, 23, 31, 35, 37, 38, 40, 43, 46, 49, 53, 54, 58, 60, 65, 66], "call": [4, 9, 12, 16, 24, 27, 28, 31, 35, 36, 37, 38, 40, 46, 50, 53, 61, 63, 64, 70, 77], "That": [4, 9, 24, 28, 35, 37, 38, 45, 46, 49, 77], "old": [4, 9, 40, 50], "school": 4, "manag": [4, 9, 12, 15, 25, 32, 53], "tri": [4, 9, 20], "hide": [4, 9], "kind": [4, 9, 27, 36, 49, 77], "tediou": [4, 12, 77], "try": [4, 9, 11, 25, 27, 31, 36, 38, 40, 46, 48, 49, 50, 61, 63, 66, 67, 70, 71, 72, 73], "best": [4, 15, 41], "co": 4, "exist": [4, 11, 31, 38, 61, 73], "one": [4, 7, 9, 11, 12, 16, 21, 26, 31, 35, 37, 38, 49, 61, 64, 70, 71, 72, 77], "other": [4, 12, 28, 35, 36, 37, 40, 45, 49, 50, 53, 63, 65, 69, 72, 77], "word": [4, 37, 63], "thei": [4, 9, 29, 35, 38, 40, 43, 50, 61, 72], "side": [4, 16, 37], "don": [4, 9, 16, 25, 31, 38, 45, 72, 74, 77], "interfer": 4, "each": [4, 37, 49, 72, 77], "diagram": [4, 49], "lazi": 4, "load": [4, 12, 20, 34, 43, 73, 77], "dedic": [4, 37, 40, 63, 77], "classload": [4, 77], "comparison": [4, 9], "loadabl": 4, "high": [4, 28, 37], "ecosystem": [4, 72], "secur": [4, 12, 38, 73, 77], "low": 4, "unload": [4, 34, 38, 77], "One": [4, 28], "beauti": [4, 28, 49], "appli": [4, 28, 31, 35, 38, 40, 46, 49, 56, 63], "exampl": [4, 13, 19, 27, 64, 65], "e": [4, 12, 14, 24, 26, 27, 28, 35, 37, 38, 46, 49, 50, 61, 63, 70, 72, 73, 77], "g": [4, 12, 14, 17, 24, 26, 28, 35, 37, 38, 49, 50, 61, 63, 64, 70, 72, 73, 77], "net": [4, 31], "etc": [4, 11, 12, 14, 26, 28, 35, 37, 49, 63, 73], "zero": [4, 37], "byte": [4, 29, 30, 31, 37, 49], "buffer": [4, 37], "achiev": [4, 9, 31, 36, 37, 49], "thread": [4, 9, 16, 37, 39, 43, 46, 50, 53, 54, 66, 77], "multipl": [4, 16, 21, 36, 38, 40, 54, 77], "instanc": [4, 12, 16, 26, 37, 38, 39, 40, 45, 49, 64, 70], "onli": [4, 12, 14, 16, 21, 28, 30, 31, 35, 38, 40, 45, 49, 51, 61, 69, 77], "visibl": [4, 49], "beyond": 4, "allow": [4, 9, 21, 26, 27, 28, 29, 31, 35, 39, 45, 49, 50, 53, 54, 55, 59, 63, 64, 65, 66, 70, 77], "explicit": [4, 26, 77], "await": [4, 40, 49, 50, 53, 57, 63], "more": [4, 9, 17, 29, 35, 37, 38, 42, 43, 46, 49, 50, 54, 55, 66, 67, 70, 71, 72, 73, 77], "control": [4, 24, 28, 46, 49], "over": [4, 24, 28, 49, 77], "async": [4, 24, 50], "global": [4, 12, 38, 49, 58, 66, 77], "recommend": [4, 8, 31, 39, 40, 49, 50, 61, 66], "project": [4, 9, 11, 12, 14, 15, 25, 31, 38, 50, 69, 73, 77], "increas": [4, 28, 43, 77], "provid": [4, 17, 24, 26, 27, 28, 29, 31, 38, 48, 49, 66, 70, 77], "align": 4, "chrome": [4, 5, 19, 23, 25, 52], "bring": [4, 28, 35], "system": [4, 8, 11, 25, 35, 38, 43, 45, 61, 63, 64, 65, 67, 70, 71], "unfortun": [4, 9], "veri": [4, 31, 38, 40, 49, 71, 72], "limit": [4, 12], "howev": [4, 9, 11, 12, 24, 28, 29, 35, 37, 49, 61, 77], "bad": [4, 9], "leav": [4, 11, 29, 38], "typic": [4, 46, 49], "challeng": [4, 9, 12, 28], "sync": 4, "locat": [4, 38, 77], "interceptor": [4, 24, 49, 50, 66, 70], "partial": 4, "know": [4, 7, 9, 24, 34, 38, 49, 77], "want": [4, 8, 9, 12, 24, 28, 35, 36, 37, 43, 49, 50, 51], "defin": [4, 28, 31], "es6": [4, 9, 13, 19, 38], "repres": [4, 12, 28, 37, 49, 77], "string": [4, 27, 29, 30, 31, 38, 45, 50, 52, 61, 63, 65, 67, 70, 71, 73], "dure": [4, 24, 28, 35, 38, 49, 53, 77], "url": 4, "whatev": [4, 24, 36, 37, 49, 50], "store": [4, 37, 38, 49, 58], "map": [4, 26, 28, 29, 38, 48], "kei": [4, 38, 48, 61], "feed": [4, 38], "get": [4, 9, 12, 24, 26, 27, 29, 31, 35, 37, 38, 40, 45, 46, 48, 49, 50, 55, 56, 61, 63, 65, 66, 72, 73, 74, 77], "start": [4, 11, 16, 28, 46, 49, 55, 63, 77], "excel": [4, 9], "articl": 4, "explain": 4, "concept": [4, 12, 50], "insight": 4, "summari": 4, "vm": [4, 40], "heap": [4, 37], "separ": [4, 12, 31, 39], "unrel": [4, 39], "javascript": [4, 16, 24, 25, 28, 31, 36, 38, 39, 50, 55, 62, 65, 67, 70, 75, 77], "singl": [4, 9, 36, 39, 49, 63], "model": [4, 36], "simplifi": [4, 49], "v8runtim": [4, 25, 26, 27, 29, 31, 36, 38, 40, 46, 48, 49, 50, 52, 53, 54, 55, 57, 61, 64, 65, 66, 67, 70, 71, 72, 73], "resetisol": [4, 36, 53], "resetcontext": [4, 36, 40, 53], "alwai": [4, 27, 40, 49], "brand": 4, "new": [4, 7, 9, 11, 26, 27, 29, 31, 35, 36, 37, 38, 39, 45, 46, 48, 49, 50, 51, 61, 63, 64, 65, 66, 70, 71, 72, 73, 74], "much": [4, 9, 31, 37, 39, 40, 49, 61, 71, 73, 77], "cheaper": 4, "oper": [4, 28], "good": [4, 37, 70], "enough": [4, 27, 31], "term": [4, 46, 49, 61], "almost": [4, 9, 31, 49, 63], "db": 4, "safe": [4, 24, 28, 36, 49], "NOT": [4, 36, 49], "lock": [4, 34, 37, 43, 46, 53, 77], "violat": 4, "core": [4, 35, 36, 38, 40, 54], "dump": [4, 36, 40, 54, 55], "immedi": [4, 16, 21, 36, 37, 40, 46], "valid": [4, 37, 49], "minim": [4, 29, 40, 66], "overhead": [4, 12, 28, 29, 36, 37, 39, 46, 66], "behind": [4, 11, 12, 24, 65], "scene": [4, 12, 24, 65], "sampl": [4, 27, 31, 35, 37, 38, 49, 63], "function": [4, 14, 16, 29, 35, 37, 38, 47, 52, 55, 56, 57, 61, 63, 64, 70, 77], "packag": [4, 8, 9], "automat": [4, 7, 28, 31, 35, 36, 38, 43, 58, 67, 70, 77], "per": [4, 31, 35, 36, 37, 38], "calcul": [4, 49], "unpack": 4, "system_temporary_directori": 4, "pid": 4, "either": [4, 7, 49], "deploi": [4, 54], "avoid": [4, 12, 21, 28, 35, 40], "race": [4, 36], "condit": [4, 29, 36], "initi": [4, 19, 23, 38, 56, 63, 66, 70], "purg": [4, 63], "legaci": [4, 9, 18, 19, 56], "least": [4, 9], "begin": 4, "nativ": [4, 20, 25, 26, 29, 36, 37, 40, 49, 52, 63, 77], "track": [4, 37, 59], "delet": [4, 26, 31, 48, 49, 64, 70], "javetnativemonitor": 4, "unit": [4, 15], "case": [4, 7, 9, 15, 28, 30, 35, 36, 37, 38, 39, 49, 50, 52, 77], "fetch": [4, 50], "compar": [4, 7, 36], "count": [4, 43, 46, 48, 63], "verifi": [4, 38, 49], "unmanag": [4, 37], "properli": 4, "alloc": [4, 36, 49, 55], "freed": 4, "intellij": [5, 9], "flag": [5, 37, 54, 56], "design": [5, 7, 15, 16, 25, 29, 31, 35, 36, 38, 49, 63, 72, 77], "architectur": [5, 9], "modul": [5, 20, 24, 40, 42, 43, 49, 57, 58, 73], "engin": [5, 25, 26, 37, 43, 55, 68, 74, 75], "pool": [5, 25, 37, 45, 52, 55, 68, 74, 75], "cross": [5, 77], "memori": [5, 9, 11, 15, 24, 28, 34, 35, 40, 43, 49, 53, 55, 61, 77], "leak": [5, 9, 11, 28, 37, 40, 53, 55], "detect": [5, 27, 28, 43, 49, 54, 55], "cdt": [5, 71], "shell": [5, 68, 75], "intern": [5, 31, 35, 36, 37, 49, 55, 56, 59], "present": 6, "www": 6, "javetperf": [6, 59], "reus": [7, 12], "do": [7, 9, 12, 22, 24, 25, 36, 37, 38, 40, 49, 50, 65], "suit": 7, "timestamp": 7, "newer": 7, "instal": [8, 9, 17, 35, 38, 63, 68, 73, 75], "though": [8, 43, 49, 66, 77], "been": [8, 9, 24, 35, 49, 77], "drop": [8, 9, 38, 49], "heavili": [8, 27, 49, 77], "person": 8, "idea": [8, 9, 11, 37], "For": [8, 12, 31, 38, 49], "now": [8, 9, 27, 31, 38, 45, 49, 70], "v7": 8, "2": [8, 9, 12, 17, 25, 26, 29, 31, 35, 38, 39, 40, 46, 48, 51, 64, 67, 69, 70, 71, 72, 73, 77], "kotlin": [8, 31, 36], "dsl": [8, 31], "construct": [8, 49, 54], "14": [8, 9, 55, 56, 57, 58, 59], "17": [8, 31, 54, 56, 59], "v3": [8, 38, 51], "bundl": 8, "hasn": [9, 24, 49], "activ": [9, 24, 35, 38], "sinc": [9, 69], "2017": 9, "last": 9, "wa": [9, 77], "2016": 9, "v4": 9, "fulli": [9, 27], "were": 9, "around": [9, 38], "android": [9, 25, 35, 56, 57, 58], "serious": [9, 39], "year": [9, 77], "nearli": 9, "seriou": [9, 11], "fix": [9, 11, 20, 26, 37, 38, 51, 53, 54, 55, 56, 57, 58, 59, 60], "under": [9, 37, 40, 49], "Its": [9, 37, 77], "evolv": 9, "expect": [9, 37, 43, 49], "chanc": 9, "implement": [9, 25, 29, 31, 35, 37, 49, 50, 61, 69], "obvious": [9, 38, 49, 61], "couldn": [9, 77], "easili": [9, 28, 37, 46, 74], "would": [9, 11, 16], "contribut": 9, "me": [9, 25], "had": [9, 11], "admit": 9, "think": [9, 11, 13, 15, 16, 19], "mere": 9, "meanwhil": [9, 63], "ecmascript": 9, "move": [9, 53, 54], "forward": [9, 38], "rapidli": 9, "caus": [9, 20, 21, 35, 46, 49, 55, 77], "unexpect": [9, 28, 49], "someon": [9, 38], "team": 9, "time": [9, 16, 29, 31, 35, 38, 61, 66], "realiti": 9, "cruel": 9, "unoffici": 9, "v6": 9, "110": 9, "2020": [9, 11], "temporarili": 9, "ve": [9, 11], "j2v8_win32_x86_64": 9, "machin": 9, "cpu": [9, 25, 61], "i7": [9, 39], "10700k": [9, 39], "tp": [9, 39], "session": 9, "003": 9, "009": 9, "338": 9, "688": 9, "ad": [9, 31, 36, 39, 52, 53, 54, 55, 56, 57, 58, 59], "hoc": [9, 36, 39, 54], "35": 9, "299": 9, "274": 9, "019": 9, "571": 9, "428": 9, "With": [9, 12, 38, 61], "improv": [9, 36, 37, 55, 59], "stick": 9, "devic": [9, 25], "precis": [9, 28, 49], "mini": 9, "macbook": 9, "air": 9, "too": [9, 16, 38], "And": [9, 25, 63], "plan": 9, "bui": 9, "futur": 9, "donat": [9, 25], "joke": 9, "intend": [9, 12], "tl": 9, "dr": 9, "rel": 9, "easi": [9, 12, 25, 27, 49, 52, 61, 66, 71], "master": [9, 50], "didn": 9, "well": [9, 24, 31, 37, 77], "213": 9, "differ": [9, 12, 29, 38, 40, 49, 50, 61], "solvabl": 9, "revisit": 9, "remov": [9, 53, 54, 55, 56], "earli": [9, 40], "haven": 9, "got": [9, 11], "reviv": 9, "v2": [9, 51, 69], "far": 9, "lowest": [9, 69], "my": [9, 25], "eclips": 9, "plai": [9, 36, 38, 50, 61, 63], "hei": 9, "satisfi": 9, "luck": 9, "understand": 9, "suffer": 9, "nowadai": 9, "2019": [9, 58], "cmakelist": 9, "txt": 9, "still": [9, 46, 49, 77], "2015": 9, "ag": 9, "surpris": 9, "deepli": 9, "gone": [9, 24], "step": [9, 12, 24, 26, 29, 31, 35, 37, 38, 49, 64, 67, 70, 71], "sit": 9, "watch": 9, "break": [9, 28, 38, 49, 50, 61, 71], "made": [9, 11], "full": [9, 40, 49], "thought": [9, 11], "month": [9, 11], "pai": [9, 77], "python2": 9, "form": [9, 49], "outer": 9, "layer": [9, 77], "logic": [9, 28, 49, 50, 63, 77], "who": [9, 38], "spend": 9, "preciou": 9, "wish": [9, 77], "hair": 9, "could": 9, "guido": 9, "van": 9, "rossum": 9, "am": [9, 31, 49], "problemat": 9, "At": [9, 11, 49], "hack": [9, 12, 24], "pom": [9, 56], "xml": [9, 56], "uncertainti": 9, "someth": [9, 49], "roi": 9, "suppos": [9, 30, 35, 50], "particular": [9, 35, 38, 39], "sai": [9, 27], "x": [9, 25, 26, 29, 31, 38, 49, 51, 65], "later": [9, 11, 38], "255": [9, 37, 52, 64], "permiss": 9, "realli": [9, 50], "local": [9, 27, 37, 49], "histori": [10, 11, 19, 77], "j2v8": [10, 11, 12, 19, 75, 76], "motiv": [10, 19, 77], "find": [11, 49], "compel": 11, "slowli": 11, "dy": 11, "sometim": [11, 26, 27, 28, 31, 37, 49, 50], "impli": [11, 16, 17, 24, 69, 77], "lower": 11, "cost": 11, "than": [11, 28, 39, 46, 49, 73, 77], "might": [11, 35], "learn": [11, 15], "lot": [11, 66], "manual": [11, 17], "window": [11, 12, 20, 25, 39, 52, 61, 77], "linux": [11, 18, 19, 25, 39, 52, 53, 54, 56, 58, 60, 77], "end": [11, 31, 37, 40, 49, 67], "abl": [11, 12, 21, 24, 28, 38, 46, 49, 63, 77], "write": [11, 27, 28, 37, 77], "inde": [11, 40], "folk": [12, 38], "migrat": [12, 25, 75], "experienc": 12, "perspect": [12, 37], "isol": [12, 36, 37, 39, 40, 77], "noth": 12, "globalthi": [12, 38, 77], "mix": 12, "longer": [12, 28, 31, 37, 40, 77], "getglobalobject": [12, 26, 27, 29, 31, 46, 49, 50, 61, 63, 64, 65, 66, 70, 73, 77], "top": [12, 38, 49, 77], "level": [12, 28, 36, 49], "globalobject": [12, 49], "invok": [12, 27, 53], "involv": 12, "common": [12, 17], "where": [12, 13, 19, 35, 38, 61, 77], "thing": [12, 28, 29, 37, 38], "offer": [12, 14, 37], "builder": 12, "check": [12, 36, 38, 49, 54, 77], "ast": 12, "scope": [12, 16, 37, 57], "duplic": 12, "regist": [12, 24, 38, 40, 43, 49, 57, 59, 66, 70, 77], "decor": [12, 49, 54, 70, 77], "v8function": [12, 49, 50, 54, 55], "v8properti": [12, 49, 53, 54, 55, 77], "back": [12, 28, 31, 37, 38, 49, 51], "leakag": [12, 43], "lifecycl": [12, 37, 40, 49], "type": [12, 26, 27, 28, 29, 31, 35, 36, 37, 39, 43, 52, 53, 55, 56, 61], "convers": [12, 26, 28, 57, 65], "handl": [12, 24, 27, 31, 36, 38, 50, 54, 56, 66], "everyth": 12, "goe": [12, 49], "smoothli": [12, 28], "experi": [12, 24, 31, 35, 38, 65, 66, 71], "littl": [12, 29], "bit": [12, 29, 37, 38], "spring": [12, 25, 52, 68, 75], "framework": [12, 74], "most": [12, 36, 38, 40, 49], "cover": [12, 27, 29, 37, 77], "express": [12, 31, 63], "effect": [12, 35, 37, 38, 63], "basic": [14, 25, 30, 49, 66, 73, 75, 77], "absent": [14, 36, 49], "settimeout": [14, 63, 73, 77], "setinterv": [14, 63, 73], "javenod": [14, 15, 25, 50, 69, 73, 77], "extens": [14, 49, 66], "aim": [14, 73, 77], "simul": [14, 38, 49, 73, 77], "singleton": 16, "fine": [16, 25, 28], "noderuntim": [16, 38, 53, 56, 63, 67, 72], "But": [16, 35, 36, 37, 38, 49, 50, 74], "crash": [16, 19, 21, 23, 35, 36, 49, 55, 58], "serv": 16, "agent": 16, "check_eq": 16, "start_io_thread_async_initi": 16, "exchang": 16, "std": 16, "atomic_bool": 16, "flip": 16, "again": [16, 31, 35], "trigger": [16, 36, 37, 49], "workaround": 16, "inevit": 16, "hacki": 16, "fundament": [16, 45, 74], "distribut": [17, 56, 69], "eg": 17, "18": [17, 55, 59, 69], "reli": [17, 37, 45, 61, 74], "advanc": [17, 25, 50, 75], "chain": [17, 37], "download": [17, 38], "drive": [17, 38], "prepar": [17, 35, 38, 49, 66], "sudo": [17, 38], "apt": [17, 38], "y": [17, 26, 29, 31, 65], "essenti": 17, "softwar": 17, "properti": [17, 28, 29, 31, 61, 70, 74], "ppa": 17, "toolchain": 17, "altern": [17, 29], "90": 17, "slave": 17, "gcov": 17, "80": 17, "70": 17, "config": [17, 31, 45], "choic": 17, "select": [17, 37, 49], "prioriti": [17, 55], "statu": [17, 46, 51], "consider": [17, 28, 46, 69], "addit": [17, 29, 36, 39, 49, 69, 77], "effort": [17, 46, 69], "commit": [17, 69], "background": [19, 25, 50], "troubleshoot": [19, 25, 32], "dynam": [19, 23, 25, 35, 38, 49, 53], "routin": [19, 23, 38], "being": [19, 23, 31, 37, 38, 46, 49], "failur": [20, 55], "happen": [20, 24, 28, 37, 50], "root": [20, 27, 37, 38], "napi": [20, 38], "symbol": [20, 26, 29, 38, 43, 54, 56, 59], "cannot": [20, 28, 36, 37, 38], "found": [20, 38, 43, 73], "modular": [20, 34, 40, 77], "By": [21, 35, 37, 70], "reduc": 21, "huge": [21, 39, 69], "amount": [21, 69, 77], "relat": [21, 49], "attempt": 21, "visit": [22, 25, 73], "user": [24, 28, 31, 38, 45, 66, 71, 74], "segfault": [24, 77], "occur": [24, 28, 31, 37], "82": 24, "loop": [24, 46, 50, 63, 71], "exit": [24, 71], "see": [24, 36, 38, 61, 72], "hand": 24, "yet": 24, "resolv": [24, 31, 38, 63, 77], "reject": [24, 40, 54], "land": 24, "lead": [24, 40], "corrupt": 24, "peopl": [24, 77], "choos": [24, 49], "mostli": 24, "genuin": 24, "prevent": [24, 35, 37, 40], "fact": [24, 50], "won": [24, 28, 35], "standard": [24, 58], "hit": [24, 46], "import": [24, 38, 45, 46, 50, 77], "promis": [24, 40, 47, 63], "explicitli": [24, 31, 35, 37, 40, 66], "forc": [24, 31, 40, 66], "garbag": [24, 35], "collect": [24, 26, 29, 35, 47, 52], "eight": 25, "awesom": [25, 72], "star": 25, "medium": 25, "blogspot": 25, "channel": 25, "discord": [25, 77], "retir": 25, "mail": 25, "great": 25, "thank": 25, "arm64": [25, 58, 60, 69], "v20": [25, 51, 60], "v11": [25, 51, 69], "172": [25, 55, 60], "15": [25, 54, 56, 57, 58, 60], "prefer": 25, "polyfil": [25, 68, 75, 77], "exposur": [25, 52], "interop": [25, 62, 75], "bigint": [25, 30, 37, 52], "date": [25, 30, 38, 52], "groupid": [25, 31, 69], "artifactid": [25, 31, 69], "v8host": [25, 27, 35, 37, 38, 46, 53, 54, 55, 61, 63, 67, 70, 71], "getnodeinst": [25, 27, 37, 63, 67, 72], "createv8runtim": [25, 27, 38, 46, 61, 63, 67, 70, 71, 72], "println": [25, 38, 61, 63, 64, 65, 67, 70, 71], "getexecutor": [25, 26, 27, 29, 31, 38, 46, 48, 49, 50, 61, 63, 64, 65, 66, 67, 70, 71, 73], "executestr": [25, 26, 29, 31, 38, 49, 64, 65, 67, 73], "getv8inst": [25, 37, 38, 46, 61, 67, 70, 71, 72], "hivemq": 25, "apach": 25, "tutori": 25, "convert": [25, 32, 43, 49, 53, 55, 56, 61, 62, 64, 75, 77], "todo": [25, 32], "list": [25, 28, 29, 31, 32, 49], "note": [25, 31, 37, 38, 49], "faq": 25, "javetproxyconvert": [26, 28, 54, 55, 61, 64, 77], "skip": [26, 28, 31, 54], "proxi": [26, 29, 55, 56, 61], "primit": [26, 27, 28, 29, 31, 40, 49, 52, 55, 56], "annoi": 26, "variabl": [26, 36, 38, 49, 55, 64, 65, 70], "accid": 26, "javetbridgeconvert": [26, 55], "ident": [26, 38, 49, 70], "setconvert": [26, 27, 31, 61, 64], "btrue": 26, "bfals": 26, "asserttru": [26, 31, 46, 48, 49, 50], "executeobject": [26, 31, 64, 65], "assertfals": [26, 31, 46, 48, 49], "assertequ": [26, 29, 31, 46, 48, 49], "tov8valu": [26, 27, 61], "executeinteg": [26, 29, 31, 38, 46, 49, 67], "toprimit": 26, "12345": 26, "12346": 26, "intarrai": 26, "length": [26, 27, 29, 37], "assertarrayequ": [26, 31], "iter": [26, 59], "integerlist": 26, "arraylist": [26, 29, 65], "executevoid": [26, 27, 31, 38, 46, 49, 61, 63, 64, 65, 66, 70, 73], "longlist": 26, "unmodifiablelist": 26, "aslist": [26, 49], "1l": 26, "2l": 26, "stringifi": [26, 65], "implicit": [26, 77], "given": [26, 37], "give": [26, 28, 37, 46, 49], "ab": 26, "implicitli": [26, 55], "besid": [26, 49], "power": 27, "simpl": [27, 31, 35, 37, 38, 45, 49, 61, 63, 72], "about": [27, 36], "deal": [27, 29, 37, 49], "reflect": [27, 29, 31, 40, 49, 59], "tweak": 27, "pair": [27, 49], "public": [27, 29, 31, 35, 45, 49, 50, 56, 61, 63, 70, 73, 74], "class": [27, 29, 38, 45, 49, 61, 63, 70, 74], "null": [27, 29, 31, 38, 49, 50, 63, 70, 71], "getnam": [27, 29, 70, 74], "return": [27, 28, 29, 31, 35, 37, 38, 40, 46, 49, 50, 53, 61, 63, 64, 65, 70, 74], "void": [27, 29, 31, 45, 49, 50, 61, 63, 70, 73], "setnam": [27, 29, 70], "getvalu": [27, 29, 48, 49, 61, 70], "setvalu": [27, 29, 49, 70], "Then": 27, "gener": [27, 31, 37, 43, 49, 54, 61], "recurs": [27, 28, 54], "parent": [27, 40], "overrid": [27, 31, 35, 45, 49, 50, 61], "depth": [27, 28, 43, 54], "argument": [27, 29, 77], "circular": [27, 43, 54], "structur": [27, 43, 54, 61], "increment": [27, 61], "suppresswarn": 27, "uncheck": 27, "extend": [27, 31, 49], "javetobjectconvert": [27, 28, 29, 54, 77], "method_prefix_get": 27, "method_prefix_i": 27, "protect": [27, 36, 45, 46, 74], "excluded_method": 27, "hashset": [27, 29, 49], "getmethod": [27, 49], "getparametercount": 27, "methodnam": [27, 43, 49], "startswith": 27, "v8valu": [27, 28, 50, 53, 54, 56, 61, 65, 71, 77], "int": [27, 29, 30, 31, 46, 49, 61, 63, 70], "throw": [27, 28, 31, 38, 46, 49, 50, 61, 63, 73], "javetexcept": [27, 49, 50, 61, 63, 73], "super": [27, 61], "isundefin": 27, "objectclass": 27, "getclass": 27, "v8valueobject": [27, 31, 37, 38, 49, 54, 56, 70, 73, 77], "createv8valueobject": [27, 37, 49, 70], "canaccess": 27, "propertynam": 27, "contain": [27, 38, 40, 49], "substr": 27, "tolowercas": 27, "els": [27, 38, 49, 50, 61, 63, 73, 77], "v8valuetemp": 27, "catch": [27, 46, 49, 50, 63, 71], "except": [27, 31, 36, 37, 38, 40, 45, 46, 49, 53, 55, 56, 61, 77], "printstacktrac": [27, 46, 63], "line": [27, 36, 49, 71], "testpojo": 27, "pojoarrai": 27, "tom": 27, "ceo": 27, "jerri": 27, "cfo": 27, "log": [27, 37, 40, 44, 49, 50, 63, 66, 70], "transpar": [27, 31, 49, 77], "autom": [27, 37], "bridg": [28, 55], "arrai": [28, 29, 31, 37, 48, 49, 52], "meet": [28, 38], "famou": 28, "topic": [28, 50], "lang": [28, 35], "nullpointerexcept": 28, "luckili": [28, 38], "inject": [28, 31, 35, 43, 49, 50, 54, 61, 77], "javetconverterconfig": [28, 54], "overridden": [28, 35], "differenti": 28, "introduc": [28, 37, 55, 77], "ijavetentityfunct": [28, 29], "ijavetentitymap": [28, 29], "setskipfunctioninobject": 28, "boolean": [28, 29, 30, 35], "setextractfunctionsourcecod": 28, "opportun": 28, "extract": 28, "ineffici": 28, "inconveni": [28, 35], "substanti": 28, "instead": [28, 36, 37, 38, 53, 58, 65, 77], "javetconverterexcept": 28, "maximum": 28, "reach": [28, 43], "cheap": 28, "unrealist": 28, "number": [28, 30, 37], "stackoverflowerror": 28, "wors": 28, "written": 28, "block": [28, 36, 37, 49, 67], "stack": [28, 49], "overflow": 28, "attack": [28, 46], "drain": [28, 37], "tini": 28, "behavior": [28, 31, 37, 40, 49], "fanci": 28, "read": [28, 37, 43, 50], "setproxymapen": [28, 31], "wherea": [28, 37], "conveni": 28, "bi": [28, 65], "direction": [28, 65], "grain": 28, "worri": [28, 35, 38, 46, 63], "vice": 28, "versa": 28, "open": [29, 31, 40], "subclass": [29, 31, 40, 50], "int8arrai": [29, 37], "char": [29, 30, 49], "doubl": [29, 30, 37, 49], "float64arrai": [29, 37], "float": [29, 30, 37, 49], "float32arrai": [29, 37], "int32arrai": [29, 37], "int64arrai": 29, "short": [29, 30, 37, 49], "int16arrai": [29, 37], "stream": [29, 49, 54, 56], "javetentitysymbol": 29, "ijavetmapp": [29, 54], "hashmap": [29, 31, 65], "uint8arrai": [29, 37], "uint8clampedarrai": [29, 37], "uint16arrai": [29, 37], "uint32arrai": [29, 37], "bigint32arrai": 29, "bigint64arrai": [29, 37], "pojo": 29, "slow": [29, 39], "registercustomobject": [29, 54], "alien": 29, "match": [29, 31, 38, 64], "constructor": [29, 31, 55, 73], "signatur": [29, 43, 49], "frommap": 29, "tomap": 29, "touchabl": 29, "easier": 29, "customobject": 29, "integ": [29, 30, 31, 37, 48, 49, 63], "put": [29, 31, 40, 61, 65], "getter": [29, 31, 49, 54, 55, 70, 77], "setter": [29, 31, 49, 54, 70, 77], "snippet": [29, 37], "below": [29, 49], "getconvert": 29, "ones": 29, "upon": 29, "registr": [29, 43, 77], "customfrommap": 29, "customtomap": 29, "regular": [29, 36], "v8customobject": 29, "getobject": [29, 31], "assertnotnul": [29, 31, 48], "pro": 29, "con": 29, "intrus": [29, 61], "carri": [29, 77], "inform": 29, "memor": 29, "complic": [29, 38], "relationship": 29, "javetprimitiveconvert": [30, 54, 56], "charact": 30, "biginteg": 30, "zoneddatetim": [30, 56, 57], "optionalint": 30, "optionaldoubl": 30, "optionallong": 30, "fall": 30, "rang": [30, 37], "graalj": 31, "whole": 31, "danger": 31, "touch": [31, 36], "tmp": 31, "executeboolean": 31, "isfil": 31, "isdirectori": 31, "canread": [31, 73], "canwrit": 31, "canexecut": 31, "lowmemorynotif": [31, 49, 50, 53, 61, 66, 70, 77], "getconfig": [31, 38, 72], "z": 31, "topath": 31, "tostr": [31, 38, 48, 49, 61, 64, 71, 73], "newpath": 31, "toobject": 31, "abc": [31, 35, 49, 64], "def": [31, 49, 63], "n": [31, 38, 49, 64], "d": [31, 38, 64], "instanceof": [31, 49, 50, 61], "matcher": [31, 64], "123": [31, 49, 64, 70, 73], "a123": 31, "smart": [31, 37], "javeterrortyp": 31, "assertthrow": 31, "javetexecutionexcept": [31, 38, 55], "field": 31, "should": [31, 46], "writabl": 31, "annot": [31, 49, 54], "autoclos": 31, "ijavetclos": [31, 54], "isassignablefrom": 31, "special": [31, 49], "known": [31, 37], "lambda": [31, 49], "istringjoin": 31, "join": 31, "two": [31, 37], "stringjoin": 31, "hold": [31, 37, 50], "joiner": 31, "getjoin": 31, "setjoin": 31, "v8valuefunct": [31, 49, 53, 54, 63, 73], "orphan": 31, "callabl": 31, "outofmemoryerror": 31, "similar": [31, 40, 66], "enhanc": [31, 49, 53, 54, 55, 56, 59], "istringutil": 31, "hello": [31, 63, 64, 66, 68, 75], "split": 31, "stringutil": 31, "util": 31, "getutil": 31, "setutil": 31, "str": [31, 49], "toarrai": [31, 65], "aussi": 31, "non": [31, 40, 49], "bytebuddi": [31, 57], "alreadi": [31, 43, 50], "referenc": [31, 37, 38], "buddi": 31, "12": [31, 55, 57, 58, 59], "groovi": 31, "javetdynamicobjectfactori": [31, 57], "stai": [31, 35, 63, 77], "dynamicclass": 31, "ijavetanonym": [31, 49, 54], "setdynamicobjectfactori": 31, "getinst": [31, 35], "codestr": [31, 38, 52], "smartli": 31, "overload": 31, "vararg": [31, 49, 53, 56], "identifi": 31, "alter": 31, "v8allow": [31, 55], "bind": [31, 38, 50, 53, 65, 70, 77], "v8block": [31, 55], "ignor": [31, 37, 49, 53], "v8getter": [31, 55], "v8setter": [31, 55], "treat": [31, 35, 37], "allowonli": 31, "blockonli": 31, "alia": 31, "virtual": [31, 38, 56], "document": [35, 49, 54], "assum": [35, 38, 49], "reload": 35, "setlibraryreload": 35, "jsruntimetyp": [35, 38, 72, 74], "unloadlibrari": [35, 54], "restor": [35, 49], "gc": [35, 61, 66, 70], "prior": 35, "loadlibrari": [35, 54], "unstabl": 35, "risk": [35, 40], "temp": 35, "javetlibload": 35, "setlibloadinglisten": 35, "ijavetlibloadinglisten": [35, 55], "getlibpath": 35, "anywher": 35, "bypass": [35, 49], "mean": [35, 38, 45, 49], "isdeploi": 35, "must": [35, 49, 73], "less": 35, "islibinsystempath": 35, "mavin": 35, "plug": 35, "osgi": 35, "repeatedli": 35, "regardless": [35, 36, 40], "unsatisfiedlinkerror": 35, "issuppressingerror": [35, 55], "javetlibloadinglisten": [35, 55], "mechan": [35, 36, 77], "djavet": 35, "among": [36, 49, 59, 77], "unlock": [36, 61], "surround": 36, "v8locker": [36, 40, 52], "locker": 36, "getv8lock": 36, "nest": 36, "thrown": [36, 37, 40, 46, 49], "report": 36, "conflict": [36, 43], "slight": 36, "sensit": [36, 37, 40, 52, 77], "extrem": [36, 49], "50": 36, "granular": 36, "concurr": 36, "scenario": [36, 37, 40, 52, 77], "maxim": [36, 40], "21": [36, 54, 69], "incompat": 36, "chao": 36, "sequenc": 36, "synchron": [36, 77], "newglobalref": 37, "javaobject": [37, 77], "until": 37, "deleteglobalref": 37, "across": 37, "raw": 37, "unless": [37, 39, 40, 77], "categor": 37, "within": 37, "persist": 37, "aw": 37, "borrow": [37, 49], "rule": [37, 49], "wrap": 37, "outsid": 37, "setweak": [37, 40], "determin": [37, 49, 54], "javetstandardconsoleinterceptor": [37, 66, 70], "creation": [37, 39, 66], "v8scope": [37, 40, 54], "setescap": 37, "getv8scop": 37, "binari": [37, 43, 58], "often": 37, "languag": [37, 49], "manipul": [37, 48], "content": [37, 50, 60], "dataview": 37, "specif": [37, 50], "format": [37, 43, 49], "nio": 37, "bytebuff": [37, 56], "consid": [37, 49, 61], "idl": 37, "equival": [37, 49], "128": 37, "complement": 37, "sign": 37, "int8_t": 37, "unsign": 37, "octet": 37, "uint8_t": 37, "clamp": 37, "32768": 37, "32767": 37, "int16_t": 37, "65535": 37, "uint16_t": 37, "2147483648": 37, "2147483647": 37, "int32_t": 37, "4294967295": 37, "uint32_t": 37, "38": 37, "1038": 37, "ieee": 37, "point": [37, 38], "signific": 37, "digit": 37, "234567": 37, "unrestrict": 37, "324": 37, "10308": 37, "64": [37, 54], "23456789012345": 37, "263": [37, 39], "int64_t": 37, "biguint64arrai": 37, "264": 37, "uint64_t": 37, "testv8valuetypedarrai": 37, "testv8valuedataview": 37, "frequenc": 37, "area": 37, "pace": 37, "zombi": 37, "cycl": 37, "notifi": [37, 61, 70], "space": 37, "v8notifi": 37, "setmemoryusagethresholdratio": [37, 53], "threshold": 37, "ratio": 37, "enablegcnotif": [37, 53], "ration": 37, "xms64m": 37, "xmx64m": 37, "pressur": [37, 77], "destroi": 37, "curv": 37, "smoother": 37, "exce": 37, "broadcast": 37, "schedul": [37, 55], "affect": 37, "worker": 37, "javetengineconfig": [37, 45, 53, 56, 74], "setautosendgcnotif": [37, 74], "light": 37, "weight": 37, "hint": [37, 49], "task": [37, 50, 53], "queue": [37, 50], "decis": 37, "millisecond": [37, 46, 63], "disregard": 37, "aforement": 37, "analyz": [37, 38], "getv8heapspacestatist": [37, 55], "getv8heapstatist": [37, 55], "getv8sharedmemorystatist": [37, 55], "javetenginepool": [38, 45, 53, 55, 66, 72, 74], "setjsruntimetyp": [38, 72, 74], "ijavetengin": [38, 46, 66, 72, 73], "getengin": [38, 46, 66, 72], "getv8runtim": [38, 46, 61, 66, 73], "workingdirectori": 38, "javetosutil": [38, 63, 73], "working_directori": [38, 63, 73], "node_modul": [38, 40, 63, 73], "getnodemodul": 38, "nodemodulemodul": 38, "setrequirerootdirectori": 38, "getlogg": [38, 45, 73], "loginfo": [38, 73], "23": [38, 53, 56, 57, 59, 69, 73], "34": [38, 73], "const": [38, 48, 49, 61, 63, 64, 65, 73], "decim": 38, "__dirnam": 38, "__filenam": 38, "scriptfil": 38, "scriptpath": 38, "scriptstr": 38, "iv8executor": [38, 57], "setresourcenam": 38, "resourcenam": 38, "setmodul": 38, "excit": 38, "potenti": [38, 54, 55], "piec": 38, "sqlite3": 38, "bother": 38, "electron": 38, "approach": [38, 49], "simpler": 38, "node_sqlite3": 38, "napi_create_error": 38, "patchelf": 38, "npm": [38, 63, 73], "node_module_fil": 38, "loadlibraryexw": 38, "unzip": 38, "somewher": 38, "replac": [38, 61], "voluntarili": 38, "compat": [38, 55], "major": [38, 52, 77], "go": [38, 51], "through": [38, 49], "pretti": 38, "backup": 38, "rebuilt": [38, 53], "dumpbin": 38, "win32": 38, "delai": 38, "ex": 38, "00000001": 38, "characterist": 38, "0000000180154a40": 38, "hmodul": 38, "0000000180154818": 38, "tabl": [38, 58], "000000018014f248": 38, "000000018014fa68": 38, "bound": 38, "0000000000000000": 38, "stamp": 38, "0000000180108724": 38, "424b": 38, "napi_create_funct": 38, "0000000180108ab5": 38, "4243": 38, "napi_create_buffer_copi": 38, "1801363d8": 38, "180166610": 38, "index": 38, "6096": 38, "napi_open_escapable_handle_scop": 38, "6072": 38, "napi_get_undefin": 38, "apart": 38, "swc": 38, "gyp": 38, "ppee": 38, "puppi": 38, "profession": 38, "pe": 38, "explor": 38, "cli": 38, "drag": 38, "directory_entry_delay_import": 38, "save": [38, 63], "box": 38, "order": [38, 48], "launch": [38, 40], "testfrommodul": 38, "assign": [38, 49, 54, 64], "v8modul": [38, 53, 57], "compilemodul": 38, "containsmodul": 38, "getinteg": [38, 46], "heavi": 38, "setv8moduleresolv": 38, "v8modulereferr": 38, "equal": [38, 49, 52, 65, 71, 73], "compilev8modul": [38, 77], "analysi": 38, "relai": [38, 55], "cach": [38, 52, 56, 57], "reset": [39, 40], "751": 39, "032": 39, "65": 39, "410": 39, "143": 39, "363": 39, "51": 39, "647": 39, "458": 39, "846": 39, "968": 39, "253": 39, "508": 39, "748": 39, "660": 39, "slightli": 39, "mainli": 39, "older": 39, "dramat": [39, 49], "outperform": 39, "down": [39, 77], "emb": 39, "obtain": 40, "pass": [40, 54], "dangl": [40, 58], "ey": 40, "stage": 40, "prohibit": 40, "uncertain": 40, "acquir": [40, 43, 77], "malici": [40, 46], "eval": [40, 49], "vulner": 40, "impact": [40, 49], "unhandl": 40, "whose": 40, "awar": 40, "period": 42, "style": 42, "statist": [42, 55], "significantli": 43, "101": 43, "osnotsupport": 43, "102": 43, "librarynotfound": 43, "103": 43, "librarynotload": 43, "104": 43, "notsupport": 43, "105": 43, "failedtoreadpath": 43, "201": 43, "compilationfailur": 43, "301": 43, "executionfailur": 43, "302": 43, "executiontermin": 43, "termin": [43, 44], "continu": 43, "401": 43, "callbacksignatureparametersizemismatch": 43, "mismatch": 43, "paramet": [43, 49], "expectedparameters": 43, "actualparameters": 43, "402": 43, "callbacksignatureparametertypemismatch": 43, "expectedparametertyp": 43, "actualparametertyp": 43, "403": 43, "callbackinjectionfailur": 43, "404": 43, "callbackregistrationfailur": 43, "405": 43, "callbackmethodfailur": 43, "406": 43, "callbackunknownfailur": 43, "unknown": 43, "407": [43, 54], "callbackunregistrationfailur": 43, "unregistr": 43, "408": [43, 59], "callbacktypenotsupport": [43, 59], "callbacktyp": 43, "501": 43, "converterfailur": 43, "502": 43, "convertercircularstructur": 43, "max": 43, "503": [43, 54], "convertersymbolnotbuiltin": 43, "601": 43, "modulenameempti": 43, "empti": 43, "602": [43, 54], "modulenotfound": 43, "modulenam": 43, "603": [43, 54], "modulepermissiondeni": 43, "deni": 43, "701": 43, "lockacquisitionfailur": 43, "702": 43, "lockreleasefailur": 43, "703": 43, "lockconflictthreadidmismatch": 43, "lockedthreadid": 43, "currentthreadid": 43, "801": 43, "runtimealreadyclos": 43, "802": 43, "runtimealreadyregist": 43, "803": 43, "runtimenotregist": 43, "804": 43, "runtimeleakagedetect": 43, "805": [43, 54], "runtimeclosefailur": 43, "806": [43, 55], "runtimeoutofmemori": 43, "heapstatist": 43, "901": [43, 56], "enginenotavail": [43, 56], "hell": [45, 74], "3rd": [45, 49], "parti": [45, 49], "interfac": [45, 50, 77], "slf4j": 45, "org": 45, "loggerfactori": 45, "myjavetlogg": [45, 74], "isdebugen": 45, "throwabl": [45, 71], "info": [45, 57], "isinfoen": 45, "iswarnen": 45, "javetlogg": 45, "testlogg": 45, "setjavetlogg": [45, 74], "ijavetengineguard": [46, 52], "ijavetenginepool": [46, 66, 74], "guard": 46, "getguard": 46, "10000": 46, "infinit": [46, 71], "javetterminatedexcept": 46, "mark": 46, "iscontinu": 46, "dead": 46, "afterward": [46, 50], "hang": 46, "till": 46, "timeout": [46, 50], "cancel": 46, "monitor": 46, "daemonthread": 46, "isinus": [46, 52], "timeunit": [46, 63], "sleep": [46, 63], "interruptedexcept": [46, 63], "terminateexecut": [46, 52, 77], "var": [46, 49, 63], "greater": 46, "javetengineguard": [46, 53], "interrupt": 46, "disableindebugmod": [46, 53], "enableindebugmod": [46, 53], "getlength": 48, "getsiz": 48, "getkei": 48, "getownpropertynam": 48, "getentri": 48, "foreach": [48, 52, 59], "consum": 48, "biconsum": 48, "weakmap": 48, "weakset": 48, "atomicinteg": 48, "v8valueinteg": [48, 49, 61], "getandincr": 48, "popinteg": 48, "preserv": 48, "v8valuestr": [48, 61], "getjsfunctiontyp": [49, 53], "capabl": [49, 61], "invis": 49, "stori": 49, "closur": 49, "goal": 49, "iv8valueobject": [49, 52, 53, 54, 57, 59], "caller": [49, 50], "scan": 49, "input": [49, 61, 65, 71], "receiv": [49, 50, 54, 61], "functioncallbackreceiv": 49, "tricki": 49, "charm": 49, "generatearraywithconvert": 49, "intrud": 49, "untouch": 49, "situat": 49, "v8runtimesett": 49, "generatearraywithoutconvert": 49, "declar": [49, 74, 77], "annotationbasedcallbackreceiv": 49, "stringvalu": 49, "getstringvalu": 49, "setstringvalu": 49, "echo": 49, "mathadd": 49, "recogn": [49, 61], "v8valuearrai": 49, "createv8valuearrai": 49, "staticecho": 49, "setv8runtim": 49, "tojsonstr": 49, "testopt": 49, "optionalstr": 49, "teststream": 49, "filter": 49, "thisobjectrequir": [49, 54], "specifi": [49, 77], "thisobject": 49, "bodi": [49, 61, 63], "especi": [49, 66, 77], "simpli": [49, 61], "symboltyp": 49, "v8valuesymboltyp": 49, "v8bindingenabl": [49, 54], "disabledfunct": 49, "disabledproperti": 49, "isv8bindingen": 49, "arbitrarymethod": 49, "whether": [49, 54], "refactor": [49, 53, 54, 55, 56], "friendli": [49, 77], "javetreflectionutil": [49, 54], "getmethodnamefromlambda": [49, 54], "getmethodnamesetfromlambda": [49, 54], "firstli": 49, "disabledfunctionset": 49, "supplier": 49, "serializ": 49, "secondli": 49, "est": 49, "tr\u00e8": 49, "bien": 49, "unbind": [49, 54, 77], "unbindproperti": [49, 54, 59], "unbindfunct": [49, 54, 59], "ijavetanonymous1": 49, "testfunct": 49, "testproperti": 49, "ijavetanonymous2": 49, "javetentityfunct": [49, 54], "jsfunctiontyp": 49, "userdefin": 49, "semi": 49, "mockcallbackreceiv": 49, "blank": 49, "createv8valuefunct": 49, "iscal": 49, "happi": 49, "mirror": 49, "anonym": 49, "getsourcecod": [49, 53], "setsourcecod": [49, 53], "sourcecod": 49, "existingsourcecod": 49, "startposit": 49, "endposit": 49, "getposit": 49, "newsourcecod": 49, "setposit": 49, "len": 49, "radic": 49, "rough": 49, "layout": 49, "remain": 49, "accordingli": 49, "invoc": 49, "pseudo": [49, 50, 63], "originalsourcecod": 49, "getjsscopetyp": 49, "isclass": 49, "indic": 49, "callvoid": [49, 63], "isfunct": 49, "incorrect": 49, "malform": 49, "technic": [49, 72], "keyword": 49, "discard": 49, "createv8valuestr": [49, 53], "toclon": [49, 57], "abov": 49, "intvalu": 49, "valueof": 49, "createv8valueinteg": [49, 61], "safeti": 49, "sentenc": [49, 77], "belong": 49, "prototyp": 49, "combin": 49, "func": 49, "callobject": 49, "callprimit": 49, "callasconstructor": [49, 52, 73], "itself": 49, "invokevoid": [49, 61], "invokeobject": [49, 64], "invokeprimit": 49, "despit": 49, "deficit": 49, "quot": 49, "getcontext": [49, 55], "setcontext": 49, "copyscopeinfofrom": [49, 57], "anoth": [49, 73], "setscriptsourc": [49, 57], "lexic": 49, "jsfunction": 49, "ecma": 49, "262": 49, "speak": 49, "parallel": 49, "slot": 49, "scope_info": 49, "describ": 49, "lookup": 49, "presenc": 49, "previou": 49, "scopeinfo": [49, 57], "hascontextextensionslot": 49, "search": 49, "purpos": 49, "henc": 49, "sloppi": 49, "inner": [49, 55], "fast": 49, "harmoni": 49, "scriptcontext": 49, "rather": 49, "functioncontext": 49, "gather": 49, "scriptcontextt": 49, "toler": 49, "natur": [49, 50], "strongli": [49, 61], "conform": 49, "throughout": 49, "samplewithoutthi": 49, "samplewiththi": 49, "excess": 49, "behav": 49, "redund": 49, "fill": 49, "review": [49, 50], "due": 50, "multi": [50, 66, 77], "friend": 50, "iv8valuepromis": [50, 57], "ownership": 50, "chart": 50, "v8valuepromis": [50, 53, 54], "icallback": 50, "oncatch": 50, "v8valueerror": 50, "onfulfil": 50, "fulfil": 50, "onreject": 50, "manner": [50, 77], "filecont": 50, "filepath": 50, "v8valuepromiseresolv": 50, "createv8valuepromis": 50, "getpromis": 50, "getfilecont": 50, "getfilepath": 50, "createv8valueundefin": 50, "print": [50, 65, 71], "rais": 50, "setpromiserejectcallback": 50, "ijavetpromiserejectcallback": 50, "unhandledreject": 50, "handi": 50, "mainstream": 51, "mainten": [51, 54], "v18": [51, 58, 59], "v10": [51, 60], "v16": [51, 56], "v9": [51, 69], "v0": [51, 52, 53, 54, 77], "v14": [51, 53, 54], "critic": 51, "bug": [51, 53, 55, 56, 57, 58, 59, 77], "patch": 51, "deprec": [52, 53], "v8valueweakmap": 52, "v8valueweakset": 52, "setfunct": [52, 53], "functionnam": 52, "strictequ": 52, "samevalu": 52, "iv8valu": [52, 53, 57], "getidentityhash": 52, "iv8valuerefer": 52, "isdead": 52, "view": 52, "2021": [52, 53, 54, 55, 77], "02": [52, 53, 56, 57], "renam": [53, 54, 57, 59], "ijavetconsum": 53, "ijavetuniconsum": 53, "ijavetuniindexedconsum": 53, "ijavetbiindexedconsum": 53, "v8functioncallback": [53, 59], "bindfunct": [53, 59], "bindproperti": [53, 59], "checkreturnvalu": 53, "re": [53, 63], "organ": 53, "iv8valuefunct": [53, 54, 57], "emit": 53, "univers": 53, "createv8valuedoubl": 53, "createv8valuezoneddatetim": 53, "javeterror": [53, 56], "gcbeforeengineclos": 53, "javetcallbackexcept": 53, "isnullorundefin": 53, "06": [53, 54, 56, 59], "257": 53, "idlenotificationdeadlin": 53, "disablegcnotif": 53, "autosendgcnotif": 53, "javetcallbackcontext": [53, 59], "javetpromiserejectcallback": 53, "allowev": 53, "v8script": [53, 57], "v8bindenabl": 54, "v8virtualescapablevalu": 54, "146": [54, 55], "09": [54, 55, 57, 59, 60], "hasinternaltyp": 54, "isgeneratorobject": 54, "isgeneratorfunct": 54, "isasyncfunct": 54, "v8flag": 54, "v8valuesharedarraybuff": 54, "unregistercustomobject": 54, "javadoc": 54, "08": [54, 56, 59], "31": 54, "345": 54, "v8valuebuiltinsymbol": 54, "getownpropertysymbol": 54, "v8valuebuiltinobject": 54, "createv8valuesymbol": 54, "javetvirtualobject": 54, "javetuniversalproxyhandl": 54, "isclos": 54, "07": [54, 56, 58, 59], "29": 54, "staticclassen": 54, "ownkei": 54, "iv8valueproxi": 54, "v8valueproxi": 54, "gettarget": 54, "gethandl": 54, "isrevok": 54, "revok": 54, "createv8valueproxi": 54, "230": 54, "19": [54, 55], "getprototyp": 54, "setprototyp": 54, "01": [54, 55, 56, 57], "iv8moduleresolv": 54, "nodemoduleprocess": 54, "getvers": 54, "05": [54, 56, 59], "269": 54, "28": [54, 57, 60], "13": [55, 57, 58], "106": 55, "javetcompilationexcept": 55, "convent": 55, "agnost": 55, "getdetailedmessag": 55, "getstack": 55, "javetscriptingerror": 55, "adjust": 55, "capac": 55, "observ": 55, "v8runtimeobserveraveragecallbackcontextcount": 55, "v8runtimeobserveraveragereferencecount": 55, "v8runtimeobserveraveragev8modulecount": 55, "v8convert": 55, "algorithm": 55, "26": [55, 56], "180": 55, "javetoutofmemoryexcept": 55, "awai": 55, "busi": [55, 77], "haspendingexcept": 55, "haspendingmessag": 55, "hasscheduledexcept": 55, "promotescheduledexcept": 55, "reportpendingmessag": 55, "addgcepiloguecallback": 55, "addgcprologuecallback": 55, "removegcepiloguecallback": 55, "removegcprologuecallback": 55, "22": [55, 69], "v8intern": 55, "clean": 55, "methodhandl": 55, "cast": 55, "mistakenli": 55, "v8runtimeopt": 55, "noderuntimeopt": 55, "218": 56, "handler": [56, 63], "132": 56, "improp": 56, "waitforenginemaxretrycount": 56, "174": 56, "pend": [56, 63], "andoird": 56, "v8valuebiginteg": 56, "154": 56, "ispurgeeventloopbeforeclos": 56, "setpurgeeventloopbeforeclos": [56, 63], "124": [56, 70], "03": [56, 57, 58], "139": 56, "115": 56, "createv8valuearraybuff": 56, "177": 56, "r23b": 56, "abi": [56, 58, 69], "libgcc": 56, "libstdc": 56, "cento": 56, "2023": [57, 58, 59, 60], "226": 57, "verifynostrongbaseobject": 57, "ilisten": 57, "v8awaitmod": 57, "194": 57, "compilev8valuefunct": 57, "getcacheddata": 57, "iswrap": 57, "getargu": 57, "cacheddata": 57, "v8stringexecutor": 57, "168": 57, "revis": 57, "getscopeinfo": 57, "getownpropertynamestr": 57, "referencecopi": 57, "193": 57, "javetuniversalproxi": 57, "javetdynamicproxi": [57, 59], "copycontextfrom": 57, "getscriptsourc": 57, "setsourcecodeopt": 57, "iscompil": 57, "candiscardcompil": 57, "discardcompil": 57, "244": 58, "214": 58, "277": 58, "439": 59, "189": 59, "resolut": 59, "executor": 59, "nativecontext": 59, "150": 59, "ijavetdirectproxyhandl": [59, 61], "v8virtualiter": 59, "javetproxysymboliterableconvert": 59, "183": 59, "receivecallback": 59, "iv8valuemap": 59, "iv8valuearrai": 59, "batchget": 59, "javetcallbacktyp": 59, "ijavetdirectcal": 59, "redesign": 59, "javetreflectionproxi": 59, "elegantli": 61, "leaf": 61, "measur": 61, "elaps": 61, "leverag": 61, "verbos": [61, 77], "testjavaflavor": 61, "round": 61, "isobject": 61, "isint": 61, "asint": 61, "wrapper": 61, "neat": 61, "pure": 61, "testjsflavor": 61, "redirect": [61, 66], "proxyget": 61, "proxyset": 61, "jsonnodewrapp": 61, "requirenonnul": 61, "getjsonnod": 61, "childjsonnod": 61, "v8valueboolean": 61, "propertykei": 61, "propertyvalu": 61, "objectnod": 61, "createv8valueboolean": 61, "testnam": 61, "starttim": 61, "currenttimemilli": 61, "stoptim": 61, "100_000": 61, "interoper": 61, "testscriptjavaflavor": 61, "testscriptjsflavor": 61, "objectmapp": 61, "readtre": 61, "jsonstr": 61, "amd": 61, "5950x": 61, "128gb": 61, "22h2": 61, "corretto": 61, "0_282": 61, "19464m": 61, "100000": 61, "5214m": 61, "370": 61, "underli": 61, "drawback": 61, "spent": 61, "jsonnod": [62, 75], "door": 63, "hijack": 63, "seamlessli": 63, "parser": 63, "cooki": 63, "multer": 63, "app": 63, "req": 63, "8991": 63, "testexpress": 63, "codefil": 63, "tofil": 63, "atomicboolean": 63, "serverup": 63, "500": 63, "max_valu": 63, "1000": 63, "trick": 63, "awaitmod": 63, "drain_the_task_queu": 63, "pause_the_event_loop": 63, "there_are_more_tasks_in_task_queu": 63, "sleep_a_whil": 63, "resume_the_event_loop": 63, "runonc": 63, "there_are_no_more_task": 63, "timer": 63, "gracefulli": 63, "color": 64, "pink": 64, "awt": 64, "175": 64, "stringarrai": 65, "represent": 65, "stringlist": 65, "assert": 65, "mapx": 65, "mapi": 65, "spawn": 66, "databas": 66, "javetengin": [66, 72], "javetconsoleinterceptor": 66, "unregist": [66, 70], "necessari": 66, "cent": 69, "mission": 69, "imposs": 69, "guess": 70, "increaseandget": 70, "suitabl": 70, "testintercept": 70, "delta": 70, "testinterceptor": 70, "76": 70, "200": 70, "scanner": 71, "nextlin": 71, "captur": 71, "err": 71, "getmessag": 71, "highlight": 72, "javetenginepoo": 72, "l": 72, "loadj": 73, "decimaljsfil": 73, "getabsolutepath": 73, "logerror": 73, "v8valuefunctiondecim": 73, "v8valueobjectdecim": 73, "45": 73, "hasownproperti": 73, "getstr": 73, "bigdecim": 73, "lack": [73, 77], "bean": 74, "propertysourc": 74, "classpath": 74, "configurationproperti": 74, "prefix": 74, "myjavetengineconfig": 74, "javetenginepoolnod": 74, "getjavetenginepoolnod": 74, "javetengineconfignod": 74, "setallowev": 74, "setdefaultengineguardtimeoutmilli": 74, "setengineguardcheckintervalmilli": 74, "setpooldaemoncheckintervalmilli": 74, "setpoolidletimeoutsecond": 74, "setpoolmins": 74, "setpoolmaxs": 74, "setpoolshutdowntimeoutsecond": 74, "setresetenginetimeoutsecond": 74, "javetenginepoolv8": 74, "getjavetenginepoolv8": 74, "javetengineconfigv8": 74, "frequent": 77, "ask": 77, "question": 77, "jan": 77, "publish": 77, "smooth": 77, "took": 77, "week": 77, "abandon": 77, "hierarchi": 77, "inconsist": 77, "repeat": 77, "attent": 77, "mental": 77, "role": 77, "inherit": 77, "liter": 77, "richer": 77, "v8valueprimit": 77, "v8data": 77, "consist": 77, "rich": 77, "pain": 77, "imper": 77, "never": 77, "deliv": 77, "elimin": 77, "rid": 77, "everywher": 77, "hotfix": 77, "usag": 77, "extra": 77, "shut": 77, "success": 77}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"build": [0, 1, 2, 9], "javet": [0, 1, 2, 4, 6, 7, 12, 17, 22, 25, 35, 36, 38, 39, 55, 66, 67, 71, 77], "environ": [0, 2, 18, 35], "linux": [0, 1, 2, 9, 17, 38, 69], "maco": 0, "window": [0, 1, 2, 9, 38, 69], "android": [0, 1, 2, 55, 69], "variabl": [0, 35], "v8": [0, 1, 4, 14, 37, 38, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 67, 72, 73, 77], "featur": [0, 25, 31], "flag": 0, "from": [1, 12, 29, 30, 35, 37, 77], "scratch": 1, "prepar": [1, 26, 31, 64], "arm64": [1, 55], "x86_64": [1, 54], "mac": [1, 54, 55, 69], "o": [1, 54, 55, 69], "why": [1, 9, 16, 24, 43, 49, 77], "patch": [1, 38], "node": [1, 4, 8, 16, 24, 38, 40, 53, 55, 57, 63, 67, 72, 73, 77], "j": [1, 4, 8, 16, 24, 38, 40, 53, 55, 57, 61, 63, 67, 72, 73, 77], "jni": 1, "librari": [1, 20, 35, 55], "docker": 2, "hub": 2, "github": 2, "express": 2, "full": 2, "multi": [2, 4, 54], "stage": 2, "all": 2, "one": 2, "debug": [3, 22, 46, 52], "chrome": [3, 22], "develop": [3, 5, 8, 13], "tool": [3, 8], "cdt": 3, "shell": [3, 71], "1": [3, 36, 37, 45, 52, 53, 54, 55, 56, 57, 58, 59, 63, 67], "run": 3, "2": [3, 36, 37, 45, 49, 52, 53, 54, 55, 56, 57, 58, 59, 61, 63], "script": 3, "3": [3, 8, 37, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63], "open": 3, "4": [3, 52, 53, 54, 55, 56, 57, 59], "usual": 3, "intern": [3, 38], "handshak": 3, "custom": [3, 27, 29, 31, 35, 55], "design": [4, 27], "architectur": 4, "primit": [4, 30, 53, 77], "refer": [4, 32, 33, 37], "type": [4, 49, 77], "mode": [4, 14, 16, 31, 36, 38, 46, 67, 72, 73], "v": [4, 49], "modul": [4, 38, 53, 54, 77], "requir": 4, "import": [4, 49], "virtual": [4, 36], "engin": [4, 40, 46, 52, 66], "pool": [4, 40, 46, 66, 72], "isol": 4, "context": [4, 49], "intercept": [4, 12, 49, 53, 70], "cross": 4, "platform": 4, "process": [4, 54], "safeti": [4, 28, 36], "memori": [4, 37], "leak": 4, "detect": 4, "perform": [6, 36, 39], "test": [7, 12, 61, 70], "jdk": 8, "intellij": 8, "gradl": [8, 25, 69], "maven": [8, 9, 25, 69], "option": [8, 37], "visual": 8, "studio": 8, "commun": 8, "2022": 8, "python": 8, "8": [8, 53, 54, 56, 57, 60], "histori": 9, "j2v8": [9, 77], "issu": 9, "latest": 9, "version": 9, "onli": 9, "autom": 9, "system": 9, "deploi": [9, 35], "repositori": 9, "background": [10, 24], "what": [11, 36, 49, 63], "i": [11, 16, 22, 49, 63], "motiv": [11, 66], "how": [12, 26, 29, 31, 37, 46, 49, 63], "think": 12, "v8runtim": [12, 37, 77], "v8valueglobalobject": 12, "executor": 12, "execut": 12, "declar": [12, 53], "function": [12, 28, 31, 49, 53, 54], "properti": [12, 49, 53, 54], "learn": 12, "unit": 12, "where": [14, 15], "ar": [14, 15], "es6": [14, 77], "api": [14, 33], "exampl": [15, 38, 50], "inspector": 16, "disabl": [16, 49], "can": [17, 21, 22, 28, 35, 49], "support": [17, 21], "legaci": 17, "faq": 19, "A": 20, "dynam": [20, 31], "link": 20, "dll": 20, "initi": 20, "routin": 20, "fail": 20, "i18n": 21, "devtool": 22, "troubleshoot": [23, 44], "crash": 24, "when": [24, 28], "being": 24, "close": [24, 63], "root": 24, "caus": 24, "solut": 24, "event": [24, 53], "unhandledreject": 24, "noderuntim": 24, "await": [24, 37], "lowmemorynotif": [24, 37], "major": 25, "quick": 25, "start": 25, "depend": [25, 69], "kotlin": [25, 69], "dsl": [25, 69], "groovi": [25, 69], "hello": [25, 67], "sponsor": 25, "licens": 25, "document": 25, "bridg": 26, "convert": [26, 27, 28, 29, 30, 31, 54, 65], "usag": [26, 29, 31, 37, 48, 66, 72], "boolean": [26, 49], "int": 26, "arrai": [26, 65], "integ": 26, "list": [26, 42, 65], "long": [26, 37], "unmodifi": 26, "string": [26, 49], "cast": 26, "java": [26, 29, 30, 49, 54, 61, 64], "object": [26, 27, 28, 29, 31, 49, 65], "javascript": [26, 29, 30, 49, 63, 64], "pojo": 27, "defin": [27, 49], "creat": 27, "pojoconvert": 27, "readi": 27, "go": 27, "comparison": [28, 36, 49], "insid": 28, "bind": [28, 49], "via": 28, "nativ": [28, 35, 38, 53], "proxi": [28, 31, 54], "null": 28, "circular": 28, "structur": 28, "doe": [28, 29, 31, 36], "config": 28, "take": [28, 35], "effect": 28, "built": 28, "ignor": 28, "regist": [29, 50], "enhanc": 29, "highlight": [29, 39], "It": 29, "work": [29, 31], "instanc": 31, "file": [31, 35], "map": [31, 49, 65], "path": 31, "static": [31, 64], "stringbuild": [31, 64], "pattern": [31, 64], "enum": [31, 64], "interfac": [31, 54], "anonym": [31, 54], "class": [31, 64], "v8convert": 31, "v8properti": [31, 70], "name": 31, "v8function": [31, 70, 77], "javetproxyconvert": 31, "resourc": [34, 37, 40, 49], "manag": [34, 37, 40, 49], "load": [35, 38, 55], "unload": 35, "On": [35, 38], "demand": [35, 38], "locat": 35, "deploy": 35, "skip": 35, "alreadi": 35, "anoth": 35, "classload": [35, 54], "suppress": 35, "lib": 35, "listen": 35, "remov": 35, "jar": 35, "know": 36, "lock": 36, "mean": 36, "implicit": 36, "explicit": 36, "thread": [36, 40, 63], "coroutin": 36, "challeng": 37, "jvm": 37, "gc": [37, 53], "c": 37, "runtim": 37, "recommend": 37, "automat": [37, 46, 49], "try": 37, "weak": 37, "escap": 37, "without": 37, "altern": 37, "arraybuff": 37, "passiv": 37, "aggress": 37, "manual": [37, 38, 46, 49], "idlenotificationdeadlin": 37, "deadlineinmilli": 37, "statist": 37, "modular": 38, "gap": 38, "between": 38, "deal": 38, "elf": 38, "rebuild": 38, "pre": 38, "result": 39, "best": 40, "practic": 40, "secur": 40, "tip": [41, 49], "todo": 42, "error": [43, 53], "code": [43, 49, 53], "backward": 43, "compat": [43, 69], "log": 45, "step": [45, 63], "implement": 45, "ijavetlogg": 45, "inject": [45, 64, 74], "logger": 45, "termin": 46, "about": [46, 49], "valu": [47, 49], "collect": 48, "v8valuearrai": 48, "v8valueset": 48, "v8valuemap": 48, "registr": 49, "convers": [49, 53, 77], "thi": 49, "pass": 49, "symbol": 49, "unregist": 49, "both": 49, "One": 49, "bindfunct": 49, "functionnam": 49, "javetcallbackcontext": 49, "set": 49, "kei": 49, "v8valu": 49, "codestr": 49, "mismatch": 49, "summari": 49, "chang": 49, "user": 49, "fly": 49, "sourc": [49, 53], "call": 49, "invok": 49, "scope": [49, 54], "info": 49, "avoid": 49, "argument": 49, "handl": 49, "count": 49, "promis": [50, 54], "resolv": [50, 54], "lifecycl": 50, "callback": 50, "f": 50, "readfileasync": 50, "unhandl": 50, "reject": 50, "releas": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], "note": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], "0": [52, 53, 54, 55, 56, 57, 58, 59, 60], "7": [52, 53, 54, 55, 56, 57, 59], "x": [52, 53, 54, 55, 56, 57, 58, 59, 60], "live": 52, "locker": 52, "guard": 52, "bug": 52, "fix": 52, "birth": 52, "9": [52, 53, 54, 55, 56, 57], "10": [53, 54, 57], "index": 53, "foreach": 53, "hotfix": 53, "6": [53, 54, 55, 56, 59], "loop": 53, "5": [53, 54, 55, 56, 59], "v9": [53, 54, 55, 56], "first": [53, 55], "time": [53, 55], "14": 54, "13": 54, "12": 54, "privat": 54, "11": 54, "polyfil": [54, 73], "empow": 54, "v2": 54, "v1": 54, "safe": 54, "core": 55, "abi": 55, "21": 55, "v16": 55, "v10": [56, 57], "v11": [57, 58, 59, 60], "v18": 57, "expos": 61, "jsonnod": 61, "approach": 61, "flavor": 61, "direct": 61, "exposur": 61, "wrap": 61, "conclus": 61, "advanc": 62, "interact": 63, "That": 63, "possibl": 63, "server": 63, "worker": 63, "main": 63, "If": 63, "hang": 63, "dure": 63, "interop": 64, "an": 64, "goal": 66, "print": 67, "basic": 68, "instal": 69, "sampl": 70, "co": 72, "exist": 72, "v8host": 72, "decim": 73, "spring": 74, "integr": 74, "configur": 74, "tutori": 75, "migrat": [76, 77], "guid": [76, 77], "registerjavamethod": 77, "v8locker": 77, "bless": 77}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Build Javet": [[0, "build-javet"], [1, "build-javet"], [1, "id1"]], "Build Environment": [[0, "build-environment"], [2, "build-environment"]], "Linux Environment": [[0, "linux-environment"], [2, "linux-environment"]], "MacOS Environment": [[0, "macos-environment"]], "Windows Environment": [[0, "windows-environment"], [2, "windows-environment"]], "Android Environment": [[0, "android-environment"]], "Environment Variables": [[0, "environment-variables"]], "V8 Feature Flags": [[0, "v8-feature-flags"]], "Build Javet from Scratch": [[1, "build-javet-from-scratch"]], "Build V8": [[1, "build-v8"]], "Prepare V8": [[1, "prepare-v8"]], "Build V8 for Linux arm64": [[1, "build-v8-for-linux-arm64"]], "Build V8 for Linux x86_64": [[1, "build-v8-for-linux-x86-64"]], "Build V8 for Mac OS arm64": [[1, "build-v8-for-mac-os-arm64"]], "Build V8 for Mac OS x86_64": [[1, "build-v8-for-mac-os-x86-64"]], "Build V8 for Windows": [[1, "build-v8-for-windows"]], "Build V8 for Android": [[1, "build-v8-for-android"]], "Why Patching V8?": [[1, "why-patching-v8"]], "Build Node.js": [[1, "build-node-js"]], "Prepare Node.js": [[1, "prepare-node-js"]], "Build Node.js on Linux": [[1, "build-node-js-on-linux"]], "Why Patching Node.js?": [[1, "why-patching-node-js"]], "Build Node.js on Mac OS": [[1, "build-node-js-on-mac-os"]], "Build Node.js on Windows": [[1, "build-node-js-on-windows"]], "Build Javet JNI Library for Android": [[1, "build-javet-jni-library-for-android"]], "Build Javet for Linux, Mac OS and Windows": [[1, "build-javet-for-linux-mac-os-and-windows"]], "Build Javet for Android": [[1, "build-javet-for-android"]], "Build Javet with Docker": [[2, "build-javet-with-docker"]], "Docker Hub and Github": [[2, "docker-hub-and-github"]], "Build Javet for Linux on Linux or Windows": [[2, "build-javet-for-linux-on-linux-or-windows"]], "Express Build": [[2, "express-build"]], "Full Build - Multi-staged": [[2, "full-build-multi-staged"]], "Full Build - All-in-one": [[2, "full-build-all-in-one"]], "Build Javet for Windows on Windows": [[2, "build-javet-for-windows-on-windows"]], "Build Javet for Android on Linux or Windows": [[2, "build-javet-for-android-on-linux-or-windows"]], "Debug with Chrome Developer Tools": [[3, "debug-with-chrome-developer-tools"]], "CDT Shell": [[3, "cdt-shell"]], "1. Run CDT Shell": [[3, "run-cdt-shell"]], "2. Run Script in CDT Shell": [[3, "run-script-in-cdt-shell"]], "3. Open CDT": [[3, "open-cdt"]], "4. Debug as Usual": [[3, "debug-as-usual"]], "Chrome Developer Tools Internals": [[3, "chrome-developer-tools-internals"]], "Handshake": [[3, "handshake"]], "Customization": [[3, "customization"]], "Javet Design": [[4, "javet-design"]], "Architecture": [[4, "architecture"]], "Primitive and Reference Types in Javet": [[4, "primitive-and-reference-types-in-javet"]], "Node.js Mode vs. V8 Mode": [[4, "node-js-mode-vs-v8-mode"]], "Module": [[4, "module"]], "require() vs. import()": [[4, "require-vs-import"]], "Module Virtualization": [[4, "module-virtualization"]], "Engine Pool": [[4, "engine-pool"]], "V8 Isolate and Context in Javet": [[4, "v8-isolate-and-context-in-javet"]], "Javet Engine Pool": [[4, "javet-engine-pool"], [66, "javet-engine-pool"]], "Interception": [[4, "interception"], [70, "interception"]], "Cross-platform": [[4, "cross-platform"]], "Multi-process Safety": [[4, "multi-process-safety"]], "Memory Leak Detection": [[4, "memory-leak-detection"]], "Development": [[5, "development"], [13, "development"]], "Javet Performance": [[6, "javet-performance"], [39, "javet-performance"]], "Test Javet": [[7, "test-javet"]], "Development Tools": [[8, "development-tools"]], "JDK": [[8, "jdk"]], "IntelliJ": [[8, "intellij"]], "Gradle": [[8, "gradle"]], "Node.js": [[8, "node-js"], [40, "node-js"]], "Maven (Optional)": [[8, "maven-optional"]], "Visual Studio Community 2022 (Optional)": [[8, "visual-studio-community-2022-optional"]], "Python 3.8+ (Optional)": [[8, "python-3-8-optional"]], "History with J2V8": [[9, "history-with-j2v8"]], "J2V8 Issues": [[9, "j2v8-issues"]], "J2V8 Latest Version": [[9, "j2v8-latest-version"]], "Why Windows and Linux only?": [[9, "why-windows-and-linux-only"]], "Why not Automate the J2V8 Build System?": [[9, "why-not-automate-the-j2v8-build-system"]], "Why not Deploy J2V8 to Maven Repository?": [[9, "why-not-deploy-j2v8-to-maven-repository"]], "Background": [[10, "background"], [24, "background"]], "What is the Motivation?": [[11, "what-is-the-motivation"]], "How to Think in Javet?": [[12, "how-to-think-in-javet"]], "V8Runtime and V8ValueGlobalObject": [[12, "v8runtime-and-v8valueglobalobject"]], "V8Runtime": [[12, "v8runtime"]], "V8ValueGlobalObject": [[12, "v8valueglobalobject"]], "Executor and Execute": [[12, "executor-and-execute"]], "Declarative Function and Property Interception": [[12, "declarative-function-and-property-interception"]], "Learn from Unit Test": [[12, "learn-from-unit-test"]], "Where are ES6 API in V8 Mode?": [[14, "where-are-es6-api-in-v8-mode"]], "Where are the Examples?": [[15, "where-are-the-examples"]], "Why is the Inspector Disabled in Node.js Mode?": [[16, "why-is-the-inspector-disabled-in-node-js-mode"]], "Can Javet Support Legacy Linux?": [[17, "can-javet-support-legacy-linux"]], "Environment": [[18, "environment"]], "FAQ": [[19, "faq"]], "A dynamic link library (DLL) initialization routine failed": [[20, "a-dynamic-link-library-dll-initialization-routine-failed"]], "Can i18n be Supported?": [[21, "can-i18n-be-supported"]], "Can I Debug Javet in Chrome DevTools?": [[22, "can-i-debug-javet-in-chrome-devtools"]], "Troubleshooting": [[23, "troubleshooting"], [44, "troubleshooting"]], "Why Node.js Crashes When being Closed?": [[24, "why-node-js-crashes-when-being-closed"]], "Root Cause": [[24, "root-cause"]], "Solution": [[24, "solution"]], "Event unhandledRejection": [[24, "event-unhandledrejection"]], "NodeRuntime.await()": [[24, "noderuntime-await"]], "NodeRuntime.lowMemoryNotification()": [[24, "noderuntime-lowmemorynotification"]], "Javet": [[25, "javet"]], "Major Features": [[25, "major-features"]], "Quick Start": [[25, "quick-start"]], "Dependency": [[25, "dependency"], [69, "dependency"]], "Maven": [[25, "maven"], [69, "maven"]], "Gradle Kotlin DSL": [[25, "gradle-kotlin-dsl"], [69, "gradle-kotlin-dsl"]], "Gradle Groovy DSL": [[25, "gradle-groovy-dsl"], [69, "gradle-groovy-dsl"]], "Hello Javet": [[25, "hello-javet"], [67, "hello-javet"]], "Sponsors": [[25, "sponsors"]], "License": [[25, "license"]], "Documents": [[25, "documents"]], "Bridge Converter": [[26, "bridge-converter"]], "Usage": [[26, "usage"], [29, "usage"], [31, "usage"], [48, "usage"], [66, "usage"], [72, "usage"]], "Preparation": [[26, "preparation"], [31, "preparation"], [64, "preparation"]], "Boolean": [[26, "boolean"]], "int": [[26, "int"]], "int Array": [[26, "int-array"]], "Integer List": [[26, "integer-list"]], "Long Unmodifiable List": [[26, "long-unmodifiable-list"]], "String Array": [[26, "string-array"]], "How to Cast Java Objects to JavaScript Objects?": [[26, "how-to-cast-java-objects-to-javascript-objects"]], "Custom Converter": [[27, "custom-converter"]], "Design a POJO Converter": [[27, "design-a-pojo-converter"]], "Define POJO Object": [[27, "define-pojo-object"]], "Create PojoConverter": [[27, "create-pojoconverter"]], "Ready! Go!": [[27, "ready-go"]], "Converters": [[28, "converters"]], "Comparisons": [[28, "comparisons"], [36, "comparisons"], [49, "comparisons"]], "Inside Converters": [[28, "inside-converters"]], "Binding via Native": [[28, "binding-via-native"]], "Binding via Proxy": [[28, "binding-via-proxy"]], "Null Safety": [[28, "null-safety"]], "Functions and Objects": [[28, "functions-and-objects"]], "Circular Structure": [[28, "circular-structure"]], "When does the Config Take Effect?": [[28, "when-does-the-config-take-effect"]], "Can Built-in Converter be Ignored?": [[28, "can-built-in-converter-be-ignored"]], "Object Converter": [[29, "object-converter"], [65, "object-converter"]], "From Java to JavaScript": [[29, "from-java-to-javascript"], [30, "from-java-to-javascript"]], "From JavaScript to Java": [[29, "from-javascript-to-java"], [30, "from-javascript-to-java"]], "Register Custom Objects": [[29, "register-custom-objects"]], "Enhance the Custom Object": [[29, "enhance-the-custom-object"]], "Register the Custom Object": [[29, "register-the-custom-object"]], "Highlights": [[29, "highlights"], [39, "highlights"]], "How does It Work?": [[29, "how-does-it-work"]], "Primitive Converter": [[30, "primitive-converter"]], "Proxy Converter": [[31, "proxy-converter"]], "Instance: File": [[31, "instance-file"]], "Instance: Map": [[31, "instance-map"]], "Instance: Path": [[31, "instance-path"]], "Static: StringBuilder": [[31, "static-stringbuilder"]], "Static: Pattern": [[31, "static-pattern"]], "Static: Enum": [[31, "static-enum"]], "Static: Interface": [[31, "static-interface"]], "Dynamic: Anonymous Function": [[31, "dynamic-anonymous-function"]], "Dynamic: Anonymous Object for Interface": [[31, "dynamic-anonymous-object-for-interface"]], "Dynamic: Anonymous Object for Class": [[31, "dynamic-anonymous-object-for-class"]], "Features": [[31, "features"]], "@V8Convert::mode": [[31, "v8convert-mode"]], "@V8Property::name": [[31, "v8property-name"]], "@V8Function::name": [[31, "v8function-name"]], "How does JavetProxyConverter Work?": [[31, "how-does-javetproxyconverter-work"]], "How to Customize JavetProxyConverter?": [[31, "how-to-customize-javetproxyconverter"]], "Reference": [[32, "reference"]], "API Reference": [[33, "api-reference"]], "Resource Management": [[34, "resource-management"], [40, "resource-management"], [49, "resource-management"]], "Load and Unload": [[35, "load-and-unload"]], "Can Javet Native Library be Loaded or Unloaded On-demand?": [[35, "can-javet-native-library-be-loaded-or-unloaded-on-demand"]], "Unload": [[35, "unload"]], "Load": [[35, "load"]], "Can Javet Native Library be Deployed to a Custom Location?": [[35, "can-javet-native-library-be-deployed-to-a-custom-location"]], "Can Javet Native Library Deployment be Skipped?": [[35, "can-javet-native-library-deployment-be-skipped"]], "Can already loaded in another classloader be Suppressed?": [[35, "can-already-loaded-in-another-classloader-be-suppressed"]], "Can Javet Lib Loading Listener Take Environment Variables?": [[35, "can-javet-lib-loading-listener-take-environment-variables"]], "Can Javet Libraries be Removed from the Jar File?": [[35, "can-javet-libraries-be-removed-from-the-jar-file"]], "Know the Lock": [[36, "know-the-lock"]], "What does Lock Mean in Javet?": [[36, "what-does-lock-mean-in-javet"]], "1. Implicit Mode": [[36, "implicit-mode"]], "2. Explicit Mode": [[36, "explicit-mode"]], "Performance": [[36, "performance"]], "Thread-safety": [[36, "thread-safety"]], "Coroutines or Virtual Threads": [[36, "coroutines-or-virtual-threads"]], "Memory Management": [[37, "memory-management"]], "3 Challenges in Memory Management": [[37, "challenges-in-memory-management"]], "JVM GC": [[37, "jvm-gc"]], "C++ Runtime": [[37, "c-runtime"]], "V8 GC": [[37, "v8-gc"]], "Recommended Options": [[37, "recommended-options"]], "Automatic Management with try-with-resource": [[37, "automatic-management-with-try-with-resource"]], "Automatically Manage with Weak Reference": [[37, "automatically-manage-with-weak-reference"]], "How to Escape from try-with-resource?": [[37, "how-to-escape-from-try-with-resource"]], "Usage 1 without V8 Runtime": [[37, "usage-1-without-v8-runtime"]], "Usage 2 with V8 Runtime": [[37, "usage-2-with-v8-runtime"]], "Alternative Option: ArrayBuffer": [[37, "alternative-option-arraybuffer"]], "GC": [[37, "gc"]], "Automatic GC": [[37, "automatic-gc"]], "Passive GC": [[37, "passive-gc"]], "Aggressive GC": [[37, "aggressive-gc"]], "Manual GC": [[37, "manual-gc"]], "V8Runtime.await()": [[37, "v8runtime-await"]], "V8Runtime.idleNotificationDeadline(long deadlineInMillis)": [[37, "v8runtime-idlenotificationdeadline-long-deadlineinmillis"]], "V8Runtime.lowMemoryNotification()": [[37, "v8runtime-lowmemorynotification"]], "Statistics": [[37, "statistics"]], "Modularization": [[38, "modularization"]], "Node.js Mode": [[38, "node-js-mode"], [73, "node-js-mode"]], "Example": [[38, "example"]], "Gaps between Javet Node.js Mode and Native Node.js": [[38, "gaps-between-javet-node-js-mode-and-native-node-js"]], "Deal with Native Modules": [[38, "deal-with-native-modules"]], "Patch ELF Native Modules on Linux": [[38, "patch-elf-native-modules-on-linux"]], "Rebuild Native Modules on Windows": [[38, "rebuild-native-modules-on-windows"]], "Manual Patch Native Modules on Windows": [[38, "manual-patch-native-modules-on-windows"]], "V8 Mode": [[38, "v8-mode"], [73, "v8-mode"]], "Pre-load": [[38, "pre-load"]], "On-demand": [[38, "on-demand"]], "Internals": [[38, "internals"]], "Result": [[39, "result"]], "Best Practices": [[40, "best-practices"]], "Thread, Engine and Pool": [[40, "thread-engine-and-pool"]], "Security": [[40, "security"]], "Tips": [[41, "tips"], [49, "tips"]], "TODO List": [[42, "todo-list"]], "Error Codes": [[43, "error-codes"]], "Why Error Codes?": [[43, "why-error-codes"]], "Backward Compatibility": [[43, "backward-compatibility"]], "Logging": [[45, "logging"]], "Step 1: Implement IJavetLogger": [[45, "step-1-implement-ijavetlogger"]], "Step 2: Inject the Logger": [[45, "step-2-inject-the-logger"]], "Termination": [[46, "termination"]], "Automatic Termination with Pool and Engine": [[46, "automatic-termination-with-pool-and-engine"]], "Manual Termination": [[46, "manual-termination"]], "How about Debug Mode?": [[46, "how-about-debug-mode"]], "V8 Values": [[47, "v8-values"]], "V8 Collection": [[48, "v8-collection"]], "Collection in V8": [[48, "collection-in-v8"]], "V8ValueArray": [[48, "v8valuearray"]], "V8ValueSet": [[48, "v8valueset"]], "V8ValueMap": [[48, "v8valuemap"]], "V8 Function": [[49, "v8-function"]], "Function Types": [[49, "function-types"]], "Function Interception": [[49, "function-interception"]], "Automatic Registration": [[49, "automatic-registration"]], "bind()": [[49, "bind"]], "How about Object Type Conversion?": [[49, "how-about-object-type-conversion"]], "Can this be Passed in?": [[49, "can-this-be-passed-in"]], "Can Symbol Properties be Intercepted?": [[49, "can-symbol-properties-be-intercepted"]], "How to Disable Properties or Functions?": [[49, "how-to-disable-properties-or-functions"]], "How to Unregister Properties or Functions?": [[49, "how-to-unregister-properties-or-functions"]], "Can Both JavaScript Function and Property Map to One Java Function?": [[49, "can-both-javascript-function-and-property-map-to-one-java-function"]], "Can 2 Java Functions Map to One JavaScript Function and Property?": [[49, "can-2-java-functions-map-to-one-javascript-function-and-property"]], "Manual Registration": [[49, "manual-registration"]], "boolean bindFunction(String functionName, JavetCallbackContext javetCallbackContext)": [[49, "boolean-bindfunction-string-functionname-javetcallbackcontext-javetcallbackcontext"]], "boolean set(String key, V8Value value)": [[49, "boolean-set-string-key-v8value-value"]], "boolean bindFunction(String functionName, String codeString)": [[49, "boolean-bindfunction-string-functionname-string-codestring"]], "Type Mismatch": [[49, "type-mismatch"]], "Summary": [[49, "summary"]], "Change a User Defined JavaScript Function on the Fly": [[49, "change-a-user-defined-javascript-function-on-the-fly"]], "Why is Changing a User Defined JavaScript Function Important?": [[49, "why-is-changing-a-user-defined-javascript-function-important"]], "How to Change a User Defined JavaScript Function on the Fly?": [[49, "how-to-change-a-user-defined-javascript-function-on-the-fly"]], "What is the Source Code of a Function in V8?": [[49, "what-is-the-source-code-of-a-function-in-v8"]], "Automatic Type Conversion": [[49, "automatic-type-conversion"]], "Call vs. Invoke": [[49, "call-vs-invoke"]], "Call": [[49, "call"]], "Invoke": [[49, "invoke"]], "How about Bind?": [[49, "how-about-bind"]], "Context and Scope Info": [[49, "context-and-scope-info"]], "How to Avoid Argument Type Mismatches?": [[49, "how-to-avoid-argument-type-mismatches"]], "How to Handle Argument Count Mismatches?": [[49, "how-to-handle-argument-count-mismatches"]], "V8 Promise": [[50, "v8-promise"]], "Promise and Resolver": [[50, "promise-and-resolver"]], "Lifecycle": [[50, "lifecycle"]], "Register a Callback": [[50, "register-a-callback"]], "Example fs.readFileAsync()": [[50, "example-fs-readfileasync"]], "Unhandled Rejection": [[50, "unhandled-rejection"]], "Release Notes": [[51, "release-notes"]], "Release Notes 0.7.x": [[52, "release-notes-0-7-x"]], "0.7.4 Live Debug": [[52, "live-debug"]], "0.7.3 Locker": [[52, "locker"]], "0.7.2 Engine Guard": [[52, "engine-guard"]], "0.7.1 Bug Fixes": [[52, "bug-fixes"]], "0.7.0 Birth with V8 v8.9": [[52, "birth-with-v8-v8-9"]], "Release Notes 0.8.x": [[53, "release-notes-0-8-x"]], "0.8.10 Index in forEach": [[53, "index-in-foreach"]], "0.8.9 Declarative Property Interception": [[53, "declarative-property-interception"]], "0.8.8 Hotfix the Source Code": [[53, "hotfix-the-source-code"]], "0.8.7 Native Modules for Node.js": [[53, "native-modules-for-node-js"]], "0.8.6 Event Loop for Node.js": [[53, "event-loop-for-node-js"]], "0.8.5 Error Codes": [[53, "error-codes"]], "0.8.4 V8 v9.0": [[53, "v8-v9-0"]], "0.8.3 GC": [[53, "gc"]], "0.8.2 Conversion for Primitive": [[53, "conversion-for-primitive"]], "0.8.1 Declarative Function Interception": [[53, "declarative-function-interception"]], "0.8.0 First Time with Node.js": [[53, "first-time-with-node-js"]], "Release Notes 0.9.x": [[54, "release-notes-0-9-x"]], "0.9.14 V8 Scope": [[54, "v8-scope"]], "0.9.13 V8 v9.4": [[54, "v8-v9-4"]], "0.9.12 Private Properties": [[54, "private-properties"]], "0.9.11 V8 v9.3": [[54, "v8-v9-3"]], "0.9.10 Polyfill Java Interfaces": [[54, "polyfill-java-interfaces"]], "0.9.9 Mac OS x86_64": [[54, "mac-os-x86-64"]], "0.9.8 Empower the Promise": [[54, "empower-the-promise"]], "0.9.7 Proxy Converter v2": [[54, "proxy-converter-v2"]], "0.9.6 Proxy Converter v1": [[54, "proxy-converter-v1"]], "0.9.5 V8 v9.2": [[54, "v8-v9-2"]], "0.9.4 Multi-process Safe": [[54, "multi-process-safe"]], "0.9.3 Module Resolver": [[54, "module-resolver"]], "0.9.2 Anonymous Functions in Converter": [[54, "anonymous-functions-in-converter"]], "0.9.1 V8 in Classloader": [[54, "v8-in-classloader"]], "0.9.0 V8 v9.1": [[54, "v8-v9-1"]], "Release Notes 1.0.x": [[55, "release-notes-1-0-x"]], "1.0.7 V8 v9.7": [[55, "v8-v9-7"]], "1.0.6 Mac OS (arm64)": [[55, "mac-os-arm64"]], "1.0.5 Javet Core": [[55, "javet-core"]], "1.0.4 V8 9.6": [[55, "v8-9-6"]], "1.0.3 Android ABI 21": [[55, "android-abi-21"]], "1.0.2 First Time with Android": [[55, "first-time-with-android"]], "1.0.1 Custom Library Loading": [[55, "custom-library-loading"]], "1.0.0 First Time with Node.js v16": [[55, "first-time-with-node-js-v16"]], "Release Notes 1.1.x": [[56, "release-notes-1-1-x"]], "1.1.7 V8 v10.5": [[56, "v8-v10-5"]], "1.1.6 V8 v10.4": [[56, "v8-v10-4"]], "1.1.5 V8 v10.3": [[56, "v8-v10-3"]], "1.1.4 V8 v10.2": [[56, "v8-v10-2"]], "1.1.3 V8 v10.1": [[56, "v8-v10-1"]], "1.1.2 V8 v10.0": [[56, "v8-v10-0"]], "1.1.1 V8 v9.9": [[56, "v8-v9-9"]], "1.1.0 V8 v9.8": [[56, "v8-v9-8"]], "Release Notes 2.0.x": [[57, "release-notes-2-0-x"]], "2.0.4 V8 v11.0": [[57, "v8-v11-0"]], "2.0.3 V8 v10.9": [[57, "v8-v10-9"]], "2.0.2 V8 v10.8": [[57, "v8-v10-8"]], "2.0.1 V8 v10.7": [[57, "v8-v10-7"]], "2.0.0 Node.js v18.10": [[57, "node-js-v18-10"]], "Release Notes 2.1.x": [[58, "release-notes-2-1-x"]], "2.1.2 V8 v11.3": [[58, "v8-v11-3"]], "2.1.1 V8 v11.2": [[58, "v8-v11-2"]], "2.1.0 V8 v11.1": [[58, "v8-v11-1"]], "Release Notes 2.2.x": [[59, "release-notes-2-2-x"]], "2.2.3 V8 v11.7": [[59, "v8-v11-7"]], "2.2.2 V8 v11.6": [[59, "v8-v11-6"]], "2.2.1 V8 v11.5": [[59, "v8-v11-5"]], "2.2.0 V8 v11.4": [[59, "v8-v11-4"]], "Release Notes 3.0.x": [[60, "release-notes-3-0-x"]], "3.0.0 V8 v11.8": [[60, "v8-v11-8"]], "Expose JsonNode in V8": [[61, "expose-jsonnode-in-v8"]], "2 Approaches": [[61, "approaches"]], "Java Flavor (Direct Exposure)": [[61, "java-flavor-direct-exposure"]], "JS Flavor (Wrapped Exposure)": [[61, "js-flavor-wrapped-exposure"]], "Test": [[61, "test"], [70, "test"]], "Conclusion": [[61, "conclusion"]], "Advanced": [[62, "advanced"]], "Interact with Node.js": [[63, "interact-with-node-js"]], "Is That Possible?": [[63, "is-that-possible"]], "How?": [[63, "how"]], "Step 1: JavaScript Server": [[63, "step-1-javascript-server"]], "Step 2: Worker Thread for the JavaScript Server": [[63, "step-2-worker-thread-for-the-javascript-server"]], "Step 3: Main Thread for the Interaction": [[63, "step-3-main-thread-for-the-interaction"]], "What If Node.js Hangs during Close()?": [[63, "what-if-node-js-hangs-during-close"]], "Java and JavaScript Interop": [[64, "java-and-javascript-interop"]], "Inject a Static Class": [[64, "inject-a-static-class"]], "Inject an Enum": [[64, "inject-an-enum"]], "Inject a Pattern": [[64, "inject-a-pattern"]], "Inject a StringBuilder": [[64, "inject-a-stringbuilder"]], "Array": [[65, "array"]], "List": [[65, "list"]], "Map": [[65, "map"]], "Motivation": [[66, "motivation"]], "Goals": [[66, "goals"]], "Print Hello Javet in V8 Mode": [[67, "print-hello-javet-in-v8-mode"]], "Print 1 + 1 in Node.js Mode": [[67, "print-1-1-in-node-js-mode"]], "Basic": [[68, "basic"]], "Installation": [[69, "installation"]], "OS Compatibility": [[69, "os-compatibility"]], "Windows": [[69, "windows"]], "Linux": [[69, "linux"]], "Mac OS": [[69, "mac-os"]], "Android": [[69, "android"]], "Sample": [[70, "sample"]], "@V8Property and @V8Function": [[70, "v8property-and-v8function"]], "Javet Shell": [[71, "javet-shell"]], "Node.js Mode and V8 Mode": [[72, "node-js-mode-and-v8-mode"]], "Co-existence": [[72, "co-existence"]], "V8Host": [[72, "v8host"]], "Pool": [[72, "pool"]], "Polyfill": [[73, "polyfill"]], "decimal.js": [[73, "decimal-js"]], "Spring Integration": [[74, "spring-integration"]], "Configuration": [[74, "configuration"]], "Injection": [[74, "injection"]], "Tutorial": [[75, "tutorial"]], "Migration Guides": [[76, "migration-guides"], [77, "migration-guides"]], "Migrate from J2V8": [[77, "migrate-from-j2v8"]], "Why Migrate from J2V8 to Javet?": [[77, "why-migrate-from-j2v8-to-javet"]], "V8 \u27f6 V8Runtime": [[77, "v8-v8runtime"]], "Primitive Types": [[77, "primitive-types"]], "registerJavaMethod() \u27f6 @V8Function": [[77, "registerjavamethod-v8function"]], "V8Locker": [[77, "v8locker"]], "Type Conversion": [[77, "type-conversion"]], "Node.js and V8": [[77, "node-js-and-v8"]], "ES6 Module": [[77, "es6-module"]], "Blessing": [[77, "blessing"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["development/build", "development/build_javet_from_scratch", "development/build_javet_with_docker", "development/debug_with_chrome_developer_tools", "development/design", "development/index", "development/performance", "development/test", "development/tools", "faq/background/history_with_j2v8", "faq/background/index", "faq/background/what_is_the_motivation", "faq/development/how_to_think_in_javet", "faq/development/index", "faq/development/where_are_es6_api_in_v8_mode", "faq/development/where_are_the_examples", "faq/development/why_is_the_inspector_disabled_in_node_js_mode", "faq/environment/can_javet_support_legacy_linux", "faq/environment/index", "faq/index", "faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed", "faq/troubleshooting/can_i18n_be_supported", "faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools", "faq/troubleshooting/index", "faq/troubleshooting/why_node_js_crashes_when_being_closed", "index", "reference/converters/bridge_converter", "reference/converters/custom_converter", "reference/converters/index", "reference/converters/object_converter", "reference/converters/primitive_converter", "reference/converters/proxy_converter", "reference/index", "reference/javadoc/index", "reference/resource_management/index", "reference/resource_management/load_and_unload", "reference/resource_management/lock", "reference/resource_management/memory_management", "reference/resource_management/modularization", "reference/resource_management/performance", "reference/tips/best_practices", "reference/tips/index", "reference/todo_list", "reference/troubleshooting/error_codes", "reference/troubleshooting/index", "reference/troubleshooting/logging", "reference/troubleshooting/termination", "reference/v8_values/index", "reference/v8_values/v8_collection", "reference/v8_values/v8_function", "reference/v8_values/v8_promise", "release_notes/index", "release_notes/release_notes_0_7", "release_notes/release_notes_0_8", "release_notes/release_notes_0_9", "release_notes/release_notes_1_0", "release_notes/release_notes_1_1", "release_notes/release_notes_2_0", "release_notes/release_notes_2_1", "release_notes/release_notes_2_2", "release_notes/release_notes_3_0", "tutorial/advanced/expose_json_node_in_v8", "tutorial/advanced/index", "tutorial/advanced/interact_with_node_js", "tutorial/advanced/java_and_javascript_interop", "tutorial/advanced/object_converter", "tutorial/basic/engine_pool", "tutorial/basic/hello_javet", "tutorial/basic/index", "tutorial/basic/installation", "tutorial/basic/interception", "tutorial/basic/javet_shell", "tutorial/basic/node_js_mode_and_v8_mode", "tutorial/basic/polyfill", "tutorial/basic/spring_integration", "tutorial/index", "tutorial/migration_guides/index", "tutorial/migration_guides/migrate_from_j2v8"], "filenames": ["development/build.rst", "development/build_javet_from_scratch.rst", "development/build_javet_with_docker.rst", "development/debug_with_chrome_developer_tools.rst", "development/design.rst", "development/index.rst", "development/performance.rst", "development/test.rst", "development/tools.rst", "faq/background/history_with_j2v8.rst", "faq/background/index.rst", "faq/background/what_is_the_motivation.rst", "faq/development/how_to_think_in_javet.rst", "faq/development/index.rst", "faq/development/where_are_es6_api_in_v8_mode.rst", "faq/development/where_are_the_examples.rst", "faq/development/why_is_the_inspector_disabled_in_node_js_mode.rst", "faq/environment/can_javet_support_legacy_linux.rst", "faq/environment/index.rst", "faq/index.rst", "faq/troubleshooting/a_dynamic_link_library_dll_initialization_routine_failed.rst", "faq/troubleshooting/can_i18n_be_supported.rst", "faq/troubleshooting/can_i_debug_javet_in_chrome_dev_tools.rst", "faq/troubleshooting/index.rst", "faq/troubleshooting/why_node_js_crashes_when_being_closed.rst", "index.rst", "reference/converters/bridge_converter.rst", "reference/converters/custom_converter.rst", "reference/converters/index.rst", "reference/converters/object_converter.rst", "reference/converters/primitive_converter.rst", "reference/converters/proxy_converter.rst", "reference/index.rst", "reference/javadoc/index.rst", "reference/resource_management/index.rst", "reference/resource_management/load_and_unload.rst", "reference/resource_management/lock.rst", "reference/resource_management/memory_management.rst", "reference/resource_management/modularization.rst", "reference/resource_management/performance.rst", "reference/tips/best_practices.rst", "reference/tips/index.rst", "reference/todo_list.rst", "reference/troubleshooting/error_codes.rst", "reference/troubleshooting/index.rst", "reference/troubleshooting/logging.rst", "reference/troubleshooting/termination.rst", "reference/v8_values/index.rst", "reference/v8_values/v8_collection.rst", "reference/v8_values/v8_function.rst", "reference/v8_values/v8_promise.rst", "release_notes/index.rst", "release_notes/release_notes_0_7.rst", "release_notes/release_notes_0_8.rst", "release_notes/release_notes_0_9.rst", "release_notes/release_notes_1_0.rst", "release_notes/release_notes_1_1.rst", "release_notes/release_notes_2_0.rst", "release_notes/release_notes_2_1.rst", "release_notes/release_notes_2_2.rst", "release_notes/release_notes_3_0.rst", "tutorial/advanced/expose_json_node_in_v8.rst", "tutorial/advanced/index.rst", "tutorial/advanced/interact_with_node_js.rst", "tutorial/advanced/java_and_javascript_interop.rst", "tutorial/advanced/object_converter.rst", "tutorial/basic/engine_pool.rst", "tutorial/basic/hello_javet.rst", "tutorial/basic/index.rst", "tutorial/basic/installation.rst", "tutorial/basic/interception.rst", "tutorial/basic/javet_shell.rst", "tutorial/basic/node_js_mode_and_v8_mode.rst", "tutorial/basic/polyfill.rst", "tutorial/basic/spring_integration.rst", "tutorial/index.rst", "tutorial/migration_guides/index.rst", "tutorial/migration_guides/migrate_from_j2v8.rst"], "titles": ["Build Javet", "Build Javet from Scratch", "Build Javet with Docker", "Debug with Chrome Developer Tools", "Javet Design", "Development", "Javet Performance", "Test Javet", "Development Tools", "History with J2V8", "Background", "What is the Motivation?", "How to Think in Javet?", "Development", "Where are ES6 API in V8 Mode?", "Where are the Examples?", "Why is the Inspector Disabled in Node.js Mode?", "Can Javet Support Legacy Linux?", "Environment", "FAQ", "A dynamic link library (DLL) initialization routine failed", "Can i18n be Supported?", "Can I Debug Javet in Chrome DevTools?", "Troubleshooting", "Why Node.js Crashes When being Closed?", "Javet", "Bridge Converter", "Custom Converter", "Converters", "Object Converter", "Primitive Converter", "Proxy Converter", "Reference", "API Reference", "Resource Management", "Load and Unload", "Know the Lock", "Memory Management", "Modularization", "Javet Performance", "Best Practices", "Tips", "TODO List", "Error Codes", "Troubleshooting", "Logging", "Termination", "V8 Values", "V8 Collection", "V8 Function", "V8 Promise", "Release Notes", "Release Notes 0.7.x", "Release Notes 0.8.x", "Release Notes 0.9.x", "Release Notes 1.0.x", "Release Notes 1.1.x", "Release Notes 2.0.x", "Release Notes 2.1.x", "Release Notes 2.2.x", "Release Notes 3.0.x", "Expose JsonNode in V8", "Advanced", "Interact with Node.js", "Java and JavaScript Interop", "Object Converter", "Javet Engine Pool", "Hello Javet", "Basic", "Installation", "Interception", "Javet Shell", "Node.js Mode and V8 Mode", "Polyfill", "Spring Integration", "Tutorial", "Migration Guides", "Migrate from J2V8"], "terms": {"It": [0, 2, 4, 9, 12, 16, 21, 25, 27, 28, 31, 36, 37, 38, 39, 40, 49, 66, 71, 72, 77], "": [0, 2, 4, 9, 11, 24, 27, 31, 36, 37, 38, 39, 40, 43, 49, 50, 61, 63, 65, 72, 77], "quit": [0, 4, 11, 12, 28, 31, 37, 45, 46, 49, 61, 63, 66, 77], "hard": [0, 9, 50, 77], "develop": [0, 19, 22, 25, 43, 50, 52, 61, 77], "successfulli": [0, 2, 3], "variou": [0, 59, 77], "reason": [0, 4, 9, 21, 24, 43, 50, 63, 77], "node": [0, 2, 3, 5, 7, 9, 13, 14, 19, 20, 21, 23, 25, 35, 36, 37, 39, 42, 43, 49, 50, 51, 54, 56, 58, 59, 60, 61, 62, 66, 68, 69, 71, 74, 75], "j": [0, 2, 5, 7, 9, 13, 14, 19, 20, 21, 23, 25, 35, 36, 37, 39, 42, 43, 49, 50, 51, 52, 54, 56, 58, 59, 60, 62, 66, 68, 69, 75], "need": [0, 3, 9, 27, 28, 29, 31, 36, 37, 38, 49, 50, 61, 64, 69, 77], "built": [0, 2, 3, 7, 26, 29, 37, 39, 43, 46, 49, 50, 53, 54, 58, 61, 77], "static": [0, 1, 16, 27, 49, 54, 56, 63], "librari": [0, 2, 3, 4, 7, 12, 19, 21, 23, 38, 43, 45, 49, 54], "monolith": 0, "everi": [0, 4, 12, 28, 36, 37, 49], "o": [0, 2, 4, 25, 36, 43, 49, 61, 77], "platform": [0, 5], "ha": [0, 4, 8, 9, 12, 16, 27, 29, 31, 35, 37, 38, 45, 48, 49, 50, 53, 61, 77], "its": [0, 4, 9, 31, 36, 37, 38, 49, 50], "own": [0, 4, 9, 27, 29, 31, 35, 37, 38, 49, 50], "pitfal": 0, "which": [0, 3, 4, 7, 9, 12, 15, 17, 24, 25, 28, 29, 31, 35, 37, 38, 39, 46, 49, 61, 64, 70, 72, 73, 77], "usual": [0, 27, 31, 38, 46, 49, 50, 63], "make": [0, 1, 2, 16, 28, 29, 37, 38, 50, 63, 73, 77], "frustrat": [0, 9], "even": [0, 9, 77], "desper": 0, "here": [0, 3, 4, 9, 11, 27, 31, 35, 37, 38, 39, 49, 50, 63, 64, 65], "ar": [0, 1, 2, 3, 4, 8, 9, 12, 13, 17, 19, 24, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 40, 43, 46, 49, 50, 52, 53, 54, 61, 63, 64, 65, 69, 70, 72, 77], "3": [0, 1, 5, 9, 17, 24, 25, 26, 31, 35, 38, 39, 48, 49, 51, 67, 69, 70, 71], "wai": [0, 4, 12, 24, 25, 26, 27, 35, 37, 38, 40, 46, 49, 50, 54, 61, 63, 66, 70, 74], "docker": [0, 5, 9], "from": [0, 2, 4, 5, 9, 11, 15, 16, 17, 24, 28, 31, 36, 38, 39, 40, 43, 46, 49, 50, 53, 54, 55, 56, 61, 63, 64, 66, 67, 70, 71, 75, 76], "scratch": [0, 5, 11], "all": [0, 1, 3, 4, 9, 24, 26, 27, 29, 31, 35, 37, 38, 49, 53, 55, 61, 63, 65, 77], "them": [0, 3, 31, 37, 38, 49, 61], "share": [0, 1, 4, 36, 38, 49, 50, 63, 77], "same": [0, 4, 16, 36, 37, 38, 40, 49, 50, 61, 77], "next": [0, 28, 49], "section": [0, 38, 49], "ubuntu": [0, 2, 17, 38, 53, 56, 60, 69], "22": [0, 55, 60, 69], "04": [0, 2, 17, 52, 53, 56, 58, 60, 69], "cmake": [0, 1, 9], "25": [0, 55, 57, 60], "1": [0, 4, 9, 12, 17, 25, 26, 27, 29, 31, 35, 38, 39, 40, 46, 48, 49, 51, 61, 64, 65, 69, 70, 71, 72, 73, 77], "jdk": [0, 5, 27, 45, 61], "8": [0, 3, 5, 9, 17, 27, 37, 39, 51, 55, 58, 61, 63, 69], "gradl": [0, 1, 2, 5, 9, 31], "gcc": [0, 17, 53, 60], "11": [0, 27, 55, 56, 57], "python": [0, 1, 5], "9": [0, 9, 17, 25, 51, 63], "catalina": [0, 69], "latest": [0, 2, 72], "brew": 0, "xcode": 0, "4": [0, 9, 31, 35, 37, 38, 39, 48, 49, 51, 63, 70, 71], "16": [0, 17, 37, 39, 53, 54, 56, 57, 58, 59, 69], "10": [0, 2, 37, 39, 46, 55, 60, 61, 69], "visual": [0, 5, 57, 58], "studio": [0, 5, 57, 58], "2022": [0, 5, 56, 57, 58], "commun": [0, 3, 5, 9, 16, 25], "24": [0, 53, 58, 60, 69], "come": [0, 4, 36, 38, 39], "sdk": [0, 45, 74], "windbg": 0, "wsl2": [0, 2], "option": [0, 5, 16, 30, 38, 40, 49, 54, 56, 60, 61, 70, 72], "ndk": [0, 56], "r25b": 0, "30": [0, 57], "javet_hom": [0, 1], "i": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 43, 45, 46, 48, 50, 53, 54, 61, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 77], "home": 0, "directori": [0, 4, 38, 73], "node_hom": [0, 1], "v8_home": [0, 1], "depot_tools_hom": [0, 1], "googl": [0, 3], "depot": 0, "tool": [0, 1, 2, 5, 17, 22, 25, 52], "android_ndk_hom": [0, 1], "android_sdk_hom": 0, "descript": [0, 31, 37], "custom": [0, 4, 5, 28, 38, 40, 49, 53, 54, 56], "libcxx": 0, "off": [0, 1, 3, 4, 37], "The": [0, 1, 2, 3, 4, 7, 9, 12, 15, 16, 20, 24, 26, 27, 28, 31, 35, 36, 37, 38, 43, 46, 49, 50, 61, 63, 64, 69, 70, 71, 72, 77], "offici": [0, 1, 9, 15, 17, 25], "releas": [0, 1, 4, 9, 25, 37, 43, 77], "doesn": [0, 3, 4, 9, 29, 31, 35, 36, 37, 38, 43, 45, 46, 49, 74, 77], "t": [0, 3, 4, 9, 16, 24, 25, 27, 28, 29, 31, 35, 36, 37, 38, 43, 45, 46, 49, 71, 72, 74, 77], "support": [0, 1, 2, 4, 8, 9, 16, 18, 19, 23, 25, 29, 30, 31, 35, 37, 38, 43, 46, 48, 49, 53, 54, 55, 56, 57, 59, 60, 69, 72, 77], "debug": [0, 4, 5, 16, 19, 23, 25, 45, 49], "extern": [0, 37], "startup": 0, "data": [0, 4, 28, 37, 38, 49, 52, 57], "i18n": [0, 1, 19, 23, 43, 56], "pleas": [0, 1, 2, 3, 4, 11, 16, 17, 21, 22, 25, 28, 31, 35, 36, 37, 38, 40, 46, 49, 50, 51, 61, 64, 65, 66, 67, 69, 70, 71, 73, 77], "contact": [0, 1, 9, 16, 17, 21, 51, 69, 77], "maintain": [0, 16, 17, 21, 51, 69, 77], "privat": [0, 16, 17, 21, 27, 29, 31, 49, 61, 69, 70], "thi": [0, 3, 4, 9, 11, 12, 17, 20, 24, 25, 27, 28, 29, 31, 35, 36, 37, 38, 50, 56, 61, 63, 64, 70, 72, 77], "pointer": [0, 37, 49], "compress": 0, "sandbox": 0, "snapshot": [0, 17, 57], "follow": [1, 2, 3, 4, 15, 17, 21, 24, 25, 27, 29, 37, 38, 40, 43, 45, 48, 49, 50, 61, 63, 70, 72], "guid": [1, 25, 75], "If": [1, 2, 12, 24, 25, 28, 29, 30, 31, 37, 38, 40, 46, 49, 69, 70, 71, 77], "you": [1, 2, 3, 8, 9, 12, 15, 22, 24, 25, 27, 31, 36, 37, 45, 49, 50, 51, 69, 73, 74, 77], "face": [1, 4], "ani": [1, 9, 28, 29, 30, 31, 38, 43, 45, 46, 49, 77], "issu": [1, 4, 11, 24, 36, 37, 38, 40, 53, 54, 55, 58, 60], "mai": [1, 2, 3, 4, 9, 12, 15, 24, 25, 26, 28, 31, 35, 36, 37, 38, 40, 45, 46, 49, 74], "sjtucaocao": [1, 2, 25], "clone": [1, 2, 57], "sourc": [1, 3, 16, 28, 36, 38, 43, 46, 61, 64, 65, 66, 67, 70, 71, 73, 77], "code": [1, 3, 4, 9, 12, 16, 27, 28, 29, 36, 37, 38, 39, 40, 44, 46, 50, 54, 55, 59, 61, 64, 65, 66, 67, 70, 71, 73, 77], "checkout": 1, "proper": 1, "version": [1, 3, 4, 8, 11, 25, 31, 38, 51, 69, 72], "also": [1, 2, 4, 9, 11, 12, 28, 30, 31, 35, 36, 37, 38, 45, 49, 50, 63, 77], "sure": [1, 2, 9, 16, 28, 37, 38, 63, 73], "arg": [1, 27, 49, 63], "gn": 1, "file": [1, 4, 9, 21, 37, 38, 50, 63, 73], "look": [1, 4, 9, 11, 38, 54], "like": [1, 3, 9, 11, 12, 25, 38, 40, 43, 49, 56, 71], "is_debug": 1, "fals": [1, 16, 26, 28, 31, 35, 37, 38, 49, 63, 64], "target_cpu": 1, "v8_monolith": 1, "true": [1, 11, 16, 26, 28, 31, 35, 37, 38, 46, 49, 61, 63, 64, 65, 71], "v8_use_external_startup_data": 1, "is_component_build": 1, "v8_enable_i18n_support": 1, "v8_enable_pointer_compress": 1, "v8_static_librari": 1, "symbol_level": 1, "0": [1, 3, 9, 17, 25, 26, 27, 29, 31, 37, 38, 40, 46, 48, 49, 51, 61, 63, 65, 69, 70, 73, 77], "use_custom_libcxx": 1, "v8_enable_sandbox": 1, "x64": [1, 38], "To": [1, 3, 9, 21, 28, 35, 42, 64], "enabl": [1, 2, 3, 12, 16, 21, 31, 37, 49, 50, 53, 54, 64], "set": [1, 3, 4, 7, 9, 12, 26, 27, 28, 29, 31, 35, 37, 38, 45, 48, 50, 53, 59, 61, 63, 64, 65, 70], "export": [1, 38], "path": [1, 17, 35, 38, 43, 59, 63], "cd": [1, 2, 38], "ninja": 1, "c": [1, 31, 38, 49, 56, 57, 58, 61, 65], "out": [1, 25, 37, 38, 43, 46, 61, 63, 64, 65, 67, 70, 71, 77], "python3": [1, 9], "script": [1, 4, 9, 12, 38, 40, 46, 49, 53, 57, 66, 71, 73], "patch_v8_build": 1, "py": 1, "p": [1, 31], "requir": [1, 8, 12, 35, 38, 39, 40, 46, 49, 50, 63], "depot_tools_win_toolchain": 1, "gen": 1, "id": [1, 3, 4, 43, 49, 69], "v": [1, 5, 9, 25, 38], "solut": [1, 11, 29, 49], "dev": [1, 39], "v8gen": 1, "arm": [1, 25, 55, 69], "target_o": 1, "v8_target_cpu": 1, "ia32": 1, "x86": [1, 25, 54, 55, 69], "A": [1, 4, 19, 23, 27, 38, 49], "few": [1, 2, 3, 8, 9, 11, 12, 27, 28, 31, 37, 49, 52, 53, 60, 64, 65, 71], "certain": [1, 3, 4, 12, 49, 50, 54], "warn": [1, 45, 53], "error": [1, 9, 35, 38, 44, 45, 49, 50, 54, 55, 56, 59], "so": [1, 2, 4, 7, 9, 12, 14, 16, 17, 24, 26, 27, 28, 29, 31, 35, 36, 37, 38, 40, 45, 49, 50, 57, 61, 63, 65, 69, 73, 74, 77], "msvc": [1, 38], "stop": [1, 9, 58], "compil": [1, 4, 31, 38, 43, 49, 60, 64, 77], "turn": [1, 3, 4, 37, 53, 60], "those": [1, 3, 4, 12, 24, 37, 38, 49], "lt": 1, "patch_node_build": 1, "configur": 1, "without": [1, 2, 3, 4, 24, 29, 31, 35, 36, 49, 55, 59, 61, 77], "intl": 1, "j4": 1, "first": [1, 3, 35, 38, 49, 52, 77], "thin": 1, "disabl": [1, 12, 13, 19, 31, 37, 40, 46, 50, 57], "second": [1, 3, 15, 21, 38, 46, 49], "mani": [1, 9, 11, 37, 49, 77], "posit": [1, 39, 49], "independ": [1, 39], "link": [1, 19, 23, 37, 38], "phase": 1, "broken": [1, 9, 37, 49], "fpic": 1, "usr": [1, 17], "bin": [1, 17], "ld": 1, "libnod": 1, "node_bind": 1, "reloc": 1, "r_x86_64_tpoff32": 1, "against": [1, 49], "_zn4nodel23thread_local_modpending": 1, "can": [1, 2, 3, 4, 12, 18, 19, 23, 24, 29, 31, 37, 38, 40, 50, 63, 64, 72, 73, 74, 77], "us": [1, 3, 4, 8, 11, 24, 28, 30, 35, 37, 38, 39, 40, 45, 49, 66, 77], "when": [1, 4, 9, 19, 20, 23, 31, 37, 38, 40, 46, 49, 50, 56, 58, 77], "object": [1, 4, 12, 24, 37, 40, 48, 53, 54, 55, 56, 61, 62, 64, 66, 70, 75, 77], "recompil": 1, "vcbuild": 1, "bat": 1, "vs2022": 1, "onc": [1, 27, 28, 37, 38, 43, 63], "readi": 1, "navig": [1, 38], "cpp": 1, "access": [1, 12, 31, 35, 37, 43, 49], "execut": [1, 3, 4, 31, 38, 39, 40, 43, 46, 48, 49, 50, 61, 66, 67, 71], "correspond": [1, 2, 4, 24, 37, 38, 40, 49], "command": [1, 71], "sh": [1, 38], "dnode_dir": 1, "dv8_dir": 1, "maco": [1, 9, 25, 35, 69], "cmd": [1, 38], "after": [1, 3, 9, 29, 31, 35, 38, 40, 46, 49, 50, 61, 77], "while": [1, 2, 31, 46, 63, 71], "place": [1, 4, 9, 24, 28, 37, 77], "folder": [1, 40, 63], "src": 1, "main": [1, 27, 31, 64], "resourc": [1, 4, 12, 15, 25, 28, 32, 36, 38, 43, 46, 50, 61, 67, 70, 71, 74], "libjavet": [1, 35, 38], "dylib": 1, "dll": [1, 19, 23, 38], "arch": [1, 25, 55, 69], "dcmake_android_ndk": 1, "dcmake_android_arch": 1, "jnilib": 1, "armeabi": 1, "v7a": 1, "v8a": 1, "mode": [1, 5, 7, 13, 17, 19, 20, 21, 24, 25, 35, 37, 39, 40, 49, 50, 53, 54, 56, 59, 66, 68, 69, 75, 77], "append": [1, 31, 64], "denable_i18n": 1, "test": [1, 2, 4, 5, 9, 15, 16, 17, 25, 31, 36, 38, 39, 49, 50, 52, 63, 69, 73], "jar": [1, 4, 9], "lib": [1, 38, 55], "aar": 1, "output": [1, 27, 49, 61, 63, 64, 65], "As": [2, 3, 4, 12, 26, 29, 31, 35, 37, 45, 49, 74], "regard": [2, 3], "mac": [2, 9, 25, 77], "contributor": 2, "welcom": [2, 71], "interest": [2, 9], "Or": [2, 16], "have": [2, 9, 16, 25, 27, 29, 31, 37, 38, 49, 50, 73, 77], "wait": [2, 3, 55, 63], "long": [2, 29, 30, 31, 36, 49, 61], "20": [2, 24, 53, 55, 56, 57, 58, 59, 69], "git": 2, "network": 2, "connect": [2, 3, 4, 66], "up": [2, 3, 4, 12, 31, 36, 37, 38, 54, 55, 63], "run": [2, 4, 27, 31, 36, 37, 38, 39, 46, 73], "repositori": [2, 17], "imag": [2, 9], "avail": [2, 3, 4, 20, 35, 43, 49, 72], "http": [2, 3, 4, 6, 25, 39, 63], "com": [2, 6, 25, 37, 38, 45, 69], "r": [2, 17, 64], "caoccao": [2, 6, 25, 37, 38, 45, 69], "f": [2, 4, 38], "x86_64": [2, 25, 38, 55, 69], "build_artifact": 2, "dockerfil": [2, 54, 58], "pull": 2, "5gb": 2, "actual": [2, 3, 4, 9, 12, 28, 36, 37, 38, 43, 49, 61, 63], "take": [2, 4, 9, 11, 24, 30, 31, 37, 38, 49, 53, 55, 61, 63, 66, 71, 77], "minut": [2, 4, 28], "includ": [2, 9, 26, 35, 49, 77], "depend": [2, 4, 9, 31, 38, 45, 49, 74], "maven": [2, 5, 31], "central": [2, 8], "instruct": [2, 37], "insid": [2, 3, 4, 31, 37, 50], "perform": [2, 3, 4, 5, 9, 24, 25, 26, 28, 29, 34, 35, 37, 38, 40, 49, 52, 55, 59, 60, 61, 63, 66, 70, 77], "base_jvm": 2, "base": [2, 7, 31, 37, 49, 54, 56, 57, 61, 77], "jvm": [2, 4, 21, 25, 28, 31, 35, 36, 52, 63, 65, 66, 72, 77], "base_nod": 2, "base_v8": 2, "v8": [2, 3, 5, 7, 9, 11, 12, 13, 19, 21, 24, 25, 28, 29, 31, 32, 35, 36, 39, 40, 42, 43, 46, 51, 62, 63, 64, 65, 66, 68, 69, 70, 71, 74, 75], "base_gradl": 2, "final": [2, 27, 28, 29, 31, 37, 38, 43, 46, 49, 50, 61], "artifact": 2, "base_all_in_on": 2, "build_all_in_on": 2, "updat": [2, 17, 35, 49, 53, 54, 55, 56, 58], "daemon": [2, 37, 46], "json": [2, 3, 26, 38, 61, 65], "storag": 2, "opt": 2, "dm": 2, "bases": 2, "120gb": 2, "size": [2, 4, 21, 26, 29, 35, 37, 43], "restart": [2, 77], "m": [2, 61], "4g": 2, "roughli": 2, "5": [2, 3, 24, 37, 38, 51, 63, 69, 70, 71], "hour": [2, 9], "internet": 2, "stabl": 2, "dai": [2, 40], "just": [2, 3, 9, 12, 27, 29, 35, 36, 37, 38, 39, 49, 64, 77], "fail": [2, 19, 23, 38, 43, 46, 49, 56], "forev": [2, 37], "larg": [2, 16], "60": 2, "gb": 2, "effici": [2, 15, 54], "push": [2, 48, 49, 50, 59], "Of": [2, 37, 38, 49, 77], "cours": [2, 37, 38, 49, 77], "wise": [2, 17, 49, 61, 69], "workflow": 2, "11gb": 2, "devtool": [3, 19, 23, 25], "aka": 3, "web": [3, 37, 40], "directli": [3, 31, 35, 37, 49, 61, 64, 77], "browser": [3, 40], "help": [3, 40], "edit": [3, 49], "page": 3, "fly": 3, "diagnos": 3, "problem": [3, 9, 27, 49], "quickli": 3, "ultim": 3, "build": [3, 4, 5, 8, 11, 16, 17, 21, 25, 38, 49, 53, 54, 58, 69], "better": [3, 4, 35, 36, 39, 49, 61], "websit": 3, "faster": 3, "javet": [3, 5, 8, 9, 13, 14, 15, 16, 18, 19, 20, 23, 24, 26, 27, 28, 29, 31, 34, 37, 40, 42, 43, 45, 46, 48, 49, 50, 52, 54, 59, 63, 64, 65, 68, 69, 70, 72, 73, 74, 75], "ship": 3, "demo": 3, "applic": [3, 4, 12, 16, 24, 27, 28, 29, 31, 35, 36, 37, 38, 39, 46, 49, 50, 63, 64, 66, 70, 71, 77], "demonstr": 3, "how": [3, 4, 7, 11, 13, 15, 19, 24, 25, 27, 35, 36, 38, 54, 61, 77], "work": [3, 4, 9, 12, 24, 25, 35, 36, 37, 38, 49, 50, 61, 63, 69, 77], "live": [3, 25, 36, 37, 49], "normal": [3, 37, 46, 63], "java": [3, 4, 9, 14, 25, 27, 28, 31, 35, 36, 37, 38, 50, 55, 62, 63, 65, 70, 73, 75, 77], "consol": [3, 4, 27, 49, 50, 61, 63, 66, 67, 70, 71], "an": [3, 4, 9, 11, 12, 14, 25, 26, 28, 31, 35, 36, 37, 38, 39, 40, 45, 46, 49, 50, 65, 70, 71, 72], "interact": [3, 4, 27, 53, 62, 71, 75], "appear": [3, 49], "doe": [3, 4, 16, 24, 35, 37, 46, 49, 77], "arbitrari": [3, 4, 12, 28, 29, 31, 64, 77], "what": [3, 9, 10, 15, 19, 28, 37, 38, 61, 77], "done": [3, 77], "let": [3, 9, 24, 27, 31, 38, 61, 63, 71], "undefin": [3, 28, 31, 38, 49, 61, 71], "b": [3, 26, 28, 31, 38, 49, 61, 64, 65, 71, 73], "7": [3, 17, 37, 51, 63, 69, 70, 71, 77], "inspect": [3, 16, 49], "remot": 3, "target": [3, 7, 28, 29, 61, 77], "click": 3, "voil\u00e0": [3, 31, 63], "screenshot": 3, "show": [3, 4, 31, 37, 38, 49, 50], "evalu": [3, 4, 38, 56, 77], "auto": [3, 17, 35, 53], "complet": [3, 4, 7, 29, 31, 37, 38, 40, 46, 49, 54, 55, 63, 64, 69, 77], "enjoi": 3, "listen": [3, 24, 37, 50, 63], "port": [3, 51, 63], "9229": 3, "default": [3, 4, 21, 28, 29, 31, 35, 37, 38, 46, 49, 64, 70, 72], "becaus": [3, 4, 8, 9, 16, 24, 25, 26, 27, 28, 29, 31, 35, 36, 37, 39, 40, 43, 49, 50, 61, 66, 72, 73, 77], "constantli": 3, "queri": 3, "127": [3, 37], "tell": [3, 24, 31, 35, 37, 38, 63, 70], "flavor": [3, 15, 49, 71], "via": [3, 4, 31, 37, 38, 40, 46, 49, 50, 63, 70], "websocket": 3, "address": [3, 24, 37, 38, 40, 49, 63], "protocol": 3, "current": [3, 4, 9, 43, 49, 69], "v1": [3, 51, 55, 69], "api": [3, 4, 9, 11, 12, 13, 19, 25, 27, 28, 31, 32, 35, 36, 37, 38, 45, 49, 50, 52, 53, 55, 59, 61, 63, 65, 73, 77], "doc": [3, 39, 53, 55], "chromedevtool": 3, "github": 3, "io": [3, 16], "upgrad": [3, 8, 9, 11, 17, 42, 53, 54, 55, 56, 57, 58, 59, 60], "request": 3, "respons": [3, 35, 38, 49], "accept": [3, 16, 28, 45, 49, 50, 54], "switch": [3, 25, 35, 36, 40, 53], "w": 3, "send": [3, 28, 37, 63], "messag": [3, 37, 43, 45], "method": [3, 12, 27, 29, 31, 43, 49, 61], "runtim": [3, 4, 17, 21, 31, 35, 36, 38, 40, 43, 46, 49, 54, 55, 56, 58, 61, 63, 66, 67, 70, 71, 72, 77], "param": 3, "notif": [3, 37], "executioncontextcr": 3, "context": [3, 12, 24, 36, 37, 38, 39, 40, 58], "origin": [3, 4, 49], "name": [3, 4, 12, 27, 29, 35, 38, 43, 45, 49, 55, 58, 61, 70, 73, 74], "inspector": [3, 13, 19], "00000000": 3, "uniqueid": 3, "result": [3, 4, 28, 36, 40, 50, 67, 71], "debugg": [3, 49], "maxscriptscaches": 3, "100000000": 3, "debuggerid": 3, "setpauseonexcept": 3, "state": [3, 49], "none": [3, 49], "setasynccallstackdepth": 3, "maxdepth": [3, 43], "32": [3, 37], "profil": [3, 69], "6": [3, 8, 9, 25, 38, 51, 57, 60, 63, 69, 70, 71], "getisolateid": 3, "setblackboxpattern": 3, "pattern": [3, 12, 15, 29, 46], "runifwaitingfordebugg": 3, "pars": 3, "expos": [3, 4, 25, 28, 29, 31, 37, 38, 42, 49, 50, 55, 62, 75, 77], "callback": [3, 24, 37, 38, 43, 49, 53, 54, 55, 56, 58, 59, 63], "iv8inspectorlisten": 3, "rest": [3, 38], "refer": [3, 11, 24, 25, 31, 35, 36, 38, 39, 40, 46, 49, 50, 58, 60, 61, 64, 65, 66, 67, 69, 70, 71, 73, 77], "detail": [3, 4, 11, 21, 22, 36, 46, 49, 50, 61, 64, 65, 66, 67, 69, 70, 71, 72, 73, 77], "ye": [3, 4, 17, 22, 24, 28, 29, 31, 35, 36, 38, 48, 49, 69, 73], "feel": [3, 38, 49], "free": [3, 4, 12, 29, 36, 37, 38, 49, 53, 66, 77], "server": [3, 28, 69], "your": [3, 9, 17, 31, 35, 40, 45, 74, 77], "environ": [3, 4, 5, 17, 19, 25, 36, 38, 39, 53, 55, 66], "creat": [3, 16, 21, 26, 29, 31, 36, 37, 38, 45, 46, 49, 50, 54, 59, 61, 63, 64, 65, 66, 67, 70, 71, 74, 77], "showcas": 3, "further": 3, "some": [3, 4, 9, 12, 14, 17, 20, 24, 28, 35, 37, 39, 49, 50, 55, 59, 61, 66, 73, 77], "tip": [3, 25, 32], "integr": [3, 9, 25, 45, 52, 68, 75], "embed": [3, 4, 9, 21, 25, 39, 40], "jetti": 3, "Be": [3, 31, 37, 40, 50], "care": [3, 30, 31, 36, 37, 38, 40, 50], "host": [3, 4, 21, 35, 38, 61, 63, 67, 70, 71], "togeth": [3, 63], "otherwis": [3, 29, 30, 35, 36, 49], "refus": 3, "add": [3, 17, 26, 27, 29, 31, 37, 38, 48, 49, 50, 65, 70, 73, 77], "intercept": [3, 5, 31, 37, 38, 52, 54, 68, 75], "event": [3, 40, 50, 63, 77], "In": [3, 4, 12, 16, 24, 26, 28, 31, 35, 36, 37, 38, 39, 40, 46, 49, 50, 61, 63, 77], "practic": [3, 4, 12, 41], "decent": [3, 9, 48, 50], "jackson": [3, 61], "gson": [3, 61], "interpret": [3, 4], "process": [3, 24, 27, 50], "why": [3, 12, 13, 19, 23, 35, 37, 73], "breakpoint": 3, "befor": [3, 12, 24, 28, 35, 37, 38, 63], "right": [3, 35], "featur": [3, 4, 5, 8, 9, 12, 29, 35, 37, 38, 43, 48, 49, 50, 51, 64, 69, 72, 73, 77], "enforc": 3, "authent": 3, "author": 3, "chang": [3, 16, 28, 29, 36, 38, 43, 54, 55, 59, 64, 70], "There": [4, 9, 12, 17, 26, 27, 28, 35, 37, 38, 43, 49, 61, 72], "vagu": 4, "boundari": 4, "between": [4, 9, 25, 28, 29, 37, 40, 49, 53, 61, 64], "definit": 4, "mixtur": 4, "both": [4, 28, 35, 37, 43, 50, 54, 72, 77], "trade": 4, "No": [4, 9, 27, 28, 35, 38, 46, 48, 49, 63], "copi": [4, 31, 35, 37], "valu": [4, 25, 27, 28, 29, 30, 32, 35, 37, 38, 43, 48, 52, 53, 54, 55, 61, 70], "Not": [4, 49, 69], "possibl": [4, 29, 36, 40, 61], "weak": 4, "keep": [4, 28, 31, 36, 37, 40, 61], "footprint": 4, "jni": [4, 8, 35, 37, 49, 55, 56, 58], "recycl": [4, 24, 28, 31, 37, 39, 40, 67], "close": [4, 9, 12, 16, 19, 23, 31, 35, 37, 38, 40, 43, 46, 49, 53, 54, 58, 60, 65, 66], "call": [4, 9, 12, 16, 24, 27, 28, 31, 35, 36, 37, 38, 40, 46, 50, 53, 61, 63, 64, 70, 77], "That": [4, 9, 24, 28, 35, 37, 38, 45, 46, 49, 77], "old": [4, 9, 40, 50], "school": 4, "manag": [4, 9, 12, 15, 25, 32, 38, 53], "tri": [4, 9, 20], "hide": [4, 9], "kind": [4, 9, 27, 36, 49, 77], "tediou": [4, 12, 77], "try": [4, 9, 11, 25, 27, 31, 36, 38, 40, 46, 48, 49, 50, 61, 63, 66, 67, 70, 71, 72, 73], "best": [4, 15, 41], "co": 4, "exist": [4, 11, 31, 38, 61, 73], "one": [4, 7, 9, 11, 12, 16, 21, 26, 31, 35, 37, 38, 49, 61, 64, 70, 71, 72, 77], "other": [4, 12, 28, 35, 36, 37, 40, 45, 49, 50, 53, 63, 65, 69, 72, 77], "word": [4, 37, 63], "thei": [4, 9, 29, 35, 38, 40, 43, 50, 61, 72], "side": [4, 16, 37], "don": [4, 9, 16, 25, 31, 38, 45, 72, 74, 77], "interfer": 4, "each": [4, 37, 49, 72, 77], "diagram": [4, 49], "lazi": 4, "load": [4, 12, 20, 34, 43, 73, 77], "dedic": [4, 37, 40, 63, 77], "classload": [4, 77], "comparison": [4, 9, 25], "loadabl": 4, "high": [4, 28, 37], "ecosystem": [4, 72], "secur": [4, 12, 38, 73, 77], "low": 4, "unload": [4, 34, 38, 77], "One": [4, 28], "beauti": [4, 28, 49], "appli": [4, 28, 31, 35, 38, 40, 46, 49, 56, 63], "exampl": [4, 13, 19, 27, 64, 65], "e": [4, 12, 14, 24, 26, 27, 28, 35, 37, 38, 46, 49, 50, 61, 63, 70, 72, 73, 77], "g": [4, 12, 14, 17, 24, 26, 28, 35, 37, 38, 49, 50, 61, 63, 64, 70, 72, 73, 77], "net": [4, 31], "etc": [4, 11, 12, 14, 26, 28, 35, 37, 49, 63, 73], "zero": [4, 37], "byte": [4, 29, 30, 31, 37, 49], "buffer": [4, 37], "achiev": [4, 9, 31, 36, 37, 49], "thread": [4, 9, 16, 37, 39, 43, 46, 50, 53, 54, 66, 77], "multipl": [4, 16, 21, 36, 38, 40, 54, 77], "instanc": [4, 12, 16, 26, 37, 38, 39, 40, 45, 49, 64, 70], "onli": [4, 12, 14, 16, 21, 28, 30, 31, 35, 38, 40, 45, 49, 51, 61, 69, 77], "visibl": [4, 49], "beyond": 4, "allow": [4, 9, 21, 26, 27, 28, 29, 31, 35, 38, 39, 45, 49, 50, 53, 54, 55, 59, 63, 64, 65, 66, 70, 77], "explicit": [4, 26, 77], "await": [4, 40, 49, 50, 53, 57, 63], "more": [4, 9, 17, 29, 35, 37, 38, 42, 43, 46, 49, 50, 54, 55, 66, 67, 70, 71, 72, 73, 77], "control": [4, 24, 28, 38, 46, 49], "over": [4, 24, 28, 38, 49, 77], "async": [4, 24, 50], "global": [4, 12, 38, 49, 58, 66, 77], "recommend": [4, 8, 31, 39, 40, 49, 50, 61, 66], "project": [4, 9, 11, 12, 14, 15, 25, 31, 38, 50, 69, 73, 77], "increas": [4, 28, 43, 77], "provid": [4, 17, 24, 26, 27, 28, 29, 31, 38, 48, 49, 66, 70, 77], "align": 4, "chrome": [4, 5, 19, 23, 25, 52], "bring": [4, 28, 35], "system": [4, 8, 11, 25, 35, 38, 43, 45, 61, 63, 64, 65, 67, 69, 70, 71], "unfortun": [4, 9], "veri": [4, 31, 38, 40, 49, 71, 72], "limit": [4, 12], "howev": [4, 9, 11, 12, 24, 28, 29, 35, 37, 49, 61, 77], "bad": [4, 9], "leav": [4, 11, 29, 38], "typic": [4, 38, 46, 49], "challeng": [4, 9, 12, 28], "sync": 4, "locat": [4, 38, 77], "interceptor": [4, 24, 49, 50, 66, 70], "partial": 4, "know": [4, 7, 9, 24, 34, 38, 49, 77], "want": [4, 8, 9, 12, 24, 28, 35, 36, 37, 43, 49, 50, 51], "defin": [4, 28, 31], "es6": [4, 9, 13, 19, 38], "repres": [4, 12, 28, 37, 49, 77], "string": [4, 27, 29, 30, 31, 38, 45, 50, 52, 61, 63, 65, 67, 70, 71, 73], "dure": [4, 24, 28, 35, 38, 49, 53, 77], "url": 4, "whatev": [4, 24, 36, 37, 49, 50], "store": [4, 37, 38, 49, 58], "map": [4, 26, 28, 29, 38, 48], "kei": [4, 38, 48, 61], "feed": [4, 38], "get": [4, 9, 12, 24, 26, 27, 29, 31, 35, 37, 38, 40, 45, 46, 48, 49, 50, 55, 56, 61, 63, 65, 66, 72, 73, 74, 77], "start": [4, 11, 16, 28, 46, 49, 55, 63, 77], "excel": [4, 9], "articl": 4, "explain": 4, "concept": [4, 12, 50], "insight": 4, "summari": 4, "vm": [4, 40], "heap": [4, 37], "separ": [4, 12, 31, 39], "unrel": [4, 39], "javascript": [4, 16, 24, 25, 28, 31, 36, 38, 39, 50, 55, 62, 65, 67, 70, 75, 77], "singl": [4, 9, 36, 39, 49, 63], "model": [4, 36], "simplifi": [4, 49], "v8runtim": [4, 25, 26, 27, 29, 31, 36, 38, 40, 46, 48, 49, 50, 52, 53, 54, 55, 57, 60, 61, 64, 65, 66, 67, 70, 71, 72, 73], "resetisol": [4, 36, 53], "resetcontext": [4, 36, 40, 53], "alwai": [4, 27, 40, 49], "brand": 4, "new": [4, 7, 9, 11, 26, 27, 29, 31, 35, 36, 37, 38, 39, 45, 46, 48, 49, 50, 51, 61, 63, 64, 65, 66, 70, 71, 72, 73, 74], "much": [4, 9, 31, 37, 39, 40, 49, 61, 71, 73, 77], "cheaper": 4, "oper": [4, 28], "good": [4, 37, 70], "enough": [4, 27, 31], "term": [4, 46, 49, 61], "almost": [4, 9, 31, 49, 63], "db": 4, "safe": [4, 24, 28, 36, 49], "NOT": [4, 36, 49], "lock": [4, 34, 37, 43, 46, 53, 77], "violat": 4, "core": [4, 35, 36, 38, 40, 54], "dump": [4, 36, 40, 54, 55], "immedi": [4, 16, 21, 36, 37, 40, 46], "valid": [4, 37, 49], "minim": [4, 29, 40, 66], "overhead": [4, 12, 28, 29, 36, 37, 39, 46, 66], "behind": [4, 11, 12, 24, 65], "scene": [4, 12, 24, 65], "sampl": [4, 27, 31, 35, 37, 38, 49, 63], "function": [4, 14, 16, 29, 35, 37, 38, 47, 52, 55, 56, 57, 61, 63, 64, 70, 77], "packag": [4, 8, 9], "automat": [4, 7, 28, 31, 35, 36, 38, 43, 58, 67, 70, 77], "per": [4, 31, 35, 36, 37, 38], "calcul": [4, 49], "unpack": 4, "system_temporary_directori": 4, "pid": 4, "either": [4, 7, 49], "deploi": [4, 54], "avoid": [4, 12, 21, 28, 35, 40], "race": [4, 36], "condit": [4, 29, 36], "initi": [4, 19, 23, 38, 56, 63, 66, 70], "purg": [4, 63], "legaci": [4, 9, 18, 19, 56], "least": [4, 9], "begin": 4, "nativ": [4, 20, 25, 26, 29, 36, 37, 40, 49, 52, 63, 77], "track": [4, 37, 59], "delet": [4, 26, 31, 48, 49, 64, 70], "javetnativemonitor": 4, "unit": [4, 15], "case": [4, 7, 9, 15, 28, 30, 35, 36, 37, 38, 39, 49, 50, 52, 77], "fetch": [4, 50], "compar": [4, 7, 36], "count": [4, 43, 46, 48, 63], "verifi": [4, 38, 49], "unmanag": [4, 37], "properli": 4, "alloc": [4, 36, 49, 55], "freed": 4, "intellij": [5, 9], "flag": [5, 37, 54, 56], "design": [5, 7, 15, 16, 25, 29, 31, 35, 36, 38, 49, 63, 72, 77], "architectur": [5, 9], "modul": [5, 20, 24, 40, 42, 43, 49, 57, 58, 73], "engin": [5, 25, 26, 37, 38, 43, 55, 68, 74, 75], "pool": [5, 25, 37, 45, 52, 55, 68, 74, 75], "cross": [5, 77], "memori": [5, 9, 11, 15, 24, 28, 34, 35, 40, 43, 49, 53, 55, 61, 77], "leak": [5, 9, 11, 28, 37, 40, 53, 55], "detect": [5, 27, 28, 43, 49, 54, 55], "cdt": [5, 71], "shell": [5, 68, 75], "intern": [5, 31, 35, 36, 37, 49, 55, 56, 59, 69], "present": 6, "www": 6, "javetperf": [6, 59], "reus": [7, 12], "do": [7, 9, 12, 22, 24, 25, 36, 37, 38, 40, 49, 50, 65], "suit": 7, "timestamp": 7, "newer": 7, "instal": [8, 9, 17, 35, 38, 63, 68, 73, 75], "though": [8, 43, 49, 66, 77], "been": [8, 9, 24, 35, 49, 77], "drop": [8, 9, 38, 49], "heavili": [8, 27, 49, 77], "person": 8, "idea": [8, 9, 11, 37], "For": [8, 12, 31, 38, 49], "now": [8, 9, 27, 31, 38, 45, 49, 70], "v7": 8, "2": [8, 9, 12, 17, 25, 26, 29, 31, 35, 38, 39, 40, 46, 48, 51, 64, 67, 69, 70, 71, 72, 73, 77], "kotlin": [8, 31, 36], "dsl": [8, 31], "construct": [8, 49, 54], "14": [8, 9, 55, 56, 57, 58, 59], "17": [8, 31, 54, 56, 59], "v3": [8, 38, 51], "bundl": 8, "hasn": [9, 24, 49], "activ": [9, 24, 35, 38, 69], "sinc": [9, 69], "2017": 9, "last": 9, "wa": [9, 77], "2016": 9, "v4": 9, "fulli": [9, 27], "were": 9, "around": [9, 38], "android": [9, 25, 35, 56, 57, 58], "serious": [9, 39], "year": [9, 77], "nearli": 9, "seriou": [9, 11], "fix": [9, 11, 20, 26, 37, 38, 51, 53, 54, 55, 56, 57, 58, 59, 60], "under": [9, 37, 40, 49], "Its": [9, 37, 77], "evolv": 9, "expect": [9, 37, 43, 49], "chanc": 9, "implement": [9, 25, 29, 31, 35, 37, 38, 49, 50, 61, 69], "obvious": [9, 38, 49, 61], "couldn": [9, 77], "easili": [9, 28, 37, 46, 74], "would": [9, 11, 16], "contribut": 9, "me": [9, 25], "had": [9, 11], "admit": 9, "think": [9, 11, 13, 15, 16, 19], "mere": 9, "meanwhil": [9, 63], "ecmascript": 9, "move": [9, 53, 54], "forward": [9, 38], "rapidli": 9, "caus": [9, 20, 21, 35, 46, 49, 55, 77], "unexpect": [9, 28, 49], "someon": [9, 38], "team": 9, "time": [9, 16, 29, 31, 35, 38, 61, 66], "realiti": 9, "cruel": 9, "unoffici": 9, "v6": 9, "110": 9, "2020": [9, 11], "temporarili": 9, "ve": [9, 11], "j2v8_win32_x86_64": 9, "machin": 9, "cpu": [9, 25, 61], "i7": [9, 39], "10700k": [9, 39], "tp": [9, 39], "session": 9, "003": 9, "009": 9, "338": 9, "688": 9, "ad": [9, 31, 36, 39, 52, 53, 54, 55, 56, 57, 58, 59, 60], "hoc": [9, 36, 39, 54], "35": 9, "299": 9, "274": 9, "019": 9, "571": 9, "428": 9, "With": [9, 12, 38, 61], "improv": [9, 36, 37, 55, 59], "stick": 9, "devic": [9, 25], "precis": [9, 28, 49], "mini": 9, "macbook": 9, "air": 9, "too": [9, 16, 38], "And": [9, 25, 63], "plan": 9, "bui": 9, "futur": 9, "donat": [9, 25], "joke": 9, "intend": [9, 12], "tl": 9, "dr": 9, "rel": 9, "easi": [9, 12, 25, 27, 49, 52, 61, 66, 71], "master": [9, 50], "didn": 9, "well": [9, 24, 31, 37, 77], "213": 9, "differ": [9, 12, 29, 38, 40, 49, 50, 61], "solvabl": 9, "revisit": 9, "remov": [9, 53, 54, 55, 56], "earli": [9, 40], "haven": 9, "got": [9, 11], "reviv": 9, "v2": [9, 51, 69], "far": 9, "lowest": [9, 69], "my": [9, 25], "eclips": 9, "plai": [9, 36, 38, 50, 61, 63], "hei": 9, "satisfi": 9, "luck": 9, "understand": 9, "suffer": 9, "nowadai": 9, "2019": [9, 58], "cmakelist": 9, "txt": 9, "still": [9, 46, 49, 77], "2015": 9, "ag": 9, "surpris": 9, "deepli": 9, "gone": [9, 24], "step": [9, 12, 24, 26, 29, 31, 35, 37, 38, 49, 64, 67, 70, 71], "sit": 9, "watch": 9, "break": [9, 28, 38, 49, 50, 61, 71], "made": [9, 11], "full": [9, 40, 49], "thought": [9, 11], "month": [9, 11], "pai": [9, 77], "python2": 9, "form": [9, 49], "outer": 9, "layer": [9, 77], "logic": [9, 28, 49, 50, 63, 77], "who": [9, 38], "spend": 9, "preciou": 9, "wish": [9, 77], "hair": 9, "could": 9, "guido": 9, "van": 9, "rossum": 9, "am": [9, 31, 49], "problemat": 9, "At": [9, 11, 49], "hack": [9, 12, 24], "pom": [9, 56], "xml": [9, 56], "uncertainti": 9, "someth": [9, 49], "roi": 9, "suppos": [9, 30, 35, 50], "particular": [9, 35, 38, 39], "sai": [9, 27], "x": [9, 25, 26, 29, 31, 38, 49, 51, 65], "later": [9, 11, 38], "255": [9, 37, 52, 64], "permiss": 9, "realli": [9, 50], "local": [9, 27, 37, 49], "histori": [10, 11, 19, 77], "j2v8": [10, 11, 12, 19, 75, 76], "motiv": [10, 19, 77], "find": [11, 49], "compel": 11, "slowli": 11, "dy": 11, "sometim": [11, 26, 27, 28, 31, 37, 49, 50], "impli": [11, 16, 17, 24, 69, 77], "lower": 11, "cost": 11, "than": [11, 28, 39, 46, 49, 73, 77], "might": [11, 35], "learn": [11, 15], "lot": [11, 66], "manual": [11, 17], "window": [11, 12, 20, 25, 39, 52, 61, 77], "linux": [11, 18, 19, 25, 39, 52, 53, 54, 56, 58, 60, 77], "end": [11, 31, 37, 40, 49, 67], "abl": [11, 12, 21, 24, 28, 38, 46, 49, 63, 77], "write": [11, 27, 28, 37, 77], "inde": [11, 40], "folk": [12, 38], "migrat": [12, 25, 75], "experienc": 12, "perspect": [12, 37], "isol": [12, 36, 37, 38, 39, 40, 77], "noth": 12, "globalthi": [12, 38, 77], "mix": 12, "longer": [12, 28, 31, 37, 40, 77], "getglobalobject": [12, 26, 27, 29, 31, 38, 46, 49, 50, 61, 63, 64, 65, 66, 70, 73, 77], "top": [12, 38, 49, 77], "level": [12, 28, 36, 49], "globalobject": [12, 49], "invok": [12, 27, 53], "involv": 12, "common": [12, 17], "where": [12, 13, 19, 35, 38, 61, 77], "thing": [12, 28, 29, 37, 38], "offer": [12, 14, 37], "builder": 12, "check": [12, 36, 38, 49, 54, 77], "ast": [12, 25], "scope": [12, 16, 37, 57], "duplic": 12, "regist": [12, 24, 38, 40, 43, 49, 57, 59, 66, 70, 77], "decor": [12, 49, 54, 70, 77], "v8function": [12, 49, 50, 54, 55], "v8properti": [12, 49, 53, 54, 55, 77], "back": [12, 28, 31, 37, 38, 49, 51], "leakag": [12, 43], "lifecycl": [12, 37, 40, 49], "type": [12, 26, 27, 28, 29, 31, 35, 36, 37, 38, 39, 43, 52, 53, 55, 56, 61], "convers": [12, 26, 28, 57, 65], "handl": [12, 24, 27, 31, 36, 38, 50, 54, 56, 66], "everyth": 12, "goe": [12, 49], "smoothli": [12, 28], "experi": [12, 24, 31, 35, 38, 65, 66, 71], "littl": [12, 29], "bit": [12, 29, 37, 38], "spring": [12, 25, 52, 68, 75], "framework": [12, 74], "most": [12, 36, 38, 40, 49], "cover": [12, 27, 29, 37, 77], "express": [12, 31, 63, 69], "effect": [12, 35, 37, 38, 63], "basic": [14, 25, 30, 49, 66, 73, 75, 77], "absent": [14, 36, 49], "settimeout": [14, 63, 73, 77], "setinterv": [14, 63, 73], "javenod": [14, 15, 25, 50, 69, 73, 77], "extens": [14, 49, 66], "aim": [14, 73, 77], "simul": [14, 38, 49, 73, 77], "singleton": 16, "fine": [16, 25, 28], "noderuntim": [16, 38, 53, 56, 63, 67, 72], "But": [16, 35, 36, 37, 38, 49, 50, 74], "crash": [16, 19, 21, 23, 35, 36, 49, 55, 58], "serv": 16, "agent": 16, "check_eq": 16, "start_io_thread_async_initi": 16, "exchang": 16, "std": 16, "atomic_bool": 16, "flip": 16, "again": [16, 31, 35], "trigger": [16, 36, 37, 49], "workaround": [16, 38], "inevit": 16, "hacki": 16, "fundament": [16, 45, 74], "distribut": [17, 56, 69], "eg": 17, "18": [17, 55, 59, 69], "reli": [17, 37, 45, 61, 74], "advanc": [17, 25, 50, 75], "chain": [17, 37], "download": [17, 38], "drive": [17, 38], "prepar": [17, 35, 38, 49, 66], "sudo": [17, 38], "apt": [17, 38], "y": [17, 26, 29, 31, 65], "essenti": 17, "softwar": 17, "properti": [17, 28, 29, 31, 61, 69, 70, 74], "ppa": 17, "toolchain": 17, "altern": [17, 29], "90": 17, "slave": 17, "gcov": 17, "80": 17, "70": 17, "config": [17, 31, 45], "choic": 17, "select": [17, 37, 49], "prioriti": [17, 55], "statu": [17, 46, 51], "consider": [17, 28, 46, 69], "addit": [17, 29, 36, 39, 49, 69, 77], "effort": [17, 46, 69], "commit": [17, 69], "background": [19, 25, 50], "troubleshoot": [19, 25, 32], "dynam": [19, 23, 25, 35, 49, 53], "routin": [19, 23, 38], "being": [19, 23, 31, 37, 38, 46, 49], "failur": [20, 55], "happen": [20, 24, 28, 37, 50], "root": [20, 27, 37, 38], "napi": [20, 38], "symbol": [20, 26, 29, 38, 43, 54, 56, 59], "cannot": [20, 28, 36, 37, 38], "found": [20, 38, 43, 73], "modular": [20, 34, 40, 77], "By": [21, 35, 37, 70], "reduc": 21, "huge": [21, 39, 69], "amount": [21, 69, 77], "relat": [21, 49], "attempt": 21, "visit": [22, 25, 73], "user": [24, 28, 31, 38, 45, 66, 71, 74], "segfault": [24, 77], "occur": [24, 28, 31, 37], "82": 24, "loop": [24, 46, 50, 63, 71], "exit": [24, 71], "see": [24, 36, 38, 61, 72], "hand": 24, "yet": 24, "resolv": [24, 31, 38, 63, 77], "reject": [24, 40, 54], "land": 24, "lead": [24, 40], "corrupt": 24, "peopl": [24, 77], "choos": [24, 49], "mostli": 24, "genuin": 24, "prevent": [24, 35, 37, 40], "fact": [24, 50], "won": [24, 28, 35], "standard": [24, 58], "hit": [24, 46], "import": [24, 45, 46, 50, 69, 77], "promis": [24, 40, 47, 63], "explicitli": [24, 31, 35, 37, 40, 66], "forc": [24, 31, 40, 66], "garbag": [24, 35], "collect": [24, 26, 29, 35, 47, 52], "eight": 25, "awesom": [25, 72], "star": 25, "medium": 25, "blogspot": 25, "channel": 25, "discord": [25, 77], "retir": 25, "mail": 25, "great": 25, "thank": 25, "arm64": [25, 58, 60, 69], "v20": [25, 51, 60], "v11": [25, 51, 69], "169": [25, 60], "prefer": 25, "polyfil": [25, 68, 75, 77], "exposur": [25, 52], "interop": [25, 62, 75], "bigint": [25, 30, 37, 52], "date": [25, 30, 38, 52], "analysi": [25, 38], "javetsanit": 25, "groupid": [25, 31, 69], "artifactid": [25, 31, 69], "v8host": [25, 27, 35, 37, 38, 46, 53, 54, 55, 61, 63, 67, 70, 71], "getnodeinst": [25, 27, 37, 63, 67, 72], "createv8runtim": [25, 27, 38, 46, 61, 63, 67, 70, 71, 72], "println": [25, 38, 61, 63, 64, 65, 67, 70, 71], "getexecutor": [25, 26, 27, 29, 31, 38, 46, 48, 49, 50, 61, 63, 64, 65, 66, 67, 70, 71, 73], "executestr": [25, 26, 29, 31, 38, 49, 64, 65, 67, 73], "getv8inst": [25, 37, 38, 46, 61, 67, 70, 71, 72], "hivemq": 25, "apach": 25, "graalj": [25, 31], "nashorn": 25, "elegantli": [25, 61], "jsonnod": [25, 62, 75], "compromis": 25, "intro": 25, "tutori": 25, "convert": [25, 32, 43, 49, 53, 55, 56, 61, 62, 64, 75, 77], "todo": [25, 32], "list": [25, 28, 29, 31, 32, 49], "note": [25, 31, 37, 38, 49], "faq": 25, "javetproxyconvert": [26, 28, 54, 55, 61, 64, 77], "skip": [26, 28, 31, 54], "proxi": [26, 29, 55, 56, 61], "primit": [26, 27, 28, 29, 31, 40, 49, 52, 55, 56], "annoi": 26, "variabl": [26, 36, 38, 49, 55, 64, 65, 70], "accid": 26, "javetbridgeconvert": [26, 55], "ident": [26, 38, 49, 70], "setconvert": [26, 27, 31, 61, 64], "btrue": 26, "bfals": 26, "asserttru": [26, 31, 38, 46, 48, 49, 50], "executeobject": [26, 31, 64, 65], "assertfals": [26, 31, 38, 46, 48, 49], "assertequ": [26, 29, 31, 38, 46, 48, 49], "tov8valu": [26, 27, 61], "executeinteg": [26, 29, 31, 38, 46, 49, 67], "toprimit": 26, "12345": 26, "12346": 26, "intarrai": 26, "length": [26, 27, 29, 37], "assertarrayequ": [26, 31], "iter": [26, 59], "integerlist": 26, "arraylist": [26, 29, 65], "executevoid": [26, 27, 31, 38, 46, 49, 61, 63, 64, 65, 66, 70, 73], "longlist": 26, "unmodifiablelist": 26, "aslist": [26, 49], "1l": 26, "2l": 26, "stringifi": [26, 65], "implicit": [26, 77], "given": [26, 37], "give": [26, 28, 37, 46, 49], "ab": 26, "implicitli": [26, 55], "besid": [26, 49], "power": 27, "simpl": [27, 31, 35, 37, 38, 45, 49, 61, 63, 72], "about": [27, 36], "deal": [27, 29, 37, 49], "reflect": [27, 29, 31, 40, 49, 59], "tweak": 27, "pair": [27, 49], "public": [27, 29, 31, 35, 45, 49, 50, 56, 61, 63, 70, 73, 74], "class": [27, 29, 38, 45, 49, 61, 63, 70, 74], "null": [27, 29, 31, 38, 49, 50, 63, 70, 71], "getnam": [27, 29, 70, 74], "return": [27, 28, 29, 31, 35, 37, 38, 40, 46, 49, 50, 53, 61, 63, 64, 65, 70, 74], "void": [27, 29, 31, 45, 49, 50, 61, 63, 70, 73], "setnam": [27, 29, 70], "getvalu": [27, 29, 48, 49, 61, 70], "setvalu": [27, 29, 49, 70], "Then": 27, "gener": [27, 31, 37, 43, 49, 54, 61], "recurs": [27, 28, 54], "parent": [27, 40], "overrid": [27, 31, 35, 45, 49, 50, 61], "depth": [27, 28, 43, 54], "argument": [27, 29, 77], "circular": [27, 43, 54], "structur": [27, 43, 54, 61], "increment": [27, 61], "suppresswarn": 27, "uncheck": 27, "extend": [27, 31, 38, 49], "javetobjectconvert": [27, 28, 29, 54, 77], "method_prefix_get": 27, "method_prefix_i": 27, "protect": [27, 36, 45, 46, 74], "excluded_method": 27, "hashset": [27, 29, 49], "getmethod": [27, 49], "getparametercount": 27, "methodnam": [27, 43, 49], "startswith": 27, "v8valu": [27, 28, 50, 53, 54, 56, 61, 65, 71, 77], "int": [27, 29, 30, 31, 46, 49, 61, 63, 70], "throw": [27, 28, 31, 38, 46, 49, 50, 61, 63, 73], "javetexcept": [27, 49, 50, 61, 63, 73], "super": [27, 61], "isundefin": 27, "objectclass": 27, "getclass": 27, "v8valueobject": [27, 31, 37, 38, 49, 54, 56, 70, 73, 77], "createv8valueobject": [27, 37, 38, 49, 70], "canaccess": 27, "propertynam": 27, "contain": [27, 38, 40, 49], "substr": 27, "tolowercas": 27, "els": [27, 38, 49, 50, 61, 63, 69, 73, 77], "v8valuetemp": 27, "catch": [27, 46, 49, 50, 63, 71], "except": [27, 31, 36, 37, 38, 40, 45, 46, 49, 53, 55, 56, 61, 77], "printstacktrac": [27, 46, 63], "line": [27, 36, 49, 71], "testpojo": 27, "pojoarrai": 27, "tom": 27, "ceo": 27, "jerri": 27, "cfo": 27, "log": [27, 37, 40, 44, 49, 50, 63, 66, 70], "transpar": [27, 31, 49, 77], "autom": [27, 37], "bridg": [28, 55], "arrai": [28, 29, 31, 37, 48, 49, 52], "meet": [28, 38], "famou": 28, "topic": [28, 50], "lang": [28, 35], "nullpointerexcept": 28, "luckili": [28, 38], "inject": [28, 31, 35, 43, 49, 50, 54, 61, 77], "javetconverterconfig": [28, 54], "overridden": [28, 35], "differenti": 28, "introduc": [28, 37, 55, 77], "ijavetentityfunct": [28, 29], "ijavetentitymap": [28, 29], "setskipfunctioninobject": 28, "boolean": [28, 29, 30, 35], "setextractfunctionsourcecod": 28, "opportun": 28, "extract": 28, "ineffici": 28, "inconveni": [28, 35], "substanti": 28, "instead": [28, 36, 37, 38, 53, 58, 65, 77], "javetconverterexcept": 28, "maximum": 28, "reach": [28, 43], "cheap": 28, "unrealist": 28, "number": [28, 30, 37, 38], "stackoverflowerror": 28, "wors": 28, "written": 28, "block": [28, 36, 37, 49, 67], "stack": [28, 49], "overflow": 28, "attack": [28, 46], "drain": [28, 37], "tini": 28, "behavior": [28, 31, 37, 40, 49], "fanci": 28, "read": [28, 37, 43, 50], "setproxymapen": [28, 31], "wherea": [28, 37], "conveni": 28, "bi": [28, 65], "direction": [28, 65], "grain": 28, "worri": [28, 35, 38, 46, 63], "vice": 28, "versa": 28, "open": [29, 31, 40], "subclass": [29, 31, 40, 50], "int8arrai": [29, 37], "char": [29, 30, 49], "doubl": [29, 30, 37, 49], "float64arrai": [29, 37], "float": [29, 30, 37, 49], "float32arrai": [29, 37], "int32arrai": [29, 37], "int64arrai": 29, "short": [29, 30, 37, 49], "int16arrai": [29, 37], "stream": [29, 49, 54, 56], "javetentitysymbol": 29, "ijavetmapp": [29, 54], "hashmap": [29, 31, 65], "uint8arrai": [29, 37], "uint8clampedarrai": [29, 37], "uint16arrai": [29, 37], "uint32arrai": [29, 37], "bigint32arrai": 29, "bigint64arrai": [29, 37], "pojo": 29, "slow": [29, 39], "registercustomobject": [29, 54], "alien": 29, "match": [29, 31, 38, 64], "constructor": [29, 31, 55, 73], "signatur": [29, 43, 49], "frommap": 29, "tomap": 29, "touchabl": 29, "easier": 29, "customobject": 29, "integ": [29, 30, 31, 37, 48, 49, 63], "put": [29, 31, 40, 61, 65], "getter": [29, 31, 49, 54, 55, 70, 77], "setter": [29, 31, 49, 54, 70, 77], "snippet": [29, 37, 38], "below": [29, 49], "getconvert": 29, "ones": 29, "upon": 29, "registr": [29, 43, 77], "customfrommap": 29, "customtomap": 29, "regular": [29, 36], "v8customobject": 29, "getobject": [29, 31], "assertnotnul": [29, 31, 48], "pro": 29, "con": 29, "intrus": [29, 61], "carri": [29, 77], "inform": 29, "memor": 29, "complic": [29, 38], "relationship": 29, "javetprimitiveconvert": [30, 54, 56], "charact": 30, "biginteg": 30, "zoneddatetim": [30, 56, 57], "optionalint": 30, "optionaldoubl": 30, "optionallong": 30, "fall": 30, "rang": [30, 37], "whole": 31, "danger": 31, "touch": [31, 36], "tmp": 31, "executeboolean": 31, "isfil": 31, "isdirectori": 31, "canread": [31, 73], "canwrit": 31, "canexecut": 31, "lowmemorynotif": [31, 49, 50, 53, 61, 66, 70, 77], "getconfig": [31, 38, 72], "z": 31, "topath": 31, "tostr": [31, 38, 48, 49, 61, 64, 71, 73], "newpath": 31, "toobject": 31, "abc": [31, 35, 49, 64], "def": [31, 49, 63], "n": [31, 38, 49, 64], "d": [31, 38, 64], "instanceof": [31, 49, 50, 61], "matcher": [31, 64], "123": [31, 49, 64, 70, 73], "a123": 31, "smart": [31, 37], "javeterrortyp": 31, "assertthrow": 31, "javetexecutionexcept": [31, 38, 55], "field": 31, "should": [31, 46], "writabl": 31, "annot": [31, 49, 54], "autoclos": 31, "ijavetclos": [31, 54], "isassignablefrom": 31, "special": [31, 38, 49], "known": [31, 37], "lambda": [31, 49], "istringjoin": 31, "join": 31, "two": [31, 37], "stringjoin": 31, "hold": [31, 37, 50], "joiner": 31, "getjoin": 31, "setjoin": 31, "v8valuefunct": [31, 38, 49, 53, 54, 63, 73], "orphan": 31, "callabl": 31, "outofmemoryerror": 31, "similar": [31, 40, 66], "enhanc": [31, 49, 53, 54, 55, 56, 59], "istringutil": 31, "hello": [31, 63, 64, 66, 68, 75], "split": 31, "stringutil": 31, "util": 31, "getutil": 31, "setutil": 31, "str": [31, 49], "toarrai": [31, 65], "aussi": 31, "non": [31, 40, 49], "bytebuddi": [31, 57], "alreadi": [31, 43, 50], "referenc": [31, 37, 38], "buddi": 31, "12": [31, 55, 57, 58, 59], "groovi": 31, "javetreflectionobjectfactori": 31, "stai": [31, 35, 63, 77], "dynamicclass": 31, "ijavetanonym": [31, 49, 54], "setreflectionobjectfactori": 31, "getinst": [31, 35], "codestr": [31, 38, 52], "smartli": 31, "overload": 31, "vararg": [31, 49, 53, 56], "identifi": 31, "alter": 31, "v8allow": [31, 55], "bind": [31, 38, 50, 53, 65, 70, 77], "v8block": [31, 55], "ignor": [31, 37, 49, 53], "v8getter": [31, 55], "v8setter": [31, 55], "treat": [31, 35, 37], "allowonli": 31, "blockonli": 31, "alia": 31, "virtual": [31, 38, 56], "document": [35, 49, 54], "assum": [35, 38, 49], "reload": 35, "setlibraryreload": 35, "jsruntimetyp": [35, 38, 72, 74], "unloadlibrari": [35, 54], "restor": [35, 49], "gc": [35, 61, 66, 70], "prior": 35, "loadlibrari": [35, 54], "unstabl": 35, "risk": [35, 40], "temp": 35, "javetlibload": 35, "setlibloadinglisten": 35, "ijavetlibloadinglisten": [35, 55], "getlibpath": 35, "anywher": 35, "bypass": [35, 49], "mean": [35, 38, 45, 49], "isdeploi": 35, "must": [35, 49, 73], "less": 35, "islibinsystempath": 35, "mavin": 35, "plug": 35, "osgi": 35, "repeatedli": 35, "regardless": [35, 36, 40], "unsatisfiedlinkerror": 35, "issuppressingerror": [35, 55], "javetlibloadinglisten": [35, 55], "mechan": [35, 36, 77], "djavet": 35, "among": [36, 49, 59, 77], "unlock": [36, 61], "surround": 36, "v8locker": [36, 40, 52], "locker": 36, "getv8lock": 36, "nest": 36, "thrown": [36, 37, 40, 46, 49], "report": 36, "conflict": [36, 43], "slight": 36, "sensit": [36, 37, 40, 52, 77], "extrem": [36, 49], "50": 36, "granular": [36, 38], "concurr": 36, "scenario": [36, 37, 40, 52, 77], "maxim": [36, 40], "21": [36, 54, 69], "incompat": 36, "chao": 36, "sequenc": 36, "synchron": [36, 77], "newglobalref": 37, "javaobject": [37, 77], "until": 37, "deleteglobalref": 37, "across": 37, "raw": 37, "unless": [37, 39, 40, 77], "categor": 37, "within": 37, "persist": 37, "aw": 37, "borrow": [37, 49], "rule": [37, 49], "wrap": 37, "outsid": 37, "setweak": [37, 40], "determin": [37, 49, 54], "javetstandardconsoleinterceptor": [37, 66, 70], "creation": [37, 39, 66], "v8scope": [37, 40, 54], "setescap": 37, "getv8scop": 37, "binari": [37, 43, 58], "often": 37, "languag": [37, 49], "manipul": [37, 48], "content": [37, 50, 60], "dataview": 37, "specif": [37, 50], "format": [37, 43, 49], "nio": 37, "bytebuff": [37, 56], "consid": [37, 49, 61], "idl": 37, "equival": [37, 49], "128": 37, "complement": 37, "sign": 37, "int8_t": 37, "unsign": 37, "octet": 37, "uint8_t": 37, "clamp": 37, "32768": 37, "32767": 37, "int16_t": 37, "65535": 37, "uint16_t": 37, "2147483648": 37, "2147483647": 37, "int32_t": 37, "4294967295": 37, "uint32_t": 37, "38": 37, "1038": 37, "ieee": 37, "point": [37, 38], "signific": 37, "digit": 37, "234567": 37, "unrestrict": 37, "324": 37, "10308": 37, "64": [37, 54], "23456789012345": 37, "263": [37, 39], "int64_t": 37, "biguint64arrai": 37, "264": 37, "uint64_t": 37, "testv8valuetypedarrai": 37, "testv8valuedataview": 37, "frequenc": 37, "area": 37, "pace": 37, "zombi": 37, "cycl": 37, "notifi": [37, 61, 70], "space": 37, "v8notifi": 37, "setmemoryusagethresholdratio": [37, 53], "threshold": 37, "ratio": 37, "enablegcnotif": [37, 53], "ration": 37, "xms64m": 37, "xmx64m": 37, "pressur": [37, 77], "destroi": 37, "curv": 37, "smoother": 37, "exce": 37, "broadcast": 37, "schedul": [37, 55], "affect": 37, "worker": 37, "javetengineconfig": [37, 45, 53, 56, 74], "setautosendgcnotif": [37, 74], "light": 37, "weight": 37, "hint": [37, 49], "task": [37, 50, 53], "queue": [37, 50], "decis": 37, "millisecond": [37, 46, 63], "disregard": 37, "aforement": 37, "analyz": [37, 38], "getv8heapspacestatist": [37, 55], "getv8heapstatist": [37, 55], "getv8sharedmemorystatist": [37, 55], "javetenginepool": [38, 45, 53, 55, 66, 72, 74], "setjsruntimetyp": [38, 72, 74], "ijavetengin": [38, 46, 66, 72, 73], "getengin": [38, 46, 66, 72], "getv8runtim": [38, 46, 61, 66, 73], "workingdirectori": 38, "javetosutil": [38, 63, 73], "working_directori": [38, 63, 73], "node_modul": [38, 40, 63, 73], "getnodemodul": 38, "nodemodulemodul": 38, "setrequirerootdirectori": 38, "getlogg": [38, 45, 73], "loginfo": [38, 73], "23": [38, 53, 56, 57, 59, 69, 73], "34": [38, 73], "const": [38, 48, 49, 61, 63, 64, 65, 73], "decim": 38, "__dirnam": 38, "__filenam": 38, "scriptfil": 38, "scriptpath": 38, "scriptstr": 38, "iv8executor": [38, 57], "setresourcenam": 38, "resourcenam": 38, "setmodul": 38, "excit": 38, "potenti": [38, 54, 55], "piec": 38, "sqlite3": 38, "bother": 38, "electron": 38, "approach": [38, 49], "simpler": 38, "node_sqlite3": 38, "napi_create_error": 38, "patchelf": 38, "npm": [38, 63, 73], "node_module_fil": 38, "loadlibraryexw": 38, "unzip": 38, "somewher": 38, "replac": [38, 61], "voluntarili": 38, "compat": [38, 55], "major": [38, 52, 77], "go": [38, 51], "through": [38, 49], "pretti": 38, "backup": 38, "rebuilt": [38, 53], "dumpbin": 38, "win32": 38, "delai": 38, "ex": 38, "00000001": 38, "characterist": 38, "0000000180154a40": 38, "hmodul": 38, "0000000180154818": 38, "tabl": [38, 58], "000000018014f248": 38, "000000018014fa68": 38, "bound": 38, "0000000000000000": 38, "stamp": 38, "0000000180108724": 38, "424b": 38, "napi_create_funct": 38, "0000000180108ab5": 38, "4243": 38, "napi_create_buffer_copi": 38, "1801363d8": 38, "180166610": 38, "index": 38, "6096": 38, "napi_open_escapable_handle_scop": 38, "6072": 38, "napi_get_undefin": 38, "apart": 38, "swc": 38, "gyp": 38, "ppee": 38, "puppi": 38, "profession": 38, "pe": 38, "explor": 38, "cli": 38, "drag": 38, "directory_entry_delay_import": 38, "save": [38, 63], "resolut": [38, 59], "embedd": 38, "relai": [38, 55], "reachabl": 38, "javetbuiltinmoduleresolv": [38, 60], "setv8moduleresolv": 38, "existssync": 38, "getboolean": 38, "capabl": [38, 49, 61], "gain": 38, "box": 38, "order": [38, 48], "launch": [38, 40], "testfrommodul": 38, "assign": [38, 49, 54, 64], "v8modul": [38, 53, 57, 60], "compilemodul": 38, "containsmodul": 38, "getinteg": [38, 46], "heavi": 38, "v8modulereferr": 38, "equal": [38, 49, 52, 65, 71, 73], "compilev8modul": [38, 77], "cach": [38, 52, 56, 57], "propos": 38, "advantag": 38, "tradit": 38, "flexibl": 38, "record": 38, "createv8valuefunct": [38, 49], "createv8modul": [38, 60], "issourcetextmodul": [38, 60], "issyntheticmodul": [38, 60], "invokeinteg": 38, "reset": [39, 40], "751": 39, "032": 39, "65": 39, "410": 39, "143": 39, "363": 39, "51": 39, "647": 39, "458": 39, "846": 39, "968": 39, "253": 39, "508": 39, "748": 39, "660": 39, "slightli": 39, "mainli": 39, "older": 39, "dramat": [39, 49], "outperform": 39, "down": [39, 77], "emb": 39, "obtain": 40, "pass": [40, 54], "dangl": [40, 58], "ey": 40, "stage": 40, "prohibit": 40, "uncertain": 40, "acquir": [40, 43, 77], "malici": [40, 46], "eval": [40, 49], "vulner": 40, "impact": [40, 49], "unhandl": 40, "whose": 40, "awar": 40, "period": 42, "style": 42, "statist": [42, 55], "significantli": 43, "101": 43, "osnotsupport": 43, "102": 43, "librarynotfound": 43, "103": 43, "librarynotload": 43, "104": 43, "notsupport": 43, "105": 43, "failedtoreadpath": 43, "201": 43, "compilationfailur": 43, "301": 43, "executionfailur": 43, "302": 43, "executiontermin": 43, "termin": [43, 44], "continu": 43, "401": 43, "callbacksignatureparametersizemismatch": 43, "mismatch": 43, "paramet": [43, 49], "expectedparameters": 43, "actualparameters": 43, "402": 43, "callbacksignatureparametertypemismatch": 43, "expectedparametertyp": 43, "actualparametertyp": 43, "403": 43, "callbackinjectionfailur": 43, "404": 43, "callbackregistrationfailur": 43, "405": 43, "callbackmethodfailur": 43, "406": 43, "callbackunknownfailur": 43, "unknown": 43, "407": [43, 54], "callbackunregistrationfailur": 43, "unregistr": 43, "408": [43, 59], "callbacktypenotsupport": [43, 59], "callbacktyp": 43, "501": 43, "converterfailur": 43, "502": 43, "convertercircularstructur": 43, "max": 43, "503": [43, 54], "convertersymbolnotbuiltin": 43, "601": 43, "modulenameempti": 43, "empti": 43, "602": [43, 54], "modulenotfound": 43, "modulenam": 43, "603": [43, 54], "modulepermissiondeni": 43, "deni": 43, "701": 43, "lockacquisitionfailur": 43, "702": 43, "lockreleasefailur": 43, "703": 43, "lockconflictthreadidmismatch": 43, "lockedthreadid": 43, "currentthreadid": 43, "801": 43, "runtimealreadyclos": 43, "802": 43, "runtimealreadyregist": 43, "803": 43, "runtimenotregist": 43, "804": 43, "runtimeleakagedetect": 43, "805": [43, 54], "runtimeclosefailur": 43, "806": [43, 55], "runtimeoutofmemori": 43, "heapstatist": 43, "901": [43, 56], "enginenotavail": [43, 56], "hell": [45, 74], "3rd": [45, 49], "parti": [45, 49], "interfac": [45, 50, 77], "slf4j": 45, "org": [45, 69], "loggerfactori": 45, "myjavetlogg": [45, 74], "isdebugen": 45, "throwabl": [45, 71], "info": [45, 57], "isinfoen": 45, "iswarnen": 45, "javetlogg": 45, "testlogg": 45, "setjavetlogg": [45, 74], "ijavetengineguard": [46, 52], "ijavetenginepool": [46, 66, 74], "guard": 46, "getguard": 46, "10000": 46, "infinit": [46, 71], "javetterminatedexcept": 46, "mark": 46, "iscontinu": 46, "dead": 46, "afterward": [46, 50], "hang": 46, "till": 46, "timeout": [46, 50], "cancel": 46, "monitor": 46, "daemonthread": 46, "isinus": [46, 52], "timeunit": [46, 63], "sleep": [46, 63], "interruptedexcept": [46, 63], "terminateexecut": [46, 52, 77], "var": [46, 49, 63], "greater": 46, "javetengineguard": [46, 53], "interrupt": 46, "disableindebugmod": [46, 53], "enableindebugmod": [46, 53], "getlength": 48, "getsiz": 48, "getkei": 48, "getownpropertynam": 48, "getentri": 48, "foreach": [48, 52, 59], "consum": 48, "biconsum": 48, "weakmap": 48, "weakset": 48, "atomicinteg": 48, "v8valueinteg": [48, 49, 61], "getandincr": 48, "popinteg": 48, "preserv": 48, "v8valuestr": [48, 61], "getjsfunctiontyp": [49, 53], "invis": 49, "stori": 49, "closur": 49, "goal": 49, "iv8valueobject": [49, 52, 53, 54, 57, 59], "caller": [49, 50], "scan": 49, "input": [49, 61, 65, 71], "receiv": [49, 50, 54, 61], "functioncallbackreceiv": 49, "tricki": 49, "charm": 49, "generatearraywithconvert": 49, "intrud": 49, "untouch": 49, "situat": 49, "v8runtimesett": 49, "generatearraywithoutconvert": 49, "declar": [49, 74, 77], "annotationbasedcallbackreceiv": 49, "stringvalu": 49, "getstringvalu": 49, "setstringvalu": 49, "echo": 49, "mathadd": 49, "recogn": [49, 61], "v8valuearrai": 49, "createv8valuearrai": 49, "staticecho": 49, "setv8runtim": 49, "tojsonstr": 49, "testopt": 49, "optionalstr": 49, "teststream": 49, "filter": 49, "thisobjectrequir": [49, 54], "specifi": [49, 77], "thisobject": 49, "bodi": [49, 61, 63], "especi": [49, 66, 77], "simpli": [49, 61], "symboltyp": 49, "v8valuesymboltyp": 49, "v8bindingenabl": [49, 54], "disabledfunct": 49, "disabledproperti": 49, "isv8bindingen": 49, "arbitrarymethod": 49, "whether": [49, 54], "refactor": [49, 53, 54, 55, 56], "friendli": [49, 77], "javetreflectionutil": [49, 54], "getmethodnamefromlambda": [49, 54], "getmethodnamesetfromlambda": [49, 54], "firstli": 49, "disabledfunctionset": 49, "supplier": 49, "serializ": 49, "secondli": 49, "est": 49, "tr\u00e8": 49, "bien": 49, "unbind": [49, 54, 77], "unbindproperti": [49, 54, 59], "unbindfunct": [49, 54, 59], "ijavetanonymous1": 49, "testfunct": 49, "testproperti": 49, "ijavetanonymous2": 49, "javetentityfunct": [49, 54], "jsfunctiontyp": 49, "userdefin": 49, "semi": 49, "mockcallbackreceiv": 49, "blank": 49, "iscal": 49, "happi": 49, "mirror": 49, "anonym": 49, "getsourcecod": [49, 53], "setsourcecod": [49, 53], "sourcecod": 49, "existingsourcecod": 49, "startposit": 49, "endposit": 49, "getposit": 49, "newsourcecod": 49, "setposit": 49, "len": 49, "radic": 49, "rough": 49, "layout": 49, "remain": 49, "accordingli": 49, "invoc": 49, "pseudo": [49, 50, 63], "originalsourcecod": 49, "getjsscopetyp": 49, "isclass": 49, "indic": 49, "callvoid": [49, 63], "isfunct": 49, "incorrect": 49, "malform": 49, "technic": [49, 72], "keyword": 49, "discard": 49, "createv8valuestr": [49, 53], "toclon": [49, 57], "abov": 49, "intvalu": 49, "valueof": 49, "createv8valueinteg": [49, 61], "safeti": 49, "sentenc": [49, 77], "belong": 49, "prototyp": 49, "combin": 49, "func": 49, "callobject": 49, "callprimit": 49, "callasconstructor": [49, 52, 73], "itself": 49, "invokevoid": [49, 61], "invokeobject": [49, 64], "invokeprimit": 49, "despit": 49, "deficit": 49, "quot": 49, "getcontext": [49, 55], "setcontext": 49, "copyscopeinfofrom": [49, 57], "anoth": [49, 73], "setscriptsourc": [49, 57], "lexic": 49, "jsfunction": 49, "ecma": 49, "262": 49, "speak": 49, "parallel": 49, "slot": 49, "scope_info": 49, "describ": 49, "lookup": 49, "presenc": 49, "previou": 49, "scopeinfo": [49, 57], "hascontextextensionslot": 49, "search": 49, "purpos": 49, "henc": 49, "sloppi": 49, "inner": [49, 55], "fast": 49, "harmoni": 49, "scriptcontext": 49, "rather": 49, "functioncontext": 49, "gather": 49, "scriptcontextt": 49, "toler": 49, "natur": [49, 50], "strongli": [49, 61], "conform": 49, "throughout": 49, "samplewithoutthi": 49, "samplewiththi": 49, "excess": 49, "behav": 49, "redund": 49, "fill": 49, "review": [49, 50], "due": 50, "multi": [50, 66, 77], "friend": 50, "iv8valuepromis": [50, 57], "ownership": 50, "chart": 50, "v8valuepromis": [50, 53, 54], "icallback": 50, "oncatch": 50, "v8valueerror": 50, "onfulfil": 50, "fulfil": 50, "onreject": 50, "manner": [50, 77], "filecont": 50, "filepath": 50, "v8valuepromiseresolv": 50, "createv8valuepromis": 50, "getpromis": 50, "getfilecont": 50, "getfilepath": 50, "createv8valueundefin": 50, "print": [50, 65, 71], "rais": 50, "setpromiserejectcallback": 50, "ijavetpromiserejectcallback": 50, "unhandledreject": 50, "handi": 50, "mainstream": 51, "mainten": [51, 54], "v18": [51, 58, 59], "v10": [51, 60], "v16": [51, 56], "v9": [51, 69], "v0": [51, 52, 53, 54, 77], "v14": [51, 53, 54], "critic": 51, "bug": [51, 53, 55, 56, 57, 58, 59, 77], "patch": 51, "deprec": [52, 53], "v8valueweakmap": 52, "v8valueweakset": 52, "setfunct": [52, 53], "functionnam": 52, "strictequ": 52, "samevalu": 52, "iv8valu": [52, 53, 57], "getidentityhash": 52, "iv8valuerefer": 52, "isdead": 52, "view": 52, "2021": [52, 53, 54, 55, 77], "02": [52, 53, 56, 57], "renam": [53, 54, 57, 59], "ijavetconsum": 53, "ijavetuniconsum": 53, "ijavetuniindexedconsum": 53, "ijavetbiindexedconsum": 53, "v8functioncallback": [53, 59], "bindfunct": [53, 59], "bindproperti": [53, 59], "checkreturnvalu": 53, "re": [53, 63], "organ": 53, "iv8valuefunct": [53, 54, 57], "emit": 53, "univers": 53, "createv8valuedoubl": 53, "createv8valuezoneddatetim": 53, "javeterror": [53, 56], "gcbeforeengineclos": 53, "javetcallbackexcept": 53, "isnullorundefin": 53, "06": [53, 54, 56, 59], "257": 53, "idlenotificationdeadlin": 53, "disablegcnotif": 53, "autosendgcnotif": 53, "javetcallbackcontext": [53, 59], "javetpromiserejectcallback": 53, "allowev": 53, "v8script": [53, 57], "v8bindenabl": 54, "v8virtualescapablevalu": 54, "146": [54, 55], "09": [54, 55, 57, 59, 60], "hasinternaltyp": 54, "isgeneratorobject": 54, "isgeneratorfunct": 54, "isasyncfunct": 54, "v8flag": 54, "v8valuesharedarraybuff": 54, "unregistercustomobject": 54, "javadoc": 54, "08": [54, 56, 59], "31": 54, "345": 54, "v8valuebuiltinsymbol": 54, "getownpropertysymbol": 54, "v8valuebuiltinobject": [54, 60], "createv8valuesymbol": 54, "javetvirtualobject": 54, "javetuniversalproxyhandl": 54, "isclos": 54, "07": [54, 56, 58, 59], "29": 54, "staticclassen": 54, "ownkei": 54, "iv8valueproxi": 54, "v8valueproxi": 54, "gettarget": 54, "gethandl": 54, "isrevok": 54, "revok": 54, "createv8valueproxi": 54, "230": 54, "19": [54, 55], "getprototyp": 54, "setprototyp": 54, "01": [54, 55, 56, 57], "iv8moduleresolv": 54, "nodemoduleprocess": 54, "getvers": 54, "15": [54, 56, 57, 58, 60], "05": [54, 56, 59], "269": 54, "28": [54, 57, 60], "13": [55, 57, 58], "106": 55, "javetcompilationexcept": 55, "convent": 55, "agnost": 55, "getdetailedmessag": 55, "getstack": 55, "javetscriptingerror": 55, "adjust": 55, "capac": 55, "observ": 55, "v8runtimeobserveraveragecallbackcontextcount": 55, "v8runtimeobserveraveragereferencecount": 55, "v8runtimeobserveraveragev8modulecount": 55, "v8convert": 55, "algorithm": 55, "26": [55, 56], "180": 55, "javetoutofmemoryexcept": 55, "awai": 55, "busi": [55, 77], "haspendingexcept": 55, "haspendingmessag": 55, "hasscheduledexcept": 55, "promotescheduledexcept": 55, "reportpendingmessag": 55, "addgcepiloguecallback": 55, "addgcprologuecallback": 55, "removegcepiloguecallback": 55, "removegcprologuecallback": 55, "172": [55, 60], "v8intern": 55, "clean": 55, "methodhandl": 55, "cast": 55, "mistakenli": 55, "v8runtimeopt": 55, "noderuntimeopt": 55, "218": 56, "handler": [56, 63], "132": 56, "improp": 56, "waitforenginemaxretrycount": 56, "174": 56, "pend": [56, 63], "andoird": 56, "v8valuebiginteg": 56, "154": 56, "ispurgeeventloopbeforeclos": 56, "setpurgeeventloopbeforeclos": [56, 63], "124": [56, 70], "03": [56, 57, 58], "139": 56, "115": 56, "createv8valuearraybuff": 56, "177": 56, "r23b": 56, "abi": [56, 58, 69], "libgcc": 56, "libstdc": 56, "cento": 56, "2023": [57, 58, 59, 60], "226": 57, "verifynostrongbaseobject": 57, "ilisten": 57, "v8awaitmod": 57, "194": 57, "compilev8valuefunct": 57, "getcacheddata": 57, "iswrap": 57, "getargu": 57, "cacheddata": 57, "v8stringexecutor": 57, "168": 57, "revis": 57, "getscopeinfo": 57, "getownpropertynamestr": 57, "referencecopi": 57, "193": 57, "javetuniversalproxi": 57, "javetdynamicproxi": [57, 59], "javetdynamicobjectfactori": 57, "copycontextfrom": 57, "getscriptsourc": 57, "setsourcecodeopt": 57, "iscompil": 57, "candiscardcompil": 57, "discardcompil": 57, "244": 58, "214": 58, "277": 58, "439": 59, "189": 59, "executor": 59, "nativecontext": 59, "150": 59, "ijavetdirectproxyhandl": [59, 61], "v8virtualiter": 59, "javetproxysymboliterableconvert": 59, "183": 59, "receivecallback": 59, "iv8valuemap": 59, "iv8valuearrai": 59, "batchget": 59, "javetcallbacktyp": 59, "ijavetdirectcal": 59, "redesign": 59, "javetreflectionproxi": 59, "freez": 60, "leaf": 61, "measur": 61, "elaps": 61, "leverag": 61, "verbos": [61, 77], "testjavaflavor": 61, "round": 61, "isobject": 61, "isint": 61, "asint": 61, "wrapper": 61, "neat": 61, "pure": 61, "testjsflavor": 61, "redirect": [61, 66], "proxyget": 61, "proxyset": 61, "jsonnodewrapp": 61, "requirenonnul": 61, "getjsonnod": 61, "childjsonnod": 61, "v8valueboolean": 61, "propertykei": 61, "propertyvalu": 61, "objectnod": 61, "createv8valueboolean": 61, "testnam": 61, "starttim": 61, "currenttimemilli": 61, "stoptim": 61, "100_000": 61, "interoper": 61, "testscriptjavaflavor": 61, "testscriptjsflavor": 61, "objectmapp": 61, "readtre": 61, "jsonstr": 61, "amd": 61, "5950x": 61, "128gb": 61, "22h2": 61, "corretto": 61, "0_282": 61, "19464m": 61, "100000": 61, "5214m": 61, "370": 61, "underli": 61, "drawback": 61, "spent": 61, "door": 63, "hijack": 63, "seamlessli": 63, "parser": 63, "cooki": 63, "multer": 63, "app": 63, "req": 63, "8991": 63, "testexpress": 63, "codefil": 63, "tofil": 63, "atomicboolean": 63, "serverup": 63, "500": 63, "max_valu": 63, "1000": 63, "trick": 63, "awaitmod": 63, "drain_the_task_queu": 63, "pause_the_event_loop": 63, "there_are_more_tasks_in_task_queu": 63, "sleep_a_whil": 63, "resume_the_event_loop": 63, "runonc": 63, "there_are_no_more_task": 63, "timer": 63, "gracefulli": 63, "color": 64, "pink": 64, "awt": 64, "175": 64, "stringarrai": 65, "represent": 65, "stringlist": 65, "assert": 65, "mapx": 65, "mapi": 65, "spawn": 66, "databas": 66, "javetengin": [66, 72], "javetconsoleinterceptor": 66, "unregist": [66, 70], "necessari": 66, "famili": 69, "unix": 69, "operatingsystem": 69, "val": 69, "cpuarch": 69, "getproperti": 69, "ismacosx": 69, "islinux": 69, "aarch64": 69, "cent": 69, "mission": 69, "imposs": 69, "guess": 70, "increaseandget": 70, "suitabl": 70, "testintercept": 70, "delta": 70, "testinterceptor": 70, "76": 70, "200": 70, "scanner": 71, "nextlin": 71, "captur": 71, "err": 71, "getmessag": 71, "highlight": 72, "javetenginepoo": 72, "l": 72, "loadj": 73, "decimaljsfil": 73, "getabsolutepath": 73, "logerror": 73, "v8valuefunctiondecim": 73, "v8valueobjectdecim": 73, "45": 73, "hasownproperti": 73, "getstr": 73, "bigdecim": 73, "lack": [73, 77], "bean": 74, "propertysourc": 74, "classpath": 74, "configurationproperti": 74, "prefix": 74, "myjavetengineconfig": 74, "javetenginepoolnod": 74, "getjavetenginepoolnod": 74, "javetengineconfignod": 74, "setallowev": 74, "setdefaultengineguardtimeoutmilli": 74, "setengineguardcheckintervalmilli": 74, "setpooldaemoncheckintervalmilli": 74, "setpoolidletimeoutsecond": 74, "setpoolmins": 74, "setpoolmaxs": 74, "setpoolshutdowntimeoutsecond": 74, "setresetenginetimeoutsecond": 74, "javetenginepoolv8": 74, "getjavetenginepoolv8": 74, "javetengineconfigv8": 74, "frequent": 77, "ask": 77, "question": 77, "jan": 77, "publish": 77, "smooth": 77, "took": 77, "week": 77, "abandon": 77, "hierarchi": 77, "inconsist": 77, "repeat": 77, "attent": 77, "mental": 77, "role": 77, "inherit": 77, "liter": 77, "richer": 77, "v8valueprimit": 77, "v8data": 77, "consist": 77, "rich": 77, "pain": 77, "imper": 77, "never": 77, "deliv": 77, "elimin": 77, "rid": 77, "everywher": 77, "hotfix": 77, "usag": 77, "extra": 77, "shut": 77, "success": 77}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"build": [0, 1, 2, 9], "javet": [0, 1, 2, 4, 6, 7, 12, 17, 22, 25, 35, 36, 38, 39, 55, 66, 67, 71, 77], "environ": [0, 2, 18, 35], "linux": [0, 1, 2, 9, 17, 38, 69], "maco": 0, "window": [0, 1, 2, 9, 38, 69], "android": [0, 1, 2, 55, 69], "variabl": [0, 35], "v8": [0, 1, 4, 14, 37, 38, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 67, 72, 73, 77], "featur": [0, 25, 31], "flag": 0, "from": [1, 12, 29, 30, 35, 37, 77], "scratch": 1, "prepar": [1, 26, 31, 64], "arm64": [1, 55], "x86_64": [1, 54], "mac": [1, 54, 55, 69], "o": [1, 54, 55, 69], "why": [1, 9, 16, 24, 43, 49, 77], "patch": [1, 38], "node": [1, 4, 8, 16, 24, 38, 40, 53, 55, 57, 63, 67, 72, 73, 77], "j": [1, 4, 8, 16, 24, 38, 40, 53, 55, 57, 61, 63, 67, 72, 73, 77], "jni": 1, "librari": [1, 20, 35, 55], "docker": 2, "hub": 2, "github": 2, "express": 2, "full": 2, "multi": [2, 4, 54], "stage": 2, "all": 2, "one": 2, "debug": [3, 22, 46, 52], "chrome": [3, 22], "develop": [3, 5, 8, 13], "tool": [3, 8], "cdt": 3, "shell": [3, 71], "1": [3, 36, 37, 45, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 67], "run": 3, "2": [3, 36, 37, 45, 49, 52, 53, 54, 55, 56, 57, 58, 59, 61, 63], "script": 3, "3": [3, 8, 37, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63], "open": 3, "4": [3, 52, 53, 54, 55, 56, 57, 59], "usual": 3, "intern": [3, 38], "handshak": 3, "custom": [3, 27, 29, 31, 35, 55], "design": [4, 27], "architectur": 4, "primit": [4, 30, 53, 77], "refer": [4, 32, 33, 37], "type": [4, 49, 77], "mode": [4, 14, 16, 31, 36, 38, 46, 67, 72, 73], "v": [4, 49], "modul": [4, 38, 53, 54, 77], "requir": 4, "import": [4, 38, 49], "virtual": [4, 36], "engin": [4, 40, 46, 52, 66], "pool": [4, 40, 46, 66, 72], "isol": 4, "context": [4, 49], "intercept": [4, 12, 49, 53, 70], "cross": 4, "platform": 4, "process": [4, 54], "safeti": [4, 28, 36], "memori": [4, 37], "leak": 4, "detect": 4, "perform": [6, 36, 39], "test": [7, 12, 61, 70], "jdk": 8, "intellij": 8, "gradl": [8, 25, 69], "maven": [8, 9, 25, 69], "option": [8, 37], "visual": 8, "studio": 8, "commun": 8, "2022": 8, "python": 8, "8": [8, 53, 54, 56, 57, 60], "histori": 9, "j2v8": [9, 77], "issu": 9, "latest": 9, "version": 9, "onli": 9, "autom": 9, "system": 9, "deploi": [9, 35], "repositori": 9, "background": [10, 24], "what": [11, 36, 49, 63], "i": [11, 16, 22, 49, 63], "motiv": [11, 66], "how": [12, 26, 29, 31, 37, 46, 49, 63], "think": 12, "v8runtim": [12, 37, 77], "v8valueglobalobject": 12, "executor": 12, "execut": 12, "declar": [12, 53], "function": [12, 28, 31, 49, 53, 54], "properti": [12, 49, 53, 54], "learn": 12, "unit": 12, "where": [14, 15], "ar": [14, 15], "es6": [14, 77], "api": [14, 33], "exampl": [15, 38, 50], "inspector": 16, "disabl": [16, 49], "can": [17, 21, 22, 28, 35, 49], "support": [17, 21], "legaci": 17, "faq": 19, "A": 20, "dynam": [20, 31, 38], "link": 20, "dll": 20, "initi": 20, "routin": 20, "fail": 20, "i18n": 21, "devtool": 22, "troubleshoot": [23, 44], "crash": 24, "when": [24, 28], "being": 24, "close": [24, 63], "root": 24, "caus": 24, "solut": 24, "event": [24, 53], "unhandledreject": 24, "noderuntim": 24, "await": [24, 37], "lowmemorynotif": [24, 37], "major": 25, "quick": 25, "start": 25, "depend": [25, 69], "kotlin": [25, 69], "dsl": [25, 69], "groovi": [25, 69], "hello": [25, 67], "sponsor": 25, "licens": 25, "blog": 25, "document": 25, "bridg": 26, "convert": [26, 27, 28, 29, 30, 31, 54, 65], "usag": [26, 29, 31, 37, 48, 66, 72], "boolean": [26, 49], "int": 26, "arrai": [26, 65], "integ": 26, "list": [26, 42, 65], "long": [26, 37], "unmodifi": 26, "string": [26, 49], "cast": 26, "java": [26, 29, 30, 49, 54, 61, 64], "object": [26, 27, 28, 29, 31, 49, 65], "javascript": [26, 29, 30, 49, 63, 64], "pojo": 27, "defin": [27, 49], "creat": 27, "pojoconvert": 27, "readi": 27, "go": 27, "comparison": [28, 36, 49], "insid": 28, "bind": [28, 49], "via": 28, "nativ": [28, 35, 38, 53], "proxi": [28, 31, 54], "null": 28, "circular": 28, "structur": 28, "doe": [28, 29, 31, 36], "config": 28, "take": [28, 35], "effect": 28, "built": [28, 38], "ignor": 28, "regist": [29, 50], "enhanc": 29, "highlight": [29, 39], "It": 29, "work": [29, 31], "instanc": 31, "file": [31, 35], "map": [31, 49, 65], "path": 31, "static": [31, 64], "stringbuild": [31, 64], "pattern": [31, 64], "enum": [31, 64], "interfac": [31, 54], "anonym": [31, 54], "class": [31, 64], "v8convert": 31, "v8properti": [31, 70], "name": 31, "v8function": [31, 70, 77], "javetproxyconvert": 31, "resourc": [34, 37, 40, 49], "manag": [34, 37, 40, 49], "load": [35, 38, 55], "unload": 35, "On": [35, 38], "demand": [35, 38], "locat": 35, "deploy": 35, "skip": 35, "alreadi": 35, "anoth": 35, "classload": [35, 54], "suppress": 35, "lib": 35, "listen": 35, "remov": 35, "jar": 35, "know": 36, "lock": 36, "mean": 36, "implicit": 36, "explicit": 36, "thread": [36, 40, 63], "coroutin": 36, "challeng": 37, "jvm": 37, "gc": [37, 53], "c": 37, "runtim": 37, "recommend": 37, "automat": [37, 46, 49], "try": 37, "weak": 37, "escap": 37, "without": 37, "altern": 37, "arraybuff": 37, "passiv": 37, "aggress": 37, "manual": [37, 38, 46, 49], "idlenotificationdeadlin": 37, "deadlineinmilli": 37, "statist": 37, "modular": 38, "gap": 38, "between": 38, "deal": 38, "elf": 38, "rebuild": 38, "pre": 38, "synthet": 38, "result": 39, "best": 40, "practic": 40, "secur": 40, "tip": [41, 49], "todo": 42, "error": [43, 53], "code": [43, 49, 53], "backward": 43, "compat": [43, 69], "log": 45, "step": [45, 63], "implement": 45, "ijavetlogg": 45, "inject": [45, 64, 74], "logger": 45, "termin": 46, "about": [46, 49], "valu": [47, 49], "collect": 48, "v8valuearrai": 48, "v8valueset": 48, "v8valuemap": 48, "registr": 49, "convers": [49, 53, 77], "thi": 49, "pass": 49, "symbol": 49, "unregist": 49, "both": 49, "One": 49, "bindfunct": 49, "functionnam": 49, "javetcallbackcontext": 49, "set": 49, "kei": 49, "v8valu": 49, "codestr": 49, "mismatch": 49, "summari": 49, "chang": 49, "user": 49, "fly": 49, "sourc": [49, 53], "call": 49, "invok": 49, "scope": [49, 54], "info": 49, "avoid": 49, "argument": 49, "handl": 49, "count": 49, "promis": [50, 54], "resolv": [50, 54], "lifecycl": 50, "callback": 50, "f": 50, "readfileasync": 50, "unhandl": 50, "reject": 50, "releas": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], "note": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], "0": [52, 53, 54, 55, 56, 57, 58, 59, 60], "7": [52, 53, 54, 55, 56, 57, 59], "x": [52, 53, 54, 55, 56, 57, 58, 59, 60], "live": 52, "locker": 52, "guard": 52, "bug": 52, "fix": 52, "birth": 52, "9": [52, 53, 54, 55, 56, 57, 60], "10": [53, 54, 57], "index": 53, "foreach": 53, "hotfix": 53, "6": [53, 54, 55, 56, 59], "loop": 53, "5": [53, 54, 55, 56, 59], "v9": [53, 54, 55, 56], "first": [53, 55], "time": [53, 55], "14": 54, "13": 54, "12": 54, "privat": 54, "11": 54, "polyfil": [54, 73], "empow": 54, "v2": 54, "v1": 54, "safe": 54, "core": 55, "abi": 55, "21": 55, "v16": 55, "v10": [56, 57], "v11": [57, 58, 59, 60], "v18": 57, "expos": 61, "jsonnod": 61, "approach": 61, "flavor": 61, "direct": 61, "exposur": 61, "wrap": 61, "conclus": 61, "advanc": 62, "interact": 63, "That": 63, "possibl": 63, "server": 63, "worker": 63, "main": 63, "If": 63, "hang": 63, "dure": 63, "interop": 64, "an": 64, "goal": 66, "print": 67, "basic": 68, "instal": 69, "sampl": 70, "co": 72, "exist": 72, "v8host": 72, "decim": 73, "spring": 74, "integr": 74, "configur": 74, "tutori": 75, "migrat": [76, 77], "guid": [76, 77], "registerjavamethod": 77, "v8locker": 77, "bless": 77}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Build Javet": [[0, "build-javet"], [1, "build-javet"], [1, "id1"]], "Build Environment": [[0, "build-environment"], [2, "build-environment"]], "Linux Environment": [[0, "linux-environment"], [2, "linux-environment"]], "MacOS Environment": [[0, "macos-environment"]], "Windows Environment": [[0, "windows-environment"], [2, "windows-environment"]], "Android Environment": [[0, "android-environment"]], "Environment Variables": [[0, "environment-variables"]], "V8 Feature Flags": [[0, "v8-feature-flags"]], "Build Javet from Scratch": [[1, "build-javet-from-scratch"]], "Build V8": [[1, "build-v8"]], "Prepare V8": [[1, "prepare-v8"]], "Build V8 for Linux arm64": [[1, "build-v8-for-linux-arm64"]], "Build V8 for Linux x86_64": [[1, "build-v8-for-linux-x86-64"]], "Build V8 for Mac OS arm64": [[1, "build-v8-for-mac-os-arm64"]], "Build V8 for Mac OS x86_64": [[1, "build-v8-for-mac-os-x86-64"]], "Build V8 for Windows": [[1, "build-v8-for-windows"]], "Build V8 for Android": [[1, "build-v8-for-android"]], "Why Patching V8?": [[1, "why-patching-v8"]], "Build Node.js": [[1, "build-node-js"]], "Prepare Node.js": [[1, "prepare-node-js"]], "Build Node.js on Linux": [[1, "build-node-js-on-linux"]], "Why Patching Node.js?": [[1, "why-patching-node-js"]], "Build Node.js on Mac OS": [[1, "build-node-js-on-mac-os"]], "Build Node.js on Windows": [[1, "build-node-js-on-windows"]], "Build Javet JNI Library for Android": [[1, "build-javet-jni-library-for-android"]], "Build Javet for Linux, Mac OS and Windows": [[1, "build-javet-for-linux-mac-os-and-windows"]], "Build Javet for Android": [[1, "build-javet-for-android"]], "Build Javet with Docker": [[2, "build-javet-with-docker"]], "Docker Hub and Github": [[2, "docker-hub-and-github"]], "Build Javet for Linux on Linux or Windows": [[2, "build-javet-for-linux-on-linux-or-windows"]], "Express Build": [[2, "express-build"]], "Full Build - Multi-staged": [[2, "full-build-multi-staged"]], "Full Build - All-in-one": [[2, "full-build-all-in-one"]], "Build Javet for Windows on Windows": [[2, "build-javet-for-windows-on-windows"]], "Build Javet for Android on Linux or Windows": [[2, "build-javet-for-android-on-linux-or-windows"]], "Debug with Chrome Developer Tools": [[3, "debug-with-chrome-developer-tools"]], "CDT Shell": [[3, "cdt-shell"]], "1. Run CDT Shell": [[3, "run-cdt-shell"]], "2. Run Script in CDT Shell": [[3, "run-script-in-cdt-shell"]], "3. Open CDT": [[3, "open-cdt"]], "4. Debug as Usual": [[3, "debug-as-usual"]], "Chrome Developer Tools Internals": [[3, "chrome-developer-tools-internals"]], "Handshake": [[3, "handshake"]], "Customization": [[3, "customization"]], "Javet Design": [[4, "javet-design"]], "Architecture": [[4, "architecture"]], "Primitive and Reference Types in Javet": [[4, "primitive-and-reference-types-in-javet"]], "Node.js Mode vs. V8 Mode": [[4, "node-js-mode-vs-v8-mode"]], "Module": [[4, "module"]], "require() vs. import()": [[4, "require-vs-import"]], "Module Virtualization": [[4, "module-virtualization"]], "Engine Pool": [[4, "engine-pool"]], "V8 Isolate and Context in Javet": [[4, "v8-isolate-and-context-in-javet"]], "Javet Engine Pool": [[4, "javet-engine-pool"], [66, "javet-engine-pool"]], "Interception": [[4, "interception"], [70, "interception"]], "Cross-platform": [[4, "cross-platform"]], "Multi-process Safety": [[4, "multi-process-safety"]], "Memory Leak Detection": [[4, "memory-leak-detection"]], "Development": [[5, "development"], [13, "development"]], "Javet Performance": [[6, "javet-performance"], [39, "javet-performance"]], "Test Javet": [[7, "test-javet"]], "Development Tools": [[8, "development-tools"]], "JDK": [[8, "jdk"]], "IntelliJ": [[8, "intellij"]], "Gradle": [[8, "gradle"]], "Node.js": [[8, "node-js"], [40, "node-js"]], "Maven (Optional)": [[8, "maven-optional"]], "Visual Studio Community 2022 (Optional)": [[8, "visual-studio-community-2022-optional"]], "Python 3.8+ (Optional)": [[8, "python-3-8-optional"]], "History with J2V8": [[9, "history-with-j2v8"]], "J2V8 Issues": [[9, "j2v8-issues"]], "J2V8 Latest Version": [[9, "j2v8-latest-version"]], "Why Windows and Linux only?": [[9, "why-windows-and-linux-only"]], "Why not Automate the J2V8 Build System?": [[9, "why-not-automate-the-j2v8-build-system"]], "Why not Deploy J2V8 to Maven Repository?": [[9, "why-not-deploy-j2v8-to-maven-repository"]], "Background": [[10, "background"], [24, "background"]], "What is the Motivation?": [[11, "what-is-the-motivation"]], "How to Think in Javet?": [[12, "how-to-think-in-javet"]], "V8Runtime and V8ValueGlobalObject": [[12, "v8runtime-and-v8valueglobalobject"]], "V8Runtime": [[12, "v8runtime"]], "V8ValueGlobalObject": [[12, "v8valueglobalobject"]], "Executor and Execute": [[12, "executor-and-execute"]], "Declarative Function and Property Interception": [[12, "declarative-function-and-property-interception"]], "Learn from Unit Test": [[12, "learn-from-unit-test"]], "Where are ES6 API in V8 Mode?": [[14, "where-are-es6-api-in-v8-mode"]], "Where are the Examples?": [[15, "where-are-the-examples"]], "Why is the Inspector Disabled in Node.js Mode?": [[16, "why-is-the-inspector-disabled-in-node-js-mode"]], "Can Javet Support Legacy Linux?": [[17, "can-javet-support-legacy-linux"]], "Environment": [[18, "environment"]], "FAQ": [[19, "faq"]], "A dynamic link library (DLL) initialization routine failed": [[20, "a-dynamic-link-library-dll-initialization-routine-failed"]], "Can i18n be Supported?": [[21, "can-i18n-be-supported"]], "Can I Debug Javet in Chrome DevTools?": [[22, "can-i-debug-javet-in-chrome-devtools"]], "Troubleshooting": [[23, "troubleshooting"], [44, "troubleshooting"]], "Why Node.js Crashes When being Closed?": [[24, "why-node-js-crashes-when-being-closed"]], "Root Cause": [[24, "root-cause"]], "Solution": [[24, "solution"]], "Event unhandledRejection": [[24, "event-unhandledrejection"]], "NodeRuntime.await()": [[24, "noderuntime-await"]], "NodeRuntime.lowMemoryNotification()": [[24, "noderuntime-lowmemorynotification"]], "Javet": [[25, "javet"]], "Major Features": [[25, "major-features"]], "Quick Start": [[25, "quick-start"]], "Dependency": [[25, "dependency"], [69, "dependency"]], "Maven": [[25, "maven"], [69, "maven"]], "Gradle Kotlin DSL": [[25, "gradle-kotlin-dsl"], [69, "gradle-kotlin-dsl"]], "Gradle Groovy DSL": [[25, "gradle-groovy-dsl"], [69, "gradle-groovy-dsl"]], "Hello Javet": [[25, "hello-javet"], [67, "hello-javet"]], "Sponsors": [[25, "sponsors"]], "License": [[25, "license"]], "Blog": [[25, "blog"]], "Documents": [[25, "documents"]], "Bridge Converter": [[26, "bridge-converter"]], "Usage": [[26, "usage"], [29, "usage"], [31, "usage"], [48, "usage"], [66, "usage"], [72, "usage"]], "Preparation": [[26, "preparation"], [31, "preparation"], [64, "preparation"]], "Boolean": [[26, "boolean"]], "int": [[26, "int"]], "int Array": [[26, "int-array"]], "Integer List": [[26, "integer-list"]], "Long Unmodifiable List": [[26, "long-unmodifiable-list"]], "String Array": [[26, "string-array"]], "How to Cast Java Objects to JavaScript Objects?": [[26, "how-to-cast-java-objects-to-javascript-objects"]], "Custom Converter": [[27, "custom-converter"]], "Design a POJO Converter": [[27, "design-a-pojo-converter"]], "Define POJO Object": [[27, "define-pojo-object"]], "Create PojoConverter": [[27, "create-pojoconverter"]], "Ready! Go!": [[27, "ready-go"]], "Converters": [[28, "converters"]], "Comparisons": [[28, "comparisons"], [36, "comparisons"], [49, "comparisons"]], "Inside Converters": [[28, "inside-converters"]], "Binding via Native": [[28, "binding-via-native"]], "Binding via Proxy": [[28, "binding-via-proxy"]], "Null Safety": [[28, "null-safety"]], "Functions and Objects": [[28, "functions-and-objects"]], "Circular Structure": [[28, "circular-structure"]], "When does the Config Take Effect?": [[28, "when-does-the-config-take-effect"]], "Can Built-in Converter be Ignored?": [[28, "can-built-in-converter-be-ignored"]], "Object Converter": [[29, "object-converter"], [65, "object-converter"]], "From Java to JavaScript": [[29, "from-java-to-javascript"], [30, "from-java-to-javascript"]], "From JavaScript to Java": [[29, "from-javascript-to-java"], [30, "from-javascript-to-java"]], "Register Custom Objects": [[29, "register-custom-objects"]], "Enhance the Custom Object": [[29, "enhance-the-custom-object"]], "Register the Custom Object": [[29, "register-the-custom-object"]], "Highlights": [[29, "highlights"], [39, "highlights"]], "How does It Work?": [[29, "how-does-it-work"]], "Primitive Converter": [[30, "primitive-converter"]], "Proxy Converter": [[31, "proxy-converter"]], "Instance: File": [[31, "instance-file"]], "Instance: Map": [[31, "instance-map"]], "Instance: Path": [[31, "instance-path"]], "Static: StringBuilder": [[31, "static-stringbuilder"]], "Static: Pattern": [[31, "static-pattern"]], "Static: Enum": [[31, "static-enum"]], "Static: Interface": [[31, "static-interface"]], "Dynamic: Anonymous Function": [[31, "dynamic-anonymous-function"]], "Dynamic: Anonymous Object for Interface": [[31, "dynamic-anonymous-object-for-interface"]], "Dynamic: Anonymous Object for Class": [[31, "dynamic-anonymous-object-for-class"]], "Features": [[31, "features"]], "@V8Convert::mode": [[31, "v8convert-mode"]], "@V8Property::name": [[31, "v8property-name"]], "@V8Function::name": [[31, "v8function-name"]], "How does JavetProxyConverter Work?": [[31, "how-does-javetproxyconverter-work"]], "How to Customize JavetProxyConverter?": [[31, "how-to-customize-javetproxyconverter"]], "Reference": [[32, "reference"]], "API Reference": [[33, "api-reference"]], "Resource Management": [[34, "resource-management"], [40, "resource-management"], [49, "resource-management"]], "Load and Unload": [[35, "load-and-unload"]], "Can Javet Native Library be Loaded or Unloaded On-demand?": [[35, "can-javet-native-library-be-loaded-or-unloaded-on-demand"]], "Unload": [[35, "unload"]], "Load": [[35, "load"]], "Can Javet Native Library be Deployed to a Custom Location?": [[35, "can-javet-native-library-be-deployed-to-a-custom-location"]], "Can Javet Native Library Deployment be Skipped?": [[35, "can-javet-native-library-deployment-be-skipped"]], "Can already loaded in another classloader be Suppressed?": [[35, "can-already-loaded-in-another-classloader-be-suppressed"]], "Can Javet Lib Loading Listener Take Environment Variables?": [[35, "can-javet-lib-loading-listener-take-environment-variables"]], "Can Javet Libraries be Removed from the Jar File?": [[35, "can-javet-libraries-be-removed-from-the-jar-file"]], "Know the Lock": [[36, "know-the-lock"]], "What does Lock Mean in Javet?": [[36, "what-does-lock-mean-in-javet"]], "1. Implicit Mode": [[36, "implicit-mode"]], "2. Explicit Mode": [[36, "explicit-mode"]], "Performance": [[36, "performance"]], "Thread-safety": [[36, "thread-safety"]], "Coroutines or Virtual Threads": [[36, "coroutines-or-virtual-threads"]], "Memory Management": [[37, "memory-management"]], "3 Challenges in Memory Management": [[37, "challenges-in-memory-management"]], "JVM GC": [[37, "jvm-gc"]], "C++ Runtime": [[37, "c-runtime"]], "V8 GC": [[37, "v8-gc"]], "Recommended Options": [[37, "recommended-options"]], "Automatic Management with try-with-resource": [[37, "automatic-management-with-try-with-resource"]], "Automatically Manage with Weak Reference": [[37, "automatically-manage-with-weak-reference"]], "How to Escape from try-with-resource?": [[37, "how-to-escape-from-try-with-resource"]], "Usage 1 without V8 Runtime": [[37, "usage-1-without-v8-runtime"]], "Usage 2 with V8 Runtime": [[37, "usage-2-with-v8-runtime"]], "Alternative Option: ArrayBuffer": [[37, "alternative-option-arraybuffer"]], "GC": [[37, "gc"]], "Automatic GC": [[37, "automatic-gc"]], "Passive GC": [[37, "passive-gc"]], "Aggressive GC": [[37, "aggressive-gc"]], "Manual GC": [[37, "manual-gc"]], "V8Runtime.await()": [[37, "v8runtime-await"]], "V8Runtime.idleNotificationDeadline(long deadlineInMillis)": [[37, "v8runtime-idlenotificationdeadline-long-deadlineinmillis"]], "V8Runtime.lowMemoryNotification()": [[37, "v8runtime-lowmemorynotification"]], "Statistics": [[37, "statistics"]], "Modularization": [[38, "modularization"]], "Node.js Mode": [[38, "node-js-mode"], [73, "node-js-mode"]], "Example": [[38, "example"]], "Gaps between Javet Node.js Mode and Native Node.js": [[38, "gaps-between-javet-node-js-mode-and-native-node-js"]], "Deal with Native Modules": [[38, "deal-with-native-modules"]], "Patch ELF Native Modules on Linux": [[38, "patch-elf-native-modules-on-linux"]], "Rebuild Native Modules on Windows": [[38, "rebuild-native-modules-on-windows"]], "Manual Patch Native Modules on Windows": [[38, "manual-patch-native-modules-on-windows"]], "Dynamically Import Built-in Modules": [[38, "dynamically-import-built-in-modules"]], "V8 Mode": [[38, "v8-mode"], [73, "v8-mode"]], "Pre-load": [[38, "pre-load"]], "On-demand": [[38, "on-demand"]], "Synthetic Module": [[38, "synthetic-module"]], "Internals": [[38, "internals"]], "Result": [[39, "result"]], "Best Practices": [[40, "best-practices"]], "Thread, Engine and Pool": [[40, "thread-engine-and-pool"]], "Security": [[40, "security"]], "Tips": [[41, "tips"], [49, "tips"]], "TODO List": [[42, "todo-list"]], "Error Codes": [[43, "error-codes"]], "Why Error Codes?": [[43, "why-error-codes"]], "Backward Compatibility": [[43, "backward-compatibility"]], "Logging": [[45, "logging"]], "Step 1: Implement IJavetLogger": [[45, "step-1-implement-ijavetlogger"]], "Step 2: Inject the Logger": [[45, "step-2-inject-the-logger"]], "Termination": [[46, "termination"]], "Automatic Termination with Pool and Engine": [[46, "automatic-termination-with-pool-and-engine"]], "Manual Termination": [[46, "manual-termination"]], "How about Debug Mode?": [[46, "how-about-debug-mode"]], "V8 Values": [[47, "v8-values"]], "V8 Collection": [[48, "v8-collection"]], "Collection in V8": [[48, "collection-in-v8"]], "V8ValueArray": [[48, "v8valuearray"]], "V8ValueSet": [[48, "v8valueset"]], "V8ValueMap": [[48, "v8valuemap"]], "V8 Function": [[49, "v8-function"]], "Function Types": [[49, "function-types"]], "Function Interception": [[49, "function-interception"]], "Automatic Registration": [[49, "automatic-registration"]], "bind()": [[49, "bind"]], "How about Object Type Conversion?": [[49, "how-about-object-type-conversion"]], "Can this be Passed in?": [[49, "can-this-be-passed-in"]], "Can Symbol Properties be Intercepted?": [[49, "can-symbol-properties-be-intercepted"]], "How to Disable Properties or Functions?": [[49, "how-to-disable-properties-or-functions"]], "How to Unregister Properties or Functions?": [[49, "how-to-unregister-properties-or-functions"]], "Can Both JavaScript Function and Property Map to One Java Function?": [[49, "can-both-javascript-function-and-property-map-to-one-java-function"]], "Can 2 Java Functions Map to One JavaScript Function and Property?": [[49, "can-2-java-functions-map-to-one-javascript-function-and-property"]], "Manual Registration": [[49, "manual-registration"]], "boolean bindFunction(String functionName, JavetCallbackContext javetCallbackContext)": [[49, "boolean-bindfunction-string-functionname-javetcallbackcontext-javetcallbackcontext"]], "boolean set(String key, V8Value value)": [[49, "boolean-set-string-key-v8value-value"]], "boolean bindFunction(String functionName, String codeString)": [[49, "boolean-bindfunction-string-functionname-string-codestring"]], "Type Mismatch": [[49, "type-mismatch"]], "Summary": [[49, "summary"]], "Change a User Defined JavaScript Function on the Fly": [[49, "change-a-user-defined-javascript-function-on-the-fly"]], "Why is Changing a User Defined JavaScript Function Important?": [[49, "why-is-changing-a-user-defined-javascript-function-important"]], "How to Change a User Defined JavaScript Function on the Fly?": [[49, "how-to-change-a-user-defined-javascript-function-on-the-fly"]], "What is the Source Code of a Function in V8?": [[49, "what-is-the-source-code-of-a-function-in-v8"]], "Automatic Type Conversion": [[49, "automatic-type-conversion"]], "Call vs. Invoke": [[49, "call-vs-invoke"]], "Call": [[49, "call"]], "Invoke": [[49, "invoke"]], "How about Bind?": [[49, "how-about-bind"]], "Context and Scope Info": [[49, "context-and-scope-info"]], "How to Avoid Argument Type Mismatches?": [[49, "how-to-avoid-argument-type-mismatches"]], "How to Handle Argument Count Mismatches?": [[49, "how-to-handle-argument-count-mismatches"]], "V8 Promise": [[50, "v8-promise"]], "Promise and Resolver": [[50, "promise-and-resolver"]], "Lifecycle": [[50, "lifecycle"]], "Register a Callback": [[50, "register-a-callback"]], "Example fs.readFileAsync()": [[50, "example-fs-readfileasync"]], "Unhandled Rejection": [[50, "unhandled-rejection"]], "Release Notes": [[51, "release-notes"]], "Release Notes 0.7.x": [[52, "release-notes-0-7-x"]], "0.7.4 Live Debug": [[52, "live-debug"]], "0.7.3 Locker": [[52, "locker"]], "0.7.2 Engine Guard": [[52, "engine-guard"]], "0.7.1 Bug Fixes": [[52, "bug-fixes"]], "0.7.0 Birth with V8 v8.9": [[52, "birth-with-v8-v8-9"]], "Release Notes 0.8.x": [[53, "release-notes-0-8-x"]], "0.8.10 Index in forEach": [[53, "index-in-foreach"]], "0.8.9 Declarative Property Interception": [[53, "declarative-property-interception"]], "0.8.8 Hotfix the Source Code": [[53, "hotfix-the-source-code"]], "0.8.7 Native Modules for Node.js": [[53, "native-modules-for-node-js"]], "0.8.6 Event Loop for Node.js": [[53, "event-loop-for-node-js"]], "0.8.5 Error Codes": [[53, "error-codes"]], "0.8.4 V8 v9.0": [[53, "v8-v9-0"]], "0.8.3 GC": [[53, "gc"]], "0.8.2 Conversion for Primitive": [[53, "conversion-for-primitive"]], "0.8.1 Declarative Function Interception": [[53, "declarative-function-interception"]], "0.8.0 First Time with Node.js": [[53, "first-time-with-node-js"]], "Release Notes 0.9.x": [[54, "release-notes-0-9-x"]], "0.9.14 V8 Scope": [[54, "v8-scope"]], "0.9.13 V8 v9.4": [[54, "v8-v9-4"]], "0.9.12 Private Properties": [[54, "private-properties"]], "0.9.11 V8 v9.3": [[54, "v8-v9-3"]], "0.9.10 Polyfill Java Interfaces": [[54, "polyfill-java-interfaces"]], "0.9.9 Mac OS x86_64": [[54, "mac-os-x86-64"]], "0.9.8 Empower the Promise": [[54, "empower-the-promise"]], "0.9.7 Proxy Converter v2": [[54, "proxy-converter-v2"]], "0.9.6 Proxy Converter v1": [[54, "proxy-converter-v1"]], "0.9.5 V8 v9.2": [[54, "v8-v9-2"]], "0.9.4 Multi-process Safe": [[54, "multi-process-safe"]], "0.9.3 Module Resolver": [[54, "module-resolver"]], "0.9.2 Anonymous Functions in Converter": [[54, "anonymous-functions-in-converter"]], "0.9.1 V8 in Classloader": [[54, "v8-in-classloader"]], "0.9.0 V8 v9.1": [[54, "v8-v9-1"]], "Release Notes 1.0.x": [[55, "release-notes-1-0-x"]], "1.0.7 V8 v9.7": [[55, "v8-v9-7"]], "1.0.6 Mac OS (arm64)": [[55, "mac-os-arm64"]], "1.0.5 Javet Core": [[55, "javet-core"]], "1.0.4 V8 9.6": [[55, "v8-9-6"]], "1.0.3 Android ABI 21": [[55, "android-abi-21"]], "1.0.2 First Time with Android": [[55, "first-time-with-android"]], "1.0.1 Custom Library Loading": [[55, "custom-library-loading"]], "1.0.0 First Time with Node.js v16": [[55, "first-time-with-node-js-v16"]], "Release Notes 1.1.x": [[56, "release-notes-1-1-x"]], "1.1.7 V8 v10.5": [[56, "v8-v10-5"]], "1.1.6 V8 v10.4": [[56, "v8-v10-4"]], "1.1.5 V8 v10.3": [[56, "v8-v10-3"]], "1.1.4 V8 v10.2": [[56, "v8-v10-2"]], "1.1.3 V8 v10.1": [[56, "v8-v10-1"]], "1.1.2 V8 v10.0": [[56, "v8-v10-0"]], "1.1.1 V8 v9.9": [[56, "v8-v9-9"]], "1.1.0 V8 v9.8": [[56, "v8-v9-8"]], "Release Notes 2.0.x": [[57, "release-notes-2-0-x"]], "2.0.4 V8 v11.0": [[57, "v8-v11-0"]], "2.0.3 V8 v10.9": [[57, "v8-v10-9"]], "2.0.2 V8 v10.8": [[57, "v8-v10-8"]], "2.0.1 V8 v10.7": [[57, "v8-v10-7"]], "2.0.0 Node.js v18.10": [[57, "node-js-v18-10"]], "Release Notes 2.1.x": [[58, "release-notes-2-1-x"]], "2.1.2 V8 v11.3": [[58, "v8-v11-3"]], "2.1.1 V8 v11.2": [[58, "v8-v11-2"]], "2.1.0 V8 v11.1": [[58, "v8-v11-1"]], "Release Notes 2.2.x": [[59, "release-notes-2-2-x"]], "2.2.3 V8 v11.7": [[59, "v8-v11-7"]], "2.2.2 V8 v11.6": [[59, "v8-v11-6"]], "2.2.1 V8 v11.5": [[59, "v8-v11-5"]], "2.2.0 V8 v11.4": [[59, "v8-v11-4"]], "Release Notes 3.0.x": [[60, "release-notes-3-0-x"]], "3.0.1 V8 v11.9": [[60, "v8-v11-9"]], "3.0.0 V8 v11.8": [[60, "v8-v11-8"]], "Expose JsonNode in V8": [[61, "expose-jsonnode-in-v8"]], "2 Approaches": [[61, "approaches"]], "Java Flavor (Direct Exposure)": [[61, "java-flavor-direct-exposure"]], "JS Flavor (Wrapped Exposure)": [[61, "js-flavor-wrapped-exposure"]], "Test": [[61, "test"], [70, "test"]], "Conclusion": [[61, "conclusion"]], "Advanced": [[62, "advanced"]], "Interact with Node.js": [[63, "interact-with-node-js"]], "Is That Possible?": [[63, "is-that-possible"]], "How?": [[63, "how"]], "Step 1: JavaScript Server": [[63, "step-1-javascript-server"]], "Step 2: Worker Thread for the JavaScript Server": [[63, "step-2-worker-thread-for-the-javascript-server"]], "Step 3: Main Thread for the Interaction": [[63, "step-3-main-thread-for-the-interaction"]], "What If Node.js Hangs during Close()?": [[63, "what-if-node-js-hangs-during-close"]], "Java and JavaScript Interop": [[64, "java-and-javascript-interop"]], "Inject a Static Class": [[64, "inject-a-static-class"]], "Inject an Enum": [[64, "inject-an-enum"]], "Inject a Pattern": [[64, "inject-a-pattern"]], "Inject a StringBuilder": [[64, "inject-a-stringbuilder"]], "Array": [[65, "array"]], "List": [[65, "list"]], "Map": [[65, "map"]], "Motivation": [[66, "motivation"]], "Goals": [[66, "goals"]], "Print Hello Javet in V8 Mode": [[67, "print-hello-javet-in-v8-mode"]], "Print 1 + 1 in Node.js Mode": [[67, "print-1-1-in-node-js-mode"]], "Basic": [[68, "basic"]], "Installation": [[69, "installation"]], "OS Compatibility": [[69, "os-compatibility"]], "Windows": [[69, "windows"]], "Linux": [[69, "linux"]], "Mac OS": [[69, "mac-os"]], "Android": [[69, "android"]], "Sample": [[70, "sample"]], "@V8Property and @V8Function": [[70, "v8property-and-v8function"]], "Javet Shell": [[71, "javet-shell"]], "Node.js Mode and V8 Mode": [[72, "node-js-mode-and-v8-mode"]], "Co-existence": [[72, "co-existence"]], "V8Host": [[72, "v8host"]], "Pool": [[72, "pool"]], "Polyfill": [[73, "polyfill"]], "decimal.js": [[73, "decimal-js"]], "Spring Integration": [[74, "spring-integration"]], "Configuration": [[74, "configuration"]], "Injection": [[74, "injection"]], "Tutorial": [[75, "tutorial"]], "Migration Guides": [[76, "migration-guides"], [77, "migration-guides"]], "Migrate from J2V8": [[77, "migrate-from-j2v8"]], "Why Migrate from J2V8 to Javet?": [[77, "why-migrate-from-j2v8-to-javet"]], "V8 \u27f6 V8Runtime": [[77, "v8-v8runtime"]], "Primitive Types": [[77, "primitive-types"]], "registerJavaMethod() \u27f6 @V8Function": [[77, "registerjavamethod-v8function"]], "V8Locker": [[77, "v8locker"]], "Type Conversion": [[77, "type-conversion"]], "Node.js and V8": [[77, "node-js-and-v8"]], "ES6 Module": [[77, "es6-module"]], "Blessing": [[77, "blessing"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/tutorial/advanced/expose_json_node_in_v8.html b/docs/tutorial/advanced/expose_json_node_in_v8.html index 9433a07e2..7af443dc0 100644 --- a/docs/tutorial/advanced/expose_json_node_in_v8.html +++ b/docs/tutorial/advanced/expose_json_node_in_v8.html @@ -6,7 +6,7 @@ - Expose JsonNode in V8 - Javet 3.0.0 documentation + Expose JsonNode in V8 - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -575,7 +575,7 @@

    Conclusion +

    diff --git a/docs/tutorial/advanced/index.html b/docs/tutorial/advanced/index.html index a87c20f35..ce4d504ce 100644 --- a/docs/tutorial/advanced/index.html +++ b/docs/tutorial/advanced/index.html @@ -6,7 +6,7 @@ - Advanced - Javet 3.0.0 documentation + Advanced - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -359,7 +359,7 @@

    Advanced

    - + diff --git a/docs/tutorial/advanced/interact_with_node_js.html b/docs/tutorial/advanced/interact_with_node_js.html index 9606cc9ec..3d0e9243e 100644 --- a/docs/tutorial/advanced/interact_with_node_js.html +++ b/docs/tutorial/advanced/interact_with_node_js.html @@ -6,7 +6,7 @@ - Interact with Node.js - Javet 3.0.0 documentation + Interact with Node.js - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -514,7 +514,7 @@

    What If Node.js Hangs during Close()? +

    diff --git a/docs/tutorial/advanced/java_and_javascript_interop.html b/docs/tutorial/advanced/java_and_javascript_interop.html index 18d5f6b28..6e2910724 100644 --- a/docs/tutorial/advanced/java_and_javascript_interop.html +++ b/docs/tutorial/advanced/java_and_javascript_interop.html @@ -6,7 +6,7 @@ - Java and JavaScript Interop - Javet 3.0.0 documentation + Java and JavaScript Interop - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -457,7 +457,7 @@

    Inject a StringBuilder

    - + diff --git a/docs/tutorial/advanced/object_converter.html b/docs/tutorial/advanced/object_converter.html index e926b91c9..b97d40563 100644 --- a/docs/tutorial/advanced/object_converter.html +++ b/docs/tutorial/advanced/object_converter.html @@ -6,7 +6,7 @@ - Object Converter - Javet 3.0.0 documentation + Object Converter - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -433,7 +433,7 @@

    Map#

    - + diff --git a/docs/tutorial/basic/engine_pool.html b/docs/tutorial/basic/engine_pool.html index 2eeac3430..4429c5dcd 100644 --- a/docs/tutorial/basic/engine_pool.html +++ b/docs/tutorial/basic/engine_pool.html @@ -6,7 +6,7 @@ - Javet Engine Pool - Javet 3.0.0 documentation + Javet Engine Pool - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -415,7 +415,7 @@

    Usage#<

    - + diff --git a/docs/tutorial/basic/hello_javet.html b/docs/tutorial/basic/hello_javet.html index 60a81e4aa..8d279e585 100644 --- a/docs/tutorial/basic/hello_javet.html +++ b/docs/tutorial/basic/hello_javet.html @@ -6,7 +6,7 @@ - Hello Javet - Javet 3.0.0 documentation + Hello Javet - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -394,7 +394,7 @@

    Print 1 + 1 in Node.js Mode +

    diff --git a/docs/tutorial/basic/index.html b/docs/tutorial/basic/index.html index c3839d56b..4112e4024 100644 --- a/docs/tutorial/basic/index.html +++ b/docs/tutorial/basic/index.html @@ -6,7 +6,7 @@ - Basic - Javet 3.0.0 documentation + Basic - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -363,7 +363,7 @@

    Basic#<

    - + diff --git a/docs/tutorial/basic/installation.html b/docs/tutorial/basic/installation.html index 004058a0a..db840cbce 100644 --- a/docs/tutorial/basic/installation.html +++ b/docs/tutorial/basic/installation.html @@ -6,7 +6,7 @@ - Installation - Javet 3.0.0 documentation + Installation - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -305,44 +305,124 @@

    Installation#

    Maven#

    +
    +
    <!-- Linux and Windows (x86_64) -->
     <dependency>
         <groupId>com.caoccao.javet</groupId>
         <artifactId>javet</artifactId>
    -    <version>3.0.0</version>
    +    <version>3.0.1</version>
     </dependency>
     
     <!-- Linux (arm64) -->
     <dependency>
         <groupId>com.caoccao.javet</groupId>
         <artifactId>javet-linux-arm64</artifactId>
    -    <version>3.0.0</version>
    +    <version>3.0.1</version>
     </dependency>
     
     <!-- Mac OS (x86_64 and arm64) -->
     <dependency>
         <groupId>com.caoccao.javet</groupId>
         <artifactId>javet-macos</artifactId>
    -    <version>3.0.0</version>
    +    <version>3.0.1</version>
     </dependency>
     
    +
    +
    +
    <properties>
    +    <javet.version>3.0.1</javet.version>
    +</properties>
    +
    +<profiles>
    +    <profile>
    +        <id>windows</id>
    +        <activation>
    +            <os>
    +                <family>windows</family>
    +                <arch>x86</arch>
    +            </os>
    +        </activation>
    +        <dependencies>
    +            <dependency>
    +                <groupId>com.caoccao.javet</groupId>
    +                <artifactId>javet</artifactId>
    +                <version>${javet.version}</version>
    +            </dependency>
    +        </dependencies>
    +    </profile>
    +    <profile>
    +        <id>linux</id>
    +        <activation>
    +            <os>
    +                <family>unix</family>
    +                <arch>x86</arch>
    +            </os>
    +        </activation>
    +        <dependencies>
    +            <dependency>
    +                <groupId>com.caoccao.javet</groupId>
    +                <artifactId>javet</artifactId>
    +                <version>${javet.version}</version>
    +            </dependency>
    +        </dependencies>
    +    </profile>
    +    <profile>
    +        <id>macos</id>
    +        <activation>
    +            <os>
    +                <family>mac</family>
    +            </os>
    +        </activation>
    +        <dependencies>
    +            <dependency>
    +                <groupId>com.caoccao.javet</groupId>
    +                <artifactId>javet-macos</artifactId>
    +                <version>${javet.version}</version>
    +            </dependency>
    +        </dependencies>
    +    </profile>
    +</profiles>
    +
    +
    +
    +

    Gradle Kotlin DSL#

    -
    implementation("com.caoccao.javet:javet:3.0.0") // Linux and Windows (x86_64)
    -implementation("com.caoccao.javet:javet-linux-arm64:3.0.0") // Linux (arm64)
    -implementation("com.caoccao.javet:javet-macos:3.0.0") // Mac OS (x86_64 and arm64)
    -implementation("com.caoccao.javet:javet-android:3.0.0") // Android (arm, arm64, x86 and x86_64)
    +
    +
    +
    implementation("com.caoccao.javet:javet:3.0.1") // Linux and Windows (x86_64)
    +implementation("com.caoccao.javet:javet-linux-arm64:3.0.1") // Linux (arm64)
    +implementation("com.caoccao.javet:javet-macos:3.0.1") // Mac OS (x86_64 and arm64)
    +implementation("com.caoccao.javet:javet-android:3.0.1") // Android (arm, arm64, x86 and x86_64)
     
    +
    +
    +
    import org.gradle.internal.os.OperatingSystem
    +
    +val os = OperatingSystem.current()
    +val cpuArch = System.getProperty("os.arch")
    +if (os.isMacOsX) {
    +    implementation("com.caoccao.javet:javet:3.0.1")
    +} else if (os.isLinux && (cpuArch == "aarch64" || cpuArch == "arm64")) {
    +    implementation("com.caoccao.javet:javet-linux-arm64:3.0.1")
    +} else {
    +    implementation("com.caoccao.javet:javet-macos:3.0.1")
    +}
    +
    +
    +
    +

    Gradle Groovy DSL#

    -
    implementation 'com.caoccao.javet:javet:3.0.0' // Linux and Windows (x86_64)
    -implementation 'com.caoccao.javet:javet-linux-arm64:3.0.0' // Linux (arm64)
    -implementation 'com.caoccao.javet:javet-macos:3.0.0' // Mac OS (x86_64 and arm64)
    -implementation 'com.caoccao.javet:javet-android:3.0.0' // Android (arm, arm64, x86 and x86_64)
    +
    implementation 'com.caoccao.javet:javet:3.0.1' // Linux and Windows (x86_64)
    +implementation 'com.caoccao.javet:javet-linux-arm64:3.0.1' // Linux (arm64)
    +implementation 'com.caoccao.javet:javet-macos:3.0.1' // Mac OS (x86_64 and arm64)
    +implementation 'com.caoccao.javet:javet-android:3.0.1' // Android (arm, arm64, x86 and x86_64)
     
    @@ -556,7 +636,7 @@

    Android#<

    - + diff --git a/docs/tutorial/basic/installation.rst b/docs/tutorial/basic/installation.rst index c49507470..1d7cf1a6a 100644 --- a/docs/tutorial/basic/installation.rst +++ b/docs/tutorial/basic/installation.rst @@ -8,48 +8,126 @@ Dependency Maven ----- -.. code-block:: xml - - - - com.caoccao.javet - javet - 3.0.0 - - - - - com.caoccao.javet - javet-linux-arm64 - 3.0.0 - - - - - com.caoccao.javet - javet-macos - 3.0.0 - +.. tab:: Express + + .. code-block:: xml + + + + com.caoccao.javet + javet + 3.0.1 + + + + + com.caoccao.javet + javet-linux-arm64 + 3.0.1 + + + + + com.caoccao.javet + javet-macos + 3.0.1 + + +.. tab:: Complete + + .. code-block:: xml + + + 3.0.1 + + + + + windows + + + windows + x86 + + + + + com.caoccao.javet + javet + ${javet.version} + + + + + linux + + + unix + x86 + + + + + com.caoccao.javet + javet + ${javet.version} + + + + + macos + + + mac + + + + + com.caoccao.javet + javet-macos + ${javet.version} + + + + Gradle Kotlin DSL ----------------- -.. code-block:: kotlin +.. tab:: Express - implementation("com.caoccao.javet:javet:3.0.0") // Linux and Windows (x86_64) - implementation("com.caoccao.javet:javet-linux-arm64:3.0.0") // Linux (arm64) - implementation("com.caoccao.javet:javet-macos:3.0.0") // Mac OS (x86_64 and arm64) - implementation("com.caoccao.javet:javet-android:3.0.0") // Android (arm, arm64, x86 and x86_64) + .. code-block:: kotlin + + implementation("com.caoccao.javet:javet:3.0.1") // Linux and Windows (x86_64) + implementation("com.caoccao.javet:javet-linux-arm64:3.0.1") // Linux (arm64) + implementation("com.caoccao.javet:javet-macos:3.0.1") // Mac OS (x86_64 and arm64) + implementation("com.caoccao.javet:javet-android:3.0.1") // Android (arm, arm64, x86 and x86_64) + +.. tab:: Complete + + .. code-block:: kotlin + + import org.gradle.internal.os.OperatingSystem + + val os = OperatingSystem.current() + val cpuArch = System.getProperty("os.arch") + if (os.isMacOsX) { + implementation("com.caoccao.javet:javet:3.0.1") + } else if (os.isLinux && (cpuArch == "aarch64" || cpuArch == "arm64")) { + implementation("com.caoccao.javet:javet-linux-arm64:3.0.1") + } else { + implementation("com.caoccao.javet:javet-macos:3.0.1") + } Gradle Groovy DSL ----------------- .. code-block:: groovy - implementation 'com.caoccao.javet:javet:3.0.0' // Linux and Windows (x86_64) - implementation 'com.caoccao.javet:javet-linux-arm64:3.0.0' // Linux (arm64) - implementation 'com.caoccao.javet:javet-macos:3.0.0' // Mac OS (x86_64 and arm64) - implementation 'com.caoccao.javet:javet-android:3.0.0' // Android (arm, arm64, x86 and x86_64) + implementation 'com.caoccao.javet:javet:3.0.1' // Linux and Windows (x86_64) + implementation 'com.caoccao.javet:javet-linux-arm64:3.0.1' // Linux (arm64) + implementation 'com.caoccao.javet:javet-macos:3.0.1' // Mac OS (x86_64 and arm64) + implementation 'com.caoccao.javet:javet-android:3.0.1' // Android (arm, arm64, x86 and x86_64) OS Compatibility ================ diff --git a/docs/tutorial/basic/interception.html b/docs/tutorial/basic/interception.html index d1255fbbe..194f80eb3 100644 --- a/docs/tutorial/basic/interception.html +++ b/docs/tutorial/basic/interception.html @@ -6,7 +6,7 @@ - Interception - Javet 3.0.0 documentation + Interception - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -475,7 +475,7 @@

    Test#

    - + diff --git a/docs/tutorial/basic/javet_shell.html b/docs/tutorial/basic/javet_shell.html index 717d5af73..16e14c731 100644 --- a/docs/tutorial/basic/javet_shell.html +++ b/docs/tutorial/basic/javet_shell.html @@ -6,7 +6,7 @@ - Javet Shell - Javet 3.0.0 documentation + Javet Shell - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -390,7 +390,7 @@

    Javet Shell +

    diff --git a/docs/tutorial/basic/node_js_mode_and_v8_mode.html b/docs/tutorial/basic/node_js_mode_and_v8_mode.html index 0c4928f53..8cf778eab 100644 --- a/docs/tutorial/basic/node_js_mode_and_v8_mode.html +++ b/docs/tutorial/basic/node_js_mode_and_v8_mode.html @@ -6,7 +6,7 @@ - Node.js Mode and V8 Mode - Javet 3.0.0 documentation + Node.js Mode and V8 Mode - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -426,7 +426,7 @@

    Pool#

    - + diff --git a/docs/tutorial/basic/polyfill.html b/docs/tutorial/basic/polyfill.html index 249b19bce..3f60b4824 100644 --- a/docs/tutorial/basic/polyfill.html +++ b/docs/tutorial/basic/polyfill.html @@ -6,7 +6,7 @@ - Polyfill - Javet 3.0.0 documentation + Polyfill - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -423,7 +423,7 @@

    V8 Mode#<

    - + diff --git a/docs/tutorial/basic/spring_integration.html b/docs/tutorial/basic/spring_integration.html index f705cc9e2..485b574d1 100644 --- a/docs/tutorial/basic/spring_integration.html +++ b/docs/tutorial/basic/spring_integration.html @@ -6,7 +6,7 @@ - Spring Integration - Javet 3.0.0 documentation + Spring Integration - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -429,7 +429,7 @@

    Injection +

    diff --git a/docs/tutorial/index.html b/docs/tutorial/index.html index 57e9d22bb..997e47105 100644 --- a/docs/tutorial/index.html +++ b/docs/tutorial/index.html @@ -6,7 +6,7 @@ - Tutorial - Javet 3.0.0 documentation + Tutorial - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -377,7 +377,7 @@

    Tutorial

    - + diff --git a/docs/tutorial/migration_guides/index.html b/docs/tutorial/migration_guides/index.html index b22dd15d0..ae3f105d9 100644 --- a/docs/tutorial/migration_guides/index.html +++ b/docs/tutorial/migration_guides/index.html @@ -6,7 +6,7 @@ - Migration Guides - Javet 3.0.0 documentation + Migration Guides - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -356,7 +356,7 @@

    Migration Guides +

    diff --git a/docs/tutorial/migration_guides/migrate_from_j2v8.html b/docs/tutorial/migration_guides/migrate_from_j2v8.html index 99b909e62..fffc63ef4 100644 --- a/docs/tutorial/migration_guides/migrate_from_j2v8.html +++ b/docs/tutorial/migration_guides/migrate_from_j2v8.html @@ -6,7 +6,7 @@ - Migrate from J2V8 - Javet 3.0.0 documentation + Migrate from J2V8 - Javet 3.0.1 documentation @@ -125,7 +125,7 @@
    @@ -151,7 +151,7 @@
    - Javet 3.0.0 documentation + Javet 3.0.1 documentation @@ -456,7 +456,7 @@

    Blessing

    - + diff --git a/pom.xml b/pom.xml index 846b47bf7..fce75eefe 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.caoccao.javet javet - 3.0.0 + 3.0.1 javet Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding V8 in Java. https://github.com/caoccao/Javet @@ -28,7 +28,7 @@ scm:git:git://github.com/caoccao/Javet.git scm:git:git@github.com:caoccao/caoccao.git https://github.com/caoccao/Javet - 3.0.0 + 3.0.1 diff --git a/scripts/node/javet-rebuild/rebuild.cmd b/scripts/node/javet-rebuild/rebuild.cmd index f6ae254cf..0d5808010 100644 --- a/scripts/node/javet-rebuild/rebuild.cmd +++ b/scripts/node/javet-rebuild/rebuild.cmd @@ -1,5 +1,5 @@ @echo off -SET NODE_LIB_FILE="..\..\..\..\..\..\build\libs\libjavet-node-windows-x86_64.v.3.0.0.lib" +SET NODE_LIB_FILE="..\..\..\..\..\..\build\libs\libjavet-node-windows-x86_64.v.3.0.1.lib" cd %NODE_MODULE_ROOT% call node-gyp clean call node-gyp configure --module_name=%NODE_MODULE_NAME% --module_path=%NODE_MODULE_PATH% --node_lib_file=%NODE_LIB_FILE% diff --git a/scripts/node/javet-rebuild/rebuild.sh b/scripts/node/javet-rebuild/rebuild.sh index 1a2af0fbc..878849ccd 100755 --- a/scripts/node/javet-rebuild/rebuild.sh +++ b/scripts/node/javet-rebuild/rebuild.sh @@ -1 +1 @@ -patchelf --add-needed libjavet-node-linux-x86_64.v.3.0.0.so ${NODE_MODULE_FILE} +patchelf --add-needed libjavet-node-linux-x86_64.v.3.0.1.so ${NODE_MODULE_FILE} diff --git a/scripts/python/change_javet_version.py b/scripts/python/change_javet_version.py index dd7c81adf..68a211e82 100644 --- a/scripts/python/change_javet_version.py +++ b/scripts/python/change_javet_version.py @@ -106,6 +106,7 @@ def update(self): self._update( 'docs/tutorial/basic/installation.rst', '\n', re.compile(r'^ (?P\d+\.\d+\.\d+)$'), + re.compile(r'(?P\d+\.\d+\.\d+)$'), re.compile(r'javet[\-\w]*:(?P\d+\.\d+\.\d+)["\'@]{1}'), re.compile(r'version: \'(?P\d+\.\d+\.\d+)\'')) self._update( @@ -183,7 +184,7 @@ def _update(self, relative_file_path: str, line_separator: str, *patterns: list) logging.info(' Updated.') def main(): - change_javet_version = ChangeJavetVersion('3.0.0') + change_javet_version = ChangeJavetVersion('3.0.1') change_javet_version.update() return 0 diff --git a/scripts/python/change_node_v8_version.py b/scripts/python/change_node_v8_version.py index eca8ed4fd..2a778b8aa 100644 --- a/scripts/python/change_node_v8_version.py +++ b/scripts/python/change_node_v8_version.py @@ -158,9 +158,9 @@ def update(self) -> None: re.compile(r'"(?P\d+\.\d+\.\d+\.\d+)",')) def main(): - change_node_version = ChangeNodeVersion('20.8.0') + change_node_version = ChangeNodeVersion('20.9.0') change_node_version.update() - change_v8_version = ChangeV8Version('11.8.172.15') + change_v8_version = ChangeV8Version('11.9.169.6') change_v8_version.update() return 0 diff --git a/scripts/python/patch_v8_build.py b/scripts/python/patch_v8_build.py index a4cf68591..e08d8fa39 100644 --- a/scripts/python/patch_v8_build.py +++ b/scripts/python/patch_v8_build.py @@ -51,6 +51,7 @@ def __init__(self) -> None: '-Wno-deprecated-declarations', '-Wno-invalid-offsetof', '-Wno-range-loop-construct', + '-Wno-ctad-maybe-unsupported', ] self._common_ninja_file_root = 'out.gn' self._common_ninja_file_extension = '.ninja' @@ -101,11 +102,7 @@ def patch(self): return 0 def main(): - if platform.system().startswith('Windows') or platform.system().startswith('Linux'): - return PatchV8Build().patch() - else: - logging.error('This script is for Linux and Windows only.') - return 1 + return PatchV8Build().patch() if __name__ == '__main__': sys.exit(int(main() or 0)) diff --git a/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java b/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java index 6ad4a0634..415aca30a 100644 --- a/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java +++ b/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java @@ -47,7 +47,7 @@ public enum JSRuntimeType { */ V8( "v8", - "11.8.172.15", + "11.9.169.6", V8RuntimeOptions::new, o -> o instanceof V8RuntimeOptions); diff --git a/src/main/java/com/caoccao/javet/interop/IV8Creatable.java b/src/main/java/com/caoccao/javet/interop/IV8Creatable.java index d78da86bf..562ff68b4 100644 --- a/src/main/java/com/caoccao/javet/interop/IV8Creatable.java +++ b/src/main/java/com/caoccao/javet/interop/IV8Creatable.java @@ -33,6 +33,18 @@ * @since 0.7.0 */ public interface IV8Creatable { + /** + * Create a V8 synthetic module. + * + * @param moduleName the module name + * @param iV8ValueObject the V8 value object to be exported + * @return the V8 module + * @throws JavetException the javet exception + * @since 3.0.1 + */ + @CheckReturnValue + V8Module createV8Module(String moduleName, IV8ValueObject iV8ValueObject) throws JavetException; + /** * Create V8 value array. * diff --git a/src/main/java/com/caoccao/javet/interop/IV8Native.java b/src/main/java/com/caoccao/javet/interop/IV8Native.java index cfd61c12a..13e777f4b 100644 --- a/src/main/java/com/caoccao/javet/interop/IV8Native.java +++ b/src/main/java/com/caoccao/javet/interop/IV8Native.java @@ -195,6 +195,8 @@ Object moduleCompile( String resourceName, int resourceLineOffset, int resourceColumnOffset, int scriptId, boolean isWASM, boolean isModule); + Object moduleCreate(long v8RuntimeHandle, String name, long v8ValueHandle, int v8ValueType); + Object moduleEvaluate(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType, boolean resultRequired); Object moduleExecute( @@ -214,6 +216,10 @@ Object moduleExecute( boolean moduleInstantiate(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + boolean moduleIsSourceTextModule(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + + boolean moduleIsSyntheticModule(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + Object objectCreate(long v8RuntimeHandle); boolean objectDelete(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType, Object key); diff --git a/src/main/java/com/caoccao/javet/interop/V8Internal.java b/src/main/java/com/caoccao/javet/interop/V8Internal.java index c58293b3d..8e79d539c 100644 --- a/src/main/java/com/caoccao/javet/interop/V8Internal.java +++ b/src/main/java/com/caoccao/javet/interop/V8Internal.java @@ -314,6 +314,14 @@ public boolean moduleInstantiate(IV8Module iV8Module) throws JavetException { return v8Runtime.moduleInstantiate(iV8Module); } + public boolean moduleIsSourceTextModule(IV8Module iV8Module) { + return v8Runtime.moduleIsSourceTextModule(iV8Module); + } + + public boolean moduleIsSyntheticModule(IV8Module iV8Module) { + return v8Runtime.moduleIsSyntheticModule(iV8Module); + } + public boolean objectDelete(IV8ValueObject iV8ValueObject, V8Value key) throws JavetException { return v8Runtime.objectDelete(iV8ValueObject, key); } diff --git a/src/main/java/com/caoccao/javet/interop/V8Native.java b/src/main/java/com/caoccao/javet/interop/V8Native.java index a702b7c9b..8ea12ac18 100644 --- a/src/main/java/com/caoccao/javet/interop/V8Native.java +++ b/src/main/java/com/caoccao/javet/interop/V8Native.java @@ -290,6 +290,9 @@ public native Object moduleCompile( String resourceName, int resourceLineOffset, int resourceColumnOffset, int scriptId, boolean isWASM, boolean isModule); + @Override + public native Object moduleCreate(long v8RuntimeHandle, String name, long v8ValueHandle, int v8ValueType); + @Override public native Object moduleEvaluate(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType, boolean resultRequired); @@ -317,6 +320,12 @@ public native Object moduleExecute( @Override public native boolean moduleInstantiate(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + @Override + public native boolean moduleIsSourceTextModule(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + + @Override + public native boolean moduleIsSyntheticModule(long v8RuntimeHandle, long v8ValueHandle, int v8ValueType); + @Override public native Object objectCreate(long v8RuntimeHandle); diff --git a/src/main/java/com/caoccao/javet/interop/V8Runtime.java b/src/main/java/com/caoccao/javet/interop/V8Runtime.java index 67a5e6e6c..461396319 100644 --- a/src/main/java/com/caoccao/javet/interop/V8Runtime.java +++ b/src/main/java/com/caoccao/javet/interop/V8Runtime.java @@ -23,11 +23,7 @@ import com.caoccao.javet.interfaces.IEnumBitset; import com.caoccao.javet.interfaces.IJavetClosable; import com.caoccao.javet.interfaces.IJavetLogger; -import com.caoccao.javet.interfaces.IV8ModuleResolver; -import com.caoccao.javet.interop.callback.IJavetGCCallback; -import com.caoccao.javet.interop.callback.IJavetPromiseRejectCallback; -import com.caoccao.javet.interop.callback.JavetCallbackContext; -import com.caoccao.javet.interop.callback.JavetPromiseRejectCallback; +import com.caoccao.javet.interop.callback.*; import com.caoccao.javet.interop.converters.IJavetConverter; import com.caoccao.javet.interop.converters.JavetObjectConverter; import com.caoccao.javet.interop.executors.IV8Executor; @@ -564,7 +560,7 @@ public V8Module compileV8Module( String scriptString, byte[] cachedData, V8ScriptOrigin v8ScriptOrigin, boolean resultRequired) throws JavetException { v8ScriptOrigin.setModule(true); - if (v8ScriptOrigin.getResourceName() == null || v8ScriptOrigin.getResourceName().length() == 0) { + if (v8ScriptOrigin.getResourceName() == null || v8ScriptOrigin.getResourceName().isEmpty()) { throw new JavetException(JavetError.ModuleNameEmpty); } Object result = v8Native.moduleCompile( @@ -646,6 +642,7 @@ public boolean containsV8Module(String resourceName) { * * @param the type parameter * @param iV8Context the V8 context + * @param index the index * @return the t * @throws JavetException the javet exception */ @@ -696,6 +693,23 @@ boolean contextSetLength(IV8Context iV8Context, int length) throws JavetExceptio return v8Native.contextSetLength(handle, iV8Context.getHandle(), iV8Context.getType().getId(), length); } + @Override + @SuppressWarnings("RedundantThrows") + @CheckReturnValue + public V8Module createV8Module(String moduleName, IV8ValueObject iV8ValueObject) throws JavetException { + if (moduleName == null || moduleName.isEmpty()) { + throw new JavetException(JavetError.ModuleNameEmpty); + } + Objects.requireNonNull(iV8ValueObject); + V8Module v8Module = (V8Module) v8Native.moduleCreate( + handle, moduleName, iV8ValueObject.getHandle(), iV8ValueObject.getType().getId()); + if (v8Module != null) { + v8Module.setResourceName(moduleName); + addV8Module(v8Module); + } + return v8Module; + } + @Override @SuppressWarnings("RedundantThrows") @CheckReturnValue @@ -837,7 +851,7 @@ public V8ValueString createV8ValueString(String str) throws JavetException { @Override @CheckReturnValue public V8ValueSymbol createV8ValueSymbol(String description, boolean global) throws JavetException { - assert description != null && description.length() > 0 : ERROR_SYMBOL_DESCRIPTION_CANNOT_BE_EMPTY; + assert description != null && !description.isEmpty() : ERROR_SYMBOL_DESCRIPTION_CANNOT_BE_EMPTY; if (global) { try (V8ValueBuiltInSymbol v8ValueBuiltInSymbol = getGlobalObject().getBuiltInSymbol()) { return v8ValueBuiltInSymbol._for(description); @@ -1447,17 +1461,16 @@ public V8Locker getV8Locker() throws JavetException { */ @CheckReturnValue IV8Module getV8Module(String resourceName, IV8Module v8ModuleReferrer) throws JavetException { - if (resourceName != null && resourceName.length() > 0) { + IV8Module iV8Module = null; + if (resourceName != null && !resourceName.isEmpty()) { synchronized (v8ModuleLock) { - if (v8ModuleMap.containsKey(resourceName)) { - return v8ModuleMap.get(resourceName); - } + iV8Module = v8ModuleMap.get(resourceName); } - if (v8ModuleResolver != null) { - return v8ModuleResolver.resolve(this, resourceName, v8ModuleReferrer); + if (iV8Module == null && v8ModuleResolver != null) { + iV8Module = v8ModuleResolver.resolve(this, resourceName, v8ModuleReferrer); } } - return null; + return iV8Module; } /** @@ -2047,6 +2060,28 @@ boolean moduleInstantiate(IV8Module iV8Module) throws JavetException { return v8Native.moduleInstantiate(handle, iV8Module.getHandle(), iV8Module.getType().getId()); } + /** + * Is source text module. + * + * @param iV8Module the V8 module + * @return true : yes, false : no + * @since 3.0.1 + */ + public boolean moduleIsSourceTextModule(IV8Module iV8Module) { + return v8Native.moduleIsSourceTextModule(handle, iV8Module.getHandle(), iV8Module.getType().getId()); + } + + /** + * Is synthetic module. + * + * @param iV8Module the V8 module + * @return true : yes, false : no + * @since 3.0.1 + */ + public boolean moduleIsSyntheticModule(IV8Module iV8Module) { + return v8Native.moduleIsSyntheticModule(handle, iV8Module.getHandle(), iV8Module.getType().getId()); + } + /** * Delete a key from an object. * diff --git a/src/main/java/com/caoccao/javet/interop/V8Scope.java b/src/main/java/com/caoccao/javet/interop/V8Scope.java index 84c01b292..849a6b603 100644 --- a/src/main/java/com/caoccao/javet/interop/V8Scope.java +++ b/src/main/java/com/caoccao/javet/interop/V8Scope.java @@ -139,6 +139,12 @@ public void close() throws JavetException { } } + @Override + public V8Module createV8Module(String moduleName, IV8ValueObject iV8ValueObject) throws JavetException { + Objects.requireNonNull(v8Runtime, ERROR_MESSAGE_V8_RUNTIME_CANNOT_BE_EMPTY); + return add(v8Runtime.createV8Module(moduleName, iV8ValueObject)); + } + @Override public V8ValueArray createV8ValueArray() throws JavetException { Objects.requireNonNull(v8Runtime, ERROR_MESSAGE_V8_RUNTIME_CANNOT_BE_EMPTY); diff --git a/src/main/java/com/caoccao/javet/interfaces/IV8ModuleResolver.java b/src/main/java/com/caoccao/javet/interop/callback/IV8ModuleResolver.java similarity index 96% rename from src/main/java/com/caoccao/javet/interfaces/IV8ModuleResolver.java rename to src/main/java/com/caoccao/javet/interop/callback/IV8ModuleResolver.java index f71cbb65d..f1f4bdc43 100644 --- a/src/main/java/com/caoccao/javet/interfaces/IV8ModuleResolver.java +++ b/src/main/java/com/caoccao/javet/interop/callback/IV8ModuleResolver.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.caoccao.javet.interfaces; +package com.caoccao.javet.interop.callback; import com.caoccao.javet.exceptions.JavetException; import com.caoccao.javet.interop.V8Runtime; diff --git a/src/main/java/com/caoccao/javet/interop/callback/JavetBuiltInModuleResolver.java b/src/main/java/com/caoccao/javet/interop/callback/JavetBuiltInModuleResolver.java new file mode 100644 index 000000000..29e15a7d5 --- /dev/null +++ b/src/main/java/com/caoccao/javet/interop/callback/JavetBuiltInModuleResolver.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023. caoccao.com Sam Cao + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.caoccao.javet.interop.callback; + +import com.caoccao.javet.exceptions.JavetException; +import com.caoccao.javet.interop.NodeRuntime; +import com.caoccao.javet.interop.V8Runtime; +import com.caoccao.javet.node.modules.NodeModuleAny; +import com.caoccao.javet.values.reference.IV8Module; + +/** + * The type Javet built in module resolver is for resolving the Node.js built-in modules. + * + * @since 3.0.1 + */ +public class JavetBuiltInModuleResolver implements IV8ModuleResolver { + + /** + * The constant PREFIX_NODE. + * + * @since 3.0.1 + */ + public static final String PREFIX_NODE = "node:"; + + @Override + public IV8Module resolve(V8Runtime v8Runtime, String resourceName, IV8Module v8ModuleReferrer) + throws JavetException { + IV8Module iV8Module = null; + // It only works for Node.js runtime and module names starting with "node:". + if (v8Runtime.getJSRuntimeType().isNode() && resourceName != null && resourceName.startsWith(PREFIX_NODE)) { + String moduleName = resourceName.substring(PREFIX_NODE.length()); + NodeRuntime nodeRuntime = (NodeRuntime) v8Runtime; + NodeModuleAny nodeModuleAny = nodeRuntime.getNodeModule(moduleName, NodeModuleAny.class); + iV8Module = v8Runtime.createV8Module(resourceName, nodeModuleAny.getModuleObject()); + } + return iV8Module; + } +} diff --git a/src/main/java/com/caoccao/javet/interop/callback/JavetCallbackContext.java b/src/main/java/com/caoccao/javet/interop/callback/JavetCallbackContext.java index 5c23ca28e..d57c3a300 100644 --- a/src/main/java/com/caoccao/javet/interop/callback/JavetCallbackContext.java +++ b/src/main/java/com/caoccao/javet/interop/callback/JavetCallbackContext.java @@ -147,6 +147,33 @@ public JavetCallbackContext( this(name, V8ValueSymbolType.None, callbackReceiver, callbackMethod, thisObjectRequired); } + /** + * Instantiates a new Javet callback context. + * + * @param name the name + * @param symbolType the symbol type + * @param callbackReceiver the callback receiver + * @param callbackType the callback type + * @param directCall the direct call + * @since 3.0.1 + */ + public JavetCallbackContext( + String name, + V8ValueSymbolType symbolType, + Object callbackReceiver, + JavetCallbackType callbackType, + IJavetDirectCallable.DirectCall directCall) { + this( + name, + symbolType, + callbackReceiver, + Objects.requireNonNull(callbackType), + directCall, + callbackType.getThisObjectRequired()); + assert callbackType.getDirectCallClass().isAssignableFrom(directCall.getClass()) : ERROR_CALLBACK_TYPE_MISMATCHES; + this.returnResult = callbackType.getReturnResult(); + } + /** * Instantiates a new Javet callback context that takes a Java method for making further reflection calls. * @@ -191,23 +218,6 @@ private JavetCallbackContext( this.symbolType = Objects.requireNonNull(symbolType); } - private JavetCallbackContext( - String name, - V8ValueSymbolType symbolType, - Object callbackReceiver, - JavetCallbackType callbackType, - IJavetDirectCallable.DirectCall directCall) { - this( - name, - symbolType, - callbackReceiver, - Objects.requireNonNull(callbackType), - directCall, - callbackType.getThisObjectRequired()); - assert callbackType.getDirectCallClass().isAssignableFrom(directCall.getClass()) : ERROR_CALLBACK_TYPE_MISMATCHES; - this.returnResult = callbackType.getReturnResult(); - } - /** * Gets callback method. * @@ -259,6 +269,12 @@ public String getName() { return name; } + /** + * Gets symbol type. + * + * @return the symbol type + * @since 2.2.0 + */ public V8ValueSymbolType getSymbolType() { return symbolType; } diff --git a/src/main/java/com/caoccao/javet/interop/loader/JavetLibLoader.java b/src/main/java/com/caoccao/javet/interop/loader/JavetLibLoader.java index 1dcfa16df..a8ea89387 100644 --- a/src/main/java/com/caoccao/javet/interop/loader/JavetLibLoader.java +++ b/src/main/java/com/caoccao/javet/interop/loader/JavetLibLoader.java @@ -48,7 +48,7 @@ public final class JavetLibLoader { * * @since 0.8.0 */ - public static final String LIB_VERSION = "3.0.0"; + public static final String LIB_VERSION = "3.0.1"; private static final String ANDROID_ABI_ARM = "armeabi-v7a"; private static final String ANDROID_ABI_ARM64 = "arm64-v8a"; private static final String ANDROID_ABI_X86 = "x86"; diff --git a/src/main/java/com/caoccao/javet/interop/proxy/ScoredExecutable.java b/src/main/java/com/caoccao/javet/interop/proxy/ScoredExecutable.java index 244d75a80..70d911f6a 100644 --- a/src/main/java/com/caoccao/javet/interop/proxy/ScoredExecutable.java +++ b/src/main/java/com/caoccao/javet/interop/proxy/ScoredExecutable.java @@ -21,9 +21,7 @@ import com.caoccao.javet.utils.JavetTypeUtils; import com.caoccao.javet.utils.JavetVirtualObject; import com.caoccao.javet.values.V8Value; -import com.caoccao.javet.values.reference.V8ValueFunction; import com.caoccao.javet.values.reference.V8ValueObject; -import com.caoccao.javet.values.reference.V8ValueProxy; import java.lang.reflect.*; import java.util.ArrayList; @@ -36,30 +34,7 @@ * @since 0.9.6 */ final class ScoredExecutable { - /** - * The constant V8_VALUE_CLASS. - * - * @since 0.9.10 - */ private static final Class V8_VALUE_CLASS = V8Value.class; - /** - * The constant V8_VALUE_FUNCTION_CLASS. - * - * @since 0.9.10 - */ - private static final Class V8_VALUE_FUNCTION_CLASS = V8ValueFunction.class; - /** - * The constant V8_VALUE_OBJECT_CLASS. - * - * @since 0.9.10 - */ - private static final Class V8_VALUE_OBJECT_CLASS = V8ValueObject.class; - /** - * The constant V8_VALUE_PROXY_CLASS. - * - * @since 0.9.10 - */ - private static final Class V8_VALUE_PROXY_CLASS = V8ValueProxy.class; private final E executable; private final IJavetReflectionObjectFactory reflectionObjectFactory; private final Object targetObject; diff --git a/src/main/java/com/caoccao/javet/values/reference/IV8Module.java b/src/main/java/com/caoccao/javet/values/reference/IV8Module.java index a699b9f2a..8279d84e2 100644 --- a/src/main/java/com/caoccao/javet/values/reference/IV8Module.java +++ b/src/main/java/com/caoccao/javet/values/reference/IV8Module.java @@ -21,20 +21,72 @@ import com.caoccao.javet.interop.IV8Executable; import com.caoccao.javet.values.V8Value; +/** + * The interface IV8Module. + * + * @since 0.8.0 + */ @SuppressWarnings("unchecked") public interface IV8Module extends IV8Cacheable, IV8ValueReference, IV8Executable { + /** + * The constant Uninstantiated. + * + * @since 0.8.0 + */ int Uninstantiated = 0; + /** + * The constant Instantiating. + * + * @since 0.8.0 + */ int Instantiating = 1; + /** + * The constant Instantiated. + * + * @since 0.8.0 + */ int Instantiated = 2; + /** + * The constant Evaluating. + * + * @since 0.8.0 + */ int Evaluating = 3; + /** + * The constant Evaluated. + * + * @since 0.8.0 + */ int Evaluated = 4; + /** + * The constant Errored. + * + * @since 0.8.0 + */ int Errored = 5; + /** + * Evaluate the module. + * + * @param the type parameter + * @return the t + * @throws JavetException the javet exception + * @since 0.8.0 + */ @CheckReturnValue default T evaluate() throws JavetException { return evaluate(true); } + /** + * Evaluate the module. + * + * @param the type parameter + * @param resultRequired the result required + * @return the t + * @throws JavetException the javet exception + * @since 0.8.0 + */ @CheckReturnValue T evaluate(boolean resultRequired) throws JavetException; @@ -52,25 +104,89 @@ default T execute(boolean resultRequired) throws JavetExcept return (T) getV8Runtime().createV8ValueUndefined(); } + /** + * Gets exception. + * + * @return the exception + * @throws JavetException the javet exception + * @since 0.8.0 + */ @CheckReturnValue V8ValueError getException() throws JavetException; + /** + * Gets namespace. + *

    + * The module's status must be at least kInstantiated. Otherwise, core dump will take place. + * + * @return the namespace + * @throws JavetException the javet exception + * @since 0.8.0 + */ + @CheckReturnValue + V8ValueObject getNamespace() throws JavetException; + + /** + * Gets resource name. + * + * @return the resource name + * @since 0.8.0 + */ String getResourceName(); /** * Gets script id. *

    - * Note: This API is not supported by Node because the V8 version is too low. + * The module must be a SourceTextModule and must not have a kErrored status. * * @return the script id * @throws JavetException the javet exception + * @since 0.8.0 */ int getScriptId() throws JavetException; + /** + * Gets status. + * + * @return the status + * @throws JavetException the javet exception + * @since 0.8.0 + */ int getStatus() throws JavetException; + /** + * Instantiate. + * + * @return true : instantiated, false : not instantiated + * @throws JavetException the javet exception + * @since 0.8.0 + */ boolean instantiate() throws JavetException; + /** + * Is source text module. + * + * @return true : yes, false : no + * @throws JavetException the javet exception + * @since 3.0.1 + */ + boolean isSourceTextModule() throws JavetException; + + /** + * Is synthetic module. + * + * @return true : yes, false : no + * @throws JavetException the javet exception + * @since 3.0.1 + */ + boolean isSyntheticModule() throws JavetException; + + /** + * Sets resource name. + * + * @param resourceName the resource name + * @since 0.8.0 + */ void setResourceName(String resourceName); @Override diff --git a/src/main/java/com/caoccao/javet/values/reference/V8Module.java b/src/main/java/com/caoccao/javet/values/reference/V8Module.java index f5d4ed0fd..191c80438 100644 --- a/src/main/java/com/caoccao/javet/values/reference/V8Module.java +++ b/src/main/java/com/caoccao/javet/values/reference/V8Module.java @@ -23,6 +23,7 @@ import com.caoccao.javet.values.V8Value; import java.util.Objects; +import java.util.Optional; /** * The type V8 module. @@ -32,6 +33,18 @@ @SuppressWarnings("unchecked") public class V8Module extends V8ValueReference implements IV8Module { + /** + * The Optional source text module is an internal cache storing whether the module is source text or not. + * + * @since 3.0.1 + */ + protected Optional optionalSourceTextModule; + /** + * The Optional synthetic module is an internal cache storing whether the module is synthetic or not. + * + * @since 3.0.1 + */ + protected Optional optionalSyntheticModule; /** * The Resource name. * @@ -49,6 +62,8 @@ public class V8Module extends V8ValueReference implements IV8Module { */ V8Module(V8Runtime v8Runtime, long handle) throws JavetException { super(v8Runtime, handle); + optionalSourceTextModule = Optional.empty(); + optionalSyntheticModule = Optional.empty(); resourceName = null; } @@ -69,16 +84,7 @@ public V8ValueError getException() throws JavetException { return checkV8Runtime().getV8Internal().moduleGetException(this); } - /** - * Gets namespace. - *

    - * Note: Please avoid calling this API in production environment - * because its underlying V8 object is not persisted and core dump will take place. - * - * @return the namespace - * @throws JavetException the javet exception - * @since 0.8.0 - */ + @Override @CheckReturnValue public V8ValueObject getNamespace() throws JavetException { return checkV8Runtime().getV8Internal().moduleGetNamespace(this); @@ -109,6 +115,24 @@ public boolean instantiate() throws JavetException { return checkV8Runtime().getV8Internal().moduleInstantiate(this); } + @Override + public boolean isSourceTextModule() throws JavetException { + if (!optionalSourceTextModule.isPresent()) { + optionalSourceTextModule = + Optional.of(checkV8Runtime().getV8Internal().moduleIsSourceTextModule(this)); + } + return optionalSourceTextModule.get(); + } + + @Override + public boolean isSyntheticModule() throws JavetException { + if (!optionalSyntheticModule.isPresent()) { + optionalSyntheticModule = + Optional.of(checkV8Runtime().getV8Internal().moduleIsSyntheticModule(this)); + } + return optionalSyntheticModule.get(); + } + @Override public void setResourceName(String resourceName) { this.resourceName = Objects.requireNonNull(resourceName); diff --git a/src/main/java/com/caoccao/javet/values/reference/builtin/V8ValueBuiltInObject.java b/src/main/java/com/caoccao/javet/values/reference/builtin/V8ValueBuiltInObject.java index c90a909b3..2c25a2e27 100644 --- a/src/main/java/com/caoccao/javet/values/reference/builtin/V8ValueBuiltInObject.java +++ b/src/main/java/com/caoccao/javet/values/reference/builtin/V8ValueBuiltInObject.java @@ -45,6 +45,12 @@ public class V8ValueBuiltInObject extends V8ValueObject { * @since 0.9.11 */ public static final String FUNCTION_GET_OWN_PROPERTY_SYMBOLS = "getOwnPropertySymbols"; + /** + * The constant FUNCTION_FREEZE. + * + * @since 3.0.1 + */ + public static final String FUNCTION_FREEZE = "freeze"; /** * Instantiates a new V8 value built in object. @@ -72,6 +78,16 @@ public V8ValueObject assign(V8ValueObject v8Value1, V8ValueObject v8Value2) thro return invoke(FUNCTION_ASSIGN, Objects.requireNonNull(v8Value1), Objects.requireNonNull(v8Value2)); } + /** + * Freeze V8 value object. + * + * @param v8ValueObject the V8 value object + * @throws JavetException the javet exception + * @since 3.0.1 + */ + public void freeze(V8ValueObject v8ValueObject) throws JavetException { + invokeVoid(FUNCTION_FREEZE, Objects.requireNonNull(v8ValueObject)); + } /** * Gets own property symbols. diff --git a/src/test/java/com/caoccao/javet/interop/TestNodeRuntime.java b/src/test/java/com/caoccao/javet/interop/TestNodeRuntime.java index c0b32c778..83c78348e 100644 --- a/src/test/java/com/caoccao/javet/interop/TestNodeRuntime.java +++ b/src/test/java/com/caoccao/javet/interop/TestNodeRuntime.java @@ -116,7 +116,7 @@ public void testModuleProcess() throws JavetException { Path path4 = nodeModuleProcess.getWorkingDirectory().toPath(); assertNotEquals(path1.toAbsolutePath().toString(), path3.toAbsolutePath().toString()); assertEquals(path1.toAbsolutePath().toString(), path4.toAbsolutePath().toString()); - assertEquals("v20.8.0", nodeModuleProcess.getVersion()); + assertEquals("v20.9.0", nodeModuleProcess.getVersion()); } @Test diff --git a/src/test/java/com/caoccao/javet/mock/MockModuleResolver.java b/src/test/java/com/caoccao/javet/mock/MockModuleResolver.java index cb2c12308..28493ed7a 100644 --- a/src/test/java/com/caoccao/javet/mock/MockModuleResolver.java +++ b/src/test/java/com/caoccao/javet/mock/MockModuleResolver.java @@ -17,7 +17,7 @@ package com.caoccao.javet.mock; import com.caoccao.javet.exceptions.JavetException; -import com.caoccao.javet.interfaces.IV8ModuleResolver; +import com.caoccao.javet.interop.callback.IV8ModuleResolver; import com.caoccao.javet.interop.V8Runtime; import com.caoccao.javet.values.reference.IV8Module; diff --git a/src/test/java/com/caoccao/javet/values/reference/TestV8Module.java b/src/test/java/com/caoccao/javet/values/reference/TestV8Module.java index a4ad9bae3..6dbd43e45 100644 --- a/src/test/java/com/caoccao/javet/values/reference/TestV8Module.java +++ b/src/test/java/com/caoccao/javet/values/reference/TestV8Module.java @@ -20,9 +20,11 @@ import com.caoccao.javet.exceptions.JavetCompilationException; import com.caoccao.javet.exceptions.JavetException; import com.caoccao.javet.exceptions.JavetExecutionException; +import com.caoccao.javet.interop.callback.JavetBuiltInModuleResolver; import com.caoccao.javet.interop.executors.IV8Executor; import com.caoccao.javet.mock.MockModuleResolver; import com.caoccao.javet.values.V8Value; +import com.caoccao.javet.values.reference.builtin.V8ValueBuiltInObject; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -70,6 +72,8 @@ public void testExecute() throws JavetException { IV8Executor iV8Executor = v8Runtime.getExecutor( "Object.a = 1").setResourceName("./test.js"); try (V8Module v8Module = iV8Executor.compileV8Module()) { + assertTrue(v8Module.isSourceTextModule()); + assertFalse(v8Module.isSyntheticModule()); assertEquals(V8Module.Uninstantiated, v8Module.getStatus()); assertTrue(v8Runtime.containsV8Module(v8Module.getResourceName())); assertEquals(1, v8Runtime.getV8ModuleCount()); @@ -104,6 +108,8 @@ public void testImportInvalidModuleInModule() throws JavetException { String moduleName3 = "./module3.js"; IV8Executor iV8Executor = v8Runtime.getExecutor(codeString1).setResourceName(moduleName1); try (V8Module v8Module1 = iV8Executor.compileV8Module()) { + assertTrue(v8Module1.isSourceTextModule()); + assertFalse(v8Module1.isSyntheticModule()); assertEquals(V8Module.Uninstantiated, v8Module1.getStatus()); assertTrue(v8Runtime.containsV8Module(v8Module1.getResourceName())); assertEquals(1, v8Runtime.getV8ModuleCount()); @@ -118,6 +124,8 @@ public void testImportInvalidModuleInModule() throws JavetException { } iV8Executor = v8Runtime.getExecutor(codeString2).setResourceName(moduleName2); try (V8Module v8Module2 = iV8Executor.compileV8Module()) { + assertTrue(v8Module2.isSourceTextModule()); + assertFalse(v8Module2.isSyntheticModule()); assertEquals(V8Module.Uninstantiated, v8Module2.getStatus()); assertNull(v8Module2.getException()); assertTrue(v8Runtime.containsV8Module(v8Module2.getResourceName())); @@ -131,6 +139,8 @@ public void testImportInvalidModuleInModule() throws JavetException { } iV8Executor = v8Runtime.getExecutor(codeString3).setResourceName(moduleName3); try (V8Module v8Module3 = iV8Executor.compileV8Module()) { + assertTrue(v8Module3.isSourceTextModule()); + assertFalse(v8Module3.isSyntheticModule()); assertEquals(V8Module.Uninstantiated, v8Module3.getStatus()); assertNull(v8Module3.getException()); assertTrue(v8Runtime.containsV8Module(v8Module3.getResourceName())); @@ -149,6 +159,8 @@ public void testImportValidModuleAndExecute() throws JavetException { String codeString = "export function test() { return { a: 1 }; };"; IV8Executor iV8Executor = v8Runtime.getExecutor(codeString).setResourceName("./test.js"); try (V8Module v8Module = iV8Executor.compileV8Module()) { + assertTrue(v8Module.isSourceTextModule()); + assertFalse(v8Module.isSyntheticModule()); if (v8Runtime.getJSRuntimeType().isNode()) { v8Runtime.getExecutor("const process = require('process');\n" + "var globalReason = null;\n" + @@ -263,6 +275,18 @@ public void testInvalidModuleResolver() throws JavetException { assertTrue(resolver.isCalled()); } + @Test + public void testJavetBuiltInModuleResolver() throws JavetException { + if (v8Runtime.getJSRuntimeType().isNode()) { + v8Runtime.setV8ModuleResolver(new JavetBuiltInModuleResolver()); + v8Runtime.getExecutor( + "import * as fs from 'node:fs';\n" + + "globalThis.a = fs.existsSync('/path-not-found');") + .setModule(true).executeVoid(); + assertFalse(v8Runtime.getGlobalObject().getBoolean("a")); + } + } + @Test public void testStatusConversion() throws JavetException { try (V8Module v8Module = v8Runtime.getExecutor( @@ -288,6 +312,69 @@ public void testStatusConversion() throws JavetException { } } + @Test + public void testSyntheticModule() throws JavetException { + if (v8Runtime.getJSRuntimeType().isNode()) { + v8Runtime.getExecutor( + "const process = require('process');\n" + + "process.on('unhandledRejection', (reason, promise) => {\n" + + " globalThis.reason = reason.toString();\n" + + "});") + .executeVoid(); + } else { + v8Runtime.setPromiseRejectCallback((event, promise, value) -> { + try { + v8Runtime.getGlobalObject().set("reason", value.toString()); + } catch (JavetException e) { + fail(e); + } + }); + } + v8Runtime.setV8ModuleResolver((v8Runtime, resourceName, v8ModuleReferrer) -> { + if ("test.js".equals(resourceName)) { + try (V8ValueObject v8ValueObject = v8Runtime.createV8ValueObject(); + V8ValueArray v8ValueArray = v8Runtime.createV8ValueArray()) { + v8ValueObject.set("a", 1); + try (V8ValueFunction v8ValueFunction = v8Runtime.createV8ValueFunction("(x) => x + 1")) { + v8ValueObject.set("b", v8ValueFunction); + } + v8ValueObject.set("c", v8ValueArray); + try (V8ValueBuiltInObject v8ValueBuiltInObject = v8Runtime.getGlobalObject().getBuiltInObject()) { + v8ValueBuiltInObject.freeze(v8ValueObject); + } + v8ValueArray.push(1); + V8Module v8Module = v8Runtime.createV8Module("test.js", v8ValueObject); + assertFalse(v8Module.isSourceTextModule()); + assertTrue(v8Module.isSyntheticModule()); + return v8Module; + } + } + return null; + }); + v8Runtime.getExecutor("import * as x from 'test.js'; Object.assign(globalThis, x);") + .setModule(true).executeVoid(); + assertEquals(1, v8Runtime.getGlobalObject().getInteger("a")); + assertEquals(2, v8Runtime.getGlobalObject().invokeInteger("b", 1)); + assertEquals("[1]", v8Runtime.getExecutor("JSON.stringify(c);").executeString()); + v8Runtime.getExecutor("c.push(2);").executeVoid(); + v8Runtime.getExecutor("import * as x from 'test.js'; Object.assign(globalThis, x);") + .setModule(true).executeVoid(); + assertEquals( + "[1,2]", + v8Runtime.getExecutor("JSON.stringify(c);").executeString(), + "The array should be updated by the previous import."); + try (V8ValuePromise v8ValuePromise = v8Runtime.getExecutor( + "import * as x from 'test.js'; x['z'] = 1;") + .setModule(true).execute()) { + assertFalse(v8ValuePromise.isFulfilled()); + } + v8Runtime.await(); + assertEquals( + "TypeError: Cannot add property z, object is not extensible", + v8Runtime.getGlobalObject().getString("reason")); + assertEquals(1, v8Runtime.getV8ModuleCount()); + } + @Test public void testUnexpectedIdentifier() throws JavetException { try (V8Module v8Module = v8Runtime.getExecutor(