@papyrus-sdk/engine-native 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +90 -3
- package/dist/index.d.ts +90 -3
- package/dist/index.js +483 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +483 -4
- package/dist/index.mjs.map +1 -1
- package/ios/PapyrusNativeEngine.m +447 -372
- package/ios/PapyrusNativeEngine.podspec +15 -15
- package/ios/PapyrusPageView.h +19 -16
- package/ios/PapyrusPageView.m +63 -54
- package/package.json +36 -32
- package/LICENSE +0 -21
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cache-v2-55a2e41fcdfef7f23046.json +0 -1323
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-ce719ceafe10fdc060d9.json +0 -184
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-ba59984c0779dea51592.json +0 -60
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/index-2025-12-22T13-33-34-0909.json +0 -92
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/target-papyrus_text-Debug-29cd4996bc13fe24a65c.json +0 -168
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_deps +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_log +0 -20
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeCache.txt +0 -400
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -264
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/rules.ninja +0 -64
- package/android/.cxx/Debug/6t29645j/arm64-v8a/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build.json +0 -38
- package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/6t29645j/arm64-v8a/build.ninja +0 -158
- package/android/.cxx/Debug/6t29645j/arm64-v8a/build_file_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/arm64-v8a/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json +0 -12
- package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/6t29645j/arm64-v8a/configure_fingerprint.bin +0 -28
- package/android/.cxx/Debug/6t29645j/arm64-v8a/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/6t29645j/arm64-v8a/prefab_config.json +0 -4
- package/android/.cxx/Debug/6t29645j/arm64-v8a/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cache-v2-7f933b968e76d6ce336c.json +0 -1323
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-439d2bc9e04bf2a43452.json +0 -184
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-efc4cfee3dc3a5ec05be.json +0 -60
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/index-2025-12-22T13-33-36-0881.json +0 -92
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/target-papyrus_text-Debug-e3f83458cbaf3644c279.json +0 -168
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_deps +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_log +0 -20
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeCache.txt +0 -400
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/CMakeOutput.log +0 -268
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/rules.ninja +0 -64
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build.json +0 -38
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/build.ninja +0 -158
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/build_file_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json +0 -12
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/configure_fingerprint.bin +0 -28
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/prefab_config.json +0 -4
- package/android/.cxx/Debug/6t29645j/armeabi-v7a/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/hash_key.txt +0 -26
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cache-v2-921e99e188641cccb611.json +0 -1323
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cmakeFiles-v1-842a746390c683135141.json +0 -184
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/codemodel-v2-5a1f9507fc5ae29259c9.json +0 -60
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/index-2025-12-22T13-33-37-0961.json +0 -92
- package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/target-papyrus_text-Debug-3cc07532ad82ada3b95c.json +0 -168
- package/android/.cxx/Debug/6t29645j/x86/.ninja_deps +0 -0
- package/android/.cxx/Debug/6t29645j/x86/.ninja_log +0 -20
- package/android/.cxx/Debug/6t29645j/x86/CMakeCache.txt +0 -400
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/CMakeOutput.log +0 -258
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/rules.ninja +0 -64
- package/android/.cxx/Debug/6t29645j/x86/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/6t29645j/x86/android_gradle_build.json +0 -38
- package/android/.cxx/Debug/6t29645j/x86/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/6t29645j/x86/build.ninja +0 -158
- package/android/.cxx/Debug/6t29645j/x86/build_file_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/x86/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/6t29645j/x86/compile_commands.json +0 -12
- package/android/.cxx/Debug/6t29645j/x86/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86/configure_fingerprint.bin +0 -28
- package/android/.cxx/Debug/6t29645j/x86/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/6t29645j/x86/prefab_config.json +0 -4
- package/android/.cxx/Debug/6t29645j/x86/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cache-v2-de693df49d051882903b.json +0 -1323
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-8206847cf10ce80b1459.json +0 -184
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/codemodel-v2-ad9301b1a16c83f532c2.json +0 -60
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/index-2025-12-22T13-33-39-0005.json +0 -92
- package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/target-papyrus_text-Debug-e1bb1d27c41dc820b379.json +0 -168
- package/android/.cxx/Debug/6t29645j/x86_64/.ninja_deps +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/.ninja_log +0 -20
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeCache.txt +0 -400
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/CMakeOutput.log +0 -258
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/TargetDirectories.txt +0 -3
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/rules.ninja +0 -64
- package/android/.cxx/Debug/6t29645j/x86_64/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build.json +0 -38
- package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build_mini.json +0 -27
- package/android/.cxx/Debug/6t29645j/x86_64/build.ninja +0 -158
- package/android/.cxx/Debug/6t29645j/x86_64/build_file_index.txt +0 -1
- package/android/.cxx/Debug/6t29645j/x86_64/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json +0 -12
- package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/6t29645j/x86_64/configure_fingerprint.bin +0 -28
- package/android/.cxx/Debug/6t29645j/x86_64/metadata_generation_command.txt +0 -19
- package/android/.cxx/Debug/6t29645j/x86_64/prefab_config.json +0 -4
- package/android/.cxx/Debug/6t29645j/x86_64/symbol_folder_index.txt +0 -1
- package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/x86/compile_commands.json +0 -12
- package/android/.cxx/tools/debug/x86_64/compile_commands.json +0 -12
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/results.bin +0 -1
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/android/support/v4/util/ArrayMap.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/BuildConfig.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore$EngineState.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule$1.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutline.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutlineItem.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPackage.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageView.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageViewManager.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextHit.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSearch.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelect.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelection.dex +0 -0
- package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
- package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/results.bin +0 -1
- package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/generated/source/buildConfig/debug/com/papyrus/engine/BuildConfig.java +0 -10
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
- package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
- package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_command_papyrus_text.bat +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_model.json +0 -186
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stderr_papyrus_text.txt +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stdout_papyrus_text.txt +0 -2
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_157_timing.txt +0 -8
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_167_timing.txt +0 -8
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_168_timing.txt +0 -14
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_172_timing.txt +0 -8
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_2919_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_3311_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_450_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_command_papyrus_text.bat +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_model.json +0 -186
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stderr_papyrus_text.txt +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stdout_papyrus_text.txt +0 -2
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_158_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_160_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_164_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_168_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_2922_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_3311_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_450_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_command_papyrus_text.bat +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_model.json +0 -186
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stderr_papyrus_text.txt +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stdout_papyrus_text.txt +0 -2
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_160_timing.txt +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_164_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_168_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_170_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_2907_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_3311_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_450_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_command_papyrus_text.bat +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_model.json +0 -186
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stderr_papyrus_text.txt +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stdout_papyrus_text.txt +0 -2
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_155_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_160_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_164_timing.txt +0 -3
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_168_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_2916_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_3311_timing.txt +0 -5
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_450_timing.txt +0 -6
- package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/metadata_generation_record.json +0 -41
- package/android/build/intermediates/cxx/Debug/6t29645j/obj/arm64-v8a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/obj/armeabi-v7a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86/libpapyrus_text.so +0 -0
- package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86_64/libpapyrus_text.so +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/android/support/v4/util/ArrayMap.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutline.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPackage.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageView.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextHit.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSearch.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelect.class +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelection.class +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libpapyrus_text.so +0 -0
- package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libpapyrus_text.so +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libpapyrus_text.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libpapyrus_text.so +0 -0
- package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libpapyrus_text.so +0 -0
- package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
- package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/android/support/v4/util/ArrayMap.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutline.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageView.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextHit.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSearch.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelect.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelection.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule$1.class.uniqueId2 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule.class.uniqueId1 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusPackage.class.uniqueId0 +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
package/dist/index.js
CHANGED
|
@@ -19,13 +19,112 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
// index.ts
|
|
20
20
|
var index_exports = {};
|
|
21
21
|
__export(index_exports, {
|
|
22
|
+
MobileDocumentEngine: () => MobileDocumentEngine,
|
|
22
23
|
NativeDocumentEngine: () => NativeDocumentEngine,
|
|
23
|
-
PapyrusPageView: () => PapyrusPageView
|
|
24
|
+
PapyrusPageView: () => PapyrusPageView,
|
|
25
|
+
WebViewDocumentEngine: () => WebViewDocumentEngine
|
|
24
26
|
});
|
|
25
27
|
module.exports = __toCommonJS(index_exports);
|
|
26
28
|
var import_react_native = require("react-native");
|
|
27
29
|
var import_core = require("@papyrus-sdk/core");
|
|
30
|
+
var import_types = require("@papyrus-sdk/types");
|
|
28
31
|
var MODULE_NAME = "PapyrusNativeEngine";
|
|
32
|
+
var BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
33
|
+
var BASE64_LOOKUP = (() => {
|
|
34
|
+
const table = new Uint8Array(256);
|
|
35
|
+
table.fill(255);
|
|
36
|
+
for (let i = 0; i < BASE64_CHARS.length; i += 1) {
|
|
37
|
+
table[BASE64_CHARS.charCodeAt(i)] = i;
|
|
38
|
+
}
|
|
39
|
+
return table;
|
|
40
|
+
})();
|
|
41
|
+
var parseDataUri = (value) => {
|
|
42
|
+
const match = /^data:([^;,]+)?(;base64)?,(.*)$/.exec(value);
|
|
43
|
+
if (!match) return null;
|
|
44
|
+
return {
|
|
45
|
+
mime: match[1] ?? "",
|
|
46
|
+
isBase64: Boolean(match[2]),
|
|
47
|
+
data: match[3] ?? ""
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
var looksLikeUri = (value) => value.startsWith("http://") || value.startsWith("https://") || value.startsWith("/") || value.startsWith("./") || value.startsWith("../") || value.startsWith("file://");
|
|
51
|
+
var isLikelyBase64 = (value) => {
|
|
52
|
+
if (looksLikeUri(value)) return false;
|
|
53
|
+
if (value.includes(".")) return false;
|
|
54
|
+
if (value.length < 16) return false;
|
|
55
|
+
return /^[A-Za-z0-9+/=]+$/.test(value);
|
|
56
|
+
};
|
|
57
|
+
var isHttpUri = (value) => value.startsWith("http://") || value.startsWith("https://");
|
|
58
|
+
var decodeBase64 = (value) => {
|
|
59
|
+
const clean = value.replace(/[^A-Za-z0-9+/=]/g, "");
|
|
60
|
+
const padding = clean.endsWith("==") ? 2 : clean.endsWith("=") ? 1 : 0;
|
|
61
|
+
const outputLength = Math.max(0, clean.length * 3 / 4 - padding);
|
|
62
|
+
const output = new Uint8Array(outputLength);
|
|
63
|
+
let buffer = 0;
|
|
64
|
+
let bits = 0;
|
|
65
|
+
let index = 0;
|
|
66
|
+
for (let i = 0; i < clean.length; i += 1) {
|
|
67
|
+
const charCode = clean.charCodeAt(i);
|
|
68
|
+
if (charCode === 61) break;
|
|
69
|
+
const valueIndex = BASE64_LOOKUP[charCode];
|
|
70
|
+
if (valueIndex === 255) continue;
|
|
71
|
+
buffer = buffer << 6 | valueIndex;
|
|
72
|
+
bits += 6;
|
|
73
|
+
if (bits >= 8) {
|
|
74
|
+
bits -= 8;
|
|
75
|
+
output[index++] = buffer >> bits & 255;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return output;
|
|
79
|
+
};
|
|
80
|
+
var encodeBase64 = (bytes) => {
|
|
81
|
+
let output = "";
|
|
82
|
+
let buffer = 0;
|
|
83
|
+
let bits = 0;
|
|
84
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
85
|
+
buffer = buffer << 8 | bytes[i];
|
|
86
|
+
bits += 8;
|
|
87
|
+
while (bits >= 6) {
|
|
88
|
+
bits -= 6;
|
|
89
|
+
output += BASE64_CHARS[buffer >> bits & 63];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (bits > 0) {
|
|
93
|
+
output += BASE64_CHARS[buffer << 6 - bits & 63];
|
|
94
|
+
}
|
|
95
|
+
const remainder = bytes.length % 3;
|
|
96
|
+
if (remainder === 1) return `${output}==`;
|
|
97
|
+
if (remainder === 2) return `${output}=`;
|
|
98
|
+
return output;
|
|
99
|
+
};
|
|
100
|
+
var isLoadRequest = (input) => typeof input === "object" && input !== null && "source" in input && "type" in input;
|
|
101
|
+
var normalizeLoadInput = (input) => isLoadRequest(input) ? { source: input.source, type: input.type } : { source: input };
|
|
102
|
+
var inferDocumentType = (source) => {
|
|
103
|
+
if (typeof source === "string") {
|
|
104
|
+
const dataUri = parseDataUri(source);
|
|
105
|
+
if (dataUri?.mime) {
|
|
106
|
+
const mime = dataUri.mime.toLowerCase();
|
|
107
|
+
if (mime.includes("epub")) return "epub";
|
|
108
|
+
if (mime.includes("text")) return "text";
|
|
109
|
+
if (mime.includes("pdf")) return "pdf";
|
|
110
|
+
}
|
|
111
|
+
const clean = source.split("?")[0].split("#")[0];
|
|
112
|
+
const ext = clean.includes(".") ? clean.split(".").pop()?.toLowerCase() : void 0;
|
|
113
|
+
if (ext === "epub") return "epub";
|
|
114
|
+
if (ext === "txt") return "text";
|
|
115
|
+
if (ext === "pdf") return "pdf";
|
|
116
|
+
return "pdf";
|
|
117
|
+
}
|
|
118
|
+
if (typeof source === "object" && source !== null && "uri" in source) {
|
|
119
|
+
const uri = source.uri;
|
|
120
|
+
const clean = uri.split("?")[0].split("#")[0];
|
|
121
|
+
const ext = clean.includes(".") ? clean.split(".").pop()?.toLowerCase() : void 0;
|
|
122
|
+
if (ext === "epub") return "epub";
|
|
123
|
+
if (ext === "txt") return "text";
|
|
124
|
+
if (ext === "pdf") return "pdf";
|
|
125
|
+
}
|
|
126
|
+
return "pdf";
|
|
127
|
+
};
|
|
29
128
|
var PapyrusPageView = (0, import_react_native.requireNativeComponent)("PapyrusPageView");
|
|
30
129
|
var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
31
130
|
constructor() {
|
|
@@ -39,7 +138,11 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
|
39
138
|
this.nativeModule = import_react_native.NativeModules[MODULE_NAME] ?? null;
|
|
40
139
|
this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : "default";
|
|
41
140
|
}
|
|
42
|
-
async load(
|
|
141
|
+
async load(input) {
|
|
142
|
+
const { source, type } = normalizeLoadInput(input);
|
|
143
|
+
if (type && type !== "pdf") {
|
|
144
|
+
throw new Error(`[NativeDocumentEngine] Tipo de documento n\xE3o suportado: ${type}`);
|
|
145
|
+
}
|
|
43
146
|
const native = this.assertNativeModule();
|
|
44
147
|
const normalized = await this.normalizeSource(source);
|
|
45
148
|
const result = native.load ? await native.load(this.engineId, normalized) : void 0;
|
|
@@ -134,7 +237,15 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
|
134
237
|
return this.nativeModule;
|
|
135
238
|
}
|
|
136
239
|
async normalizeSource(source) {
|
|
137
|
-
if (typeof source === "string")
|
|
240
|
+
if (typeof source === "string") {
|
|
241
|
+
const dataUri = parseDataUri(source);
|
|
242
|
+
if (dataUri?.isBase64) {
|
|
243
|
+
return { data: decodeBase64(dataUri.data) };
|
|
244
|
+
}
|
|
245
|
+
if (looksLikeUri(source)) return { uri: source };
|
|
246
|
+
if (isLikelyBase64(source)) return { data: decodeBase64(source) };
|
|
247
|
+
return { uri: source };
|
|
248
|
+
}
|
|
138
249
|
if (this.isUriSource(source)) return { uri: source.uri };
|
|
139
250
|
if (this.isDataSource(source)) return { data: source.data };
|
|
140
251
|
if (this.isFileLike(source)) return { data: await source.arrayBuffer() };
|
|
@@ -156,9 +267,377 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
|
156
267
|
return null;
|
|
157
268
|
}
|
|
158
269
|
};
|
|
270
|
+
var WebViewDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
271
|
+
constructor() {
|
|
272
|
+
super(...arguments);
|
|
273
|
+
this.bridge = null;
|
|
274
|
+
this.ready = false;
|
|
275
|
+
this.requestId = 0;
|
|
276
|
+
this.pending = /* @__PURE__ */ new Map();
|
|
277
|
+
this.bridgeResolvers = [];
|
|
278
|
+
this.readyResolvers = [];
|
|
279
|
+
this.pageCount = 0;
|
|
280
|
+
this.currentPage = 1;
|
|
281
|
+
this.zoom = 1;
|
|
282
|
+
this.rotation = 0;
|
|
283
|
+
this.outline = [];
|
|
284
|
+
}
|
|
285
|
+
getRenderTargetType() {
|
|
286
|
+
return "webview";
|
|
287
|
+
}
|
|
288
|
+
attachBridge(bridge) {
|
|
289
|
+
this.bridge = bridge;
|
|
290
|
+
this.bridgeResolvers.forEach((resolve) => resolve(bridge));
|
|
291
|
+
this.bridgeResolvers = [];
|
|
292
|
+
}
|
|
293
|
+
handleMessage(raw) {
|
|
294
|
+
let message = null;
|
|
295
|
+
try {
|
|
296
|
+
message = JSON.parse(raw);
|
|
297
|
+
} catch {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (!message) return;
|
|
301
|
+
if (message.type === "ready") {
|
|
302
|
+
this.ready = true;
|
|
303
|
+
this.readyResolvers.forEach((resolve) => resolve());
|
|
304
|
+
this.readyResolvers = [];
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (message.type === "response") {
|
|
308
|
+
const pending = this.pending.get(message.id);
|
|
309
|
+
if (!pending) return;
|
|
310
|
+
this.pending.delete(message.id);
|
|
311
|
+
if (message.ok) {
|
|
312
|
+
pending.resolve(message.data);
|
|
313
|
+
} else {
|
|
314
|
+
pending.reject(new Error(message.error ?? "[Papyrus] WebView runtime error"));
|
|
315
|
+
}
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
if (message.type === "state") {
|
|
319
|
+
if (typeof message.payload.pageCount === "number") this.pageCount = message.payload.pageCount;
|
|
320
|
+
if (typeof message.payload.currentPage === "number") this.currentPage = message.payload.currentPage;
|
|
321
|
+
if (typeof message.payload.zoom === "number") this.zoom = message.payload.zoom;
|
|
322
|
+
if (Array.isArray(message.payload.outline)) this.outline = message.payload.outline;
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (message.type === "event") {
|
|
326
|
+
const payload = message.payload ?? {};
|
|
327
|
+
if (message.name === "RUNTIME_LOG") {
|
|
328
|
+
if (__DEV__) {
|
|
329
|
+
const text = typeof payload?.message === "string" ? payload.message : JSON.stringify(payload);
|
|
330
|
+
console.log("[Papyrus WebView runtime]", text);
|
|
331
|
+
}
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (message.name === "RUNTIME_ERROR") {
|
|
335
|
+
if (__DEV__) {
|
|
336
|
+
console.warn("[Papyrus WebView runtime]", payload);
|
|
337
|
+
}
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (message.name === import_types.PapyrusEventType.TEXT_SELECTED) {
|
|
341
|
+
import_core.papyrusEvents.emit(import_types.PapyrusEventType.TEXT_SELECTED, payload);
|
|
342
|
+
} else if (message.name === import_types.PapyrusEventType.SEARCH_TRIGGERED) {
|
|
343
|
+
import_core.papyrusEvents.emit(import_types.PapyrusEventType.SEARCH_TRIGGERED, payload);
|
|
344
|
+
} else if (message.name === import_types.PapyrusEventType.DOCUMENT_LOADED) {
|
|
345
|
+
if (typeof payload.pageCount === "number") {
|
|
346
|
+
this.pageCount = payload.pageCount;
|
|
347
|
+
}
|
|
348
|
+
import_core.papyrusEvents.emit(import_types.PapyrusEventType.DOCUMENT_LOADED, payload);
|
|
349
|
+
}
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
if (__DEV__) {
|
|
353
|
+
console.warn("[Papyrus WebView] Unknown message", message);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async load(input) {
|
|
357
|
+
const { source, type } = normalizeLoadInput(input);
|
|
358
|
+
const resolvedType = type ?? inferDocumentType(source);
|
|
359
|
+
if (resolvedType === "pdf") {
|
|
360
|
+
throw new Error("[WebViewDocumentEngine] Use o NativeDocumentEngine para PDFs no mobile.");
|
|
361
|
+
}
|
|
362
|
+
const payloadSource = await this.normalizeRuntimeSource(resolvedType, source);
|
|
363
|
+
const response = await this.request("load", {
|
|
364
|
+
type: resolvedType,
|
|
365
|
+
source: payloadSource
|
|
366
|
+
});
|
|
367
|
+
if (typeof response?.pageCount === "number") this.pageCount = response.pageCount;
|
|
368
|
+
if (Array.isArray(response?.outline)) this.outline = response.outline;
|
|
369
|
+
this.currentPage = 1;
|
|
370
|
+
}
|
|
371
|
+
getPageCount() {
|
|
372
|
+
return this.pageCount;
|
|
373
|
+
}
|
|
374
|
+
getCurrentPage() {
|
|
375
|
+
return this.currentPage;
|
|
376
|
+
}
|
|
377
|
+
goToPage(page) {
|
|
378
|
+
if (page < 1) return;
|
|
379
|
+
this.currentPage = page;
|
|
380
|
+
void this.request("go-to-page", { page });
|
|
381
|
+
}
|
|
382
|
+
setZoom(zoom) {
|
|
383
|
+
this.zoom = Math.max(0.5, Math.min(4, zoom));
|
|
384
|
+
void this.request("set-zoom", { zoom: this.zoom });
|
|
385
|
+
}
|
|
386
|
+
getZoom() {
|
|
387
|
+
return this.zoom;
|
|
388
|
+
}
|
|
389
|
+
rotate(direction) {
|
|
390
|
+
if (direction === "clockwise") {
|
|
391
|
+
this.rotation = (this.rotation + 90) % 360;
|
|
392
|
+
} else {
|
|
393
|
+
this.rotation = (this.rotation - 90) % 360;
|
|
394
|
+
if (this.rotation < 0) this.rotation += 360;
|
|
395
|
+
}
|
|
396
|
+
void this.request("set-rotation", { rotation: this.rotation });
|
|
397
|
+
}
|
|
398
|
+
getRotation() {
|
|
399
|
+
return this.rotation;
|
|
400
|
+
}
|
|
401
|
+
async renderPage(pageIndex, target, scale) {
|
|
402
|
+
void pageIndex;
|
|
403
|
+
void target;
|
|
404
|
+
void scale;
|
|
405
|
+
}
|
|
406
|
+
async renderTextLayer(pageIndex, container, scale) {
|
|
407
|
+
void pageIndex;
|
|
408
|
+
void container;
|
|
409
|
+
void scale;
|
|
410
|
+
}
|
|
411
|
+
async getTextContent(pageIndex) {
|
|
412
|
+
return await this.request("get-text-content", { pageIndex });
|
|
413
|
+
}
|
|
414
|
+
async getPageDimensions(pageIndex) {
|
|
415
|
+
return await this.request("get-page-dimensions", { pageIndex });
|
|
416
|
+
}
|
|
417
|
+
async searchText(query) {
|
|
418
|
+
return await this.request("search-text", { query });
|
|
419
|
+
}
|
|
420
|
+
async selectText(pageIndex, rect) {
|
|
421
|
+
return await this.request("select-text", { pageIndex, rect });
|
|
422
|
+
}
|
|
423
|
+
async getOutline() {
|
|
424
|
+
if (this.outline.length > 0) return this.outline;
|
|
425
|
+
return await this.request("get-outline");
|
|
426
|
+
}
|
|
427
|
+
async getPageIndex(dest) {
|
|
428
|
+
return await this.request("get-page-index", { dest });
|
|
429
|
+
}
|
|
430
|
+
destroy() {
|
|
431
|
+
this.pending.forEach(({ reject }) => reject(new Error("[Papyrus] WebView engine destroyed")));
|
|
432
|
+
this.pending.clear();
|
|
433
|
+
this.bridge = null;
|
|
434
|
+
this.ready = false;
|
|
435
|
+
}
|
|
436
|
+
async ensureBridge() {
|
|
437
|
+
if (this.bridge) return this.bridge;
|
|
438
|
+
return new Promise((resolve) => {
|
|
439
|
+
this.bridgeResolvers.push(resolve);
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
async ensureReady() {
|
|
443
|
+
if (this.ready) return;
|
|
444
|
+
return new Promise((resolve) => {
|
|
445
|
+
this.readyResolvers.push(resolve);
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
async request(kind, payload) {
|
|
449
|
+
const bridge = await this.ensureBridge();
|
|
450
|
+
await this.ensureReady();
|
|
451
|
+
const id = `${Date.now()}-${this.requestId++}`;
|
|
452
|
+
return new Promise((resolve, reject) => {
|
|
453
|
+
const timeoutMs = kind === "load" ? 3e4 : 8e3;
|
|
454
|
+
const timeoutId = setTimeout(() => {
|
|
455
|
+
this.pending.delete(id);
|
|
456
|
+
reject(new Error(`[Papyrus] WebView response timeout: ${kind}`));
|
|
457
|
+
}, timeoutMs);
|
|
458
|
+
this.pending.set(id, {
|
|
459
|
+
resolve: (data) => {
|
|
460
|
+
clearTimeout(timeoutId);
|
|
461
|
+
resolve(data);
|
|
462
|
+
},
|
|
463
|
+
reject: (error) => {
|
|
464
|
+
clearTimeout(timeoutId);
|
|
465
|
+
reject(error);
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
bridge.postMessage(JSON.stringify({ id, kind, payload }));
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
async normalizeRuntimeSource(type, source) {
|
|
472
|
+
if (typeof source === "string") {
|
|
473
|
+
const dataUri = parseDataUri(source);
|
|
474
|
+
if (dataUri) {
|
|
475
|
+
if (dataUri.isBase64) {
|
|
476
|
+
return { kind: "base64", data: dataUri.data, mime: dataUri.mime || void 0 };
|
|
477
|
+
}
|
|
478
|
+
const text = decodeURIComponent(dataUri.data);
|
|
479
|
+
return { kind: "text", text };
|
|
480
|
+
}
|
|
481
|
+
if (looksLikeUri(source)) {
|
|
482
|
+
if (isHttpUri(source)) {
|
|
483
|
+
const fetched = await this.fetchRemoteSource(type, source);
|
|
484
|
+
if (fetched) return fetched;
|
|
485
|
+
}
|
|
486
|
+
return { kind: "uri", uri: source };
|
|
487
|
+
}
|
|
488
|
+
if (isLikelyBase64(source)) {
|
|
489
|
+
return { kind: "base64", data: source };
|
|
490
|
+
}
|
|
491
|
+
if (type === "text") {
|
|
492
|
+
return { kind: "text", text: source };
|
|
493
|
+
}
|
|
494
|
+
return { kind: "uri", uri: source };
|
|
495
|
+
}
|
|
496
|
+
if (this.isUriSource(source)) {
|
|
497
|
+
const uri = source.uri;
|
|
498
|
+
if (isHttpUri(uri)) {
|
|
499
|
+
const fetched = await this.fetchRemoteSource(type, uri);
|
|
500
|
+
if (fetched) return fetched;
|
|
501
|
+
}
|
|
502
|
+
return { kind: "uri", uri };
|
|
503
|
+
}
|
|
504
|
+
if (this.isDataSource(source)) {
|
|
505
|
+
const bytes = source.data instanceof Uint8Array ? source.data : new Uint8Array(source.data);
|
|
506
|
+
return { kind: "base64", data: encodeBase64(bytes) };
|
|
507
|
+
}
|
|
508
|
+
if (this.isFileLike(source)) {
|
|
509
|
+
const buffer = await source.arrayBuffer();
|
|
510
|
+
return { kind: "base64", data: encodeBase64(new Uint8Array(buffer)) };
|
|
511
|
+
}
|
|
512
|
+
if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
|
|
513
|
+
const bytes = source instanceof Uint8Array ? source : new Uint8Array(source);
|
|
514
|
+
return { kind: "base64", data: encodeBase64(bytes) };
|
|
515
|
+
}
|
|
516
|
+
return { kind: "base64", data: encodeBase64(new Uint8Array(source)) };
|
|
517
|
+
}
|
|
518
|
+
async fetchRemoteSource(type, uri) {
|
|
519
|
+
try {
|
|
520
|
+
const response = await fetch(uri);
|
|
521
|
+
if (!response.ok) return null;
|
|
522
|
+
if (type === "text") {
|
|
523
|
+
const text = await response.text();
|
|
524
|
+
return { kind: "text", text };
|
|
525
|
+
}
|
|
526
|
+
if (type === "epub") {
|
|
527
|
+
const buffer = await this.readResponseBuffer(response);
|
|
528
|
+
return { kind: "base64", data: encodeBase64(new Uint8Array(buffer)) };
|
|
529
|
+
}
|
|
530
|
+
return null;
|
|
531
|
+
} catch {
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
async readResponseBuffer(response) {
|
|
536
|
+
try {
|
|
537
|
+
return await response.arrayBuffer();
|
|
538
|
+
} catch {
|
|
539
|
+
const blob = await response.blob();
|
|
540
|
+
return await new Promise((resolve, reject) => {
|
|
541
|
+
const reader = new FileReader();
|
|
542
|
+
reader.onerror = () => reject(new Error("[Papyrus] Failed to read response blob"));
|
|
543
|
+
reader.onload = () => resolve(reader.result);
|
|
544
|
+
reader.readAsArrayBuffer(blob);
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
isUriSource(source) {
|
|
549
|
+
return typeof source === "object" && source !== null && "uri" in source;
|
|
550
|
+
}
|
|
551
|
+
isDataSource(source) {
|
|
552
|
+
return typeof source === "object" && source !== null && "data" in source;
|
|
553
|
+
}
|
|
554
|
+
isFileLike(source) {
|
|
555
|
+
return typeof source === "object" && source !== null && typeof source.arrayBuffer === "function";
|
|
556
|
+
}
|
|
557
|
+
};
|
|
558
|
+
var MobileDocumentEngine = class extends import_core.BaseDocumentEngine {
|
|
559
|
+
constructor() {
|
|
560
|
+
super();
|
|
561
|
+
this.pdfEngine = new NativeDocumentEngine();
|
|
562
|
+
this.webEngine = new WebViewDocumentEngine();
|
|
563
|
+
this.activeEngine = this.pdfEngine;
|
|
564
|
+
}
|
|
565
|
+
getRenderTargetType() {
|
|
566
|
+
return this.activeEngine.getRenderTargetType?.() ?? "canvas";
|
|
567
|
+
}
|
|
568
|
+
attachWebView(bridge) {
|
|
569
|
+
this.webEngine.attachBridge(bridge);
|
|
570
|
+
}
|
|
571
|
+
handleWebViewMessage(data) {
|
|
572
|
+
this.webEngine.handleMessage(data);
|
|
573
|
+
}
|
|
574
|
+
async load(input) {
|
|
575
|
+
const { source, type } = normalizeLoadInput(input);
|
|
576
|
+
const resolvedType = type ?? inferDocumentType(source);
|
|
577
|
+
this.activeEngine = resolvedType === "pdf" ? this.pdfEngine : this.webEngine;
|
|
578
|
+
await this.activeEngine.load({ type: resolvedType, source });
|
|
579
|
+
}
|
|
580
|
+
getPageCount() {
|
|
581
|
+
return this.activeEngine.getPageCount();
|
|
582
|
+
}
|
|
583
|
+
getCurrentPage() {
|
|
584
|
+
return this.activeEngine.getCurrentPage();
|
|
585
|
+
}
|
|
586
|
+
goToPage(page) {
|
|
587
|
+
this.activeEngine.goToPage(page);
|
|
588
|
+
}
|
|
589
|
+
setZoom(zoom) {
|
|
590
|
+
this.activeEngine.setZoom(zoom);
|
|
591
|
+
}
|
|
592
|
+
getZoom() {
|
|
593
|
+
return this.activeEngine.getZoom();
|
|
594
|
+
}
|
|
595
|
+
rotate(direction) {
|
|
596
|
+
this.activeEngine.rotate(direction);
|
|
597
|
+
}
|
|
598
|
+
getRotation() {
|
|
599
|
+
return this.activeEngine.getRotation();
|
|
600
|
+
}
|
|
601
|
+
async renderPage(pageIndex, target, scale) {
|
|
602
|
+
await this.activeEngine.renderPage(pageIndex, target, scale);
|
|
603
|
+
}
|
|
604
|
+
async renderTextLayer(pageIndex, container, scale) {
|
|
605
|
+
await this.activeEngine.renderTextLayer(pageIndex, container, scale);
|
|
606
|
+
}
|
|
607
|
+
async getTextContent(pageIndex) {
|
|
608
|
+
return await this.activeEngine.getTextContent(pageIndex);
|
|
609
|
+
}
|
|
610
|
+
async getPageDimensions(pageIndex) {
|
|
611
|
+
return await this.activeEngine.getPageDimensions(pageIndex);
|
|
612
|
+
}
|
|
613
|
+
async searchText(query) {
|
|
614
|
+
if (typeof this.activeEngine.searchText === "function") {
|
|
615
|
+
return await this.activeEngine.searchText(query);
|
|
616
|
+
}
|
|
617
|
+
return [];
|
|
618
|
+
}
|
|
619
|
+
async selectText(pageIndex, rect) {
|
|
620
|
+
if (typeof this.activeEngine.selectText === "function") {
|
|
621
|
+
return await this.activeEngine.selectText(pageIndex, rect);
|
|
622
|
+
}
|
|
623
|
+
return null;
|
|
624
|
+
}
|
|
625
|
+
async getOutline() {
|
|
626
|
+
return await this.activeEngine.getOutline();
|
|
627
|
+
}
|
|
628
|
+
async getPageIndex(dest) {
|
|
629
|
+
return await this.activeEngine.getPageIndex(dest);
|
|
630
|
+
}
|
|
631
|
+
destroy() {
|
|
632
|
+
this.pdfEngine.destroy();
|
|
633
|
+
this.webEngine.destroy();
|
|
634
|
+
}
|
|
635
|
+
};
|
|
159
636
|
// Annotate the CommonJS export names for ESM import in node:
|
|
160
637
|
0 && (module.exports = {
|
|
638
|
+
MobileDocumentEngine,
|
|
161
639
|
NativeDocumentEngine,
|
|
162
|
-
PapyrusPageView
|
|
640
|
+
PapyrusPageView,
|
|
641
|
+
WebViewDocumentEngine
|
|
163
642
|
});
|
|
164
643
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import { NativeModules, requireNativeComponent, type ViewProps } from 'react-native';\r\nimport { BaseDocumentEngine } from '@papyrus-sdk/core';\r\nimport { DocumentSource, TextItem, OutlineItem, FileLike, SearchResult, TextSelection } from '@papyrus-sdk/types';\r\n\r\nconst MODULE_NAME = 'PapyrusNativeEngine';\r\n\r\ntype NativeDocumentSource = {\r\n uri?: string;\r\n data?: ArrayBuffer | Uint8Array;\r\n};\r\n\r\ntype NativeEngineModule = {\r\n createEngine?: () => string;\r\n destroyEngine?: (engineId: string) => void;\r\n load?: (engineId: string, source: NativeDocumentSource) => Promise<{ pageCount?: number } | void>;\r\n getPageCount?: (engineId: string) => number;\r\n renderPage?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n renderTextLayer?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n getTextContent?: (engineId: string, pageIndex: number) => Promise<TextItem[]>;\r\n getPageDimensions?: (engineId: string, pageIndex: number) => Promise<{ width: number; height: number }>;\r\n searchText?: (engineId: string, query: string) => Promise<SearchResult[]>;\r\n selectText?: (engineId: string, pageIndex: number, x: number, y: number, width: number, height: number) => Promise<TextSelection | null>;\r\n getOutline?: (engineId: string) => Promise<OutlineItem[]>;\r\n getPageIndex?: (engineId: string, dest: any) => Promise<number | null>;\r\n};\r\n\r\nexport type PapyrusPageViewProps = ViewProps & {\r\n engineId?: string;\r\n};\r\n\r\nexport const PapyrusPageView = requireNativeComponent<PapyrusPageViewProps>('PapyrusPageView');\r\n\r\nexport class NativeDocumentEngine extends BaseDocumentEngine {\r\n private nativeModule: NativeEngineModule | null = null;\r\n private engineId: string = 'default';\r\n private pageCount: number = 0;\r\n private currentPage: number = 1;\r\n private zoom: number = 1.0;\r\n private rotation: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this.nativeModule = (NativeModules as any)[MODULE_NAME] ?? null;\r\n this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : 'default';\r\n }\r\n\r\n async load(source: DocumentSource): Promise<void> {\r\n const native = this.assertNativeModule();\r\n const normalized = await this.normalizeSource(source);\r\n const result = native.load ? await native.load(this.engineId, normalized) : undefined;\r\n\r\n if (result && typeof result.pageCount === 'number') {\r\n this.pageCount = result.pageCount;\r\n } else if (native.getPageCount) {\r\n this.pageCount = native.getPageCount(this.engineId);\r\n } else {\r\n this.pageCount = 0;\r\n }\r\n\r\n this.currentPage = 1;\r\n }\r\n\r\n getPageCount(): number {\r\n return this.pageCount;\r\n }\r\n\r\n getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page >= 1 && page <= this.pageCount) {\r\n this.currentPage = page;\r\n }\r\n }\r\n\r\n setZoom(zoom: number): void {\r\n this.zoom = Math.max(0.1, Math.min(5.0, zoom));\r\n }\r\n\r\n getZoom(): number {\r\n return this.zoom;\r\n }\r\n\r\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\r\n if (direction === 'clockwise') {\r\n this.rotation = (this.rotation + 90) % 360;\r\n } else {\r\n this.rotation = (this.rotation - 90) % 360;\r\n if (this.rotation < 0) this.rotation += 360;\r\n }\r\n }\r\n\r\n getRotation(): number {\r\n return this.rotation;\r\n }\r\n\r\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderPage) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderPage(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async renderTextLayer(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderTextLayer) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderTextLayer(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getTextContent) return [];\r\n return native.getTextContent(this.engineId, pageIndex);\r\n }\r\n\r\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageDimensions) return { width: 0, height: 0 };\r\n return native.getPageDimensions(this.engineId, pageIndex);\r\n }\r\n\r\n async selectText(\r\n pageIndex: number,\r\n rect: { x: number; y: number; width: number; height: number }\r\n ): Promise<TextSelection | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.selectText) return null;\r\n return native.selectText(this.engineId, pageIndex, rect.x, rect.y, rect.width, rect.height);\r\n }\r\n\r\n async getOutline(): Promise<OutlineItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getOutline) return [];\r\n return native.getOutline(this.engineId);\r\n }\r\n\r\n async searchText(query: string): Promise<SearchResult[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.searchText) return [];\r\n return native.searchText(this.engineId, query);\r\n }\r\n\r\n async getPageIndex(dest: any): Promise<number | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageIndex) return null;\r\n return native.getPageIndex(this.engineId, dest);\r\n }\r\n\r\n destroy(): void {\r\n this.nativeModule?.destroyEngine?.(this.engineId);\r\n }\r\n\r\n private assertNativeModule(): NativeEngineModule {\r\n if (!this.nativeModule) {\r\n throw new Error(`[Papyrus] Native module \"${MODULE_NAME}\" not found. Did you run pod install / gradle sync?`);\r\n }\r\n return this.nativeModule;\r\n }\r\n\r\n private async normalizeSource(source: DocumentSource): Promise<NativeDocumentSource> {\r\n if (typeof source === 'string') return { uri: source };\r\n if (this.isUriSource(source)) return { uri: source.uri };\r\n if (this.isDataSource(source)) return { data: source.data };\r\n if (this.isFileLike(source)) return { data: await source.arrayBuffer() };\r\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) return { data: source };\r\n return { data: source as ArrayBuffer };\r\n }\r\n\r\n private isUriSource(source: DocumentSource): source is { uri: string } {\r\n return typeof source === 'object' && source !== null && 'uri' in source;\r\n }\r\n\r\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\r\n return typeof source === 'object' && source !== null && 'data' in source;\r\n }\r\n\r\n private isFileLike(source: DocumentSource): source is FileLike {\r\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\r\n }\r\n\r\n private toNativeViewTag(target: any): number | null {\r\n if (typeof target === 'number') return target;\r\n if (target?.nativeTag && typeof target.nativeTag === 'number') return target.nativeTag;\r\n return null;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import { NativeModules, requireNativeComponent, type ViewProps } from 'react-native';\nimport { BaseDocumentEngine, papyrusEvents } from '@papyrus-sdk/core';\nimport {\n DocumentLoadInput,\n DocumentLoadRequest,\n DocumentEngine,\n DocumentSource,\n DocumentType,\n PapyrusEventType,\n RenderTargetType,\n TextItem,\n OutlineItem,\n FileLike,\n SearchResult,\n TextSelection,\n} from '@papyrus-sdk/types';\n\r\nconst MODULE_NAME = 'PapyrusNativeEngine';\n\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst BASE64_LOOKUP = (() => {\n const table = new Uint8Array(256);\n table.fill(255);\n for (let i = 0; i < BASE64_CHARS.length; i += 1) {\n table[BASE64_CHARS.charCodeAt(i)] = i;\n }\n return table;\n})();\n\nconst parseDataUri = (value: string): { mime: string; isBase64: boolean; data: string } | null => {\n const match = /^data:([^;,]+)?(;base64)?,(.*)$/.exec(value);\n if (!match) return null;\n return {\n mime: match[1] ?? '',\n isBase64: Boolean(match[2]),\n data: match[3] ?? '',\n };\n};\n\nconst looksLikeUri = (value: string): boolean =>\n value.startsWith('http://') ||\n value.startsWith('https://') ||\n value.startsWith('/') ||\n value.startsWith('./') ||\n value.startsWith('../') ||\n value.startsWith('file://');\n\nconst isLikelyBase64 = (value: string): boolean => {\n if (looksLikeUri(value)) return false;\n if (value.includes('.')) return false;\n if (value.length < 16) return false;\n return /^[A-Za-z0-9+/=]+$/.test(value);\n};\n\nconst isHttpUri = (value: string): boolean =>\n value.startsWith('http://') || value.startsWith('https://');\n\nconst decodeBase64 = (value: string): Uint8Array => {\n const clean = value.replace(/[^A-Za-z0-9+/=]/g, '');\n const padding = clean.endsWith('==') ? 2 : clean.endsWith('=') ? 1 : 0;\n const outputLength = Math.max(0, (clean.length * 3) / 4 - padding);\n const output = new Uint8Array(outputLength);\n\n let buffer = 0;\n let bits = 0;\n let index = 0;\n\n for (let i = 0; i < clean.length; i += 1) {\n const charCode = clean.charCodeAt(i);\n if (charCode === 61) break;\n const valueIndex = BASE64_LOOKUP[charCode];\n if (valueIndex === 255) continue;\n buffer = (buffer << 6) | valueIndex;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n output[index++] = (buffer >> bits) & 0xff;\n }\n }\n return output;\n};\n\nconst encodeBase64 = (bytes: Uint8Array): string => {\n let output = '';\n let buffer = 0;\n let bits = 0;\n\n for (let i = 0; i < bytes.length; i += 1) {\n buffer = (buffer << 8) | bytes[i];\n bits += 8;\n while (bits >= 6) {\n bits -= 6;\n output += BASE64_CHARS[(buffer >> bits) & 0x3f];\n }\n }\n\n if (bits > 0) {\n output += BASE64_CHARS[(buffer << (6 - bits)) & 0x3f];\n }\n\n const remainder = bytes.length % 3;\n if (remainder === 1) return `${output}==`;\n if (remainder === 2) return `${output}=`;\n return output;\n};\n\nconst isLoadRequest = (input: DocumentLoadInput): input is DocumentLoadRequest =>\n typeof input === 'object' && input !== null && 'source' in input && 'type' in input;\n\nconst normalizeLoadInput = (input: DocumentLoadInput): { source: DocumentSource; type?: DocumentType } =>\n isLoadRequest(input) ? { source: input.source, type: input.type } : { source: input };\n\nconst inferDocumentType = (source: DocumentSource): DocumentType => {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri?.mime) {\n const mime = dataUri.mime.toLowerCase();\n if (mime.includes('epub')) return 'epub';\n if (mime.includes('text')) return 'text';\n if (mime.includes('pdf')) return 'pdf';\n }\n\n const clean = source.split('?')[0].split('#')[0];\n const ext = clean.includes('.') ? clean.split('.').pop()?.toLowerCase() : undefined;\n if (ext === 'epub') return 'epub';\n if (ext === 'txt') return 'text';\n if (ext === 'pdf') return 'pdf';\n return 'pdf';\n }\n\n if (typeof source === 'object' && source !== null && 'uri' in source) {\n const uri = source.uri;\n const clean = uri.split('?')[0].split('#')[0];\n const ext = clean.includes('.') ? clean.split('.').pop()?.toLowerCase() : undefined;\n if (ext === 'epub') return 'epub';\n if (ext === 'txt') return 'text';\n if (ext === 'pdf') return 'pdf';\n }\n\n return 'pdf';\n};\n\r\ntype NativeDocumentSource = {\r\n uri?: string;\r\n data?: ArrayBuffer | Uint8Array;\r\n};\r\n\r\ntype NativeEngineModule = {\r\n createEngine?: () => string;\r\n destroyEngine?: (engineId: string) => void;\r\n load?: (engineId: string, source: NativeDocumentSource) => Promise<{ pageCount?: number } | void>;\r\n getPageCount?: (engineId: string) => number;\r\n renderPage?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n renderTextLayer?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n getTextContent?: (engineId: string, pageIndex: number) => Promise<TextItem[]>;\r\n getPageDimensions?: (engineId: string, pageIndex: number) => Promise<{ width: number; height: number }>;\r\n searchText?: (engineId: string, query: string) => Promise<SearchResult[]>;\r\n selectText?: (engineId: string, pageIndex: number, x: number, y: number, width: number, height: number) => Promise<TextSelection | null>;\r\n getOutline?: (engineId: string) => Promise<OutlineItem[]>;\r\n getPageIndex?: (engineId: string, dest: any) => Promise<number | null>;\r\n};\r\n\r\nexport type PapyrusPageViewProps = ViewProps & {\r\n engineId?: string;\r\n};\r\n\r\nexport const PapyrusPageView = requireNativeComponent<PapyrusPageViewProps>('PapyrusPageView');\r\n\r\nexport class NativeDocumentEngine extends BaseDocumentEngine {\n private nativeModule: NativeEngineModule | null = null;\r\n private engineId: string = 'default';\r\n private pageCount: number = 0;\r\n private currentPage: number = 1;\r\n private zoom: number = 1.0;\r\n private rotation: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this.nativeModule = (NativeModules as any)[MODULE_NAME] ?? null;\r\n this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : 'default';\r\n }\r\n\r\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n if (type && type !== 'pdf') {\n throw new Error(`[NativeDocumentEngine] Tipo de documento não suportado: ${type}`);\n }\n\n const native = this.assertNativeModule();\n const normalized = await this.normalizeSource(source);\n const result = native.load ? await native.load(this.engineId, normalized) : undefined;\n\r\n if (result && typeof result.pageCount === 'number') {\r\n this.pageCount = result.pageCount;\r\n } else if (native.getPageCount) {\r\n this.pageCount = native.getPageCount(this.engineId);\r\n } else {\r\n this.pageCount = 0;\r\n }\r\n\r\n this.currentPage = 1;\r\n }\r\n\r\n getPageCount(): number {\r\n return this.pageCount;\r\n }\r\n\r\n getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page >= 1 && page <= this.pageCount) {\r\n this.currentPage = page;\r\n }\r\n }\r\n\r\n setZoom(zoom: number): void {\r\n this.zoom = Math.max(0.1, Math.min(5.0, zoom));\r\n }\r\n\r\n getZoom(): number {\r\n return this.zoom;\r\n }\r\n\r\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\r\n if (direction === 'clockwise') {\r\n this.rotation = (this.rotation + 90) % 360;\r\n } else {\r\n this.rotation = (this.rotation - 90) % 360;\r\n if (this.rotation < 0) this.rotation += 360;\r\n }\r\n }\r\n\r\n getRotation(): number {\r\n return this.rotation;\r\n }\r\n\r\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderPage) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderPage(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async renderTextLayer(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderTextLayer) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderTextLayer(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getTextContent) return [];\r\n return native.getTextContent(this.engineId, pageIndex);\r\n }\r\n\r\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageDimensions) return { width: 0, height: 0 };\r\n return native.getPageDimensions(this.engineId, pageIndex);\r\n }\r\n\r\n async selectText(\r\n pageIndex: number,\r\n rect: { x: number; y: number; width: number; height: number }\r\n ): Promise<TextSelection | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.selectText) return null;\r\n return native.selectText(this.engineId, pageIndex, rect.x, rect.y, rect.width, rect.height);\r\n }\r\n\r\n async getOutline(): Promise<OutlineItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getOutline) return [];\r\n return native.getOutline(this.engineId);\r\n }\r\n\r\n async searchText(query: string): Promise<SearchResult[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.searchText) return [];\r\n return native.searchText(this.engineId, query);\r\n }\r\n\r\n async getPageIndex(dest: any): Promise<number | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageIndex) return null;\r\n return native.getPageIndex(this.engineId, dest);\r\n }\r\n\r\n destroy(): void {\r\n this.nativeModule?.destroyEngine?.(this.engineId);\r\n }\r\n\r\n private assertNativeModule(): NativeEngineModule {\r\n if (!this.nativeModule) {\r\n throw new Error(`[Papyrus] Native module \"${MODULE_NAME}\" not found. Did you run pod install / gradle sync?`);\r\n }\r\n return this.nativeModule;\r\n }\r\n\r\n private async normalizeSource(source: DocumentSource): Promise<NativeDocumentSource> {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri?.isBase64) {\n return { data: decodeBase64(dataUri.data) };\n }\n if (looksLikeUri(source)) return { uri: source };\n if (isLikelyBase64(source)) return { data: decodeBase64(source) };\n return { uri: source };\n }\n if (this.isUriSource(source)) return { uri: source.uri };\n if (this.isDataSource(source)) return { data: source.data };\n if (this.isFileLike(source)) return { data: await source.arrayBuffer() };\r\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) return { data: source };\r\n return { data: source as ArrayBuffer };\r\n }\r\n\r\n private isUriSource(source: DocumentSource): source is { uri: string } {\r\n return typeof source === 'object' && source !== null && 'uri' in source;\r\n }\r\n\r\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\r\n return typeof source === 'object' && source !== null && 'data' in source;\r\n }\r\n\r\n private isFileLike(source: DocumentSource): source is FileLike {\r\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\r\n }\r\n\r\n private toNativeViewTag(target: any): number | null {\n if (typeof target === 'number') return target;\n if (target?.nativeTag && typeof target.nativeTag === 'number') return target.nativeTag;\n return null;\n }\n}\n\ntype WebViewBridge = {\n postMessage: (message: string) => void;\n};\n\ntype WebViewResponseMessage = {\n type: 'response';\n id: string;\n ok: boolean;\n data?: any;\n error?: string;\n};\n\ntype WebViewEventMessage = {\n type: 'event';\n name: string;\n payload?: any;\n};\n\ntype WebViewStateMessage = {\n type: 'state';\n payload: {\n pageCount?: number;\n currentPage?: number;\n zoom?: number;\n outline?: OutlineItem[];\n };\n};\n\ntype WebViewReadyMessage = {\n type: 'ready';\n};\n\ntype WebViewRuntimeMessage =\n | WebViewResponseMessage\n | WebViewEventMessage\n | WebViewStateMessage\n | WebViewReadyMessage;\n\ntype WebViewSourcePayload =\n | { kind: 'uri'; uri: string }\n | { kind: 'base64'; data: string; mime?: string }\n | { kind: 'text'; text: string };\n\nexport class WebViewDocumentEngine extends BaseDocumentEngine {\n private bridge: WebViewBridge | null = null;\n private ready = false;\n private requestId = 0;\n private pending = new Map<string, { resolve: (data: any) => void; reject: (error: Error) => void }>();\n private bridgeResolvers: Array<(bridge: WebViewBridge) => void> = [];\n private readyResolvers: Array<() => void> = [];\n private pageCount = 0;\n private currentPage = 1;\n private zoom = 1.0;\n private rotation = 0;\n private outline: OutlineItem[] = [];\n\n getRenderTargetType(): 'webview' {\n return 'webview';\n }\n\n attachBridge(bridge: WebViewBridge): void {\n this.bridge = bridge;\n this.bridgeResolvers.forEach((resolve) => resolve(bridge));\n this.bridgeResolvers = [];\n }\n\n handleMessage(raw: string): void {\n let message: WebViewRuntimeMessage | null = null;\n try {\n message = JSON.parse(raw) as WebViewRuntimeMessage;\n } catch {\n return;\n }\n\n if (!message) return;\n\n if (message.type === 'ready') {\n this.ready = true;\n this.readyResolvers.forEach((resolve) => resolve());\n this.readyResolvers = [];\n return;\n }\n\n if (message.type === 'response') {\n const pending = this.pending.get(message.id);\n if (!pending) return;\n this.pending.delete(message.id);\n if (message.ok) {\n pending.resolve(message.data);\n } else {\n pending.reject(new Error(message.error ?? '[Papyrus] WebView runtime error'));\n }\n return;\n }\n\n if (message.type === 'state') {\n if (typeof message.payload.pageCount === 'number') this.pageCount = message.payload.pageCount;\n if (typeof message.payload.currentPage === 'number') this.currentPage = message.payload.currentPage;\n if (typeof message.payload.zoom === 'number') this.zoom = message.payload.zoom;\n if (Array.isArray(message.payload.outline)) this.outline = message.payload.outline;\n return;\n }\n\n if (message.type === 'event') {\n const payload = message.payload ?? {};\n if (message.name === 'RUNTIME_LOG') {\n if (__DEV__) {\n const text = typeof payload?.message === 'string' ? payload.message : JSON.stringify(payload);\n console.log('[Papyrus WebView runtime]', text);\n }\n return;\n }\n if (message.name === 'RUNTIME_ERROR') {\n if (__DEV__) {\n console.warn('[Papyrus WebView runtime]', payload);\n }\n return;\n }\n if (message.name === PapyrusEventType.TEXT_SELECTED) {\n papyrusEvents.emit(PapyrusEventType.TEXT_SELECTED, payload);\n } else if (message.name === PapyrusEventType.SEARCH_TRIGGERED) {\n papyrusEvents.emit(PapyrusEventType.SEARCH_TRIGGERED, payload);\n } else if (message.name === PapyrusEventType.DOCUMENT_LOADED) {\n if (typeof payload.pageCount === 'number') {\n this.pageCount = payload.pageCount;\n }\n papyrusEvents.emit(PapyrusEventType.DOCUMENT_LOADED, payload);\n }\n return;\n }\n\n if (__DEV__) {\n console.warn('[Papyrus WebView] Unknown message', message);\n }\n }\n\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n const resolvedType = type ?? inferDocumentType(source);\n if (resolvedType === 'pdf') {\n throw new Error('[WebViewDocumentEngine] Use o NativeDocumentEngine para PDFs no mobile.');\n }\n\n const payloadSource = await this.normalizeRuntimeSource(resolvedType, source);\n const response = await this.request<{ pageCount?: number; outline?: OutlineItem[] }>('load', {\n type: resolvedType,\n source: payloadSource,\n });\n\n if (typeof response?.pageCount === 'number') this.pageCount = response.pageCount;\n if (Array.isArray(response?.outline)) this.outline = response.outline;\n this.currentPage = 1;\n }\n\n getPageCount(): number {\n return this.pageCount;\n }\n\n getCurrentPage(): number {\n return this.currentPage;\n }\n\n goToPage(page: number): void {\n if (page < 1) return;\n this.currentPage = page;\n void this.request('go-to-page', { page });\n }\n\n setZoom(zoom: number): void {\n this.zoom = Math.max(0.5, Math.min(4.0, zoom));\n void this.request('set-zoom', { zoom: this.zoom });\n }\n\n getZoom(): number {\n return this.zoom;\n }\n\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\n if (direction === 'clockwise') {\n this.rotation = (this.rotation + 90) % 360;\n } else {\n this.rotation = (this.rotation - 90) % 360;\n if (this.rotation < 0) this.rotation += 360;\n }\n void this.request('set-rotation', { rotation: this.rotation });\n }\n\n getRotation(): number {\n return this.rotation;\n }\n\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\n void pageIndex;\n void target;\n void scale;\n }\n\n async renderTextLayer(pageIndex: number, container: any, scale: number): Promise<void> {\n void pageIndex;\n void container;\n void scale;\n }\n\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\n return await this.request<TextItem[]>('get-text-content', { pageIndex });\n }\n\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\n return await this.request<{ width: number; height: number }>('get-page-dimensions', { pageIndex });\n }\n\n async searchText(query: string): Promise<SearchResult[]> {\n return await this.request<SearchResult[]>('search-text', { query });\n }\n\n async selectText(\n pageIndex: number,\n rect: { x: number; y: number; width: number; height: number }\n ): Promise<TextSelection | null> {\n return await this.request<TextSelection | null>('select-text', { pageIndex, rect });\n }\n\n async getOutline(): Promise<OutlineItem[]> {\n if (this.outline.length > 0) return this.outline;\n return await this.request<OutlineItem[]>('get-outline');\n }\n\n async getPageIndex(dest: any): Promise<number | null> {\n return await this.request<number | null>('get-page-index', { dest });\n }\n\n destroy(): void {\n this.pending.forEach(({ reject }) => reject(new Error('[Papyrus] WebView engine destroyed')));\n this.pending.clear();\n this.bridge = null;\n this.ready = false;\n }\n\n private async ensureBridge(): Promise<WebViewBridge> {\n if (this.bridge) return this.bridge;\n return new Promise((resolve) => {\n this.bridgeResolvers.push(resolve);\n });\n }\n\n private async ensureReady(): Promise<void> {\n if (this.ready) return;\n return new Promise((resolve) => {\n this.readyResolvers.push(resolve);\n });\n }\n\n private async request<T = any>(kind: string, payload?: any): Promise<T> {\n const bridge = await this.ensureBridge();\n await this.ensureReady();\n const id = `${Date.now()}-${this.requestId++}`;\n return new Promise<T>((resolve, reject) => {\n const timeoutMs = kind === 'load' ? 30000 : 8000;\n const timeoutId = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`[Papyrus] WebView response timeout: ${kind}`));\n }, timeoutMs);\n this.pending.set(id, {\n resolve: (data) => {\n clearTimeout(timeoutId);\n resolve(data);\n },\n reject: (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n });\n bridge.postMessage(JSON.stringify({ id, kind, payload }));\n });\n }\n\n private async normalizeRuntimeSource(type: DocumentType, source: DocumentSource): Promise<WebViewSourcePayload> {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri) {\n if (dataUri.isBase64) {\n return { kind: 'base64', data: dataUri.data, mime: dataUri.mime || undefined };\n }\n const text = decodeURIComponent(dataUri.data);\n return { kind: 'text', text };\n }\n\n if (looksLikeUri(source)) {\n if (isHttpUri(source)) {\n const fetched = await this.fetchRemoteSource(type, source);\n if (fetched) return fetched;\n }\n return { kind: 'uri', uri: source };\n }\n\n if (isLikelyBase64(source)) {\n return { kind: 'base64', data: source };\n }\n\n if (type === 'text') {\n return { kind: 'text', text: source };\n }\n\n return { kind: 'uri', uri: source };\n }\n\n if (this.isUriSource(source)) {\n const uri = source.uri;\n if (isHttpUri(uri)) {\n const fetched = await this.fetchRemoteSource(type, uri);\n if (fetched) return fetched;\n }\n return { kind: 'uri', uri };\n }\n if (this.isDataSource(source)) {\n const bytes = source.data instanceof Uint8Array ? source.data : new Uint8Array(source.data);\n return { kind: 'base64', data: encodeBase64(bytes) };\n }\n if (this.isFileLike(source)) {\n const buffer = await source.arrayBuffer();\n return { kind: 'base64', data: encodeBase64(new Uint8Array(buffer)) };\n }\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const bytes = source instanceof Uint8Array ? source : new Uint8Array(source);\n return { kind: 'base64', data: encodeBase64(bytes) };\n }\n\n return { kind: 'base64', data: encodeBase64(new Uint8Array(source as ArrayBuffer)) };\n }\n\n private async fetchRemoteSource(type: DocumentType, uri: string): Promise<WebViewSourcePayload | null> {\n try {\n const response = await fetch(uri);\n if (!response.ok) return null;\n if (type === 'text') {\n const text = await response.text();\n return { kind: 'text', text };\n }\n if (type === 'epub') {\n const buffer = await this.readResponseBuffer(response);\n return { kind: 'base64', data: encodeBase64(new Uint8Array(buffer)) };\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private async readResponseBuffer(response: Response): Promise<ArrayBuffer> {\n try {\n return await response.arrayBuffer();\n } catch {\n const blob = await response.blob();\n return await new Promise<ArrayBuffer>((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(new Error('[Papyrus] Failed to read response blob'));\n reader.onload = () => resolve(reader.result as ArrayBuffer);\n reader.readAsArrayBuffer(blob);\n });\n }\n }\n\n private isUriSource(source: DocumentSource): source is { uri: string } {\n return typeof source === 'object' && source !== null && 'uri' in source;\n }\n\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\n return typeof source === 'object' && source !== null && 'data' in source;\n }\n\n private isFileLike(source: DocumentSource): source is FileLike {\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\n }\n}\n\nexport class MobileDocumentEngine extends BaseDocumentEngine {\n private pdfEngine: NativeDocumentEngine;\n private webEngine: WebViewDocumentEngine;\n private activeEngine: DocumentEngine;\n\n constructor() {\n super();\n this.pdfEngine = new NativeDocumentEngine();\n this.webEngine = new WebViewDocumentEngine();\n this.activeEngine = this.pdfEngine;\n }\n\n getRenderTargetType(): RenderTargetType {\n return this.activeEngine.getRenderTargetType?.() ?? 'canvas';\n }\n\n attachWebView(bridge: WebViewBridge): void {\n this.webEngine.attachBridge(bridge);\n }\n\n handleWebViewMessage(data: string): void {\n this.webEngine.handleMessage(data);\n }\n\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n const resolvedType = type ?? inferDocumentType(source);\n this.activeEngine = resolvedType === 'pdf' ? this.pdfEngine : this.webEngine;\n await this.activeEngine.load({ type: resolvedType, source });\n }\n\n getPageCount(): number {\n return this.activeEngine.getPageCount();\n }\n\n getCurrentPage(): number {\n return this.activeEngine.getCurrentPage();\n }\n\n goToPage(page: number): void {\n this.activeEngine.goToPage(page);\n }\n\n setZoom(zoom: number): void {\n this.activeEngine.setZoom(zoom);\n }\n\n getZoom(): number {\n return this.activeEngine.getZoom();\n }\n\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\n this.activeEngine.rotate(direction);\n }\n\n getRotation(): number {\n return this.activeEngine.getRotation();\n }\n\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\n await this.activeEngine.renderPage(pageIndex, target, scale);\n }\n\n async renderTextLayer(pageIndex: number, container: any, scale: number): Promise<void> {\n await this.activeEngine.renderTextLayer(pageIndex, container, scale);\n }\n\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\n return await this.activeEngine.getTextContent(pageIndex);\n }\n\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\n return await this.activeEngine.getPageDimensions(pageIndex);\n }\n\n async searchText(query: string): Promise<SearchResult[]> {\n if (typeof this.activeEngine.searchText === 'function') {\n return await this.activeEngine.searchText(query);\n }\n return [];\n }\n\n async selectText(\n pageIndex: number,\n rect: { x: number; y: number; width: number; height: number }\n ): Promise<TextSelection | null> {\n if (typeof this.activeEngine.selectText === 'function') {\n return await this.activeEngine.selectText(pageIndex, rect);\n }\n return null;\n }\n\n async getOutline(): Promise<OutlineItem[]> {\n return await this.activeEngine.getOutline();\n }\n\n async getPageIndex(dest: any): Promise<number | null> {\n return await this.activeEngine.getPageIndex(dest);\n }\n\n destroy(): void {\n this.pdfEngine.destroy();\n this.webEngine.destroy();\n }\n}\n"],"mappings":"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","names":[]}
|