electrobun 0.0.1 → 0.0.2
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/.gitmodules +3 -0
- package/dist/webview +0 -0
- package/package.json +1 -1
- package/src/cli/build/electrobun +0 -0
- package/example/assets/electrobun-logo-32-template.png +0 -0
- package/example/buildScript.ts +0 -1
- package/example/bun.lockb +0 -0
- package/example/electrobun.config +0 -48
- package/example/icon.iconset/icon_128x128.png +0 -0
- package/example/icon.iconset/icon_128x128@2x.png +0 -0
- package/example/icon.iconset/icon_16x16.png +0 -0
- package/example/icon.iconset/icon_16x16@2x.png +0 -0
- package/example/icon.iconset/icon_256x256.png +0 -0
- package/example/icon.iconset/icon_256x256@2x.png +0 -0
- package/example/icon.iconset/icon_32x32.png +0 -0
- package/example/icon.iconset/icon_32x32@2x.png +0 -0
- package/example/icon.iconset/icon_512x512.png +0 -0
- package/example/icon.iconset/icon_512x512@2x.png +0 -0
- package/example/package-lock.json +0 -32
- package/example/package.json +0 -11
- package/example/readme.md +0 -0
- package/example/src/bun/index.ts +0 -403
- package/example/src/mainview/index.css +0 -4
- package/example/src/mainview/index.html +0 -13
- package/example/src/mainview/index.ts +0 -45
- package/example/src/mainview/rpc.ts +0 -36
- package/example/src/myextension/preload.ts +0 -15
- package/example/src/myextension/rpc.ts +0 -15
- package/example/src/webviewtag/electrobun.png +0 -0
- package/example/src/webviewtag/index.html +0 -94
- package/example/src/webviewtag/index.ts +0 -26
- package/src/bsdiff/bsdiff.zig +0 -842
- package/src/bsdiff/bspatch.zig +0 -253
- package/src/bsdiff/build.zig +0 -73
- package/src/bsdiff/zig-out/bin/bsdiff +0 -0
- package/src/bsdiff/zig-out/bin/bspatch +0 -0
- package/src/bsdiff/zig-out/lib/libzstd.a +0 -0
- package/src/bsdiff/zstd/.buckconfig +0 -9
- package/src/bsdiff/zstd/.buckversion +0 -1
- package/src/bsdiff/zstd/.circleci/config.yml +0 -123
- package/src/bsdiff/zstd/.circleci/images/primary/Dockerfile +0 -9
- package/src/bsdiff/zstd/.cirrus.yml +0 -10
- package/src/bsdiff/zstd/.gitattributes +0 -21
- package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
- package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/src/bsdiff/zstd/.github/dependabot.yml +0 -6
- package/src/bsdiff/zstd/.github/workflows/commit.yml +0 -89
- package/src/bsdiff/zstd/.github/workflows/dev-long-tests.yml +0 -297
- package/src/bsdiff/zstd/.github/workflows/dev-short-tests.yml +0 -633
- package/src/bsdiff/zstd/.github/workflows/nightly.yml +0 -65
- package/src/bsdiff/zstd/.github/workflows/publish-release-artifacts.yml +0 -73
- package/src/bsdiff/zstd/.github/workflows/scorecards.yml +0 -64
- package/src/bsdiff/zstd/.github/workflows/windows-artifacts.yml +0 -58
- package/src/bsdiff/zstd/CHANGELOG +0 -837
- package/src/bsdiff/zstd/CODE_OF_CONDUCT.md +0 -5
- package/src/bsdiff/zstd/CONTRIBUTING.md +0 -489
- package/src/bsdiff/zstd/COPYING +0 -339
- package/src/bsdiff/zstd/LICENSE +0 -30
- package/src/bsdiff/zstd/Makefile +0 -457
- package/src/bsdiff/zstd/Package.swift +0 -36
- package/src/bsdiff/zstd/README.md +0 -227
- package/src/bsdiff/zstd/SECURITY.md +0 -15
- package/src/bsdiff/zstd/TESTING.md +0 -43
- package/src/bsdiff/zstd/build/LICENSE +0 -0
- package/src/bsdiff/zstd/build/README.md +0 -56
- package/src/bsdiff/zstd/build/VS2008/fullbench/fullbench.vcproj +0 -549
- package/src/bsdiff/zstd/build/VS2008/fuzzer/fuzzer.vcproj +0 -585
- package/src/bsdiff/zstd/build/VS2008/zstd/zstd.vcproj +0 -677
- package/src/bsdiff/zstd/build/VS2008/zstd.sln +0 -56
- package/src/bsdiff/zstd/build/VS2008/zstdlib/zstdlib.vcproj +0 -635
- package/src/bsdiff/zstd/build/VS2010/CompileAsCpp.props +0 -8
- package/src/bsdiff/zstd/build/VS2010/datagen/datagen.vcxproj +0 -170
- package/src/bsdiff/zstd/build/VS2010/fullbench/fullbench.vcxproj +0 -218
- package/src/bsdiff/zstd/build/VS2010/fullbench-dll/fullbench-dll.vcxproj +0 -189
- package/src/bsdiff/zstd/build/VS2010/fuzzer/fuzzer.vcxproj +0 -223
- package/src/bsdiff/zstd/build/VS2010/libzstd/libzstd.vcxproj +0 -242
- package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.rc +0 -51
- package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.vcxproj +0 -249
- package/src/bsdiff/zstd/build/VS2010/zstd/zstd.rc +0 -51
- package/src/bsdiff/zstd/build/VS2010/zstd/zstd.vcxproj +0 -265
- package/src/bsdiff/zstd/build/VS2010/zstd.sln +0 -89
- package/src/bsdiff/zstd/build/VS_scripts/README.md +0 -64
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2010.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2012.cmd +0 -6
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2013.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2015.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Community.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Enterprise.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Professional.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.generic.cmd +0 -72
- package/src/bsdiff/zstd/build/cmake/CMakeLists.txt +0 -216
- package/src/bsdiff/zstd/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake +0 -121
- package/src/bsdiff/zstd/build/cmake/CMakeModules/FindLibLZ4.cmake +0 -49
- package/src/bsdiff/zstd/build/cmake/CMakeModules/GetZstdLibraryVersion.cmake +0 -10
- package/src/bsdiff/zstd/build/cmake/CMakeModules/JoinPaths.cmake +0 -23
- package/src/bsdiff/zstd/build/cmake/README.md +0 -136
- package/src/bsdiff/zstd/build/cmake/contrib/CMakeLists.txt +0 -13
- package/src/bsdiff/zstd/build/cmake/contrib/gen_html/CMakeLists.txt +0 -30
- package/src/bsdiff/zstd/build/cmake/contrib/pzstd/CMakeLists.txt +0 -39
- package/src/bsdiff/zstd/build/cmake/lib/CMakeLists.txt +0 -253
- package/src/bsdiff/zstd/build/cmake/lib/cmake_uninstall.cmake.in +0 -22
- package/src/bsdiff/zstd/build/cmake/programs/CMakeLists.txt +0 -144
- package/src/bsdiff/zstd/build/cmake/tests/CMakeLists.txt +0 -118
- package/src/bsdiff/zstd/build/cmake/zstdConfig.cmake.in +0 -10
- package/src/bsdiff/zstd/build/meson/GetZstdLibraryVersion.py +0 -39
- package/src/bsdiff/zstd/build/meson/InstallSymlink.py +0 -55
- package/src/bsdiff/zstd/build/meson/README.md +0 -38
- package/src/bsdiff/zstd/build/meson/contrib/gen_html/meson.build +0 -30
- package/src/bsdiff/zstd/build/meson/contrib/meson.build +0 -12
- package/src/bsdiff/zstd/build/meson/contrib/pzstd/meson.build +0 -25
- package/src/bsdiff/zstd/build/meson/lib/meson.build +0 -167
- package/src/bsdiff/zstd/build/meson/meson.build +0 -145
- package/src/bsdiff/zstd/build/meson/meson_options.txt +0 -36
- package/src/bsdiff/zstd/build/meson/programs/meson.build +0 -124
- package/src/bsdiff/zstd/build/meson/tests/meson.build +0 -217
- package/src/bsdiff/zstd/build/meson/tests/valgrindTest.py +0 -90
- package/src/bsdiff/zstd/build/single_file_libs/README.md +0 -33
- package/src/bsdiff/zstd/build/single_file_libs/build_decoder_test.sh +0 -91
- package/src/bsdiff/zstd/build/single_file_libs/build_library_test.sh +0 -97
- package/src/bsdiff/zstd/build/single_file_libs/combine.py +0 -234
- package/src/bsdiff/zstd/build/single_file_libs/combine.sh +0 -249
- package/src/bsdiff/zstd/build/single_file_libs/create_single_file_decoder.sh +0 -19
- package/src/bsdiff/zstd/build/single_file_libs/create_single_file_library.sh +0 -19
- package/src/bsdiff/zstd/build/single_file_libs/examples/README.md +0 -11
- package/src/bsdiff/zstd/build/single_file_libs/examples/emscripten.c +0 -340
- package/src/bsdiff/zstd/build/single_file_libs/examples/roundtrip.c +0 -83
- package/src/bsdiff/zstd/build/single_file_libs/examples/shell.html +0 -31
- package/src/bsdiff/zstd/build/single_file_libs/examples/simple.c +0 -75
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-dxt1.inl +0 -2731
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-zstd.inl +0 -261
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard.png +0 -0
- package/src/bsdiff/zstd/build/single_file_libs/zstd-in.c +0 -90
- package/src/bsdiff/zstd/build/single_file_libs/zstddeclib-in.c +0 -62
- package/src/bsdiff/zstd/contrib/VS2005/README.md +0 -3
- package/src/bsdiff/zstd/contrib/VS2005/fullbench/fullbench.vcproj +0 -440
- package/src/bsdiff/zstd/contrib/VS2005/fuzzer/fuzzer.vcproj +0 -488
- package/src/bsdiff/zstd/contrib/VS2005/zstd/zstd.vcproj +0 -552
- package/src/bsdiff/zstd/contrib/VS2005/zstd.sln +0 -55
- package/src/bsdiff/zstd/contrib/VS2005/zstdlib/zstdlib.vcproj +0 -546
- package/src/bsdiff/zstd/contrib/cleanTabs +0 -2
- package/src/bsdiff/zstd/contrib/diagnose_corruption/Makefile +0 -35
- package/src/bsdiff/zstd/contrib/diagnose_corruption/check_flipped_bits.c +0 -400
- package/src/bsdiff/zstd/contrib/docker/Dockerfile +0 -20
- package/src/bsdiff/zstd/contrib/docker/README.md +0 -20
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/Makefile +0 -40
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/README.md +0 -14
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/main.c +0 -107
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.c +0 -80
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.h +0 -26
- package/src/bsdiff/zstd/contrib/freestanding_lib/freestanding.py +0 -774
- package/src/bsdiff/zstd/contrib/gen_html/Makefile +0 -51
- package/src/bsdiff/zstd/contrib/gen_html/README.md +0 -31
- package/src/bsdiff/zstd/contrib/gen_html/gen-zstd-manual.sh +0 -9
- package/src/bsdiff/zstd/contrib/gen_html/gen_html.cpp +0 -224
- package/src/bsdiff/zstd/contrib/largeNbDicts/Makefile +0 -58
- package/src/bsdiff/zstd/contrib/largeNbDicts/README.md +0 -33
- package/src/bsdiff/zstd/contrib/largeNbDicts/largeNbDicts.c +0 -1085
- package/src/bsdiff/zstd/contrib/linux-kernel/Makefile +0 -108
- package/src/bsdiff/zstd/contrib/linux-kernel/README.md +0 -14
- package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-benchmark.sh +0 -104
- package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-extract-benchmark.sh +0 -99
- package/src/bsdiff/zstd/contrib/linux-kernel/decompress_sources.h +0 -34
- package/src/bsdiff/zstd/contrib/linux-kernel/linux.mk +0 -43
- package/src/bsdiff/zstd/contrib/linux-kernel/linux_zstd.h +0 -447
- package/src/bsdiff/zstd/contrib/linux-kernel/mem.h +0 -262
- package/src/bsdiff/zstd/contrib/linux-kernel/squashfs-benchmark.sh +0 -39
- package/src/bsdiff/zstd/contrib/linux-kernel/test/Makefile +0 -49
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/asm/unaligned.h +0 -187
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/compiler.h +0 -23
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/errno.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/kernel.h +0 -19
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/limits.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/math64.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/module.h +0 -20
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/printk.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/stddef.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/swab.h +0 -16
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/types.h +0 -16
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/xxhash.h +0 -745
- package/src/bsdiff/zstd/contrib/linux-kernel/test/macro-test.sh +0 -44
- package/src/bsdiff/zstd/contrib/linux-kernel/test/static_test.c +0 -52
- package/src/bsdiff/zstd/contrib/linux-kernel/test/test.c +0 -229
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_common_module.c +0 -29
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_compress_module.c +0 -164
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_decompress_module.c +0 -105
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_deps.h +0 -121
- package/src/bsdiff/zstd/contrib/match_finders/README.md +0 -42
- package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.c +0 -558
- package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.h +0 -70
- package/src/bsdiff/zstd/contrib/premake/premake4.lua +0 -6
- package/src/bsdiff/zstd/contrib/premake/zstd.lua +0 -80
- package/src/bsdiff/zstd/contrib/pzstd/BUCK +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/ErrorHolder.h +0 -54
- package/src/bsdiff/zstd/contrib/pzstd/Logging.h +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/Makefile +0 -265
- package/src/bsdiff/zstd/contrib/pzstd/Options.cpp +0 -424
- package/src/bsdiff/zstd/contrib/pzstd/Options.h +0 -71
- package/src/bsdiff/zstd/contrib/pzstd/Pzstd.cpp +0 -618
- package/src/bsdiff/zstd/contrib/pzstd/Pzstd.h +0 -153
- package/src/bsdiff/zstd/contrib/pzstd/README.md +0 -56
- package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.cpp +0 -30
- package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.h +0 -64
- package/src/bsdiff/zstd/contrib/pzstd/images/Cspeed.png +0 -0
- package/src/bsdiff/zstd/contrib/pzstd/images/Dspeed.png +0 -0
- package/src/bsdiff/zstd/contrib/pzstd/main.cpp +0 -27
- package/src/bsdiff/zstd/contrib/pzstd/test/BUCK +0 -37
- package/src/bsdiff/zstd/contrib/pzstd/test/OptionsTest.cpp +0 -536
- package/src/bsdiff/zstd/contrib/pzstd/test/PzstdTest.cpp +0 -149
- package/src/bsdiff/zstd/contrib/pzstd/test/RoundTrip.h +0 -86
- package/src/bsdiff/zstd/contrib/pzstd/test/RoundTripTest.cpp +0 -86
- package/src/bsdiff/zstd/contrib/pzstd/utils/BUCK +0 -75
- package/src/bsdiff/zstd/contrib/pzstd/utils/Buffer.h +0 -99
- package/src/bsdiff/zstd/contrib/pzstd/utils/FileSystem.h +0 -96
- package/src/bsdiff/zstd/contrib/pzstd/utils/Likely.h +0 -28
- package/src/bsdiff/zstd/contrib/pzstd/utils/Portability.h +0 -16
- package/src/bsdiff/zstd/contrib/pzstd/utils/Range.h +0 -133
- package/src/bsdiff/zstd/contrib/pzstd/utils/ResourcePool.h +0 -96
- package/src/bsdiff/zstd/contrib/pzstd/utils/ScopeGuard.h +0 -50
- package/src/bsdiff/zstd/contrib/pzstd/utils/ThreadPool.h +0 -58
- package/src/bsdiff/zstd/contrib/pzstd/utils/WorkQueue.h +0 -181
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/BUCK +0 -35
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/BufferTest.cpp +0 -89
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/RangeTest.cpp +0 -82
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ResourcePoolTest.cpp +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ScopeGuardTest.cpp +0 -28
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp +0 -71
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/WorkQueueTest.cpp +0 -282
- package/src/bsdiff/zstd/contrib/recovery/Makefile +0 -35
- package/src/bsdiff/zstd/contrib/recovery/recover_directory.c +0 -152
- package/src/bsdiff/zstd/contrib/seekable_format/README.md +0 -42
- package/src/bsdiff/zstd/contrib/seekable_format/examples/Makefile +0 -53
- package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_compression.c +0 -214
- package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_processing.c +0 -194
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_compression.c +0 -136
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression.c +0 -141
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression_mem.c +0 -147
- package/src/bsdiff/zstd/contrib/seekable_format/tests/Makefile +0 -38
- package/src/bsdiff/zstd/contrib/seekable_format/tests/seekable_tests.c +0 -363
- package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable.h +0 -226
- package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable_compression_format.md +0 -116
- package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_compress.c +0 -365
- package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_decompress.c +0 -595
- package/src/bsdiff/zstd/contrib/seqBench/Makefile +0 -58
- package/src/bsdiff/zstd/contrib/seqBench/seqBench.c +0 -53
- package/src/bsdiff/zstd/contrib/snap/snapcraft.yaml +0 -28
- package/src/bsdiff/zstd/doc/README.md +0 -26
- package/src/bsdiff/zstd/doc/decompressor_errata.md +0 -148
- package/src/bsdiff/zstd/doc/decompressor_permissive.md +0 -60
- package/src/bsdiff/zstd/doc/educational_decoder/Makefile +0 -62
- package/src/bsdiff/zstd/doc/educational_decoder/README.md +0 -36
- package/src/bsdiff/zstd/doc/educational_decoder/harness.c +0 -119
- package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.c +0 -2323
- package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.h +0 -61
- package/src/bsdiff/zstd/doc/images/CSpeed2.png +0 -0
- package/src/bsdiff/zstd/doc/images/DCspeed5.png +0 -0
- package/src/bsdiff/zstd/doc/images/DSpeed3.png +0 -0
- package/src/bsdiff/zstd/doc/images/cdict_v136.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-cr.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-cs.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-ds.png +0 -0
- package/src/bsdiff/zstd/doc/images/zstd_cdict_v1_3_5.png +0 -0
- package/src/bsdiff/zstd/doc/images/zstd_logo86.png +0 -0
- package/src/bsdiff/zstd/doc/zstd_compression_format.md +0 -1737
- package/src/bsdiff/zstd/doc/zstd_manual.html +0 -2170
- package/src/bsdiff/zstd/examples/Makefile +0 -93
- package/src/bsdiff/zstd/examples/README.md +0 -46
- package/src/bsdiff/zstd/examples/common.h +0 -246
- package/src/bsdiff/zstd/examples/dictionary_compression.c +0 -107
- package/src/bsdiff/zstd/examples/dictionary_decompression.c +0 -99
- package/src/bsdiff/zstd/examples/multiple_simple_compression.c +0 -116
- package/src/bsdiff/zstd/examples/multiple_streaming_compression.c +0 -133
- package/src/bsdiff/zstd/examples/simple_compression.c +0 -68
- package/src/bsdiff/zstd/examples/simple_decompression.c +0 -65
- package/src/bsdiff/zstd/examples/streaming_compression.c +0 -146
- package/src/bsdiff/zstd/examples/streaming_compression_thread_pool.c +0 -180
- package/src/bsdiff/zstd/examples/streaming_decompression.c +0 -100
- package/src/bsdiff/zstd/examples/streaming_memory_usage.c +0 -137
- package/src/bsdiff/zstd/lib/BUCK +0 -232
- package/src/bsdiff/zstd/lib/Makefile +0 -369
- package/src/bsdiff/zstd/lib/README.md +0 -237
- package/src/bsdiff/zstd/lib/common/allocations.h +0 -55
- package/src/bsdiff/zstd/lib/common/bits.h +0 -200
- package/src/bsdiff/zstd/lib/common/bitstream.h +0 -457
- package/src/bsdiff/zstd/lib/common/compiler.h +0 -450
- package/src/bsdiff/zstd/lib/common/cpu.h +0 -249
- package/src/bsdiff/zstd/lib/common/debug.c +0 -30
- package/src/bsdiff/zstd/lib/common/debug.h +0 -116
- package/src/bsdiff/zstd/lib/common/entropy_common.c +0 -340
- package/src/bsdiff/zstd/lib/common/error_private.c +0 -63
- package/src/bsdiff/zstd/lib/common/error_private.h +0 -168
- package/src/bsdiff/zstd/lib/common/fse.h +0 -640
- package/src/bsdiff/zstd/lib/common/fse_decompress.c +0 -313
- package/src/bsdiff/zstd/lib/common/huf.h +0 -286
- package/src/bsdiff/zstd/lib/common/mem.h +0 -426
- package/src/bsdiff/zstd/lib/common/pool.c +0 -371
- package/src/bsdiff/zstd/lib/common/pool.h +0 -90
- package/src/bsdiff/zstd/lib/common/portability_macros.h +0 -158
- package/src/bsdiff/zstd/lib/common/threading.c +0 -182
- package/src/bsdiff/zstd/lib/common/threading.h +0 -150
- package/src/bsdiff/zstd/lib/common/xxhash.c +0 -18
- package/src/bsdiff/zstd/lib/common/xxhash.h +0 -7020
- package/src/bsdiff/zstd/lib/common/zstd_common.c +0 -48
- package/src/bsdiff/zstd/lib/common/zstd_deps.h +0 -111
- package/src/bsdiff/zstd/lib/common/zstd_internal.h +0 -392
- package/src/bsdiff/zstd/lib/common/zstd_trace.h +0 -163
- package/src/bsdiff/zstd/lib/compress/clevels.h +0 -134
- package/src/bsdiff/zstd/lib/compress/fse_compress.c +0 -625
- package/src/bsdiff/zstd/lib/compress/hist.c +0 -181
- package/src/bsdiff/zstd/lib/compress/hist.h +0 -75
- package/src/bsdiff/zstd/lib/compress/huf_compress.c +0 -1464
- package/src/bsdiff/zstd/lib/compress/zstd_compress.c +0 -7153
- package/src/bsdiff/zstd/lib/compress/zstd_compress_internal.h +0 -1534
- package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.c +0 -235
- package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.h +0 -39
- package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.c +0 -442
- package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.h +0 -54
- package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.c +0 -688
- package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.h +0 -32
- package/src/bsdiff/zstd/lib/compress/zstd_cwksp.h +0 -748
- package/src/bsdiff/zstd/lib/compress/zstd_double_fast.c +0 -770
- package/src/bsdiff/zstd/lib/compress/zstd_double_fast.h +0 -50
- package/src/bsdiff/zstd/lib/compress/zstd_fast.c +0 -968
- package/src/bsdiff/zstd/lib/compress/zstd_fast.h +0 -38
- package/src/bsdiff/zstd/lib/compress/zstd_lazy.c +0 -2199
- package/src/bsdiff/zstd/lib/compress/zstd_lazy.h +0 -202
- package/src/bsdiff/zstd/lib/compress/zstd_ldm.c +0 -730
- package/src/bsdiff/zstd/lib/compress/zstd_ldm.h +0 -117
- package/src/bsdiff/zstd/lib/compress/zstd_ldm_geartab.h +0 -106
- package/src/bsdiff/zstd/lib/compress/zstd_opt.c +0 -1576
- package/src/bsdiff/zstd/lib/compress/zstd_opt.h +0 -80
- package/src/bsdiff/zstd/lib/compress/zstdmt_compress.c +0 -1882
- package/src/bsdiff/zstd/lib/compress/zstdmt_compress.h +0 -113
- package/src/bsdiff/zstd/lib/decompress/huf_decompress.c +0 -1944
- package/src/bsdiff/zstd/lib/decompress/huf_decompress_amd64.S +0 -595
- package/src/bsdiff/zstd/lib/decompress/zstd_ddict.c +0 -244
- package/src/bsdiff/zstd/lib/decompress/zstd_ddict.h +0 -44
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress.c +0 -2407
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.c +0 -2215
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.h +0 -73
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_internal.h +0 -240
- package/src/bsdiff/zstd/lib/deprecated/zbuff.h +0 -214
- package/src/bsdiff/zstd/lib/deprecated/zbuff_common.c +0 -26
- package/src/bsdiff/zstd/lib/deprecated/zbuff_compress.c +0 -167
- package/src/bsdiff/zstd/lib/deprecated/zbuff_decompress.c +0 -77
- package/src/bsdiff/zstd/lib/dictBuilder/cover.c +0 -1261
- package/src/bsdiff/zstd/lib/dictBuilder/cover.h +0 -152
- package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.c +0 -1913
- package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.h +0 -67
- package/src/bsdiff/zstd/lib/dictBuilder/fastcover.c +0 -766
- package/src/bsdiff/zstd/lib/dictBuilder/zdict.c +0 -1133
- package/src/bsdiff/zstd/lib/dll/example/Makefile +0 -48
- package/src/bsdiff/zstd/lib/dll/example/README.md +0 -63
- package/src/bsdiff/zstd/lib/dll/example/build_package.bat +0 -20
- package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.sln +0 -25
- package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.vcxproj +0 -181
- package/src/bsdiff/zstd/lib/legacy/zstd_legacy.h +0 -452
- package/src/bsdiff/zstd/lib/legacy/zstd_v01.c +0 -2127
- package/src/bsdiff/zstd/lib/legacy/zstd_v01.h +0 -94
- package/src/bsdiff/zstd/lib/legacy/zstd_v02.c +0 -3465
- package/src/bsdiff/zstd/lib/legacy/zstd_v02.h +0 -93
- package/src/bsdiff/zstd/lib/legacy/zstd_v03.c +0 -3105
- package/src/bsdiff/zstd/lib/legacy/zstd_v03.h +0 -93
- package/src/bsdiff/zstd/lib/legacy/zstd_v04.c +0 -3598
- package/src/bsdiff/zstd/lib/legacy/zstd_v04.h +0 -142
- package/src/bsdiff/zstd/lib/legacy/zstd_v05.c +0 -4005
- package/src/bsdiff/zstd/lib/legacy/zstd_v05.h +0 -162
- package/src/bsdiff/zstd/lib/legacy/zstd_v06.c +0 -4106
- package/src/bsdiff/zstd/lib/legacy/zstd_v06.h +0 -172
- package/src/bsdiff/zstd/lib/legacy/zstd_v07.c +0 -4490
- package/src/bsdiff/zstd/lib/legacy/zstd_v07.h +0 -187
- package/src/bsdiff/zstd/lib/libzstd.mk +0 -237
- package/src/bsdiff/zstd/lib/libzstd.pc.in +0 -16
- package/src/bsdiff/zstd/lib/module.modulemap +0 -35
- package/src/bsdiff/zstd/lib/zdict.h +0 -474
- package/src/bsdiff/zstd/lib/zstd.h +0 -3089
- package/src/bsdiff/zstd/lib/zstd_errors.h +0 -114
- package/src/bsdiff/zstd/programs/BUCK +0 -44
- package/src/bsdiff/zstd/programs/Makefile +0 -445
- package/src/bsdiff/zstd/programs/README.md +0 -302
- package/src/bsdiff/zstd/programs/benchfn.c +0 -256
- package/src/bsdiff/zstd/programs/benchfn.h +0 -183
- package/src/bsdiff/zstd/programs/benchzstd.c +0 -1264
- package/src/bsdiff/zstd/programs/benchzstd.h +0 -198
- package/src/bsdiff/zstd/programs/datagen.c +0 -186
- package/src/bsdiff/zstd/programs/datagen.h +0 -30
- package/src/bsdiff/zstd/programs/dibio.c +0 -440
- package/src/bsdiff/zstd/programs/dibio.h +0 -39
- package/src/bsdiff/zstd/programs/fileio.c +0 -3470
- package/src/bsdiff/zstd/programs/fileio.h +0 -181
- package/src/bsdiff/zstd/programs/fileio_asyncio.c +0 -663
- package/src/bsdiff/zstd/programs/fileio_asyncio.h +0 -203
- package/src/bsdiff/zstd/programs/fileio_common.h +0 -125
- package/src/bsdiff/zstd/programs/fileio_types.h +0 -86
- package/src/bsdiff/zstd/programs/lorem.c +0 -285
- package/src/bsdiff/zstd/programs/lorem.h +0 -32
- package/src/bsdiff/zstd/programs/platform.h +0 -218
- package/src/bsdiff/zstd/programs/timefn.c +0 -168
- package/src/bsdiff/zstd/programs/timefn.h +0 -70
- package/src/bsdiff/zstd/programs/util.c +0 -1652
- package/src/bsdiff/zstd/programs/util.h +0 -359
- package/src/bsdiff/zstd/programs/windres/verrsrc.h +0 -17
- package/src/bsdiff/zstd/programs/windres/zstd.rc +0 -51
- package/src/bsdiff/zstd/programs/windres/zstd32.res +0 -0
- package/src/bsdiff/zstd/programs/windres/zstd64.res +0 -0
- package/src/bsdiff/zstd/programs/zstd.1 +0 -566
- package/src/bsdiff/zstd/programs/zstd.1.md +0 -695
- package/src/bsdiff/zstd/programs/zstdcli.c +0 -1625
- package/src/bsdiff/zstd/programs/zstdcli_trace.c +0 -172
- package/src/bsdiff/zstd/programs/zstdcli_trace.h +0 -24
- package/src/bsdiff/zstd/programs/zstdgrep +0 -134
- package/src/bsdiff/zstd/programs/zstdgrep.1 +0 -26
- package/src/bsdiff/zstd/programs/zstdgrep.1.md +0 -30
- package/src/bsdiff/zstd/programs/zstdless +0 -8
- package/src/bsdiff/zstd/programs/zstdless.1 +0 -14
- package/src/bsdiff/zstd/programs/zstdless.1.md +0 -16
- package/src/bsdiff/zstd/tests/DEPRECATED-test-zstd-speed.py +0 -378
- package/src/bsdiff/zstd/tests/Makefile +0 -477
- package/src/bsdiff/zstd/tests/README.md +0 -184
- package/src/bsdiff/zstd/tests/automated_benchmarking.py +0 -326
- package/src/bsdiff/zstd/tests/bigdict.c +0 -128
- package/src/bsdiff/zstd/tests/checkTag.c +0 -65
- package/src/bsdiff/zstd/tests/check_size.py +0 -31
- package/src/bsdiff/zstd/tests/cli-tests/README.md +0 -258
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.stderr.glob +0 -28
- package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh.stdout.glob +0 -34
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh +0 -40
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stderr.exact +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stdout.exact +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stderr.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stdout.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh.stdout.glob +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/cmp_size +0 -44
- package/src/bsdiff/zstd/tests/cli-tests/bin/datagen +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/bin/die +0 -4
- package/src/bsdiff/zstd/tests/cli-tests/bin/println +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstd +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstdgrep +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstdless +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/cltools/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stderr.exact +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stdout.glob +0 -4
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stderr.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stdout.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/common/format.sh +0 -19
- package/src/bsdiff/zstd/tests/cli-tests/common/mtime.sh +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/common/permissions.sh +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/common/platform.sh +0 -37
- package/src/bsdiff/zstd/tests/cli-tests/compression/adapt.sh +0 -14
- package/src/bsdiff/zstd/tests/cli-tests/compression/basic.sh +0 -36
- package/src/bsdiff/zstd/tests/cli-tests/compression/compress-literals.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/compression/format.sh +0 -16
- package/src/bsdiff/zstd/tests/cli-tests/compression/golden.sh +0 -16
- package/src/bsdiff/zstd/tests/cli-tests/compression/gzip-compat.sh +0 -17
- package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh +0 -62
- package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh.stderr.exact +0 -69
- package/src/bsdiff/zstd/tests/cli-tests/compression/long-distance-matcher.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh +0 -15
- package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh.stderr.exact +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh +0 -21
- package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh.stdout.exact +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/compression/row-match-finder.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/setup +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/stream-size.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stderr.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stdout.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stderr.ignore +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stdout.glob +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/decompression/detectErrors.sh +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/decompression/golden.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh +0 -57
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stderr.exact +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stdout.exact +0 -25
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh.stderr.exact +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.stderr.exact +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh +0 -29
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh.stderr.exact +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/golden.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup_once +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh +0 -49
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stderr.exact +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stdout.exact +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh.stderr.exact +0 -26
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh.stderr.exact +0 -42
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh.stderr.exact +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh.stderr.exact +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh.stderr.exact +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh.stderr.exact +0 -38
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh.stderr.exact +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh.stderr.exact +0 -20
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh.stderr.exact +0 -14
- package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh +0 -46
- package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh.stderr.glob +0 -96
- package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh +0 -41
- package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh.stderr.glob +0 -62
- package/src/bsdiff/zstd/tests/cli-tests/run.py +0 -731
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh.stdout.exact +0 -8
- package/src/bsdiff/zstd/tests/datagencli.c +0 -149
- package/src/bsdiff/zstd/tests/decodecorpus.c +0 -1936
- package/src/bsdiff/zstd/tests/dict-files/zero-weight-dict +0 -0
- package/src/bsdiff/zstd/tests/external_matchfinder.c +0 -140
- package/src/bsdiff/zstd/tests/external_matchfinder.h +0 -39
- package/src/bsdiff/zstd/tests/fullbench.c +0 -980
- package/src/bsdiff/zstd/tests/fuzz/Makefile +0 -277
- package/src/bsdiff/zstd/tests/fuzz/README.md +0 -161
- package/src/bsdiff/zstd/tests/fuzz/block_decompress.c +0 -53
- package/src/bsdiff/zstd/tests/fuzz/block_round_trip.c +0 -103
- package/src/bsdiff/zstd/tests/fuzz/decompress_cross_format.c +0 -130
- package/src/bsdiff/zstd/tests/fuzz/decompress_dstSize_tooSmall.c +0 -74
- package/src/bsdiff/zstd/tests/fuzz/dictionary_decompress.c +0 -77
- package/src/bsdiff/zstd/tests/fuzz/dictionary_loader.c +0 -106
- package/src/bsdiff/zstd/tests/fuzz/dictionary_round_trip.c +0 -155
- package/src/bsdiff/zstd/tests/fuzz/dictionary_stream_round_trip.c +0 -209
- package/src/bsdiff/zstd/tests/fuzz/fse_read_ncount.c +0 -100
- package/src/bsdiff/zstd/tests/fuzz/fuzz.h +0 -57
- package/src/bsdiff/zstd/tests/fuzz/fuzz.py +0 -911
- package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.c +0 -95
- package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.h +0 -66
- package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.c +0 -48
- package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.h +0 -81
- package/src/bsdiff/zstd/tests/fuzz/fuzz_third_party_seq_prod.h +0 -116
- package/src/bsdiff/zstd/tests/fuzz/generate_sequences.c +0 -88
- package/src/bsdiff/zstd/tests/fuzz/huf_decompress.c +0 -68
- package/src/bsdiff/zstd/tests/fuzz/huf_round_trip.c +0 -137
- package/src/bsdiff/zstd/tests/fuzz/raw_dictionary_round_trip.c +0 -119
- package/src/bsdiff/zstd/tests/fuzz/regression_driver.c +0 -90
- package/src/bsdiff/zstd/tests/fuzz/seekable_roundtrip.c +0 -88
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/Makefile +0 -16
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/README.md +0 -12
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/example_seq_prod.c +0 -52
- package/src/bsdiff/zstd/tests/fuzz/sequence_compression_api.c +0 -381
- package/src/bsdiff/zstd/tests/fuzz/simple_compress.c +0 -60
- package/src/bsdiff/zstd/tests/fuzz/simple_decompress.c +0 -59
- package/src/bsdiff/zstd/tests/fuzz/simple_round_trip.c +0 -182
- package/src/bsdiff/zstd/tests/fuzz/stream_decompress.c +0 -119
- package/src/bsdiff/zstd/tests/fuzz/stream_round_trip.c +0 -218
- package/src/bsdiff/zstd/tests/fuzz/zstd_frame_info.c +0 -43
- package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.c +0 -207
- package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.h +0 -56
- package/src/bsdiff/zstd/tests/fuzzer.c +0 -4933
- package/src/bsdiff/zstd/tests/golden-compression/PR-3517-block-splitter-corruption-test +0 -1
- package/src/bsdiff/zstd/tests/golden-compression/http +0 -1
- package/src/bsdiff/zstd/tests/golden-compression/huffman-compressed-larger +0 -0
- package/src/bsdiff/zstd/tests/golden-compression/large-literal-and-match-lengths +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/block-128k.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/empty-block.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/rle-first-block.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/zeroSeq_2B.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression-errors/off0.bin.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression-errors/zeroSeq_extraneous.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-dictionaries/http-dict-missing-symbols +0 -0
- package/src/bsdiff/zstd/tests/gzip/Makefile +0 -45
- package/src/bsdiff/zstd/tests/gzip/gzip-env.sh +0 -46
- package/src/bsdiff/zstd/tests/gzip/helin-segv.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/help-version.sh +0 -270
- package/src/bsdiff/zstd/tests/gzip/hufts-segv.gz +0 -0
- package/src/bsdiff/zstd/tests/gzip/hufts.sh +0 -34
- package/src/bsdiff/zstd/tests/gzip/init.cfg +0 -5
- package/src/bsdiff/zstd/tests/gzip/init.sh +0 -616
- package/src/bsdiff/zstd/tests/gzip/keep.sh +0 -51
- package/src/bsdiff/zstd/tests/gzip/list.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/memcpy-abuse.sh +0 -34
- package/src/bsdiff/zstd/tests/gzip/mixed.sh +0 -68
- package/src/bsdiff/zstd/tests/gzip/null-suffix-clobber.sh +0 -35
- package/src/bsdiff/zstd/tests/gzip/stdin.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/test-driver.sh +0 -150
- package/src/bsdiff/zstd/tests/gzip/trailing-nul.sh +0 -37
- package/src/bsdiff/zstd/tests/gzip/unpack-invalid.sh +0 -36
- package/src/bsdiff/zstd/tests/gzip/z-suffix.sh +0 -30
- package/src/bsdiff/zstd/tests/gzip/zdiff.sh +0 -48
- package/src/bsdiff/zstd/tests/gzip/zgrep-context.sh +0 -47
- package/src/bsdiff/zstd/tests/gzip/zgrep-f.sh +0 -43
- package/src/bsdiff/zstd/tests/gzip/zgrep-signal.sh +0 -64
- package/src/bsdiff/zstd/tests/gzip/znew-k.sh +0 -40
- package/src/bsdiff/zstd/tests/invalidDictionaries.c +0 -61
- package/src/bsdiff/zstd/tests/legacy.c +0 -260
- package/src/bsdiff/zstd/tests/libzstd_builds.sh +0 -104
- package/src/bsdiff/zstd/tests/longmatch.c +0 -102
- package/src/bsdiff/zstd/tests/loremOut.c +0 -50
- package/src/bsdiff/zstd/tests/loremOut.h +0 -15
- package/src/bsdiff/zstd/tests/paramgrill.c +0 -2966
- package/src/bsdiff/zstd/tests/playTests.sh +0 -1928
- package/src/bsdiff/zstd/tests/poolTests.c +0 -271
- package/src/bsdiff/zstd/tests/rateLimiter.py +0 -41
- package/src/bsdiff/zstd/tests/regression/Makefile +0 -60
- package/src/bsdiff/zstd/tests/regression/README.md +0 -28
- package/src/bsdiff/zstd/tests/regression/config.c +0 -404
- package/src/bsdiff/zstd/tests/regression/config.h +0 -91
- package/src/bsdiff/zstd/tests/regression/data.c +0 -631
- package/src/bsdiff/zstd/tests/regression/data.h +0 -121
- package/src/bsdiff/zstd/tests/regression/levels.h +0 -59
- package/src/bsdiff/zstd/tests/regression/method.c +0 -701
- package/src/bsdiff/zstd/tests/regression/method.h +0 -65
- package/src/bsdiff/zstd/tests/regression/result.c +0 -28
- package/src/bsdiff/zstd/tests/regression/result.h +0 -103
- package/src/bsdiff/zstd/tests/regression/results.csv +0 -1480
- package/src/bsdiff/zstd/tests/regression/test.c +0 -362
- package/src/bsdiff/zstd/tests/roundTripCrash.c +0 -241
- package/src/bsdiff/zstd/tests/seqgen.c +0 -260
- package/src/bsdiff/zstd/tests/seqgen.h +0 -58
- package/src/bsdiff/zstd/tests/test-license.py +0 -156
- package/src/bsdiff/zstd/tests/test-variants.sh +0 -115
- package/src/bsdiff/zstd/tests/test-zstd-versions.py +0 -308
- package/src/bsdiff/zstd/tests/zstreamtest.c +0 -3407
- package/src/bsdiff/zstd/zlibWrapper/BUCK +0 -22
- package/src/bsdiff/zstd/zlibWrapper/Makefile +0 -120
- package/src/bsdiff/zstd/zlibWrapper/README.md +0 -163
- package/src/bsdiff/zstd/zlibWrapper/examples/example.c +0 -598
- package/src/bsdiff/zstd/zlibWrapper/examples/example_original.c +0 -599
- package/src/bsdiff/zstd/zlibWrapper/examples/fitblk.c +0 -254
- package/src/bsdiff/zstd/zlibWrapper/examples/fitblk_original.c +0 -233
- package/src/bsdiff/zstd/zlibWrapper/examples/minigzip.c +0 -605
- package/src/bsdiff/zstd/zlibWrapper/examples/zwrapbench.c +0 -1018
- package/src/bsdiff/zstd/zlibWrapper/gzclose.c +0 -26
- package/src/bsdiff/zstd/zlibWrapper/gzcompatibility.h +0 -68
- package/src/bsdiff/zstd/zlibWrapper/gzguts.h +0 -229
- package/src/bsdiff/zstd/zlibWrapper/gzlib.c +0 -587
- package/src/bsdiff/zstd/zlibWrapper/gzread.c +0 -637
- package/src/bsdiff/zstd/zlibWrapper/gzwrite.c +0 -631
- package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.c +0 -1200
- package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.h +0 -91
- package/src/objc/build/objcWrapper.o +0 -0
- package/src/objc/objcWrapper.m +0 -1380
- package/src/zig/build/index.js +0 -782
- package/src/zig/build/libObjcWrapper.a +0 -0
- package/src/zig/build.zig +0 -29
- package/src/zig/macos/application.zig +0 -6
- package/src/zig/macos/objc.zig +0 -123
- package/src/zig/macos/tray.zig +0 -102
- package/src/zig/macos/webview.zig +0 -693
- package/src/zig/macos/window.zig +0 -189
- package/src/zig/main.zig +0 -16
- package/src/zig/rpc/pipesin.zig +0 -202
- package/src/zig/rpc/rpc.zig +0 -19
- package/src/zig/rpc/schema/handlers.zig +0 -402
- package/src/zig/rpc/schema/request.zig +0 -59
- package/src/zig/rpc/schema/schema.zig +0 -412
- package/src/zig/rpc/stdin.zig +0 -112
- package/src/zig/rpc/stdout.zig +0 -106
- package/src/zig/rpc/types.zig +0 -41
- package/src/zig/utils.zig +0 -49
- package/src/zig/zig-out/bin/webview +0 -0
package/src/objc/objcWrapper.m
DELETED
|
@@ -1,1380 +0,0 @@
|
|
|
1
|
-
#import <WebKit/WebKit.h>
|
|
2
|
-
#import <objc/runtime.h>
|
|
3
|
-
#import <Cocoa/Cocoa.h>
|
|
4
|
-
#import <Foundation/Foundation.h>
|
|
5
|
-
#import <CommonCrypto/CommonCrypto.h>
|
|
6
|
-
|
|
7
|
-
// views:// schema handler
|
|
8
|
-
|
|
9
|
-
typedef struct {
|
|
10
|
-
const char *mimeType;
|
|
11
|
-
const char *fileContents;
|
|
12
|
-
size_t len;
|
|
13
|
-
void *opaquePointer;
|
|
14
|
-
} FileResponse;
|
|
15
|
-
|
|
16
|
-
// Define callback types for starting and stopping URL scheme tasks
|
|
17
|
-
typedef FileResponse (*zigStartURLSchemeTaskCallback)(uint32_t webviewId, const char* url, const char* body);
|
|
18
|
-
|
|
19
|
-
@interface MyURLSchemeHandler : NSObject <WKURLSchemeHandler>
|
|
20
|
-
// todo: rename fileLoader to zigContentLoader or zigResponseLoader
|
|
21
|
-
@property (nonatomic, assign) zigStartURLSchemeTaskCallback fileLoader;
|
|
22
|
-
@property (nonatomic, assign) uint32_t webviewId;
|
|
23
|
-
@end
|
|
24
|
-
|
|
25
|
-
@implementation MyURLSchemeHandler
|
|
26
|
-
|
|
27
|
-
- (void)webView:(WKWebView *)webView startURLSchemeTask:(id<WKURLSchemeTask>)urlSchemeTask {
|
|
28
|
-
NSURL *url = urlSchemeTask.request.URL;
|
|
29
|
-
NSData *bodyData = urlSchemeTask.request.HTTPBody;
|
|
30
|
-
NSString *bodyString = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];
|
|
31
|
-
|
|
32
|
-
// todo: the zig handler should return the file to here, and objc can send it back to the webview
|
|
33
|
-
if (self.fileLoader) {
|
|
34
|
-
FileResponse fileResponse = self.fileLoader(self.webviewId, url.absoluteString.UTF8String, bodyString.UTF8String);
|
|
35
|
-
// Determine MIME type from the response, or default if null
|
|
36
|
-
NSString *mimeType = fileResponse.mimeType ? [NSString stringWithUTF8String:fileResponse.mimeType] : @"application/octet-stream";
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if ([mimeType isEqualToString:@"screenshot"]) {
|
|
40
|
-
// Note: for the screenshot api currently we just use zig to get a handle to the
|
|
41
|
-
// requested webview that we want to snapshot. We take the snapshot here and
|
|
42
|
-
// resolve the url request here.
|
|
43
|
-
|
|
44
|
-
WKSnapshotConfiguration *snapshotConfig = [[WKSnapshotConfiguration alloc] init];
|
|
45
|
-
WKWebView *targetWebview = (__bridge WKWebView *)fileResponse.opaquePointer;
|
|
46
|
-
|
|
47
|
-
// Capture the snapshot
|
|
48
|
-
[targetWebview takeSnapshotWithConfiguration:snapshotConfig completionHandler:^(NSImage *snapshotImage, NSError *error) {
|
|
49
|
-
if (error) {
|
|
50
|
-
NSLog(@"Error capturing snapshot: %@", error);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
// bmp - twice as fast as jpg which is twice as fast as png
|
|
54
|
-
NSDictionary *bmpProperties = @{NSImageCompressionFactor: @1.0}; // Adjust compression factor as needed
|
|
55
|
-
NSBitmapImageRep *imgRepbmp = [[NSBitmapImageRep alloc] initWithData:[snapshotImage TIFFRepresentation]];
|
|
56
|
-
NSData *imgData = [imgRepbmp representationUsingType:NSBitmapImageFileTypeBMP properties:bmpProperties];
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// Create a response - you might need to adjust the MIME type
|
|
61
|
-
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:url
|
|
62
|
-
// Webkit will try guess the mimetype based on the file extension. supports common file types https://github.com/WebKit/WebKit/blob/a78127adb38a402b5d0fe6b17367aba32a38eb22/Source/WebCore/platform/playstation/MIMETypeRegistryPlayStation.cpp#L34-L55
|
|
63
|
-
// If/when we need to support more file types, we can implement that in zig cross-platform and allow extending with more
|
|
64
|
-
// bun also has comprehensive mimetype detection written in zig that could be used but increases the binary size
|
|
65
|
-
MIMEType:@"image/bmp"
|
|
66
|
-
expectedContentLength:imgData.length
|
|
67
|
-
textEncodingName:nil];
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// Inform the urlSchemeTask of the response
|
|
71
|
-
[urlSchemeTask didReceiveResponse:response];
|
|
72
|
-
|
|
73
|
-
// Send the data
|
|
74
|
-
[urlSchemeTask didReceiveData:imgData];
|
|
75
|
-
|
|
76
|
-
// Complete the task
|
|
77
|
-
[urlSchemeTask didFinish];
|
|
78
|
-
// how to send the fileContents back to the webview?
|
|
79
|
-
}];
|
|
80
|
-
} else {
|
|
81
|
-
NSData *data = [NSData dataWithBytes:fileResponse.fileContents length:fileResponse.len];
|
|
82
|
-
|
|
83
|
-
// Create a response - you might need to adjust the MIME type
|
|
84
|
-
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:url
|
|
85
|
-
// Webkit will try guess the mimetype based on the file extension. supports common file types https://github.com/WebKit/WebKit/blob/a78127adb38a402b5d0fe6b17367aba32a38eb22/Source/WebCore/platform/playstation/MIMETypeRegistryPlayStation.cpp#L34-L55
|
|
86
|
-
// If/when we need to support more file types, we can implement that in zig cross-platform and allow extending with more
|
|
87
|
-
// bun also has comprehensive mimetype detection written in zig that could be used but increases the binary size
|
|
88
|
-
MIMEType:mimeType
|
|
89
|
-
expectedContentLength:data.length
|
|
90
|
-
textEncodingName:nil];
|
|
91
|
-
|
|
92
|
-
// Inform the urlSchemeTask of the response
|
|
93
|
-
[urlSchemeTask didReceiveResponse:response];
|
|
94
|
-
|
|
95
|
-
// Send the data
|
|
96
|
-
[urlSchemeTask didReceiveData:data];
|
|
97
|
-
|
|
98
|
-
// Complete the task
|
|
99
|
-
[urlSchemeTask didFinish];
|
|
100
|
-
// how to send the fileContents back to the webview?
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
- (void)webView:(WKWebView *)webView stopURLSchemeTask:(id<WKURLSchemeTask>)urlSchemeTask {
|
|
106
|
-
NSURL *url = urlSchemeTask.request.URL;
|
|
107
|
-
NSLog(@"Stopping URL scheme task for URL: %@", url);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
@end
|
|
111
|
-
|
|
112
|
-
// generic utils
|
|
113
|
-
|
|
114
|
-
// manually retain and release objects so they don't get deallocated
|
|
115
|
-
// Function to retain any Objective-C object
|
|
116
|
-
// Note: retainObj / releaseObj increments and decrements the retain count of the object
|
|
117
|
-
// prefer using objc_setAssociatedObject to store objects in other objects
|
|
118
|
-
// this lets arc count that association as a reference and auto-cleanup when it's no longer needed
|
|
119
|
-
void retainObjCObject(id objcObject) {
|
|
120
|
-
CFRetain((__bridge CFTypeRef)objcObject);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Function to release any Objective-C object
|
|
124
|
-
void releaseObjCObject(id objcObject) {
|
|
125
|
-
CFRelease((__bridge CFTypeRef)objcObject);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// mask utils
|
|
129
|
-
typedef struct {
|
|
130
|
-
BOOL Borderless;
|
|
131
|
-
BOOL Titled;
|
|
132
|
-
BOOL Closable;
|
|
133
|
-
BOOL Miniaturizable;
|
|
134
|
-
BOOL Resizable;
|
|
135
|
-
BOOL UnifiedTitleAndToolbar;
|
|
136
|
-
BOOL FullScreen;
|
|
137
|
-
BOOL FullSizeContentView;
|
|
138
|
-
BOOL UtilityWindow;
|
|
139
|
-
BOOL DocModalWindow;
|
|
140
|
-
BOOL NonactivatingPanel;
|
|
141
|
-
BOOL HUDWindow;
|
|
142
|
-
} WindowStyleMaskOptions;
|
|
143
|
-
|
|
144
|
-
NSUInteger getNSWindowStyleMask(WindowStyleMaskOptions options) {
|
|
145
|
-
NSUInteger mask = 0;
|
|
146
|
-
if (options.Borderless) {
|
|
147
|
-
mask |= NSWindowStyleMaskBorderless;
|
|
148
|
-
}
|
|
149
|
-
if (options.Titled) {
|
|
150
|
-
mask |= NSWindowStyleMaskTitled;
|
|
151
|
-
}
|
|
152
|
-
if (options.Closable) {
|
|
153
|
-
mask |= NSWindowStyleMaskClosable;
|
|
154
|
-
}
|
|
155
|
-
if (options.Miniaturizable) {
|
|
156
|
-
mask |= NSWindowStyleMaskMiniaturizable;
|
|
157
|
-
}
|
|
158
|
-
if (options.Resizable) {
|
|
159
|
-
mask |= NSWindowStyleMaskResizable;
|
|
160
|
-
}
|
|
161
|
-
if (options.UnifiedTitleAndToolbar) {
|
|
162
|
-
mask |= NSWindowStyleMaskUnifiedTitleAndToolbar;
|
|
163
|
-
}
|
|
164
|
-
if (options.FullScreen) {
|
|
165
|
-
mask |= NSWindowStyleMaskFullScreen;
|
|
166
|
-
}
|
|
167
|
-
if (options.FullSizeContentView) {
|
|
168
|
-
mask |= NSWindowStyleMaskFullSizeContentView;
|
|
169
|
-
}
|
|
170
|
-
if (options.UtilityWindow) {
|
|
171
|
-
mask |= NSWindowStyleMaskUtilityWindow;
|
|
172
|
-
}
|
|
173
|
-
if (options.DocModalWindow) {
|
|
174
|
-
mask |= NSWindowStyleMaskDocModalWindow;
|
|
175
|
-
}
|
|
176
|
-
if (options.NonactivatingPanel) {
|
|
177
|
-
mask |= NSWindowStyleMaskNonactivatingPanel;
|
|
178
|
-
}
|
|
179
|
-
if (options.HUDWindow) {
|
|
180
|
-
mask |= NSWindowStyleMaskHUDWindow;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return mask;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// application
|
|
187
|
-
|
|
188
|
-
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
|
189
|
-
@end
|
|
190
|
-
|
|
191
|
-
@implementation AppDelegate
|
|
192
|
-
|
|
193
|
-
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
|
|
194
|
-
NSLog(@"Intercepting application termination");
|
|
195
|
-
// todo: implement a way to cancel sudden termination from bun
|
|
196
|
-
// in order to allow for cleanup
|
|
197
|
-
// return NSTerminateCancel;
|
|
198
|
-
return NSTerminateNow;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
@end
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
void runNSApplication() {
|
|
205
|
-
|
|
206
|
-
NSApplication *app = [NSApplication sharedApplication];
|
|
207
|
-
AppDelegate *delegate = [[AppDelegate alloc] init];
|
|
208
|
-
[app setDelegate:delegate];
|
|
209
|
-
|
|
210
|
-
retainObjCObject(delegate);
|
|
211
|
-
|
|
212
|
-
[app run];
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// cursor
|
|
217
|
-
|
|
218
|
-
// Note: WkWebviews are all in different threads and calling mouse cursor methods individually
|
|
219
|
-
// Regardless of layering they will often come in out of order
|
|
220
|
-
// Regardless of trying to stop propagation of native mousemove events they will still be called
|
|
221
|
-
// Because of the way it checks the current NSApp cursor it only calls set when it's different from the one it wants
|
|
222
|
-
// Because it's delayed it can't play off the sequence of wkwebkits handling the cursor within a single round trip
|
|
223
|
-
// https://github.com/WebKit/WebKit/blob/579f828a4c55913c59cc26a9e6e316e6cf40a45b/Source/WebKit/UIProcess/mac/PageClientImplMac.mm#L324
|
|
224
|
-
// Our best hope of smoothing out the cursor wiggle when having layered wkwebviews (like <electrobun-webview> elements)
|
|
225
|
-
// is to keep track of the last 20 cursor sets. set the most recent non-arrow one. This still causes a flicker
|
|
226
|
-
// every 20 or so sets which is smooth enough to not look super janky, but often enough that the cursor still feels responsive
|
|
227
|
-
// I am disgusted by this.
|
|
228
|
-
|
|
229
|
-
NSMutableArray<NSCursor *> *recentCursors;
|
|
230
|
-
const NSInteger maxCursorHistory = 20;
|
|
231
|
-
|
|
232
|
-
@implementation NSCursor (Swizzling)
|
|
233
|
-
|
|
234
|
-
+ (void)load {
|
|
235
|
-
static dispatch_once_t onceToken;
|
|
236
|
-
dispatch_once(&onceToken, ^{
|
|
237
|
-
recentCursors = [NSMutableArray array];
|
|
238
|
-
Class class = [self class];
|
|
239
|
-
|
|
240
|
-
SEL originalSelector = @selector(set);
|
|
241
|
-
SEL swizzledSelector = @selector(swizzled_set);
|
|
242
|
-
|
|
243
|
-
Method originalMethod = class_getInstanceMethod(class, originalSelector);
|
|
244
|
-
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
|
|
245
|
-
|
|
246
|
-
BOOL didAddMethod = class_addMethod(class,
|
|
247
|
-
originalSelector,
|
|
248
|
-
method_getImplementation(swizzledMethod),
|
|
249
|
-
method_getTypeEncoding(swizzledMethod));
|
|
250
|
-
|
|
251
|
-
if (didAddMethod) {
|
|
252
|
-
class_replaceMethod(class,
|
|
253
|
-
swizzledSelector,
|
|
254
|
-
method_getImplementation(originalMethod),
|
|
255
|
-
method_getTypeEncoding(originalMethod));
|
|
256
|
-
} else {
|
|
257
|
-
method_exchangeImplementations(originalMethod, swizzledMethod);
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
- (void)swizzled_set {
|
|
263
|
-
[self updateRecentCursors:self];
|
|
264
|
-
|
|
265
|
-
// todo: if there's only one webivew then set the cursor and skip everything else
|
|
266
|
-
// todo: need to track which window is the last one to set the cursor, can maybe track
|
|
267
|
-
// via mousemove events
|
|
268
|
-
|
|
269
|
-
NSCursor *nonArrayCursorToSet = [self mostRecentNonArrowCursor];
|
|
270
|
-
NSCursor *cursorToSet;
|
|
271
|
-
|
|
272
|
-
// todo: if the latest cursor is normal, and te nonArrayCursorToSet is not
|
|
273
|
-
// check to see if there are two webviews at this mouse location
|
|
274
|
-
// so when moving outside of the webviewtag it resets immediately.
|
|
275
|
-
// set the cursor and reset the recentNonArrowCursors
|
|
276
|
-
|
|
277
|
-
if (nonArrayCursorToSet) {
|
|
278
|
-
cursorToSet = nonArrayCursorToSet;
|
|
279
|
-
} else {
|
|
280
|
-
cursorToSet = [NSCursor arrowCursor];
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
[cursorToSet swizzled_set];
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
- (void)updateRecentCursors:(NSCursor *)cursor {
|
|
287
|
-
if (recentCursors.count >= maxCursorHistory) {
|
|
288
|
-
[recentCursors removeObjectAtIndex:0];
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
[recentCursors addObject:cursor];
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
- (NSCursor *)mostRecentNonArrowCursor {
|
|
295
|
-
for (NSCursor *cursor in [recentCursors reverseObjectEnumerator]) {
|
|
296
|
-
if (cursor != [NSCursor arrowCursor]) {
|
|
297
|
-
return cursor;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
return nil;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
@end
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
// WKWebView
|
|
307
|
-
|
|
308
|
-
NSUUID *UUIDFromString(NSString *string) {
|
|
309
|
-
// Create a SHA-256 hash of the string
|
|
310
|
-
unsigned char hash[CC_SHA256_DIGEST_LENGTH];
|
|
311
|
-
CC_SHA256(string.UTF8String, (CC_LONG)strlen(string.UTF8String), hash);
|
|
312
|
-
|
|
313
|
-
// Construct the UUID from the first 16 bytes of the hash
|
|
314
|
-
uuid_t uuid;
|
|
315
|
-
memcpy(uuid, hash, sizeof(uuid));
|
|
316
|
-
|
|
317
|
-
// Create the NSUUID from the UUID bytes
|
|
318
|
-
NSUUID *uuidObject = [[NSUUID alloc] initWithUUIDBytes:uuid];
|
|
319
|
-
return uuidObject;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
WKWebsiteDataStore* createDataStoreForPartition(const char* partitionIdentifier) {
|
|
323
|
-
NSString *identifier = [NSString stringWithUTF8String:partitionIdentifier];
|
|
324
|
-
|
|
325
|
-
if ([identifier hasPrefix:@"persist:"]) {
|
|
326
|
-
// Create or retrieve a persistent data store with the given identifier
|
|
327
|
-
identifier = [identifier substringFromIndex:8]; // Remove the "persist:" prefix
|
|
328
|
-
// We use a hash function (SHA256) to predictably generate a UUID from a string
|
|
329
|
-
// so we don't have to store the UUIDs anywhere
|
|
330
|
-
NSUUID *uuid = UUIDFromString(identifier);
|
|
331
|
-
if (uuid) {
|
|
332
|
-
return [WKWebsiteDataStore dataStoreForIdentifier:uuid];
|
|
333
|
-
} else {
|
|
334
|
-
NSLog(@"Invalid UUID for identifier: %@", identifier);
|
|
335
|
-
return [WKWebsiteDataStore defaultDataStore]; // Fall back to default data store
|
|
336
|
-
}
|
|
337
|
-
} else {
|
|
338
|
-
// Create a non-persistent data store
|
|
339
|
-
return [WKWebsiteDataStore nonPersistentDataStore];
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// custom WKWebView that allows mouse events to pass through
|
|
344
|
-
@interface TransparentWKWebView : WKWebView
|
|
345
|
-
|
|
346
|
-
@property (nonatomic, assign) BOOL isMousePassthroughEnabled;
|
|
347
|
-
|
|
348
|
-
@end
|
|
349
|
-
@implementation TransparentWKWebView
|
|
350
|
-
|
|
351
|
-
- (NSView *)hitTest:(NSPoint)point {
|
|
352
|
-
if (self.isMousePassthroughEnabled) {
|
|
353
|
-
return nil; // Pass through all mouse events
|
|
354
|
-
}
|
|
355
|
-
return [super hitTest:point];
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
@end
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
WKWebView* createAndReturnWKWebView(uint32_t webviewId, NSRect frame, zigStartURLSchemeTaskCallback assetFileLoader, bool autoResize, const char *partitionIdentifier) {
|
|
362
|
-
// Create a default WKWebViewConfiguration
|
|
363
|
-
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
|
|
364
|
-
|
|
365
|
-
// wire up partition
|
|
366
|
-
configuration.websiteDataStore = createDataStoreForPartition(partitionIdentifier);
|
|
367
|
-
|
|
368
|
-
// wire up views:// schema handler
|
|
369
|
-
MyURLSchemeHandler *assetSchemeHandler = [[MyURLSchemeHandler alloc] init];
|
|
370
|
-
assetSchemeHandler.fileLoader = assetFileLoader;
|
|
371
|
-
assetSchemeHandler.webviewId = webviewId;
|
|
372
|
-
|
|
373
|
-
// fullscreen settings
|
|
374
|
-
[configuration.preferences setValue:@YES forKey:@"elementFullscreenEnabled"];
|
|
375
|
-
|
|
376
|
-
// Note: Keep "views" in sync with views:// in webview.zig
|
|
377
|
-
[configuration setURLSchemeHandler:assetSchemeHandler forURLScheme:@"views"];
|
|
378
|
-
objc_setAssociatedObject(configuration, "assetSchemeHandler", assetSchemeHandler, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
379
|
-
|
|
380
|
-
// todo: remove - we're not using this anymore
|
|
381
|
-
MyURLSchemeHandler *httpsSchemeHandler = [[MyURLSchemeHandler alloc] init];
|
|
382
|
-
|
|
383
|
-
httpsSchemeHandler.webviewId = webviewId;
|
|
384
|
-
|
|
385
|
-
[configuration setURLSchemeHandler:httpsSchemeHandler forURLScheme:@"remote"];
|
|
386
|
-
objc_setAssociatedObject(configuration, "httpsSchemeHandler", httpsSchemeHandler, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
387
|
-
|
|
388
|
-
// open devtools
|
|
389
|
-
// Enable Developer Extras (right click to inspect element)
|
|
390
|
-
[configuration.preferences setValue:@YES forKey:@"developerExtrasEnabled"];
|
|
391
|
-
|
|
392
|
-
// Allocate and initialize the WKWebView
|
|
393
|
-
TransparentWKWebView *webView = [[TransparentWKWebView alloc] initWithFrame:frame configuration:configuration];
|
|
394
|
-
|
|
395
|
-
// Note: This makes webview have a transparent background by default.
|
|
396
|
-
// todo: consider making this configurable during webview creation and/or
|
|
397
|
-
// adding a toggle function for it.
|
|
398
|
-
[webView setValue:@NO forKey:@"drawsBackground"];
|
|
399
|
-
webView.layer.backgroundColor = [[NSColor clearColor] CGColor];
|
|
400
|
-
webView.layer.opaque = NO;
|
|
401
|
-
|
|
402
|
-
// Since all wkwebviews are children of a generic NSView we need to tell them to
|
|
403
|
-
// auto size with the window.
|
|
404
|
-
if (autoResize) {
|
|
405
|
-
webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
retainObjCObject(webView);
|
|
409
|
-
// Perform any additional setup here
|
|
410
|
-
return webView;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
void loadURLInWebView(WKWebView *webView, const char *urlString) {
|
|
414
|
-
NSString *urlNSString = [NSString stringWithUTF8String:urlString];
|
|
415
|
-
NSURL *url = [NSURL URLWithString:urlNSString];
|
|
416
|
-
NSURLRequest *request = [NSURLRequest requestWithURL:url];
|
|
417
|
-
[webView loadRequest:request];
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
void loadHTMLInWebView(WKWebView *webView, const char *htmlString) {
|
|
421
|
-
NSString *htmlNSString = [NSString stringWithUTF8String:htmlString];
|
|
422
|
-
NSURL *baseURL = [NSURL URLWithString:@"file://"];
|
|
423
|
-
[webView loadHTMLString:htmlNSString baseURL:baseURL];
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
void webviewTagGoBack(WKWebView *webView) {
|
|
427
|
-
[webView goBack];
|
|
428
|
-
}
|
|
429
|
-
void webviewTagGoForward(WKWebView *webView) {
|
|
430
|
-
[webView goForward];
|
|
431
|
-
}
|
|
432
|
-
void webviewTagReload(WKWebView *webView) {
|
|
433
|
-
[webView reload];
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
void webviewRemove(WKWebView *webView) {
|
|
437
|
-
[webView stopLoading];
|
|
438
|
-
[webView removeFromSuperview];
|
|
439
|
-
|
|
440
|
-
webView.navigationDelegate = nil;
|
|
441
|
-
webView.UIDelegate = nil;
|
|
442
|
-
|
|
443
|
-
[webView evaluateJavaScript:@"document.body.innerHTML='';" completionHandler:nil];
|
|
444
|
-
|
|
445
|
-
releaseObjCObject(webView);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
void invokeDecisionHandler(void (^decisionHandler)(WKNavigationActionPolicy), WKNavigationActionPolicy policy) {
|
|
449
|
-
if (decisionHandler != NULL) {
|
|
450
|
-
decisionHandler(policy);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
const char* getUrlFromNavigationAction(WKNavigationAction *navigationAction) {
|
|
455
|
-
NSURLRequest *request = navigationAction.request;
|
|
456
|
-
NSURL *url = request.URL;
|
|
457
|
-
return url.absoluteString.UTF8String;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
const char* getBodyFromScriptMessage(WKScriptMessage *message) {
|
|
461
|
-
NSString *body = message.body;
|
|
462
|
-
return body.UTF8String;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
void evaluateJavaScriptWithNoCompletion(WKWebView *webView, const char *jsString) {
|
|
466
|
-
NSString *javaScript = [NSString stringWithUTF8String:jsString];
|
|
467
|
-
[webView evaluateJavaScript:javaScript completionHandler:nil];
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
typedef void (*callAsyncJavascriptCompletionHandler)(const char *messageId, uint32_t webviewId, uint32_t hostWebviewId, const char *responseJSON);
|
|
471
|
-
|
|
472
|
-
void callAsyncJavaScript(const char *messageId, WKWebView *webView, const char *jsString, uint32_t webviewId, uint32_t hostWebviewId, callAsyncJavascriptCompletionHandler callback) {
|
|
473
|
-
NSString *javaScript = [NSString stringWithUTF8String:jsString];
|
|
474
|
-
NSDictionary *arguments = @{};
|
|
475
|
-
|
|
476
|
-
// todo: let dev specify the content world and the frame
|
|
477
|
-
[webView callAsyncJavaScript:javaScript arguments:arguments inFrame:nil inContentWorld:WKContentWorld.pageWorld completionHandler:^(id result, NSError *error) {
|
|
478
|
-
NSError *jsonError;
|
|
479
|
-
NSData *jsonData;
|
|
480
|
-
|
|
481
|
-
if (error != nil) {
|
|
482
|
-
jsonData = [NSJSONSerialization dataWithJSONObject:@{@"error": error.localizedDescription} options:0 error:&jsonError];
|
|
483
|
-
} else {
|
|
484
|
-
if (result == nil) {
|
|
485
|
-
jsonData = [NSJSONSerialization dataWithJSONObject:@{@"result": [NSNull null]} options:0 error:&jsonError];
|
|
486
|
-
} else if ([NSJSONSerialization isValidJSONObject:result]) {
|
|
487
|
-
jsonData = [NSJSONSerialization dataWithJSONObject:result options:0 error:&jsonError];
|
|
488
|
-
} else {
|
|
489
|
-
jsonData = [NSJSONSerialization dataWithJSONObject:@{@"result": [result description]} options:0 error:&jsonError];
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
if (jsonError) {
|
|
493
|
-
jsonData = [NSJSONSerialization dataWithJSONObject:@{@"error": jsonError.localizedDescription} options:0 error:&jsonError];
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
498
|
-
callback(messageId, webviewId, hostWebviewId, jsonString.UTF8String);
|
|
499
|
-
}];
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
void* getNilValue() {
|
|
503
|
-
return NULL;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
void addPreloadScriptToWebView(WKWebView *webView, const char *scriptContent, BOOL forMainFrameOnly) {
|
|
507
|
-
// Create a WKUserScript object with the provided script content
|
|
508
|
-
// Injection time is set to atDocumentStart to ensure it runs before the page content loads
|
|
509
|
-
WKUserScript *userScript = [[WKUserScript alloc] initWithSource:[NSString stringWithUTF8String:scriptContent]
|
|
510
|
-
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
|
|
511
|
-
forMainFrameOnly:forMainFrameOnly];
|
|
512
|
-
|
|
513
|
-
// Add the user script to the content controller
|
|
514
|
-
[webView.configuration.userContentController addUserScript:userScript];
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
// This adds a commend with a unique script identifier to the user script, and removes any existing ones with that identifier
|
|
519
|
-
// This is useful for cases where you want to change an existing user script during the lifetime of a webview
|
|
520
|
-
void updatePreloadScriptToWebView(WKWebView *webView, const char *scriptIdentifier, const char *scriptContent, BOOL forMainFrameOnly) {
|
|
521
|
-
WKUserContentController *contentController = webView.configuration.userContentController;
|
|
522
|
-
|
|
523
|
-
// Prepare the script identifier as a comment
|
|
524
|
-
NSString *identifierComment = [NSString stringWithFormat:@"// %@\n", [NSString stringWithUTF8String:scriptIdentifier]];
|
|
525
|
-
NSString *newScriptSource = [identifierComment stringByAppendingString:[NSString stringWithUTF8String:scriptContent]];
|
|
526
|
-
|
|
527
|
-
// Store existing scripts except the one to be updated
|
|
528
|
-
NSMutableArray *newScripts = [NSMutableArray array];
|
|
529
|
-
for (WKUserScript *userScript in contentController.userScripts) {
|
|
530
|
-
if (![userScript.source containsString:identifierComment]) {
|
|
531
|
-
[newScripts addObject:userScript];
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
// Clear all scripts
|
|
536
|
-
[contentController removeAllUserScripts];
|
|
537
|
-
|
|
538
|
-
// Add back the non-updated scripts
|
|
539
|
-
for (WKUserScript *userScript in newScripts) {
|
|
540
|
-
[contentController addUserScript:userScript];
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
// Add the new user script
|
|
544
|
-
WKUserScript *newUserScript = [[WKUserScript alloc] initWithSource:newScriptSource
|
|
545
|
-
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
|
|
546
|
-
forMainFrameOnly:forMainFrameOnly];
|
|
547
|
-
[contentController addUserScript:newUserScript];
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
BOOL webviewCanGoBack(WKWebView *webView) {
|
|
551
|
-
return [webView canGoBack];
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
BOOL webviewCanGoForward(WKWebView *webView) {
|
|
555
|
-
return [webView canGoForward];
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
// NSWindow
|
|
559
|
-
NSScreen *getPrimaryScreen() {
|
|
560
|
-
NSArray *screens = [NSScreen screens];
|
|
561
|
-
return screens[0];
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
NSRect getWindowBounds(NSWindow *window) {
|
|
565
|
-
NSView *contentView = [window contentView];
|
|
566
|
-
return [contentView bounds];
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
typedef void (*WindowCloseHandler)(uint32_t windowId);
|
|
570
|
-
typedef void (*WindowMoveHandler)(uint32_t windowId, CGFloat x, CGFloat y);
|
|
571
|
-
typedef void (*WindowResizeHandler)(uint32_t windowId, CGFloat x, CGFloat y, CGFloat width, CGFloat height);
|
|
572
|
-
|
|
573
|
-
@interface WindowDelegate : NSObject <NSWindowDelegate>
|
|
574
|
-
@property (nonatomic, assign) WindowCloseHandler closeHandler;
|
|
575
|
-
@property (nonatomic, assign) WindowMoveHandler moveHandler;
|
|
576
|
-
@property (nonatomic, assign) WindowResizeHandler resizeHandler;
|
|
577
|
-
@property (nonatomic, assign) uint32_t windowId;
|
|
578
|
-
@end
|
|
579
|
-
|
|
580
|
-
@implementation WindowDelegate
|
|
581
|
-
- (BOOL)windowShouldClose:(NSWindow *)sender {
|
|
582
|
-
// todo: Implement a way to prevent a window closing from bun
|
|
583
|
-
|
|
584
|
-
return YES;
|
|
585
|
-
}
|
|
586
|
-
- (void)windowWillClose:(NSNotification *)notification {
|
|
587
|
-
// todo: Perform any cleanup needed
|
|
588
|
-
NSWindow *window = [notification object];
|
|
589
|
-
// [window setContentView:nil]; // Release content view if needed
|
|
590
|
-
|
|
591
|
-
if (self.closeHandler) {
|
|
592
|
-
self.closeHandler(self.windowId);
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
- (void)windowDidResize:(NSNotification *)notification {
|
|
596
|
-
if (self.resizeHandler) {
|
|
597
|
-
NSWindow *window = [notification object];
|
|
598
|
-
NSRect windowFrame = [window frame];
|
|
599
|
-
|
|
600
|
-
NSScreen *primaryScreen = getPrimaryScreen();
|
|
601
|
-
NSRect screenFrame = [primaryScreen frame];
|
|
602
|
-
windowFrame.origin.y = screenFrame.size.height - windowFrame.origin.y - windowFrame.size.height;
|
|
603
|
-
|
|
604
|
-
// Note: send x and y when resizing in case window is resized from the top left corner
|
|
605
|
-
self.resizeHandler(self.windowId, windowFrame.origin.x, windowFrame.origin.y, windowFrame.size.width, windowFrame.size.height);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
- (void)windowDidMove:(NSNotification *)notification {
|
|
610
|
-
if (self.moveHandler) {
|
|
611
|
-
NSWindow *window = [notification object];
|
|
612
|
-
// Note: windowFrame will be the bottom-left corner of the window's position relative to the bottom-left corner of the screen
|
|
613
|
-
// so we need to adjust it
|
|
614
|
-
NSRect windowFrame = [window frame];
|
|
615
|
-
NSScreen *primaryScreen = getPrimaryScreen();
|
|
616
|
-
NSRect screenFrame = [primaryScreen frame];
|
|
617
|
-
windowFrame.origin.y = screenFrame.size.height - windowFrame.origin.y - windowFrame.size.height;
|
|
618
|
-
|
|
619
|
-
// todo: double check later about how we position windows (contentRect) vs move and resize handlers that use the frame
|
|
620
|
-
// may cause offset differences between frame and frameless windows
|
|
621
|
-
self.moveHandler(self.windowId, windowFrame.origin.x, windowFrame.origin.y);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
@end
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
typedef struct {
|
|
628
|
-
NSRect frame;
|
|
629
|
-
WindowStyleMaskOptions styleMask;
|
|
630
|
-
const char *titleBarStyle;
|
|
631
|
-
} createNSWindowWithFrameAndStyleParams;
|
|
632
|
-
|
|
633
|
-
NSWindow *createNSWindowWithFrameAndStyle(uint32_t windowId, createNSWindowWithFrameAndStyleParams config, WindowCloseHandler zigCloseHandler, WindowMoveHandler zigMoveHandler, WindowResizeHandler zigResizeHandler) {
|
|
634
|
-
|
|
635
|
-
// frame is top-left window corner relative to screen's top-left corner
|
|
636
|
-
// but NSWindow wants bottom-left window corner relative to screen's bottom-left corner
|
|
637
|
-
// so we need to adjust the y position
|
|
638
|
-
NSScreen *primaryScreen = getPrimaryScreen();
|
|
639
|
-
NSRect screenFrame = [primaryScreen frame];
|
|
640
|
-
|
|
641
|
-
config.frame.origin.y = screenFrame.size.height - config.frame.origin.y;
|
|
642
|
-
|
|
643
|
-
NSWindow *window = [[NSWindow alloc] initWithContentRect:config.frame
|
|
644
|
-
styleMask:getNSWindowStyleMask(config.styleMask)
|
|
645
|
-
backing:NSBackingStoreBuffered
|
|
646
|
-
defer:YES
|
|
647
|
-
screen:primaryScreen];
|
|
648
|
-
|
|
649
|
-
// Note: there's something funky about initWithContentRect, no matter what screen it's positioned on the active
|
|
650
|
-
// screen will somehow make a difference when subtracting the config.frame.size.height (to switch from bottom-left
|
|
651
|
-
// of window to top-left of window positioning) so we need to use setFrameTopLeftPoint to get consistent
|
|
652
|
-
// behaviour
|
|
653
|
-
[window setFrameTopLeftPoint:config.frame.origin];
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
if (strcmp(config.titleBarStyle, "hiddenInset") == 0) {
|
|
657
|
-
window.titlebarAppearsTransparent = YES;
|
|
658
|
-
window.titleVisibility = NSWindowTitleHidden;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
WindowDelegate *delegate = [[WindowDelegate alloc] init];
|
|
662
|
-
delegate.closeHandler = zigCloseHandler;
|
|
663
|
-
delegate.resizeHandler = zigResizeHandler;
|
|
664
|
-
delegate.moveHandler = zigMoveHandler;
|
|
665
|
-
delegate.windowId = windowId;
|
|
666
|
-
[window setDelegate:delegate];
|
|
667
|
-
objc_setAssociatedObject(window, "WindowDelegate", delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
668
|
-
// ARC will try to release the window or something which will be one too many
|
|
669
|
-
// or something leading to a panic crash.. or something. Anyway after
|
|
670
|
-
// losing my mind over this behaviour all day setting this to NO fixes it.
|
|
671
|
-
window.releasedWhenClosed = NO;
|
|
672
|
-
|
|
673
|
-
// Give it a default content view that can accept subviews later on
|
|
674
|
-
NSView *contentView = [[NSView alloc] initWithFrame:[window frame]];
|
|
675
|
-
[window setContentView:contentView];
|
|
676
|
-
|
|
677
|
-
return window;
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
void makeNSWindowKeyAndOrderFront(NSWindow *window) {
|
|
681
|
-
[window makeKeyAndOrderFront:nil];
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
void setNSWindowTitle(NSWindow *window, const char *title) {
|
|
685
|
-
NSString *titleString = [NSString stringWithUTF8String:title];
|
|
686
|
-
[window setTitle:titleString];
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
void closeNSWindow(NSWindow *window) {
|
|
690
|
-
// todo: close all the webviews
|
|
691
|
-
[window close];
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
void addWebviewToWindow(NSWindow *window, NSView *view) {
|
|
695
|
-
|
|
696
|
-
[window.contentView addSubview:view positioned:NSWindowAbove relativeTo:nil];
|
|
697
|
-
|
|
698
|
-
CGFloat adjustedY = view.superview.bounds.size.height - view.frame.origin.y - view.frame.size.height;
|
|
699
|
-
view.frame = NSMakeRect(view.frame.origin.x, adjustedY, view.frame.size.width, view.frame.size.height);
|
|
700
|
-
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
void resizeWebview(NSView *view, NSRect frame) {
|
|
704
|
-
CGFloat adjustedY = view.superview.bounds.size.height - frame.origin.y - frame.size.height;
|
|
705
|
-
view.frame = NSMakeRect(frame.origin.x, adjustedY, frame.size.width, frame.size.height);
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
typedef void (*zigSnapshotCallback)(uint32_t hostId, uint32_t webviewId, const char * dataUrl);
|
|
709
|
-
|
|
710
|
-
void getWebviewSnapshot(uint32_t hostId, uint32_t webviewId, WKWebView *webView, zigSnapshotCallback callback){
|
|
711
|
-
// Create a snapshot configuration
|
|
712
|
-
WKSnapshotConfiguration *snapshotConfig = [[WKSnapshotConfiguration alloc] init];
|
|
713
|
-
|
|
714
|
-
// Capture the snapshot
|
|
715
|
-
[webView takeSnapshotWithConfiguration:snapshotConfig completionHandler:^(NSImage *snapshotImage, NSError *error) {
|
|
716
|
-
if (error) {
|
|
717
|
-
NSLog(@"Error capturing snapshot: %@", error);
|
|
718
|
-
return;
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
// Convert the image to PNG data
|
|
722
|
-
NSBitmapImageRep *imgRep = [[NSBitmapImageRep alloc] initWithData:[snapshotImage TIFFRepresentation]];
|
|
723
|
-
NSData *pngData = [imgRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}];
|
|
724
|
-
|
|
725
|
-
// Convert PNG data to Base64 string
|
|
726
|
-
NSString *base64String = [pngData base64EncodedStringWithOptions:0];
|
|
727
|
-
|
|
728
|
-
// Create Data URL
|
|
729
|
-
NSString *dataUrl = [NSString stringWithFormat:@"data:image/png;base64,%@", base64String];
|
|
730
|
-
|
|
731
|
-
// Return the Data URL
|
|
732
|
-
if (callback) {
|
|
733
|
-
callback(hostId, webviewId, [dataUrl UTF8String]);
|
|
734
|
-
}
|
|
735
|
-
}];
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
// todo: rename these from webviewTagX to webviewX
|
|
739
|
-
// This makes the webview invisible.
|
|
740
|
-
void webviewTagSetTransparent(WKWebView *webview, BOOL transparent) {
|
|
741
|
-
if (transparent) {
|
|
742
|
-
webview.layer.opacity = 0;
|
|
743
|
-
} else {
|
|
744
|
-
webview.layer.opacity = 1;
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
void webviewTagSetPassthrough(TransparentWKWebView *webview, BOOL enablePassthrough) {
|
|
749
|
-
if (enablePassthrough) {
|
|
750
|
-
webview.isMousePassthroughEnabled = YES;
|
|
751
|
-
} else {
|
|
752
|
-
webview.isMousePassthroughEnabled = NO;
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
void webviewSetHidden(WKWebView *webview, BOOL hidden) {
|
|
757
|
-
if (hidden) {
|
|
758
|
-
[webview setHidden:YES];
|
|
759
|
-
} else {
|
|
760
|
-
[webview setHidden:NO];
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
NSRect createNSRectWrapper(double x, double y, double width, double height) {
|
|
765
|
-
return NSMakeRect(x, y, width, height);
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
// navigation delegate that
|
|
771
|
-
typedef BOOL (*DecideNavigationCallback)(uint32_t webviewId, const char* url);
|
|
772
|
-
typedef void (*WebviewEventHandler)(uint32_t webviewId, const char* type, const char* url);
|
|
773
|
-
|
|
774
|
-
@interface MyNavigationDelegate : NSObject <WKNavigationDelegate>
|
|
775
|
-
@property (nonatomic, assign) DecideNavigationCallback zigCallback;
|
|
776
|
-
@property (nonatomic, assign) WebviewEventHandler zigEventHandler;
|
|
777
|
-
@property (nonatomic, assign) uint32_t webviewId;
|
|
778
|
-
@end
|
|
779
|
-
|
|
780
|
-
@implementation MyNavigationDelegate
|
|
781
|
-
|
|
782
|
-
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
|
|
783
|
-
NSURL *newURL = navigationAction.request.URL;
|
|
784
|
-
|
|
785
|
-
BOOL shouldAllow = self.zigCallback(self.webviewId, newURL.absoluteString.UTF8String);
|
|
786
|
-
decisionHandler(shouldAllow ? WKNavigationActionPolicyAllow : WKNavigationActionPolicyCancel);
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
|
|
790
|
-
self.zigEventHandler(self.webviewId, "did-navigate", webView.URL.absoluteString.UTF8String);
|
|
791
|
-
}
|
|
792
|
-
|
|
793
|
-
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
|
|
794
|
-
self.zigEventHandler(self.webviewId, "did-commit-navigation", webView.URL.absoluteString.UTF8String);
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
@end
|
|
798
|
-
|
|
799
|
-
// UIDelegate, handle opening new windows
|
|
800
|
-
@interface MyWebViewUIDelegate : NSObject <WKUIDelegate>
|
|
801
|
-
@property (nonatomic, assign) WebviewEventHandler zigEventHandler;
|
|
802
|
-
@property (nonatomic, assign) uint32_t webviewId;
|
|
803
|
-
@end
|
|
804
|
-
|
|
805
|
-
@implementation MyWebViewUIDelegate
|
|
806
|
-
|
|
807
|
-
// Handle new window requests by emitting an event
|
|
808
|
-
// user can handle the new-window-open event and choose to create a new webview, new window, new tab, or whatever
|
|
809
|
-
// fits their app. They can also inject js into the browser context to capture cmd + t and open a new window or tab or
|
|
810
|
-
// whatever
|
|
811
|
-
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
|
|
812
|
-
if (!navigationAction.targetFrame.isMainFrame) {
|
|
813
|
-
self.zigEventHandler(self.webviewId, "new-window-open", navigationAction.request.URL.absoluteString.UTF8String);
|
|
814
|
-
}
|
|
815
|
-
return nil;
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
@end
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
MyNavigationDelegate* setNavigationDelegateWithCallback(WKWebView *webView, uint32_t webviewId, DecideNavigationCallback callback, WebviewEventHandler eventHandler) {
|
|
823
|
-
MyNavigationDelegate *navigationDelegate = [[MyNavigationDelegate alloc] init];
|
|
824
|
-
navigationDelegate.zigCallback = callback;
|
|
825
|
-
navigationDelegate.zigEventHandler = eventHandler;
|
|
826
|
-
navigationDelegate.webviewId = webviewId;
|
|
827
|
-
webView.navigationDelegate = navigationDelegate;
|
|
828
|
-
|
|
829
|
-
objc_setAssociatedObject(webView, "NavigationDelegate", navigationDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
MyWebViewUIDelegate *uiDelegate = [[MyWebViewUIDelegate alloc] init];
|
|
833
|
-
uiDelegate.zigEventHandler = eventHandler;
|
|
834
|
-
uiDelegate.webviewId = webviewId;
|
|
835
|
-
webView.UIDelegate = uiDelegate;
|
|
836
|
-
|
|
837
|
-
objc_setAssociatedObject(webView, "UIDelegate", uiDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
838
|
-
|
|
839
|
-
// todo: we don't have to return this to free from zig since we're using objc_setAssociatedObject now
|
|
840
|
-
return navigationDelegate;
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
// add postMessage handler
|
|
845
|
-
typedef BOOL (*HandlePostMessage)(uint32_t webviewId, const char* message);
|
|
846
|
-
|
|
847
|
-
// todo: add webviewId as a property here
|
|
848
|
-
@interface MyScriptMessageHandler : NSObject <WKScriptMessageHandler>
|
|
849
|
-
@property (nonatomic, assign) HandlePostMessage zigCallback;
|
|
850
|
-
@property (nonatomic, assign) uint32_t webviewId;
|
|
851
|
-
@end
|
|
852
|
-
|
|
853
|
-
@implementation MyScriptMessageHandler
|
|
854
|
-
|
|
855
|
-
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
|
|
856
|
-
NSString *body = message.body;
|
|
857
|
-
|
|
858
|
-
self.zigCallback(self.webviewId, body.UTF8String);
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
@end
|
|
862
|
-
|
|
863
|
-
MyScriptMessageHandler* addScriptMessageHandler(WKWebView *webView, uint32_t webviewId, const char *name, HandlePostMessage callback) {
|
|
864
|
-
MyScriptMessageHandler *handler = [[MyScriptMessageHandler alloc] init];
|
|
865
|
-
handler.zigCallback = callback;
|
|
866
|
-
handler.webviewId = webviewId;
|
|
867
|
-
[webView.configuration.userContentController addScriptMessageHandler:handler name:[NSString stringWithUTF8String:name]];
|
|
868
|
-
|
|
869
|
-
NSString *key = [NSString stringWithFormat:@"PostMessageHandler{%s}", name];
|
|
870
|
-
objc_setAssociatedObject(webView, key.UTF8String, handler, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
871
|
-
|
|
872
|
-
return handler;
|
|
873
|
-
}
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
// add postMessage handler with reply
|
|
877
|
-
typedef const char* (*HandlePostMessageWithReply)(uint32_t webviewId, const char* message);
|
|
878
|
-
|
|
879
|
-
@interface MyScriptMessageHandlerWithReply : NSObject <WKScriptMessageHandlerWithReply>
|
|
880
|
-
|
|
881
|
-
@property (nonatomic, assign) HandlePostMessageWithReply zigCallback;
|
|
882
|
-
@property (nonatomic, assign) uint32_t webviewId;
|
|
883
|
-
|
|
884
|
-
@end
|
|
885
|
-
|
|
886
|
-
@implementation MyScriptMessageHandlerWithReply
|
|
887
|
-
|
|
888
|
-
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message replyHandler:(void (^)(id _Nullable, NSString * _Nullable))replyHandler {
|
|
889
|
-
NSString *body = message.body;
|
|
890
|
-
|
|
891
|
-
// Call the zig callback and pass the completion handler to send replies
|
|
892
|
-
const char *response = self.zigCallback(self.webviewId, body.UTF8String);
|
|
893
|
-
|
|
894
|
-
NSString *responseNSString = [NSString stringWithUTF8String:response];
|
|
895
|
-
|
|
896
|
-
replyHandler(responseNSString, nil);
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
@end
|
|
900
|
-
|
|
901
|
-
MyScriptMessageHandlerWithReply* addScriptMessageHandlerWithReply(WKWebView *webView, uint32_t webviewId, const char *name, HandlePostMessageWithReply callback) {
|
|
902
|
-
MyScriptMessageHandlerWithReply *handler = [[MyScriptMessageHandlerWithReply alloc] init];
|
|
903
|
-
handler.zigCallback = callback;
|
|
904
|
-
handler.webviewId = webviewId;
|
|
905
|
-
|
|
906
|
-
// Use the new API to add the script message handler
|
|
907
|
-
[webView.configuration.userContentController addScriptMessageHandlerWithReply:handler contentWorld:WKContentWorld.pageWorld name:[NSString stringWithUTF8String:name]];
|
|
908
|
-
|
|
909
|
-
NSString *key = [NSString stringWithFormat:@"PostMessageHandlerWithReply{%s}", name];
|
|
910
|
-
objc_setAssociatedObject(webView, key.UTF8String, handler, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
return handler;
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
// example calling function after a delay for debugging
|
|
919
|
-
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
920
|
-
// // Remove the WebView after 10 seconds
|
|
921
|
-
// [view removeFromSuperview];
|
|
922
|
-
// NSLog(@"WebView removed after 10 seconds");
|
|
923
|
-
// });
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
// FS
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
BOOL moveToTrash(char *pathString) {
|
|
931
|
-
NSString *path = [NSString stringWithUTF8String:pathString];
|
|
932
|
-
NSURL *fileURL = [NSURL fileURLWithPath:path];
|
|
933
|
-
NSError *error = nil;
|
|
934
|
-
NSURL *resultingURL = nil;
|
|
935
|
-
|
|
936
|
-
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
937
|
-
BOOL success = [fileManager trashItemAtURL:fileURL resultingItemURL:&resultingURL error:&error];
|
|
938
|
-
|
|
939
|
-
if (success) {
|
|
940
|
-
NSLog(@"Moved to Trash: %@", resultingURL);
|
|
941
|
-
} else {
|
|
942
|
-
NSLog(@"Error: %@", error);
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
return success;
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
void showItemInFolder(char *path) {
|
|
949
|
-
NSString *pathString = [NSString stringWithUTF8String:path];
|
|
950
|
-
NSURL *fileURL = [NSURL fileURLWithPath:pathString];
|
|
951
|
-
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:@[fileURL]];
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
const char *openFileDialog(const char *startingFolder, const char *allowedFileTypes, BOOL canChooseFiles, BOOL canChooseDirectories, BOOL allowsMultipleSelection) {
|
|
955
|
-
NSOpenPanel *panel = [NSOpenPanel openPanel];
|
|
956
|
-
[panel setCanChooseFiles:canChooseFiles];
|
|
957
|
-
[panel setCanChooseDirectories:canChooseDirectories];
|
|
958
|
-
[panel setAllowsMultipleSelection:allowsMultipleSelection];
|
|
959
|
-
|
|
960
|
-
// Set the starting directory
|
|
961
|
-
NSString *startingFolderString = [NSString stringWithUTF8String:startingFolder];
|
|
962
|
-
[panel setDirectoryURL:[NSURL fileURLWithPath:startingFolderString]];
|
|
963
|
-
|
|
964
|
-
// Set allowed file types
|
|
965
|
-
if (allowedFileTypes != NULL && strcmp(allowedFileTypes, "*") != 0 && strcmp(allowedFileTypes, "") != 0) {
|
|
966
|
-
NSString *allowedFileTypesString = [NSString stringWithUTF8String:allowedFileTypes];
|
|
967
|
-
NSArray *fileTypesArray = [allowedFileTypesString componentsSeparatedByString:@","];
|
|
968
|
-
// Note: this is deprecated but it still works for now and is simpler than the current solution
|
|
969
|
-
#pragma clang diagnostic push
|
|
970
|
-
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
971
|
-
[panel setAllowedFileTypes:fileTypesArray];
|
|
972
|
-
#pragma clang diagnostic pop
|
|
973
|
-
}
|
|
974
|
-
|
|
975
|
-
NSInteger result = [panel runModal];
|
|
976
|
-
// return a comma separated list of file paths
|
|
977
|
-
if (result == NSModalResponseOK) {
|
|
978
|
-
NSArray<NSURL *> *selectedFileURLs = [panel URLs];
|
|
979
|
-
NSMutableArray<NSString *> *pathStrings = [NSMutableArray array];
|
|
980
|
-
for (NSURL *url in selectedFileURLs) {
|
|
981
|
-
[pathStrings addObject:[url path]];
|
|
982
|
-
}
|
|
983
|
-
NSString *concatenatedPaths = [pathStrings componentsJoinedByString:@","];
|
|
984
|
-
return strdup([concatenatedPaths UTF8String]);
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
return NULL;
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
// window move
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
static BOOL isMovingWindow = NO;
|
|
995
|
-
static NSWindow *targetWindow = nil;
|
|
996
|
-
static CGFloat offsetX = 0.0;
|
|
997
|
-
static CGFloat offsetY = 0.0;
|
|
998
|
-
static id mouseDraggedMonitor = nil;
|
|
999
|
-
static id mouseUpMonitor = nil;
|
|
1000
|
-
|
|
1001
|
-
void stopWindowMove() {
|
|
1002
|
-
isMovingWindow = NO;
|
|
1003
|
-
targetWindow = nil;
|
|
1004
|
-
offsetX = 0.0;
|
|
1005
|
-
offsetY = 0.0;
|
|
1006
|
-
|
|
1007
|
-
if (mouseDraggedMonitor) {
|
|
1008
|
-
[NSEvent removeMonitor:mouseDraggedMonitor];
|
|
1009
|
-
mouseDraggedMonitor = nil;
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
if (mouseUpMonitor) {
|
|
1013
|
-
[NSEvent removeMonitor:mouseUpMonitor];
|
|
1014
|
-
mouseUpMonitor = nil;
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
void startWindowMove(WKWebView *webView) {
|
|
1019
|
-
targetWindow = webView.window;
|
|
1020
|
-
if (!targetWindow) {
|
|
1021
|
-
NSLog(@"No window found for the given WebView.");
|
|
1022
|
-
return;
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
isMovingWindow = YES;
|
|
1026
|
-
|
|
1027
|
-
NSPoint initialLocation = [NSEvent mouseLocation];
|
|
1028
|
-
|
|
1029
|
-
mouseDraggedMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:(NSEventMaskLeftMouseDragged | NSEventMaskMouseMoved) handler:^NSEvent *(NSEvent *event) {
|
|
1030
|
-
if (isMovingWindow) {
|
|
1031
|
-
NSPoint currentLocation = [NSEvent mouseLocation];
|
|
1032
|
-
|
|
1033
|
-
if (offsetX == 0.0 && offsetY == 0.0) {
|
|
1034
|
-
NSPoint windowOrigin = targetWindow.frame.origin;
|
|
1035
|
-
offsetX = initialLocation.x - windowOrigin.x;
|
|
1036
|
-
offsetY = initialLocation.y - windowOrigin.y;
|
|
1037
|
-
}
|
|
1038
|
-
|
|
1039
|
-
CGFloat newX = currentLocation.x - offsetX;
|
|
1040
|
-
CGFloat newY = currentLocation.y - offsetY;
|
|
1041
|
-
|
|
1042
|
-
[targetWindow setFrameOrigin:NSMakePoint(newX, newY)];
|
|
1043
|
-
}
|
|
1044
|
-
return event;
|
|
1045
|
-
}];
|
|
1046
|
-
|
|
1047
|
-
mouseUpMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskLeftMouseUp handler:^NSEvent *(NSEvent *event) {
|
|
1048
|
-
if (isMovingWindow) {
|
|
1049
|
-
stopWindowMove();
|
|
1050
|
-
}
|
|
1051
|
-
return event;
|
|
1052
|
-
}];
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
// system tray and menues
|
|
1057
|
-
typedef void (*MenuHandler)(const char *menuItemId);
|
|
1058
|
-
typedef void (*ZigStatusItemHandler)(uint32_t trayId, const char *action);
|
|
1059
|
-
|
|
1060
|
-
@interface StatusItemTarget : NSObject
|
|
1061
|
-
@property (nonatomic, assign) NSStatusItem *statusItem;
|
|
1062
|
-
@property (nonatomic, assign) ZigStatusItemHandler zigHandler;
|
|
1063
|
-
@property (nonatomic, assign) uint32_t trayId;
|
|
1064
|
-
|
|
1065
|
-
- (void)statusItemClicked:(id)sender;
|
|
1066
|
-
- (void)menuItemClicked:(id)sender;
|
|
1067
|
-
|
|
1068
|
-
@end
|
|
1069
|
-
|
|
1070
|
-
@implementation StatusItemTarget
|
|
1071
|
-
- (void)statusItemClicked:(id)sender {
|
|
1072
|
-
// If there's not menu associated with this status item, then clicking and right clicking on it will
|
|
1073
|
-
// trigger this. If there's a menu, then this click is ignored and menu clicks call menuItemClicked instead.
|
|
1074
|
-
if (self.zigHandler) {
|
|
1075
|
-
self.zigHandler(self.trayId, "");
|
|
1076
|
-
}
|
|
1077
|
-
}
|
|
1078
|
-
- (void)menuItemClicked:(id)sender {
|
|
1079
|
-
// If there's a menu then only menu
|
|
1080
|
-
NSMenuItem *menuItem = (NSMenuItem *)sender;
|
|
1081
|
-
NSString *action = menuItem.representedObject;
|
|
1082
|
-
|
|
1083
|
-
if (!action) {
|
|
1084
|
-
NSLog(@"No action found for menu item");
|
|
1085
|
-
return;
|
|
1086
|
-
}
|
|
1087
|
-
|
|
1088
|
-
if (!self.zigHandler) {
|
|
1089
|
-
NSLog(@"No zig handler found for menu item");
|
|
1090
|
-
return;
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
self.zigHandler(self.trayId, [action UTF8String]);
|
|
1094
|
-
|
|
1095
|
-
}
|
|
1096
|
-
@end
|
|
1097
|
-
|
|
1098
|
-
NSStatusItem* createTray(uint32_t trayId, const char *title, const char *pathToImage, bool template, uint32_t width, uint32_t height, ZigStatusItemHandler zigTrayItemHandler) {
|
|
1099
|
-
NSString *pathToImageString = [NSString stringWithUTF8String:pathToImage];
|
|
1100
|
-
NSString *titleString = [NSString stringWithUTF8String:title];
|
|
1101
|
-
NSStatusItem *statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
|
|
1102
|
-
|
|
1103
|
-
if (pathToImageString.length > 0) {
|
|
1104
|
-
statusItem.button.image = [[NSImage alloc] initWithContentsOfFile:pathToImageString];
|
|
1105
|
-
statusItem.button.image.template = template;
|
|
1106
|
-
statusItem.button.image.size = NSMakeSize(width, height);
|
|
1107
|
-
}
|
|
1108
|
-
if (titleString.length > 0) {
|
|
1109
|
-
statusItem.button.title = titleString;
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
if (zigTrayItemHandler) {
|
|
1113
|
-
StatusItemTarget *target = [[StatusItemTarget alloc] init];
|
|
1114
|
-
target.statusItem = statusItem;
|
|
1115
|
-
target.zigHandler = zigTrayItemHandler;
|
|
1116
|
-
target.trayId = trayId;
|
|
1117
|
-
|
|
1118
|
-
objc_setAssociatedObject(statusItem.button, "statusItemTarget", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
1119
|
-
[statusItem.button setTarget:target];
|
|
1120
|
-
[statusItem.button setAction:@selector(statusItemClicked:)];
|
|
1121
|
-
|
|
1122
|
-
// Ensure the button listens for both left and right mouse up events
|
|
1123
|
-
[statusItem.button sendActionOn:NSEventMaskLeftMouseUp | NSEventMaskRightMouseUp];
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
|
-
retainObjCObject(statusItem);
|
|
1127
|
-
|
|
1128
|
-
return statusItem;
|
|
1129
|
-
}
|
|
1130
|
-
|
|
1131
|
-
void setTrayTitle(NSStatusItem *statusItem, const char *title) {
|
|
1132
|
-
if (statusItem) {
|
|
1133
|
-
statusItem.button.title = [NSString stringWithUTF8String:title];
|
|
1134
|
-
}
|
|
1135
|
-
}
|
|
1136
|
-
|
|
1137
|
-
void setTrayImage(NSStatusItem *statusItem, const char *image) {
|
|
1138
|
-
if (statusItem) {
|
|
1139
|
-
statusItem.button.image = [[NSImage alloc] initWithContentsOfFile:[NSString stringWithUTF8String:image]];
|
|
1140
|
-
}
|
|
1141
|
-
}
|
|
1142
|
-
|
|
1143
|
-
// application menus
|
|
1144
|
-
// todo: consider consolidating with tray menus
|
|
1145
|
-
NSMenu *createMenuFromConfig(NSArray *menuConfig, StatusItemTarget *target) {
|
|
1146
|
-
NSMenu *menu = [[NSMenu alloc] init];
|
|
1147
|
-
[menu setAutoenablesItems:NO]; // Disable auto-enabling of menu items
|
|
1148
|
-
|
|
1149
|
-
for (NSDictionary *itemData in menuConfig) {
|
|
1150
|
-
NSString *type = itemData[@"type"];
|
|
1151
|
-
NSString *label = itemData[@"label"];
|
|
1152
|
-
NSString *action = itemData[@"action"];
|
|
1153
|
-
NSArray *submenuConfig = itemData[@"submenu"];
|
|
1154
|
-
NSString *role = itemData[@"role"];
|
|
1155
|
-
NSString *accelerator = itemData[@"accelerator"];
|
|
1156
|
-
NSNumber *modifierMask = itemData[@"modifierMask"];
|
|
1157
|
-
|
|
1158
|
-
BOOL enabled = [itemData[@"enabled"] boolValue];
|
|
1159
|
-
BOOL checked = [itemData[@"checked"] boolValue];
|
|
1160
|
-
BOOL hidden = [itemData[@"hidden"] boolValue];
|
|
1161
|
-
NSString *tooltip = itemData[@"tooltip"];
|
|
1162
|
-
|
|
1163
|
-
NSMenuItem *menuItem;
|
|
1164
|
-
|
|
1165
|
-
if ([type isEqualToString:@"divider"]) {
|
|
1166
|
-
menuItem = [NSMenuItem separatorItem];
|
|
1167
|
-
} else {
|
|
1168
|
-
menuItem = [[NSMenuItem alloc] initWithTitle:label action:@selector(menuItemClicked:) keyEquivalent:@""];
|
|
1169
|
-
menuItem.representedObject = action;
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
if (role) {
|
|
1173
|
-
if ([role isEqualToString:@"quit"]) {
|
|
1174
|
-
menuItem.action = @selector(terminate:);
|
|
1175
|
-
} else if ([role isEqualToString:@"hide"]) {
|
|
1176
|
-
menuItem.action = @selector(hide:);
|
|
1177
|
-
} else if ([role isEqualToString:@"hideOthers"]) {
|
|
1178
|
-
menuItem.action = @selector(hideOtherApplications:);
|
|
1179
|
-
} else if ([role isEqualToString:@"showAll"]) {
|
|
1180
|
-
menuItem.action = @selector(unhideAllApplications:);
|
|
1181
|
-
} else if ([role isEqualToString:@"undo"]) {
|
|
1182
|
-
menuItem.action = @selector(undo:);
|
|
1183
|
-
} else if ([role isEqualToString:@"redo"]) {
|
|
1184
|
-
menuItem.action = @selector(redo:);
|
|
1185
|
-
} else if ([role isEqualToString:@"cut"]) {
|
|
1186
|
-
menuItem.action = @selector(cut:);
|
|
1187
|
-
} else if ([role isEqualToString:@"copy"]) {
|
|
1188
|
-
menuItem.action = @selector(copy:);
|
|
1189
|
-
} else if ([role isEqualToString:@"paste"]) {
|
|
1190
|
-
menuItem.action = @selector(paste:);
|
|
1191
|
-
} else if ([role isEqualToString:@"pasteAndMatchStyle"]) {
|
|
1192
|
-
menuItem.action = @selector(pasteAsPlainText:);
|
|
1193
|
-
} else if ([role isEqualToString:@"delete"]) {
|
|
1194
|
-
menuItem.action = @selector(delete:);
|
|
1195
|
-
} else if ([role isEqualToString:@"selectAll"]) {
|
|
1196
|
-
menuItem.action = @selector(selectAll:);
|
|
1197
|
-
} else if ([role isEqualToString:@"startSpeaking"]) {
|
|
1198
|
-
menuItem.action = @selector(startSpeaking:);
|
|
1199
|
-
} else if ([role isEqualToString:@"stopSpeaking"]) {
|
|
1200
|
-
menuItem.action = @selector(stopSpeaking:);
|
|
1201
|
-
} else if ([role isEqualToString:@"enterFullScreen"]) {
|
|
1202
|
-
menuItem.action = @selector(enterFullScreen:);
|
|
1203
|
-
} else if ([role isEqualToString:@"exitFullScreen"]) {
|
|
1204
|
-
menuItem.action = @selector(exitFullScreen:);
|
|
1205
|
-
} else if ([role isEqualToString:@"toggleFullScreen"]) {
|
|
1206
|
-
menuItem.action = @selector(toggleFullScreen:);
|
|
1207
|
-
} else if ([role isEqualToString:@"minimize"]) {
|
|
1208
|
-
menuItem.action = @selector(performMiniaturize:);
|
|
1209
|
-
} else if ([role isEqualToString:@"zoom"]) {
|
|
1210
|
-
menuItem.action = @selector(performZoom:);
|
|
1211
|
-
} else if ([role isEqualToString:@"bringAllToFront"]) {
|
|
1212
|
-
menuItem.action = @selector(arrangeInFront:);
|
|
1213
|
-
} else if ([role isEqualToString:@"close"]) {
|
|
1214
|
-
menuItem.action = @selector(performClose:);
|
|
1215
|
-
} else if ([role isEqualToString:@"cycleThroughWindows"]) {
|
|
1216
|
-
menuItem.action = @selector(selectNextKeyView:);
|
|
1217
|
-
} else if ([role isEqualToString:@"showHelp"]) {
|
|
1218
|
-
menuItem.action = @selector(showHelp:);
|
|
1219
|
-
}
|
|
1220
|
-
|
|
1221
|
-
if (!accelerator) {
|
|
1222
|
-
// set 'default' keyboard shortcuts for given roles
|
|
1223
|
-
if ([role isEqualToString:@"undo"]) {
|
|
1224
|
-
menuItem.keyEquivalent = @"z";
|
|
1225
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
|
|
1226
|
-
} else if ([role isEqualToString:@"redo"]) {
|
|
1227
|
-
menuItem.keyEquivalent = @"Z";
|
|
1228
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagShift;
|
|
1229
|
-
} else if ([role isEqualToString:@"cut"]) {
|
|
1230
|
-
menuItem.keyEquivalent = @"x";
|
|
1231
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
|
|
1232
|
-
} else if ([role isEqualToString:@"copy"]) {
|
|
1233
|
-
menuItem.keyEquivalent = @"c";
|
|
1234
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
|
|
1235
|
-
} else if ([role isEqualToString:@"paste"]) {
|
|
1236
|
-
menuItem.keyEquivalent = @"v";
|
|
1237
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
|
|
1238
|
-
} else if ([role isEqualToString:@"pasteAndMatchStyle"]) {
|
|
1239
|
-
menuItem.keyEquivalent = @"V";
|
|
1240
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagOption;
|
|
1241
|
-
} else if ([role isEqualToString:@"delete"]) {
|
|
1242
|
-
menuItem.keyEquivalent = [NSString stringWithFormat:@"%c", (char)NSDeleteCharacter]; // Delete key
|
|
1243
|
-
menuItem.keyEquivalentModifierMask = 0;
|
|
1244
|
-
} else if ([role isEqualToString:@"selectAll"]) {
|
|
1245
|
-
menuItem.keyEquivalent = @"a";
|
|
1246
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
} else {
|
|
1250
|
-
// Note: if we set the target it will look for the method on the target. eg: copy instead
|
|
1251
|
-
// of letting the os handle it
|
|
1252
|
-
menuItem.target = target;
|
|
1253
|
-
}
|
|
1254
|
-
|
|
1255
|
-
if (accelerator) {
|
|
1256
|
-
menuItem.keyEquivalent = accelerator;
|
|
1257
|
-
if (modifierMask) {
|
|
1258
|
-
menuItem.keyEquivalentModifierMask = [modifierMask unsignedIntegerValue];
|
|
1259
|
-
} else {
|
|
1260
|
-
menuItem.keyEquivalentModifierMask = NSEventModifierFlagCommand; // Default to Command key if no modifier specified
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1263
|
-
|
|
1264
|
-
menuItem.enabled = enabled;
|
|
1265
|
-
menuItem.state = checked ? NSControlStateValueOn : NSControlStateValueOff;
|
|
1266
|
-
menuItem.hidden = hidden;
|
|
1267
|
-
menuItem.toolTip = tooltip;
|
|
1268
|
-
|
|
1269
|
-
if (submenuConfig) {
|
|
1270
|
-
NSMenu *submenu = createMenuFromConfig(submenuConfig, target);
|
|
1271
|
-
[menu setSubmenu:submenu forItem:menuItem];
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
[menu addItem:menuItem];
|
|
1275
|
-
}
|
|
1276
|
-
|
|
1277
|
-
return menu;
|
|
1278
|
-
}
|
|
1279
|
-
|
|
1280
|
-
void setTrayMenuFromJSON(NSStatusItem *statusItem, const char *jsonString) {
|
|
1281
|
-
if (statusItem) {
|
|
1282
|
-
StatusItemTarget *target = objc_getAssociatedObject(statusItem.button, "statusItemTarget");
|
|
1283
|
-
|
|
1284
|
-
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
|
|
1285
|
-
NSError *error;
|
|
1286
|
-
NSArray *menuArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
|
1287
|
-
|
|
1288
|
-
if (error) {
|
|
1289
|
-
NSLog(@"Failed to parse JSON: %@", error);
|
|
1290
|
-
return;
|
|
1291
|
-
}
|
|
1292
|
-
|
|
1293
|
-
NSMenu *menu = createMenuFromConfig(menuArray, target);
|
|
1294
|
-
[statusItem setMenu:menu];
|
|
1295
|
-
}
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
|
-
void setTrayMenu(NSStatusItem *statusItem, const char *menuConfig) {
|
|
1299
|
-
if (statusItem) {
|
|
1300
|
-
setTrayMenuFromJSON(statusItem, menuConfig);
|
|
1301
|
-
}
|
|
1302
|
-
}
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
void setApplicationMenu(const char *jsonString, ZigStatusItemHandler zigTrayItemHandler) {
|
|
1308
|
-
NSLog(@"Setting application menu from JSON in objc");
|
|
1309
|
-
|
|
1310
|
-
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
|
|
1311
|
-
NSError *error;
|
|
1312
|
-
NSArray *menuArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
|
1313
|
-
|
|
1314
|
-
if (error) {
|
|
1315
|
-
NSLog(@"Failed to parse JSON: %@", error);
|
|
1316
|
-
return;
|
|
1317
|
-
}
|
|
1318
|
-
|
|
1319
|
-
// Note: consider using a generic target for both system tray and application menu
|
|
1320
|
-
// for now we just create a status item that just serves as a way to reference the zig menu click handler
|
|
1321
|
-
StatusItemTarget *target = [[StatusItemTarget alloc] init];
|
|
1322
|
-
target.zigHandler = zigTrayItemHandler;
|
|
1323
|
-
target.trayId = 0;
|
|
1324
|
-
NSMenu *menu = createMenuFromConfig(menuArray, target);
|
|
1325
|
-
|
|
1326
|
-
objc_setAssociatedObject(NSApp, "AppMenuTarget", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
[NSApp setMainMenu:menu];
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
void showContextMenu(const char *jsonString, ZigStatusItemHandler contextMenuHandler) {
|
|
1333
|
-
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
|
|
1334
|
-
NSError *error;
|
|
1335
|
-
NSArray *menuArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
|
1336
|
-
|
|
1337
|
-
if (error) {
|
|
1338
|
-
NSLog(@"Failed to parse JSON: %@", error);
|
|
1339
|
-
return;
|
|
1340
|
-
}
|
|
1341
|
-
|
|
1342
|
-
// Note: consider using a generic target for both system tray and application menu
|
|
1343
|
-
// for now we just create a status item that just serves as a way to reference the zig menu click handler
|
|
1344
|
-
StatusItemTarget *target = [[StatusItemTarget alloc] init];
|
|
1345
|
-
target.zigHandler = contextMenuHandler;
|
|
1346
|
-
target.trayId = 0;
|
|
1347
|
-
NSMenu *menu = createMenuFromConfig(menuArray, target);
|
|
1348
|
-
|
|
1349
|
-
objc_setAssociatedObject(menu, "ContextMenuTarget", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
1350
|
-
|
|
1351
|
-
NSPoint mouseLocation = [NSEvent mouseLocation];
|
|
1352
|
-
|
|
1353
|
-
NSEvent *event = [NSEvent mouseEventWithType:NSEventTypeRightMouseUp
|
|
1354
|
-
location:mouseLocation
|
|
1355
|
-
modifierFlags:0
|
|
1356
|
-
timestamp:0
|
|
1357
|
-
windowNumber:0
|
|
1358
|
-
context:nil
|
|
1359
|
-
eventNumber:0
|
|
1360
|
-
clickCount:1
|
|
1361
|
-
pressure:1];
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
// Note: can associate it with a view if needed, but I like the idea of being able to programmatically opening a context
|
|
1365
|
-
// menu where the mouse is even if there are no windows open. There's a class of desktop apps like clipboard managers
|
|
1366
|
-
// or screen capture tools that maybe have a system tray icon but no windows open when you want a global context menu.
|
|
1367
|
-
|
|
1368
|
-
// NSWindow *activeWindow = [NSApp keyWindow];
|
|
1369
|
-
// [NSMenu popUpContextMenu:menu withEvent:event forView:contentView];
|
|
1370
|
-
// NSView *contentView = activeWindow.contentView;
|
|
1371
|
-
// NSPoint windowMouseLocation = [activeWindow convertRectFromScreen:NSMakeRect(mouseLocation.x, mouseLocation.y, 0, 0)].origin;
|
|
1372
|
-
// [menu popUpMenuPositioningItem:nil atLocation:windowMouseLocation inView:contentView];
|
|
1373
|
-
|
|
1374
|
-
[menu popUpMenuPositioningItem:nil atLocation:mouseLocation inView:nil];
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
objc_setAssociatedObject(NSApp, "ContextMenu", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
1378
|
-
}
|
|
1379
|
-
|
|
1380
|
-
|