libwz 0.1.0

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.
Files changed (362) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/binding.gyp +149 -0
  4. package/deps/tiny-aes/.github/workflows/c-cpp.yml +27 -0
  5. package/deps/tiny-aes/CMakeLists.txt +17 -0
  6. package/deps/tiny-aes/Makefile +61 -0
  7. package/deps/tiny-aes/README.md +83 -0
  8. package/deps/tiny-aes/aes.c +572 -0
  9. package/deps/tiny-aes/aes.h +91 -0
  10. package/deps/tiny-aes/aes.hpp +12 -0
  11. package/deps/tiny-aes/conanfile.py +73 -0
  12. package/deps/tiny-aes/library.json +19 -0
  13. package/deps/tiny-aes/library.properties +11 -0
  14. package/deps/tiny-aes/test.c +316 -0
  15. package/deps/tiny-aes/test.cpp +2 -0
  16. package/deps/tiny-aes/test_package/CMakeLists.txt +11 -0
  17. package/deps/tiny-aes/test_package/conanfile.py +17 -0
  18. package/deps/tiny-aes/unlicense.txt +24 -0
  19. package/deps/zlib/.cmake-format.yaml +245 -0
  20. package/deps/zlib/.github/workflows/c-std.yml +268 -0
  21. package/deps/zlib/.github/workflows/cmake.yml +147 -0
  22. package/deps/zlib/.github/workflows/configure.yml +146 -0
  23. package/deps/zlib/.github/workflows/contribs.yml +64 -0
  24. package/deps/zlib/.github/workflows/fuzz.yml +25 -0
  25. package/deps/zlib/.github/workflows/msys-cygwin.yml +92 -0
  26. package/deps/zlib/.github/workflows/others.yml +153 -0
  27. package/deps/zlib/BUILD.bazel +134 -0
  28. package/deps/zlib/CMakeLists.txt +310 -0
  29. package/deps/zlib/ChangeLog +1669 -0
  30. package/deps/zlib/FAQ +371 -0
  31. package/deps/zlib/INDEX +67 -0
  32. package/deps/zlib/LICENSE +22 -0
  33. package/deps/zlib/MODULE.bazel +9 -0
  34. package/deps/zlib/Makefile.in +426 -0
  35. package/deps/zlib/README +115 -0
  36. package/deps/zlib/README-cmake.md +79 -0
  37. package/deps/zlib/adler32.c +164 -0
  38. package/deps/zlib/amiga/Makefile.pup +69 -0
  39. package/deps/zlib/amiga/Makefile.sas +68 -0
  40. package/deps/zlib/compress.c +99 -0
  41. package/deps/zlib/configure +1078 -0
  42. package/deps/zlib/contrib/CMakeLists.txt +61 -0
  43. package/deps/zlib/contrib/README.contrib +57 -0
  44. package/deps/zlib/contrib/ada/CMakeLists.txt +217 -0
  45. package/deps/zlib/contrib/ada/buffer_demo.adb +106 -0
  46. package/deps/zlib/contrib/ada/cmake/Modules/CMakeADACompiler.cmake.in +23 -0
  47. package/deps/zlib/contrib/ada/cmake/Modules/CMakeADAInformation.cmake +133 -0
  48. package/deps/zlib/contrib/ada/cmake/Modules/CMakeDetermineADACompiler.cmake +33 -0
  49. package/deps/zlib/contrib/ada/cmake/Modules/CMakeTestADACompiler.cmake +46 -0
  50. package/deps/zlib/contrib/ada/cmake/binder_helper.cmake +47 -0
  51. package/deps/zlib/contrib/ada/cmake/compile_helper.cmake +32 -0
  52. package/deps/zlib/contrib/ada/cmake/exe_link_helper.cmake +53 -0
  53. package/deps/zlib/contrib/ada/cmake/shared_link_helper.cmake +52 -0
  54. package/deps/zlib/contrib/ada/cmake/static_link_helper.cmake +25 -0
  55. package/deps/zlib/contrib/ada/mtest.adb +156 -0
  56. package/deps/zlib/contrib/ada/read.adb +156 -0
  57. package/deps/zlib/contrib/ada/readme.txt +65 -0
  58. package/deps/zlib/contrib/ada/test.adb +463 -0
  59. package/deps/zlib/contrib/ada/zlib-streams.adb +225 -0
  60. package/deps/zlib/contrib/ada/zlib-streams.ads +114 -0
  61. package/deps/zlib/contrib/ada/zlib-thin.adb +142 -0
  62. package/deps/zlib/contrib/ada/zlib-thin.ads +450 -0
  63. package/deps/zlib/contrib/ada/zlib.adb +701 -0
  64. package/deps/zlib/contrib/ada/zlib.ads +328 -0
  65. package/deps/zlib/contrib/ada/zlib.gpr +20 -0
  66. package/deps/zlib/contrib/blast/CMakeLists.txt +166 -0
  67. package/deps/zlib/contrib/blast/Makefile +14 -0
  68. package/deps/zlib/contrib/blast/README +4 -0
  69. package/deps/zlib/contrib/blast/blast-test.c +42 -0
  70. package/deps/zlib/contrib/blast/blast.c +422 -0
  71. package/deps/zlib/contrib/blast/blast.h +84 -0
  72. package/deps/zlib/contrib/blast/blastConfig.cmake.in +18 -0
  73. package/deps/zlib/contrib/blast/test/CMakeLists.txt +193 -0
  74. package/deps/zlib/contrib/blast/test/add_subdirectory_exclude_test.cmake.in +27 -0
  75. package/deps/zlib/contrib/blast/test/add_subdirectory_test.cmake.in +25 -0
  76. package/deps/zlib/contrib/blast/test/find_package_no_components_test.cmake.in +24 -0
  77. package/deps/zlib/contrib/blast/test/find_package_test.cmake.in +24 -0
  78. package/deps/zlib/contrib/blast/test/find_package_wrong_components_test.cmake.in +24 -0
  79. package/deps/zlib/contrib/blast/test.pk +0 -0
  80. package/deps/zlib/contrib/blast/test.txt +1 -0
  81. package/deps/zlib/contrib/blast/tester.cmake +28 -0
  82. package/deps/zlib/contrib/crc32vx/CMakeLists.txt +67 -0
  83. package/deps/zlib/contrib/crc32vx/README +9 -0
  84. package/deps/zlib/contrib/crc32vx/crc32_vx.c +254 -0
  85. package/deps/zlib/contrib/crc32vx/crc32_vx_hooks.h +9 -0
  86. package/deps/zlib/contrib/delphi/ZLib.pas +557 -0
  87. package/deps/zlib/contrib/delphi/ZLibConst.pas +11 -0
  88. package/deps/zlib/contrib/delphi/readme.txt +76 -0
  89. package/deps/zlib/contrib/delphi/zlibd32.mak +99 -0
  90. package/deps/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  91. package/deps/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  92. package/deps/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  93. package/deps/zlib/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  94. package/deps/zlib/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  95. package/deps/zlib/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  96. package/deps/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  97. package/deps/zlib/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  98. package/deps/zlib/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  99. package/deps/zlib/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  100. package/deps/zlib/contrib/dotzlib/DotZLib.build +33 -0
  101. package/deps/zlib/contrib/dotzlib/DotZLib.chm +0 -0
  102. package/deps/zlib/contrib/dotzlib/DotZLib.sln +21 -0
  103. package/deps/zlib/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  104. package/deps/zlib/contrib/dotzlib/readme.txt +58 -0
  105. package/deps/zlib/contrib/gcc_gvmat64/CMakeLists.txt +19 -0
  106. package/deps/zlib/contrib/gcc_gvmat64/gvmat64.S +570 -0
  107. package/deps/zlib/contrib/infback9/CMakeLists.txt +19 -0
  108. package/deps/zlib/contrib/infback9/README +1 -0
  109. package/deps/zlib/contrib/infback9/infback9.c +603 -0
  110. package/deps/zlib/contrib/infback9/infback9.h +37 -0
  111. package/deps/zlib/contrib/infback9/inffix9.h +107 -0
  112. package/deps/zlib/contrib/infback9/inflate9.h +47 -0
  113. package/deps/zlib/contrib/infback9/inftree9.c +319 -0
  114. package/deps/zlib/contrib/infback9/inftree9.h +61 -0
  115. package/deps/zlib/contrib/iostream/test.cpp +24 -0
  116. package/deps/zlib/contrib/iostream/zfstream.cpp +329 -0
  117. package/deps/zlib/contrib/iostream/zfstream.h +128 -0
  118. package/deps/zlib/contrib/iostream2/zstream.h +306 -0
  119. package/deps/zlib/contrib/iostream2/zstream_test.cpp +25 -0
  120. package/deps/zlib/contrib/iostream3/CMakeLists.txt +200 -0
  121. package/deps/zlib/contrib/iostream3/README +35 -0
  122. package/deps/zlib/contrib/iostream3/TODO +17 -0
  123. package/deps/zlib/contrib/iostream3/iostream3Config.cmake.in +23 -0
  124. package/deps/zlib/contrib/iostream3/test/CMakeLists.txt +191 -0
  125. package/deps/zlib/contrib/iostream3/test/add_subdirectory_exclude_test.cmake.in +27 -0
  126. package/deps/zlib/contrib/iostream3/test/add_subdirectory_test.cmake.in +25 -0
  127. package/deps/zlib/contrib/iostream3/test/find_package_no_components_test.cmake.in +24 -0
  128. package/deps/zlib/contrib/iostream3/test/find_package_test.cmake.in +24 -0
  129. package/deps/zlib/contrib/iostream3/test/find_package_wrong_components_test.cmake.in +24 -0
  130. package/deps/zlib/contrib/iostream3/test.cc +50 -0
  131. package/deps/zlib/contrib/iostream3/zfstream.cc +479 -0
  132. package/deps/zlib/contrib/iostream3/zfstream.h +466 -0
  133. package/deps/zlib/contrib/minizip/CMakeLists.txt +387 -0
  134. package/deps/zlib/contrib/minizip/LICENSE.Info-Zip +58 -0
  135. package/deps/zlib/contrib/minizip/Makefile +33 -0
  136. package/deps/zlib/contrib/minizip/Makefile.am +45 -0
  137. package/deps/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -0
  138. package/deps/zlib/contrib/minizip/MiniZip64_info.txt +69 -0
  139. package/deps/zlib/contrib/minizip/configure.ac +32 -0
  140. package/deps/zlib/contrib/minizip/crypt.h +125 -0
  141. package/deps/zlib/contrib/minizip/ints.h +57 -0
  142. package/deps/zlib/contrib/minizip/ioapi.c +231 -0
  143. package/deps/zlib/contrib/minizip/ioapi.h +183 -0
  144. package/deps/zlib/contrib/minizip/iowin32.c +447 -0
  145. package/deps/zlib/contrib/minizip/iowin32.h +27 -0
  146. package/deps/zlib/contrib/minizip/make_vms.com +25 -0
  147. package/deps/zlib/contrib/minizip/miniunz.c +647 -0
  148. package/deps/zlib/contrib/minizip/miniunzip.1 +63 -0
  149. package/deps/zlib/contrib/minizip/minizip.1 +46 -0
  150. package/deps/zlib/contrib/minizip/minizip.c +511 -0
  151. package/deps/zlib/contrib/minizip/minizip.pc.in +13 -0
  152. package/deps/zlib/contrib/minizip/minizip.pc.txt +13 -0
  153. package/deps/zlib/contrib/minizip/minizipConfig.cmake.in +27 -0
  154. package/deps/zlib/contrib/minizip/mztools.c +294 -0
  155. package/deps/zlib/contrib/minizip/mztools.h +37 -0
  156. package/deps/zlib/contrib/minizip/skipset.h +366 -0
  157. package/deps/zlib/contrib/minizip/test/CMakeLists.txt +176 -0
  158. package/deps/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -0
  159. package/deps/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -0
  160. package/deps/zlib/contrib/minizip/test/find_package_no_components_test.cmake.in +26 -0
  161. package/deps/zlib/contrib/minizip/test/find_package_test.cmake.in +26 -0
  162. package/deps/zlib/contrib/minizip/test/find_package_wrong_components_test.cmake.in +26 -0
  163. package/deps/zlib/contrib/minizip/test/test_helper.cm +32 -0
  164. package/deps/zlib/contrib/minizip/unzip.c +1984 -0
  165. package/deps/zlib/contrib/minizip/unzip.h +442 -0
  166. package/deps/zlib/contrib/minizip/zip.c +2246 -0
  167. package/deps/zlib/contrib/minizip/zip.h +371 -0
  168. package/deps/zlib/contrib/nuget/nuget.csproj +45 -0
  169. package/deps/zlib/contrib/nuget/nuget.sln +22 -0
  170. package/deps/zlib/contrib/pascal/example.pas +599 -0
  171. package/deps/zlib/contrib/pascal/readme.txt +76 -0
  172. package/deps/zlib/contrib/pascal/zlibd32.mak +99 -0
  173. package/deps/zlib/contrib/pascal/zlibpas.pas +276 -0
  174. package/deps/zlib/contrib/puff/CMakeLists.txt +154 -0
  175. package/deps/zlib/contrib/puff/Makefile +42 -0
  176. package/deps/zlib/contrib/puff/README +63 -0
  177. package/deps/zlib/contrib/puff/bin-writer.c +26 -0
  178. package/deps/zlib/contrib/puff/puff.c +840 -0
  179. package/deps/zlib/contrib/puff/puff.h +35 -0
  180. package/deps/zlib/contrib/puff/puffConfig.cmake.in +18 -0
  181. package/deps/zlib/contrib/puff/pufftest.c +168 -0
  182. package/deps/zlib/contrib/puff/test/CMakeLists.txt +262 -0
  183. package/deps/zlib/contrib/puff/test/add_subdirectory_exclude_test.cmake.in +26 -0
  184. package/deps/zlib/contrib/puff/test/add_subdirectory_test.cmake.in +25 -0
  185. package/deps/zlib/contrib/puff/test/find_package_no_components_test.cmake.in +24 -0
  186. package/deps/zlib/contrib/puff/test/find_package_test.cmake.in +24 -0
  187. package/deps/zlib/contrib/puff/test/find_package_wrong_components_test.cmake.in +24 -0
  188. package/deps/zlib/contrib/puff/test/tester-cov.cmake +58 -0
  189. package/deps/zlib/contrib/puff/test/tester.cmake +16 -0
  190. package/deps/zlib/contrib/puff/zeros.raw +0 -0
  191. package/deps/zlib/contrib/testzlib/CMakeLists.txt +44 -0
  192. package/deps/zlib/contrib/testzlib/testzlib.c +275 -0
  193. package/deps/zlib/contrib/testzlib/testzlib.txt +10 -0
  194. package/deps/zlib/contrib/vstudio/readme.txt +22 -0
  195. package/deps/zlib/contrib/zlib1-dll/CMakeLists.txt +196 -0
  196. package/deps/zlib/contrib/zlib1-dll/readme.txt +21 -0
  197. package/deps/zlib/crc32.c +983 -0
  198. package/deps/zlib/crc32.h +9446 -0
  199. package/deps/zlib/deflate.c +2185 -0
  200. package/deps/zlib/deflate.h +383 -0
  201. package/deps/zlib/doc/algorithm.txt +209 -0
  202. package/deps/zlib/doc/crc-doc.1.0.pdf +0 -0
  203. package/deps/zlib/doc/rfc1950.txt +619 -0
  204. package/deps/zlib/doc/rfc1951.txt +955 -0
  205. package/deps/zlib/doc/rfc1952.txt +675 -0
  206. package/deps/zlib/doc/txtvsbin.txt +107 -0
  207. package/deps/zlib/examples/README.examples +54 -0
  208. package/deps/zlib/examples/enough.c +597 -0
  209. package/deps/zlib/examples/fitblk.c +233 -0
  210. package/deps/zlib/examples/gun.c +702 -0
  211. package/deps/zlib/examples/gzappend.c +504 -0
  212. package/deps/zlib/examples/gzjoin.c +449 -0
  213. package/deps/zlib/examples/gzlog.c +1061 -0
  214. package/deps/zlib/examples/gzlog.h +91 -0
  215. package/deps/zlib/examples/gznorm.c +474 -0
  216. package/deps/zlib/examples/zlib_how.html +550 -0
  217. package/deps/zlib/examples/zpipe.c +206 -0
  218. package/deps/zlib/examples/zran.c +546 -0
  219. package/deps/zlib/examples/zran.h +53 -0
  220. package/deps/zlib/gzclose.c +23 -0
  221. package/deps/zlib/gzguts.h +216 -0
  222. package/deps/zlib/gzlib.c +609 -0
  223. package/deps/zlib/gzread.c +668 -0
  224. package/deps/zlib/gzwrite.c +700 -0
  225. package/deps/zlib/infback.c +581 -0
  226. package/deps/zlib/inffast.c +321 -0
  227. package/deps/zlib/inffast.h +11 -0
  228. package/deps/zlib/inffixed.h +94 -0
  229. package/deps/zlib/inflate.c +1413 -0
  230. package/deps/zlib/inflate.h +126 -0
  231. package/deps/zlib/inftrees.c +424 -0
  232. package/deps/zlib/inftrees.h +64 -0
  233. package/deps/zlib/make_vms.com +867 -0
  234. package/deps/zlib/msdos/Makefile.bor +115 -0
  235. package/deps/zlib/msdos/Makefile.dj2 +104 -0
  236. package/deps/zlib/msdos/Makefile.emx +69 -0
  237. package/deps/zlib/msdos/Makefile.msc +112 -0
  238. package/deps/zlib/msdos/Makefile.tc +100 -0
  239. package/deps/zlib/os400/README400 +48 -0
  240. package/deps/zlib/os400/bndsrc +144 -0
  241. package/deps/zlib/os400/make.sh +383 -0
  242. package/deps/zlib/os400/zlibfixed.rpgle +578 -0
  243. package/deps/zlib/os400/zlibfree.rpgle +634 -0
  244. package/deps/zlib/qnx/package.qpg +141 -0
  245. package/deps/zlib/test/CMakeLists.txt +318 -0
  246. package/deps/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -0
  247. package/deps/zlib/test/add_subdirectory_test.cmake.in +28 -0
  248. package/deps/zlib/test/example.c +552 -0
  249. package/deps/zlib/test/find_package_no_components_test.cmake.in +27 -0
  250. package/deps/zlib/test/find_package_test.cmake.in +27 -0
  251. package/deps/zlib/test/find_package_wrong_components_test.cmake.in +27 -0
  252. package/deps/zlib/test/infcover.c +672 -0
  253. package/deps/zlib/test/minigzip.c +592 -0
  254. package/deps/zlib/treebuild.xml +116 -0
  255. package/deps/zlib/trees.c +1119 -0
  256. package/deps/zlib/trees.h +128 -0
  257. package/deps/zlib/uncompr.c +101 -0
  258. package/deps/zlib/watcom/watcom_f.mak +43 -0
  259. package/deps/zlib/watcom/watcom_l.mak +43 -0
  260. package/deps/zlib/win32/DLL_FAQ.txt +381 -0
  261. package/deps/zlib/win32/Makefile.bor +109 -0
  262. package/deps/zlib/win32/Makefile.gcc +177 -0
  263. package/deps/zlib/win32/Makefile.msc +159 -0
  264. package/deps/zlib/win32/README-WIN32.txt +103 -0
  265. package/deps/zlib/win32/VisualC.txt +3 -0
  266. package/deps/zlib/win32/zlib.def +104 -0
  267. package/deps/zlib/win32/zlib1.rc +37 -0
  268. package/deps/zlib/zconf.h.in +551 -0
  269. package/deps/zlib/zlib.3 +149 -0
  270. package/deps/zlib/zlib.3.pdf +0 -0
  271. package/deps/zlib/zlib.h +2057 -0
  272. package/deps/zlib/zlib.map +116 -0
  273. package/deps/zlib/zlib.pc.cmakein +14 -0
  274. package/deps/zlib/zlib.pc.in +14 -0
  275. package/deps/zlib/zlibConfig.cmake.in +18 -0
  276. package/deps/zlib/zutil.c +313 -0
  277. package/deps/zlib/zutil.h +331 -0
  278. package/dist/index.d.ts +266 -0
  279. package/dist/index.js +1146 -0
  280. package/dist/libwz.js +5632 -0
  281. package/dist/libwz.wasm +0 -0
  282. package/include/wz/CRC32.h +182 -0
  283. package/include/wz/PngUtility.h +72 -0
  284. package/include/wz/PortalType.h +124 -0
  285. package/include/wz/Properties/WzBinaryProperty.h +70 -0
  286. package/include/wz/Properties/WzCanvasProperty.h +55 -0
  287. package/include/wz/Properties/WzConvexProperty.h +34 -0
  288. package/include/wz/Properties/WzDoubleProperty.h +32 -0
  289. package/include/wz/Properties/WzFloatProperty.h +30 -0
  290. package/include/wz/Properties/WzIntProperty.h +30 -0
  291. package/include/wz/Properties/WzLongProperty.h +30 -0
  292. package/include/wz/Properties/WzLuaProperty.h +31 -0
  293. package/include/wz/Properties/WzNullProperty.h +15 -0
  294. package/include/wz/Properties/WzPngProperty.h +53 -0
  295. package/include/wz/Properties/WzRawDataProperty.h +46 -0
  296. package/include/wz/Properties/WzShortProperty.h +31 -0
  297. package/include/wz/Properties/WzStringProperty.h +32 -0
  298. package/include/wz/Properties/WzSubProperty.h +35 -0
  299. package/include/wz/Properties/WzUOLProperty.h +44 -0
  300. package/include/wz/Properties/WzVectorProperty.h +40 -0
  301. package/include/wz/Properties/WzVideoProperty.h +43 -0
  302. package/include/wz/Result.h +58 -0
  303. package/include/wz/Util/Defines.h +16 -0
  304. package/include/wz/Util/ListFileParser.h +20 -0
  305. package/include/wz/Util/WzBinaryReader.h +95 -0
  306. package/include/wz/Util/WzBinaryWriter.h +72 -0
  307. package/include/wz/Util/WzBlobDataSource.h +30 -0
  308. package/include/wz/Util/WzDataSource.h +49 -0
  309. package/include/wz/Util/WzKeyGenerator.h +28 -0
  310. package/include/wz/Util/WzMutableKey.h +39 -0
  311. package/include/wz/Util/WzPath.h +37 -0
  312. package/include/wz/Util/WzStream.h +86 -0
  313. package/include/wz/Util/WzTool.h +42 -0
  314. package/include/wz/WzAESConstant.h +17 -0
  315. package/include/wz/WzDirectory.h +97 -0
  316. package/include/wz/WzEnums.h +76 -0
  317. package/include/wz/WzFile.h +99 -0
  318. package/include/wz/WzHeader.h +47 -0
  319. package/include/wz/WzImage.h +97 -0
  320. package/include/wz/WzImageProperty.h +92 -0
  321. package/include/wz/WzObject.h +55 -0
  322. package/include/wz/WzPropertyCollection.h +115 -0
  323. package/include/wz/wz.h +41 -0
  324. package/include/wz/wz_api.h +432 -0
  325. package/package.json +93 -0
  326. package/src/PngUtility.cpp +328 -0
  327. package/src/Properties/WzBinaryProperty.cpp +183 -0
  328. package/src/Properties/WzCanvasProperty.cpp +262 -0
  329. package/src/Properties/WzConvexProperty.cpp +159 -0
  330. package/src/Properties/WzDoubleProperty.cpp +12 -0
  331. package/src/Properties/WzFloatProperty.cpp +17 -0
  332. package/src/Properties/WzIntProperty.cpp +12 -0
  333. package/src/Properties/WzLongProperty.cpp +12 -0
  334. package/src/Properties/WzLuaProperty.cpp +37 -0
  335. package/src/Properties/WzNullProperty.cpp +11 -0
  336. package/src/Properties/WzPngProperty.cpp +637 -0
  337. package/src/Properties/WzRawDataProperty.cpp +116 -0
  338. package/src/Properties/WzShortProperty.cpp +12 -0
  339. package/src/Properties/WzStringProperty.cpp +44 -0
  340. package/src/Properties/WzSubProperty.cpp +129 -0
  341. package/src/Properties/WzUOLProperty.cpp +136 -0
  342. package/src/Properties/WzVectorProperty.cpp +22 -0
  343. package/src/Properties/WzVideoProperty.cpp +115 -0
  344. package/src/Util/ListFileParser.cpp +48 -0
  345. package/src/Util/WzBinaryReader.cpp +368 -0
  346. package/src/Util/WzBinaryWriter.cpp +305 -0
  347. package/src/Util/WzBlobDataSource.cpp +47 -0
  348. package/src/Util/WzDataSource.cpp +61 -0
  349. package/src/Util/WzKeyGenerator.cpp +43 -0
  350. package/src/Util/WzMutableKey.cpp +59 -0
  351. package/src/Util/WzStream.cpp +196 -0
  352. package/src/Util/WzTool.cpp +266 -0
  353. package/src/WzAESConstant.cpp +12 -0
  354. package/src/WzDirectory.cpp +669 -0
  355. package/src/WzEnums.cpp +20 -0
  356. package/src/WzFile.cpp +450 -0
  357. package/src/WzImage.cpp +350 -0
  358. package/src/WzImageProperty.cpp +469 -0
  359. package/src/WzObject.cpp +174 -0
  360. package/src/WzPropertyCollection.cpp +84 -0
  361. package/src/capi/wz_api.cpp +1996 -0
  362. package/src/node/binding.cpp +1776 -0
@@ -0,0 +1,1776 @@
1
+ #include <node_api.h>
2
+
3
+ #include <array>
4
+ #include <cstdint>
5
+ #include <cstring>
6
+ #include <filesystem>
7
+ #include <memory>
8
+ #include <span>
9
+ #include <string>
10
+ #include <vector>
11
+
12
+ #ifdef __EMSCRIPTEN__
13
+ #include <emnapi.h>
14
+ #endif
15
+
16
+ #include "wz/Properties/WzBinaryProperty.h"
17
+ #include "wz/Properties/WzCanvasProperty.h"
18
+ #include "wz/Properties/WzConvexProperty.h"
19
+ #include "wz/Properties/WzDoubleProperty.h"
20
+ #include "wz/Properties/WzFloatProperty.h"
21
+ #include "wz/Properties/WzIntProperty.h"
22
+ #include "wz/Properties/WzLongProperty.h"
23
+ #include "wz/Properties/WzLuaProperty.h"
24
+ #include "wz/Properties/WzNullProperty.h"
25
+ #include "wz/Properties/WzPngProperty.h"
26
+ #include "wz/Properties/WzRawDataProperty.h"
27
+ #include "wz/Properties/WzShortProperty.h"
28
+ #include "wz/Properties/WzStringProperty.h"
29
+ #include "wz/Properties/WzSubProperty.h"
30
+ #include "wz/Properties/WzUOLProperty.h"
31
+ #include "wz/Properties/WzVectorProperty.h"
32
+ #include "wz/Properties/WzVideoProperty.h"
33
+ #include "wz/Result.h"
34
+ #include "wz/Util/WzBlobDataSource.h"
35
+ #include "wz/Util/WzDataSource.h"
36
+ #include "wz/Util/WzStream.h"
37
+ #include "wz/Util/WzTool.h"
38
+ #include "wz/WzDirectory.h"
39
+ #include "wz/WzFile.h"
40
+ #include "wz/WzImage.h"
41
+ #include "wz/WzObject.h"
42
+ #include "wz/WzPropertyCollection.h"
43
+
44
+ void ThrowNodeApiError(napi_env env, const char* message) {
45
+ const napi_extended_error_info* error = nullptr;
46
+ (void)napi_get_last_error_info(env, &error);
47
+ const char* detail =
48
+ error && error->error_message ? error->error_message : message;
49
+ (void)napi_throw_error(env, nullptr, detail);
50
+ }
51
+
52
+ #define NODE_API_CALL(env, expr, message) \
53
+ do { \
54
+ napi_status node_api_status = (expr); \
55
+ if (node_api_status != napi_ok) { \
56
+ ThrowNodeApiError((env), (message)); \
57
+ return nullptr; \
58
+ } \
59
+ } while (false)
60
+
61
+ #define NODE_API_THROW(env, message) \
62
+ do { \
63
+ (void)napi_throw_error((env), nullptr, (message)); \
64
+ return nullptr; \
65
+ } while (false)
66
+
67
+ template <typename T>
68
+ inline bool ReadHandle(napi_env env, napi_value value, T* out) {
69
+ bool lossless = false;
70
+ uint64_t raw = 0;
71
+ napi_status status =
72
+ napi_get_value_bigint_uint64(env, value, &raw, &lossless);
73
+ if (status != napi_ok) {
74
+ (void)napi_throw_error(env, nullptr, "expected native handle bigint");
75
+ return false;
76
+ }
77
+ if (!lossless) {
78
+ (void)napi_throw_range_error(
79
+ env, nullptr, "native handle bigint is outside uint64 range");
80
+ return false;
81
+ }
82
+ *out = reinterpret_cast<T>(static_cast<uintptr_t>(raw));
83
+ return true;
84
+ }
85
+
86
+ template <typename T>
87
+ inline napi_value ToHandle(napi_env env, T ptr) {
88
+ napi_value value = nullptr;
89
+ NODE_API_CALL(
90
+ env,
91
+ napi_create_bigint_uint64(
92
+ env, static_cast<uint64_t>(reinterpret_cast<uintptr_t>(ptr)), &value),
93
+ "failed to create native handle");
94
+ return value;
95
+ }
96
+
97
+ template <typename T>
98
+ inline bool CheckResult(napi_env env, const wz::Result<T>& result) {
99
+ if (result.has_value()) return true;
100
+ (void)napi_throw_error(env, nullptr, result.error().message().c_str());
101
+ return false;
102
+ }
103
+
104
+ inline bool CheckResult(napi_env env, const wz::Result<void>& result) {
105
+ if (result.has_value()) return true;
106
+ (void)napi_throw_error(env, nullptr, result.error().message().c_str());
107
+ return false;
108
+ }
109
+
110
+ inline bool CheckNotNull(napi_env env, const void* ptr, const char* name) {
111
+ if (ptr) return true;
112
+ const std::string message = std::string(name) + ": null handle";
113
+ (void)napi_throw_error(env, nullptr, message.c_str());
114
+ return false;
115
+ }
116
+
117
+ inline bool CheckPropertyType(napi_env env,
118
+ wz::WzImageProperty* prop,
119
+ wz::WzPropertyType type,
120
+ const char* name) {
121
+ if (!CheckNotNull(env, prop, name)) return false;
122
+ if (prop->PropertyType() == type) return true;
123
+ const std::string message = std::string(name) + ": wrong property type";
124
+ (void)napi_throw_error(env, nullptr, message.c_str());
125
+ return false;
126
+ }
127
+
128
+ inline bool ReadString(napi_env env, napi_value value, std::string* out) {
129
+ size_t length = 0;
130
+ napi_status status =
131
+ napi_get_value_string_utf8(env, value, nullptr, 0, &length);
132
+ if (status != napi_ok) {
133
+ (void)napi_throw_error(env, nullptr, "expected string");
134
+ return false;
135
+ }
136
+ std::string result(length + 1, '\0');
137
+ size_t copied = 0;
138
+ status = napi_get_value_string_utf8(
139
+ env, value, result.data(), length + 1, &copied);
140
+ if (status != napi_ok) {
141
+ (void)napi_throw_error(env, nullptr, "failed to read string");
142
+ return false;
143
+ }
144
+ result.resize(copied);
145
+ *out = std::move(result);
146
+ return true;
147
+ }
148
+
149
+ inline bool ReadInt(napi_env env, napi_value value, int32_t* out) {
150
+ napi_status status = napi_get_value_int32(env, value, out);
151
+ if (status == napi_ok) return true;
152
+ (void)napi_throw_error(env, nullptr, "expected int32");
153
+ return false;
154
+ }
155
+
156
+ inline bool ReadDouble(napi_env env, napi_value value, double* out) {
157
+ napi_status status = napi_get_value_double(env, value, out);
158
+ if (status == napi_ok) return true;
159
+ (void)napi_throw_error(env, nullptr, "expected number");
160
+ return false;
161
+ }
162
+
163
+ inline bool ReadBool(napi_env env, napi_value value, bool* out) {
164
+ napi_status status = napi_get_value_bool(env, value, out);
165
+ if (status == napi_ok) return true;
166
+ (void)napi_throw_error(env, nullptr, "expected boolean");
167
+ return false;
168
+ }
169
+
170
+ inline bool ReadInt64(napi_env env, napi_value value, int64_t* out) {
171
+ bool lossless = false;
172
+ napi_status status = napi_get_value_bigint_int64(env, value, out, &lossless);
173
+ if (status != napi_ok) {
174
+ (void)napi_throw_error(env, nullptr, "expected int64 bigint");
175
+ return false;
176
+ }
177
+ if (!lossless) {
178
+ (void)napi_throw_range_error(
179
+ env, nullptr, "bigint value is outside int64 range");
180
+ return false;
181
+ }
182
+ return true;
183
+ }
184
+
185
+ inline bool ReadBytesView(napi_env env,
186
+ napi_value value,
187
+ uint8_t** data,
188
+ size_t* length,
189
+ napi_value* array_buffer,
190
+ size_t* byte_offset) {
191
+ napi_typedarray_type type;
192
+ napi_status status = napi_get_typedarray_info(env,
193
+ value,
194
+ &type,
195
+ length,
196
+ reinterpret_cast<void**>(data),
197
+ array_buffer,
198
+ byte_offset);
199
+ if (status != napi_ok) {
200
+ (void)napi_throw_error(env, nullptr, "expected Uint8Array");
201
+ return false;
202
+ }
203
+ if (type == napi_uint8_array) return true;
204
+ (void)napi_throw_error(env, nullptr, "expected Uint8Array");
205
+ return false;
206
+ }
207
+
208
+ inline bool ReadBytesView(napi_env env,
209
+ napi_value value,
210
+ uint8_t** data,
211
+ size_t* length) {
212
+ napi_value array_buffer = nullptr;
213
+ size_t byte_offset = 0;
214
+ return ReadBytesView(env, value, data, length, &array_buffer, &byte_offset);
215
+ }
216
+
217
+ inline bool IsBytesView(napi_env env, napi_value value, bool* out) {
218
+ napi_status status = napi_is_typedarray(env, value, out);
219
+ if (status != napi_ok) {
220
+ ThrowNodeApiError(env, "failed to inspect typed array");
221
+ return false;
222
+ }
223
+ return true;
224
+ }
225
+
226
+ inline bool ReadIv(napi_env env,
227
+ napi_value value,
228
+ std::array<uint8_t, 4>* out) {
229
+ uint8_t* data = nullptr;
230
+ size_t length = 0;
231
+ *out = {0, 0, 0, 0};
232
+ if (!ReadBytesView(env, value, &data, &length)) return false;
233
+ if (length != out->size()) {
234
+ (void)napi_throw_range_error(env, nullptr, "iv must be exactly 4 bytes");
235
+ return false;
236
+ }
237
+ if (data) {
238
+ std::memcpy(out->data(), data, out->size());
239
+ }
240
+ return true;
241
+ }
242
+
243
+ #ifdef __EMSCRIPTEN__
244
+ inline bool SyncMemory(napi_env env,
245
+ bool js_to_wasm,
246
+ napi_value value,
247
+ size_t byte_offset,
248
+ size_t length) {
249
+ napi_value raw = value;
250
+ napi_status status =
251
+ emnapi_sync_memory(env, js_to_wasm, &raw, byte_offset, length);
252
+ if (status == napi_ok) return true;
253
+ (void)napi_throw_error(env, nullptr, "emnapi_sync_memory failed");
254
+ return false;
255
+ }
256
+ #else
257
+ inline bool SyncMemory(napi_env, bool, napi_value, size_t, size_t) {
258
+ return true;
259
+ }
260
+ #endif
261
+
262
+ #ifdef __EMSCRIPTEN__
263
+ inline bool CreateDestinationView(napi_env env,
264
+ std::span<uint8_t> destination,
265
+ napi_value* result) {
266
+ napi_status status = emnapi_create_memory_view(env,
267
+ emnapi_uint8_array,
268
+ destination.data(),
269
+ destination.size(),
270
+ nullptr,
271
+ nullptr,
272
+ result);
273
+ if (status == napi_ok) return true;
274
+ (void)napi_throw_error(env, nullptr, "failed to create Blob read buffer");
275
+ return false;
276
+ }
277
+ #endif
278
+
279
+ inline napi_value Bytes(napi_env env, const std::vector<uint8_t>& data) {
280
+ napi_value array_buffer = nullptr;
281
+ void* raw = nullptr;
282
+ NODE_API_CALL(env,
283
+ napi_create_arraybuffer(env, data.size(), &raw, &array_buffer),
284
+ "failed to create ArrayBuffer");
285
+ if (!data.empty()) {
286
+ std::memcpy(raw, data.data(), data.size());
287
+ }
288
+ if (!SyncMemory(env, false, array_buffer, 0, data.size())) return nullptr;
289
+ napi_value result = nullptr;
290
+ NODE_API_CALL(
291
+ env,
292
+ napi_create_typedarray(
293
+ env, napi_uint8_array, data.size(), array_buffer, 0, &result),
294
+ "failed to create Uint8Array");
295
+ return result;
296
+ }
297
+
298
+ inline napi_value NullableHandle(napi_env env, void* ptr) {
299
+ if (ptr) return ToHandle(env, ptr);
300
+ napi_value result = nullptr;
301
+ NODE_API_CALL(env, napi_get_null(env, &result), "failed to get null");
302
+ return result;
303
+ }
304
+
305
+ inline napi_value NullableObject(napi_env env, wz::WzObject* obj) {
306
+ if (!obj) {
307
+ napi_value null_value = nullptr;
308
+ NODE_API_CALL(env, napi_get_null(env, &null_value), "failed to get null");
309
+ return null_value;
310
+ }
311
+ napi_value result = nullptr;
312
+ NODE_API_CALL(
313
+ env, napi_create_object(env, &result), "failed to create object");
314
+ napi_value type = nullptr;
315
+ NODE_API_CALL(
316
+ env,
317
+ napi_create_int32(env, static_cast<int>(obj->ObjectType()), &type),
318
+ "failed to create object type value");
319
+ NODE_API_CALL(env,
320
+ napi_set_named_property(env, result, "type", type),
321
+ "failed to set object type");
322
+ napi_value ptr = ToHandle(env, obj);
323
+ if (ptr == nullptr) return nullptr;
324
+ NODE_API_CALL(env,
325
+ napi_set_named_property(env, result, "ptr", ptr),
326
+ "failed to set object pointer");
327
+ return result;
328
+ }
329
+
330
+ bool IsMutablePropertyContainer(wz::WzImageProperty* prop) {
331
+ if (!prop) return false;
332
+ switch (prop->PropertyType()) {
333
+ case wz::WzPropertyType::SubProperty:
334
+ case wz::WzPropertyType::Canvas:
335
+ case wz::WzPropertyType::Convex:
336
+ case wz::WzPropertyType::Raw:
337
+ return prop->WzProperties() != nullptr;
338
+ default:
339
+ return false;
340
+ }
341
+ }
342
+
343
+ struct BlobReadCallbackState {
344
+ napi_env env;
345
+ napi_ref callback;
346
+ };
347
+
348
+ struct BlobReadCallbackStateDeleter {
349
+ void operator()(BlobReadCallbackState* ptr) const {
350
+ if (!ptr) return;
351
+ napi_status status = napi_delete_reference(ptr->env, ptr->callback);
352
+ if (status != napi_ok) {
353
+ (void)napi_throw_error(
354
+ ptr->env, nullptr, "failed to release Blob read callback");
355
+ }
356
+ delete ptr;
357
+ }
358
+ };
359
+
360
+ wz::Result<size_t> BlobReadRange(BlobReadCallbackState* state,
361
+ uint64_t offset,
362
+ std::span<uint8_t> destination) {
363
+ napi_value callback = nullptr;
364
+ napi_value global = nullptr;
365
+ napi_status status =
366
+ napi_get_reference_value(state->env, state->callback, &callback);
367
+ if (status != napi_ok) {
368
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
369
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
370
+ }
371
+ status = napi_get_global(state->env, &global);
372
+ if (status != napi_ok) {
373
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
374
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
375
+ }
376
+
377
+ napi_value argv[3] = {};
378
+ status =
379
+ napi_create_double(state->env, static_cast<double>(offset), &argv[0]);
380
+ if (status != napi_ok) {
381
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
382
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
383
+ }
384
+ status = napi_create_double(
385
+ state->env, static_cast<double>(destination.size()), &argv[1]);
386
+ if (status != napi_ok) {
387
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
388
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
389
+ }
390
+ #ifdef __EMSCRIPTEN__
391
+ if (!CreateDestinationView(state->env, destination, &argv[2])) {
392
+ return std::unexpected(
393
+ wz::Error::IoError("failed to create Blob read buffer"));
394
+ }
395
+ #endif
396
+
397
+ napi_value result = nullptr;
398
+ status = napi_call_function(state->env,
399
+ global,
400
+ callback,
401
+ #ifdef __EMSCRIPTEN__
402
+ 3,
403
+ #else
404
+ 2,
405
+ #endif
406
+ argv,
407
+ &result);
408
+ if (status != napi_ok) {
409
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
410
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
411
+ }
412
+
413
+ #ifdef __EMSCRIPTEN__
414
+ napi_valuetype value_type = napi_undefined;
415
+ status = napi_typeof(state->env, result, &value_type);
416
+ if (status != napi_ok) {
417
+ (void)napi_throw_error(state->env, nullptr, "Blob read callback failed");
418
+ return std::unexpected(wz::Error::IoError("Blob read callback failed"));
419
+ }
420
+ if (value_type == napi_undefined || value_type == napi_null) {
421
+ return destination.size();
422
+ }
423
+ (void)napi_throw_error(
424
+ state->env, nullptr, "Blob read callback must write to destination");
425
+ return std::unexpected(
426
+ wz::Error::IoError("Blob read callback must write to destination"));
427
+ #else
428
+
429
+ uint8_t* data = nullptr;
430
+ size_t length = 0;
431
+ napi_value array_buffer = nullptr;
432
+ size_t byte_offset = 0;
433
+ if (!ReadBytesView(
434
+ state->env, result, &data, &length, &array_buffer, &byte_offset) ||
435
+ length != destination.size()) {
436
+ return std::unexpected(
437
+ wz::Error::IoError("Blob read callback returned invalid data"));
438
+ }
439
+ if (!SyncMemory(state->env, true, array_buffer, byte_offset, length)) {
440
+ return std::unexpected(
441
+ wz::Error::IoError("Blob read callback memory sync failed"));
442
+ }
443
+ if (length > 0) std::memcpy(destination.data(), data, length);
444
+ return length;
445
+ #endif
446
+ }
447
+
448
+ class BlobReadCallback {
449
+ public:
450
+ explicit BlobReadCallback(std::shared_ptr<BlobReadCallbackState> state)
451
+ : state_(std::move(state)) {}
452
+
453
+ wz::Result<size_t> operator()(uint64_t offset,
454
+ std::span<uint8_t> destination) const {
455
+ return BlobReadRange(state_.get(), offset, destination);
456
+ }
457
+
458
+ private:
459
+ std::shared_ptr<BlobReadCallbackState> state_;
460
+ };
461
+
462
+ std::shared_ptr<wz::WzBlobDataSource> MakeBlobSource(napi_env env,
463
+ uint64_t size,
464
+ napi_value callback) {
465
+ auto* state = new BlobReadCallbackState{env, nullptr};
466
+ napi_status status =
467
+ napi_create_reference(env, callback, 1, &state->callback);
468
+ if (status != napi_ok) {
469
+ (void)napi_throw_error(env, nullptr, "failed to retain Blob read callback");
470
+ delete state;
471
+ return nullptr;
472
+ }
473
+ auto owner = std::shared_ptr<BlobReadCallbackState>(
474
+ state, BlobReadCallbackStateDeleter());
475
+ return std::make_shared<wz::WzBlobDataSource>(size, BlobReadCallback(owner));
476
+ }
477
+
478
+ #define FN(name) napi_value name(napi_env env, napi_callback_info info)
479
+ #define GET_ARGS(n) \
480
+ napi_value args[n] = {}; \
481
+ size_t argc = n; \
482
+ NODE_API_CALL(env, \
483
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr), \
484
+ "failed to read callback arguments")
485
+ #define GET_ARGS_MAX(n) \
486
+ napi_value args[n] = {}; \
487
+ size_t argc = n; \
488
+ NODE_API_CALL(env, \
489
+ napi_get_cb_info(env, info, &argc, args, nullptr, nullptr), \
490
+ "failed to read callback arguments")
491
+ #define READ_HANDLE(type, name, value) \
492
+ type name = nullptr; \
493
+ if (!ReadHandle<type>(env, value, &name)) return nullptr
494
+ #define READ_STRING(name, value) \
495
+ std::string name; \
496
+ if (!ReadString(env, value, &name)) return nullptr
497
+ #define READ_INT(name, value) \
498
+ int32_t name = 0; \
499
+ if (!ReadInt(env, value, &name)) return nullptr
500
+ #define READ_DOUBLE(name, value) \
501
+ double name = 0; \
502
+ if (!ReadDouble(env, value, &name)) return nullptr
503
+ #define READ_BOOL(name, value) \
504
+ bool name = false; \
505
+ if (!ReadBool(env, value, &name)) return nullptr
506
+ #define READ_IV(name, value) \
507
+ std::array<uint8_t, 4> name = {0, 0, 0, 0}; \
508
+ if (!ReadIv(env, value, &name)) return nullptr
509
+ #define RETURN_NULL() \
510
+ do { \
511
+ napi_value node_api_result = nullptr; \
512
+ NODE_API_CALL( \
513
+ env, napi_get_null(env, &node_api_result), "failed to get null"); \
514
+ return node_api_result; \
515
+ } while (false)
516
+ #define RETURN_UNDEFINED() \
517
+ do { \
518
+ napi_value node_api_result = nullptr; \
519
+ NODE_API_CALL(env, \
520
+ napi_get_undefined(env, &node_api_result), \
521
+ "failed to get undefined"); \
522
+ return node_api_result; \
523
+ } while (false)
524
+ #define RETURN_BOOL(value) \
525
+ do { \
526
+ napi_value node_api_result = nullptr; \
527
+ NODE_API_CALL(env, \
528
+ napi_get_boolean(env, (value), &node_api_result), \
529
+ "failed to create boolean"); \
530
+ return node_api_result; \
531
+ } while (false)
532
+ #define RETURN_INT(value) \
533
+ do { \
534
+ napi_value node_api_result = nullptr; \
535
+ NODE_API_CALL(env, \
536
+ napi_create_int32(env, (value), &node_api_result), \
537
+ "failed to create int32"); \
538
+ return node_api_result; \
539
+ } while (false)
540
+ #define RETURN_UINT32(value) \
541
+ do { \
542
+ napi_value node_api_result = nullptr; \
543
+ NODE_API_CALL(env, \
544
+ napi_create_uint32(env, (value), &node_api_result), \
545
+ "failed to create uint32"); \
546
+ return node_api_result; \
547
+ } while (false)
548
+ #define RETURN_DOUBLE(value) \
549
+ do { \
550
+ napi_value node_api_result = nullptr; \
551
+ NODE_API_CALL(env, \
552
+ napi_create_double(env, (value), &node_api_result), \
553
+ "failed to create number"); \
554
+ return node_api_result; \
555
+ } while (false)
556
+ #define RETURN_BIGINT(value) \
557
+ do { \
558
+ napi_value node_api_result = nullptr; \
559
+ NODE_API_CALL(env, \
560
+ napi_create_bigint_int64(env, (value), &node_api_result), \
561
+ "failed to create bigint"); \
562
+ return node_api_result; \
563
+ } while (false)
564
+ #define RETURN_STRING(value) \
565
+ do { \
566
+ const std::string& node_api_string = (value); \
567
+ napi_value node_api_result = nullptr; \
568
+ NODE_API_CALL(env, \
569
+ napi_create_string_utf8(env, \
570
+ node_api_string.c_str(), \
571
+ node_api_string.size(), \
572
+ &node_api_result), \
573
+ "failed to create string"); \
574
+ return node_api_result; \
575
+ } while (false)
576
+
577
+ FN(OpenFile) {
578
+ GET_ARGS_MAX(3);
579
+ READ_STRING(path, args[0]);
580
+ if (argc == 2) {
581
+ bool is_iv = false;
582
+ if (!IsBytesView(env, args[1], &is_iv)) return nullptr;
583
+ if (is_iv) {
584
+ READ_IV(iv, args[1]);
585
+ return ToHandle(env, new wz::WzFile(path, iv));
586
+ }
587
+ }
588
+ READ_INT(game_version, args[1]);
589
+ READ_INT(version, args[2]);
590
+ return ToHandle(env,
591
+ new wz::WzFile(path,
592
+ static_cast<short>(game_version),
593
+ static_cast<wz::WzMapleVersion>(version)));
594
+ }
595
+
596
+ FN(OpenMemory) {
597
+ GET_ARGS_MAX(4);
598
+ READ_STRING(name, args[0]);
599
+ uint8_t* data = nullptr;
600
+ size_t size = 0;
601
+ if (!ReadBytesView(env, args[1], &data, &size)) return nullptr;
602
+ std::vector<uint8_t> bytes(data, data + size);
603
+ auto source = std::make_shared<wz::WzMemoryDataSource>(std::move(bytes));
604
+ if (argc == 3) {
605
+ bool is_iv = false;
606
+ if (!IsBytesView(env, args[2], &is_iv)) return nullptr;
607
+ if (is_iv) {
608
+ READ_IV(iv, args[2]);
609
+ return ToHandle(env, new wz::WzFile(name, source, iv));
610
+ }
611
+ }
612
+ READ_INT(game_version, args[2]);
613
+ READ_INT(version, args[3]);
614
+ return ToHandle(env,
615
+ new wz::WzFile(name,
616
+ source,
617
+ static_cast<short>(game_version),
618
+ static_cast<wz::WzMapleVersion>(version)));
619
+ }
620
+
621
+ FN(OpenImage) {
622
+ GET_ARGS(2);
623
+ READ_STRING(path, args[0]);
624
+ READ_INT(version, args[1]);
625
+ const std::filesystem::path file_path(path);
626
+ wz::WzFileStream stream(file_path, "rb");
627
+ if (!stream.IsOpen()) {
628
+ NODE_API_THROW(env, "failed to open WZ image file");
629
+ }
630
+ return ToHandle(env,
631
+ new wz::WzImage(file_path.filename().string(),
632
+ std::move(stream),
633
+ static_cast<wz::WzMapleVersion>(version)));
634
+ }
635
+
636
+ FN(OpenBlobSource) {
637
+ GET_ARGS_MAX(5);
638
+ READ_DOUBLE(size, args[0]);
639
+ READ_STRING(name, args[1]);
640
+ if (argc == 4) {
641
+ bool is_iv = false;
642
+ if (!IsBytesView(env, args[2], &is_iv)) return nullptr;
643
+ if (is_iv) {
644
+ READ_IV(iv, args[2]);
645
+ auto source = MakeBlobSource(env, size, args[3]);
646
+ if (!source) return nullptr;
647
+ return ToHandle(env, new wz::WzFile(name, source, iv));
648
+ }
649
+ }
650
+ READ_INT(game_version, args[2]);
651
+ READ_INT(version, args[3]);
652
+ auto source = MakeBlobSource(env, size, args[4]);
653
+ if (!source) return nullptr;
654
+ return ToHandle(env,
655
+ new wz::WzFile(name,
656
+ source,
657
+ static_cast<short>(game_version),
658
+ static_cast<wz::WzMapleVersion>(version)));
659
+ }
660
+
661
+ FN(CreateFile) {
662
+ GET_ARGS(2);
663
+ READ_INT(game_version, args[0]);
664
+ READ_INT(version, args[1]);
665
+ return ToHandle(env,
666
+ new wz::WzFile(static_cast<short>(game_version),
667
+ static_cast<wz::WzMapleVersion>(version)));
668
+ }
669
+
670
+ FN(CloseFile) {
671
+ GET_ARGS(1);
672
+ READ_HANDLE(wz::WzFile*, file, args[0]);
673
+ delete file;
674
+ RETURN_UNDEFINED();
675
+ }
676
+
677
+ FN(ParseFile) {
678
+ GET_ARGS(1);
679
+ READ_HANDLE(wz::WzFile*, file, args[0]);
680
+ if (!CheckNotNull(env, file, "parseFile")) return nullptr;
681
+ auto status = file->ParseWzFile();
682
+ if (status != wz::WzFileParseStatus::Success) {
683
+ const auto message = wz::GetErrorDescription(status);
684
+ NODE_API_THROW(env, message.c_str());
685
+ }
686
+ RETURN_INT(static_cast<int>(status));
687
+ }
688
+
689
+ FN(FileSaveToDisk) {
690
+ GET_ARGS(2);
691
+ READ_HANDLE(wz::WzFile*, file, args[0]);
692
+ READ_STRING(path, args[1]);
693
+ auto result = file->SaveToDisk(path);
694
+ if (!CheckResult(env, result)) return nullptr;
695
+ RETURN_UNDEFINED();
696
+ }
697
+
698
+ FN(FileName) {
699
+ GET_ARGS(1);
700
+ READ_HANDLE(wz::WzFile*, file, args[0]);
701
+ RETURN_STRING(file->Name());
702
+ }
703
+
704
+ FN(FilePath) {
705
+ GET_ARGS(1);
706
+ READ_HANDLE(wz::WzFile*, file, args[0]);
707
+ RETURN_STRING(file->FilePath());
708
+ }
709
+
710
+ FN(FileVersion) {
711
+ GET_ARGS(1);
712
+ READ_HANDLE(wz::WzFile*, file, args[0]);
713
+ RETURN_INT(file->Version());
714
+ }
715
+
716
+ FN(FileMapleVersion) {
717
+ GET_ARGS(1);
718
+ READ_HANDLE(wz::WzFile*, file, args[0]);
719
+ RETURN_INT(static_cast<int>(file->MapleVersion()));
720
+ }
721
+
722
+ FN(FileWzDirectory) {
723
+ GET_ARGS(1);
724
+ READ_HANDLE(wz::WzFile*, file, args[0]);
725
+ return NullableHandle(env, file->GetWzDirectory());
726
+ }
727
+
728
+ FN(FileIs64Bit) {
729
+ GET_ARGS(1);
730
+ READ_HANDLE(wz::WzFile*, file, args[0]);
731
+ RETURN_BOOL(file->Is64BitWzFile());
732
+ }
733
+
734
+ FN(FileIsUnloaded) {
735
+ GET_ARGS(1);
736
+ READ_HANDLE(wz::WzFile*, file, args[0]);
737
+ RETURN_BOOL(file->IsUnloaded());
738
+ }
739
+
740
+ FN(FileVersionHash) {
741
+ GET_ARGS(1);
742
+ READ_HANDLE(wz::WzFile*, file, args[0]);
743
+ RETURN_UINT32(file->VersionHash());
744
+ }
745
+
746
+ FN(FileObjectFromPath) {
747
+ GET_ARGS(3);
748
+ READ_HANDLE(wz::WzFile*, file, args[0]);
749
+ READ_STRING(path, args[1]);
750
+ READ_BOOL(check_first_directory_name, args[2]);
751
+ auto* obj = file->GetObjectFromPath(path, check_first_directory_name);
752
+ return NullableObject(env, obj);
753
+ }
754
+
755
+ FN(DirName) {
756
+ GET_ARGS(1);
757
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
758
+ RETURN_STRING(dir->Name());
759
+ }
760
+
761
+ FN(DirCountImages) {
762
+ GET_ARGS(1);
763
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
764
+ RETURN_INT(static_cast<int>(dir->WzImages().size()));
765
+ }
766
+
767
+ FN(DirCountDirectories) {
768
+ GET_ARGS(1);
769
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
770
+ RETURN_INT(static_cast<int>(dir->WzDirectories().size()));
771
+ }
772
+
773
+ FN(DirCountImagesTotal) {
774
+ GET_ARGS(1);
775
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
776
+ RETURN_INT(dir->CountImages());
777
+ }
778
+
779
+ FN(DirGetImage) {
780
+ GET_ARGS(2);
781
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
782
+ READ_INT(index, args[1]);
783
+ auto images = dir->WzImages();
784
+ if (index < 0 || index >= static_cast<int>(images.size())) RETURN_NULL();
785
+ return NullableHandle(env, images[static_cast<size_t>(index)]);
786
+ }
787
+
788
+ FN(DirGetImageByName) {
789
+ GET_ARGS(2);
790
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
791
+ READ_STRING(name, args[1]);
792
+ return NullableHandle(env, dir->GetImageByName(name));
793
+ }
794
+
795
+ FN(DirGetDirectory) {
796
+ GET_ARGS(2);
797
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
798
+ READ_INT(index, args[1]);
799
+ auto dirs = dir->WzDirectories();
800
+ if (index < 0 || index >= static_cast<int>(dirs.size())) RETURN_NULL();
801
+ return NullableHandle(env, dirs[static_cast<size_t>(index)]);
802
+ }
803
+
804
+ FN(DirGetDirectoryByName) {
805
+ GET_ARGS(2);
806
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
807
+ READ_STRING(name, args[1]);
808
+ return NullableHandle(env, dir->GetDirectoryByName(name));
809
+ }
810
+
811
+ FN(DirCreateDirectory) {
812
+ GET_ARGS(2);
813
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
814
+ READ_STRING(name, args[1]);
815
+ auto result = dir->CreateDirectory(name);
816
+ if (!CheckResult(env, result)) return nullptr;
817
+ return ToHandle(env, result.value());
818
+ }
819
+
820
+ FN(DirCreateImage) {
821
+ GET_ARGS(2);
822
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
823
+ READ_STRING(name, args[1]);
824
+ auto result = dir->CreateImage(name);
825
+ if (!CheckResult(env, result)) return nullptr;
826
+ return ToHandle(env, result.value());
827
+ }
828
+
829
+ FN(DirRemoveDirectory) {
830
+ GET_ARGS(2);
831
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
832
+ READ_HANDLE(wz::WzDirectory*, child, args[1]);
833
+ auto result = dir->RemoveDirectory(child);
834
+ if (!CheckResult(env, result)) return nullptr;
835
+ (void)result.value().release();
836
+ RETURN_UNDEFINED();
837
+ }
838
+
839
+ FN(DirRemoveImage) {
840
+ GET_ARGS(2);
841
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
842
+ READ_HANDLE(wz::WzImage*, image, args[1]);
843
+ auto result = dir->RemoveImage(image);
844
+ if (!CheckResult(env, result)) return nullptr;
845
+ (void)result.value().release();
846
+ RETURN_UNDEFINED();
847
+ }
848
+
849
+ FN(DirBlockSize) {
850
+ GET_ARGS(1);
851
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
852
+ RETURN_INT(dir->BlockSize());
853
+ }
854
+
855
+ FN(DirChecksum) {
856
+ GET_ARGS(1);
857
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
858
+ RETURN_INT(dir->Checksum());
859
+ }
860
+
861
+ FN(DirOffset) {
862
+ GET_ARGS(1);
863
+ READ_HANDLE(wz::WzDirectory*, dir, args[0]);
864
+ RETURN_BIGINT(dir->Offset());
865
+ }
866
+
867
+ FN(ImageName) {
868
+ GET_ARGS(1);
869
+ READ_HANDLE(wz::WzImage*, image, args[0]);
870
+ RETURN_STRING(image->Name());
871
+ }
872
+
873
+ FN(ImageParsed) {
874
+ GET_ARGS(1);
875
+ READ_HANDLE(wz::WzImage*, image, args[0]);
876
+ RETURN_BOOL(image->Parsed());
877
+ }
878
+
879
+ FN(ImageChanged) {
880
+ GET_ARGS(1);
881
+ READ_HANDLE(wz::WzImage*, image, args[0]);
882
+ RETURN_BOOL(image->Changed());
883
+ }
884
+
885
+ FN(ImageBlockSize) {
886
+ GET_ARGS(1);
887
+ READ_HANDLE(wz::WzImage*, image, args[0]);
888
+ RETURN_INT(image->BlockSize());
889
+ }
890
+
891
+ FN(ImageChecksum) {
892
+ GET_ARGS(1);
893
+ READ_HANDLE(wz::WzImage*, image, args[0]);
894
+ RETURN_INT(image->Checksum());
895
+ }
896
+
897
+ FN(ImageOffset) {
898
+ GET_ARGS(1);
899
+ READ_HANDLE(wz::WzImage*, image, args[0]);
900
+ RETURN_BIGINT(image->Offset());
901
+ }
902
+
903
+ FN(ImageIsLua) {
904
+ GET_ARGS(1);
905
+ READ_HANDLE(wz::WzImage*, image, args[0]);
906
+ RETURN_BOOL(image->IsLuaWzImage());
907
+ }
908
+
909
+ FN(ImageParse) {
910
+ GET_ARGS(1);
911
+ READ_HANDLE(wz::WzImage*, image, args[0]);
912
+ auto result = image->ParseImage();
913
+ if (!CheckResult(env, result)) return nullptr;
914
+ RETURN_UNDEFINED();
915
+ }
916
+
917
+ FN(ImageCountProperties) {
918
+ GET_ARGS(1);
919
+ READ_HANDLE(wz::WzImage*, image, args[0]);
920
+ RETURN_INT(static_cast<int>(image->WzProperties()->size()));
921
+ }
922
+
923
+ FN(ImageGetProperty) {
924
+ GET_ARGS(2);
925
+ READ_HANDLE(wz::WzImage*, image, args[0]);
926
+ READ_INT(index, args[1]);
927
+ auto* props = image->WzProperties();
928
+ if (index < 0 || index >= static_cast<int>(props->size())) RETURN_NULL();
929
+ return ToHandle(env, (*props)[static_cast<size_t>(index)]);
930
+ }
931
+
932
+ FN(ImageGetFromPath) {
933
+ GET_ARGS(2);
934
+ READ_HANDLE(wz::WzImage*, image, args[0]);
935
+ READ_STRING(path, args[1]);
936
+ return NullableHandle(env, image->GetFromPath(path));
937
+ }
938
+
939
+ FN(ImageAddProperty) {
940
+ GET_ARGS(2);
941
+ READ_HANDLE(wz::WzImage*, image, args[0]);
942
+ READ_HANDLE(wz::WzImageProperty*, prop, args[1]);
943
+ auto result = image->AddProperty(prop);
944
+ if (!CheckResult(env, result)) return nullptr;
945
+ RETURN_UNDEFINED();
946
+ }
947
+
948
+ FN(ImageRemoveProperty) {
949
+ GET_ARGS(2);
950
+ READ_HANDLE(wz::WzImage*, image, args[0]);
951
+ READ_HANDLE(wz::WzImageProperty*, prop, args[1]);
952
+ auto result = image->RemoveProperty(prop);
953
+ if (!CheckResult(env, result)) return nullptr;
954
+ (void)result.value().release();
955
+ RETURN_UNDEFINED();
956
+ }
957
+
958
+ FN(ImageClearProperties) {
959
+ GET_ARGS(1);
960
+ READ_HANDLE(wz::WzImage*, image, args[0]);
961
+ auto result = image->ClearProperties();
962
+ if (!CheckResult(env, result)) return nullptr;
963
+ RETURN_UNDEFINED();
964
+ }
965
+
966
+ FN(ObjectType) {
967
+ GET_ARGS(1);
968
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
969
+ RETURN_INT(static_cast<int>(obj->ObjectType()));
970
+ }
971
+
972
+ FN(ObjectName) {
973
+ GET_ARGS(1);
974
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
975
+ RETURN_STRING(obj->Name());
976
+ }
977
+
978
+ FN(ObjectParent) {
979
+ GET_ARGS(1);
980
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
981
+ return NullableObject(env, obj->Parent());
982
+ }
983
+
984
+ FN(ObjectFullPath) {
985
+ GET_ARGS(1);
986
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
987
+ RETURN_STRING(obj->FullPath());
988
+ }
989
+
990
+ FN(ObjectWzFileParent) {
991
+ GET_ARGS(1);
992
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
993
+ return NullableHandle(env, obj->WzFileParent());
994
+ }
995
+
996
+ FN(ObjectTopMostDirectory) {
997
+ GET_ARGS(1);
998
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
999
+ return NullableObject(env, obj->GetTopMostWzDirectory());
1000
+ }
1001
+
1002
+ FN(ObjectTopMostImage) {
1003
+ GET_ARGS(1);
1004
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
1005
+ return NullableObject(env, obj->GetTopMostWzImage());
1006
+ }
1007
+
1008
+ FN(ObjectAt) {
1009
+ GET_ARGS(2);
1010
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
1011
+ READ_STRING(name, args[1]);
1012
+ if (obj->ObjectType() == wz::WzObjectType::Image) {
1013
+ auto result = static_cast<wz::WzImage*>(obj)->GetPropertyByName(name);
1014
+ if (!CheckResult(env, result)) return nullptr;
1015
+ return NullableObject(env, result.value());
1016
+ }
1017
+ return NullableObject(env, (*obj)[name]);
1018
+ }
1019
+
1020
+ FN(ObjectSetName) {
1021
+ GET_ARGS(2);
1022
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
1023
+ READ_STRING(name, args[1]);
1024
+ auto result = obj->Rename(name);
1025
+ if (!CheckResult(env, result)) return nullptr;
1026
+ RETURN_UNDEFINED();
1027
+ }
1028
+
1029
+ FN(ObjectRemove) {
1030
+ GET_ARGS(1);
1031
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
1032
+ auto result = obj->Remove();
1033
+ if (!CheckResult(env, result)) return nullptr;
1034
+ (void)result.value().release();
1035
+ RETURN_UNDEFINED();
1036
+ }
1037
+
1038
+ FN(ObjectFree) {
1039
+ GET_ARGS(1);
1040
+ READ_HANDLE(wz::WzObject*, obj, args[0]);
1041
+ if (!CheckNotNull(env, obj, "objectFree")) return nullptr;
1042
+ if (obj->Parent()) {
1043
+ NODE_API_THROW(env, "objectFree: object is owned by a WZ tree");
1044
+ }
1045
+ if (obj->ObjectType() == wz::WzObjectType::File) {
1046
+ NODE_API_THROW(env, "objectFree: use closeFile for WZ files");
1047
+ }
1048
+ delete obj;
1049
+ RETURN_UNDEFINED();
1050
+ }
1051
+
1052
+ FN(PropType) {
1053
+ GET_ARGS(1);
1054
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1055
+ RETURN_INT(static_cast<int>(prop->PropertyType()));
1056
+ }
1057
+
1058
+ FN(PropIsRaw) {
1059
+ GET_ARGS(1);
1060
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1061
+ RETURN_BOOL(prop->IsRawDataProperty());
1062
+ }
1063
+
1064
+ FN(PropIsVideo) {
1065
+ GET_ARGS(1);
1066
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1067
+ RETURN_BOOL(prop->IsVideoProperty());
1068
+ }
1069
+
1070
+ FN(PropName) {
1071
+ GET_ARGS(1);
1072
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1073
+ RETURN_STRING(prop->Name());
1074
+ }
1075
+
1076
+ FN(PropCountChildren) {
1077
+ GET_ARGS(1);
1078
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1079
+ auto* props = prop->WzProperties();
1080
+ RETURN_INT(props ? static_cast<int>(props->size()) : 0);
1081
+ }
1082
+
1083
+ FN(PropGetChild) {
1084
+ GET_ARGS(2);
1085
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1086
+ READ_INT(index, args[1]);
1087
+ auto* props = prop->WzProperties();
1088
+ if (!props) RETURN_NULL();
1089
+ if (index < 0 || index >= static_cast<int>(props->size())) RETURN_NULL();
1090
+ return ToHandle(env, (*props)[static_cast<size_t>(index)]);
1091
+ }
1092
+
1093
+ FN(PropGetChildByName) {
1094
+ GET_ARGS(2);
1095
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1096
+ READ_STRING(name, args[1]);
1097
+ auto* props = prop->WzProperties();
1098
+ if (!props) RETURN_NULL();
1099
+ for (auto* child : *props) {
1100
+ if (child && child->Name() == name) return ToHandle(env, child);
1101
+ }
1102
+ RETURN_NULL();
1103
+ }
1104
+
1105
+ FN(PropGetFromPath) {
1106
+ GET_ARGS(2);
1107
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1108
+ READ_STRING(path, args[1]);
1109
+ return NullableHandle(env, prop->GetFromPath(path));
1110
+ }
1111
+
1112
+ FN(PropLinked) {
1113
+ GET_ARGS(1);
1114
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1115
+ return NullableHandle(env, prop->GetLinkedWzImageProperty());
1116
+ }
1117
+
1118
+ FN(PropGetInt) {
1119
+ GET_ARGS(1);
1120
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1121
+ RETURN_INT(prop->GetInt());
1122
+ }
1123
+
1124
+ FN(PropGetShort) {
1125
+ GET_ARGS(1);
1126
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1127
+ RETURN_INT(prop->GetShort());
1128
+ }
1129
+
1130
+ FN(PropGetLong) {
1131
+ GET_ARGS(1);
1132
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1133
+ RETURN_BIGINT(prop->GetLong());
1134
+ }
1135
+
1136
+ FN(PropGetFloat) {
1137
+ GET_ARGS(1);
1138
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1139
+ RETURN_DOUBLE(prop->GetFloat());
1140
+ }
1141
+
1142
+ FN(PropGetDouble) {
1143
+ GET_ARGS(1);
1144
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1145
+ RETURN_DOUBLE(prop->GetDouble());
1146
+ }
1147
+
1148
+ FN(PropGetString) {
1149
+ GET_ARGS(1);
1150
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1151
+ RETURN_STRING(prop->GetString());
1152
+ }
1153
+
1154
+ FN(PropGetBytes) {
1155
+ GET_ARGS(1);
1156
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1157
+ auto result = prop->GetBytes();
1158
+ if (!CheckResult(env, result)) return nullptr;
1159
+ return Bytes(env, result.value());
1160
+ }
1161
+
1162
+ FN(PropertyValue) {
1163
+ GET_ARGS(1);
1164
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1165
+ if (!CheckNotNull(env, prop, "propertyValue")) return nullptr;
1166
+ switch (prop->PropertyType()) {
1167
+ case wz::WzPropertyType::Short:
1168
+ RETURN_INT(static_cast<wz::WzShortProperty*>(prop)->Value());
1169
+ case wz::WzPropertyType::Int:
1170
+ RETURN_INT(static_cast<wz::WzIntProperty*>(prop)->Value());
1171
+ case wz::WzPropertyType::Long:
1172
+ RETURN_BIGINT(static_cast<wz::WzLongProperty*>(prop)->Value());
1173
+ case wz::WzPropertyType::Float:
1174
+ RETURN_DOUBLE(static_cast<wz::WzFloatProperty*>(prop)->Value());
1175
+ case wz::WzPropertyType::Double:
1176
+ RETURN_DOUBLE(static_cast<wz::WzDoubleProperty*>(prop)->Value());
1177
+ case wz::WzPropertyType::String:
1178
+ RETURN_STRING(static_cast<wz::WzStringProperty*>(prop)->Value());
1179
+ case wz::WzPropertyType::UOL:
1180
+ RETURN_STRING(static_cast<wz::WzUOLProperty*>(prop)->Value());
1181
+ default:
1182
+ NODE_API_THROW(env, "propertyValue: wrong property type");
1183
+ }
1184
+ }
1185
+
1186
+ FN(PropertySetValue) {
1187
+ GET_ARGS(2);
1188
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1189
+ if (!CheckNotNull(env, prop, "propertySetValue")) return nullptr;
1190
+ switch (prop->PropertyType()) {
1191
+ case wz::WzPropertyType::Short: {
1192
+ READ_INT(value, args[1]);
1193
+ static_cast<wz::WzShortProperty*>(prop)->SetValue(
1194
+ static_cast<int16_t>(value));
1195
+ RETURN_UNDEFINED();
1196
+ }
1197
+ case wz::WzPropertyType::Int: {
1198
+ READ_INT(value, args[1]);
1199
+ static_cast<wz::WzIntProperty*>(prop)->SetValue(value);
1200
+ RETURN_UNDEFINED();
1201
+ }
1202
+ case wz::WzPropertyType::Long: {
1203
+ int64_t value = 0;
1204
+ if (!ReadInt64(env, args[1], &value)) return nullptr;
1205
+ static_cast<wz::WzLongProperty*>(prop)->SetValue(value);
1206
+ RETURN_UNDEFINED();
1207
+ }
1208
+ case wz::WzPropertyType::Float: {
1209
+ READ_DOUBLE(value, args[1]);
1210
+ static_cast<wz::WzFloatProperty*>(prop)->SetValue(
1211
+ static_cast<float>(value));
1212
+ RETURN_UNDEFINED();
1213
+ }
1214
+ case wz::WzPropertyType::Double: {
1215
+ READ_DOUBLE(value, args[1]);
1216
+ static_cast<wz::WzDoubleProperty*>(prop)->SetValue(value);
1217
+ RETURN_UNDEFINED();
1218
+ }
1219
+ case wz::WzPropertyType::String: {
1220
+ READ_STRING(value, args[1]);
1221
+ static_cast<wz::WzStringProperty*>(prop)->SetValue(value);
1222
+ RETURN_UNDEFINED();
1223
+ }
1224
+ case wz::WzPropertyType::UOL: {
1225
+ READ_STRING(value, args[1]);
1226
+ static_cast<wz::WzUOLProperty*>(prop)->SetValue(value);
1227
+ RETURN_UNDEFINED();
1228
+ }
1229
+ default:
1230
+ NODE_API_THROW(env, "propertySetValue: wrong property type");
1231
+ }
1232
+ }
1233
+
1234
+ FN(PropertyFree) {
1235
+ GET_ARGS(1);
1236
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1237
+ if (!CheckNotNull(env, prop, "propertyFree")) return nullptr;
1238
+ if (prop->Parent()) {
1239
+ NODE_API_THROW(env, "propertyFree: property is owned by a WZ tree");
1240
+ }
1241
+ delete prop;
1242
+ RETURN_UNDEFINED();
1243
+ }
1244
+
1245
+ FN(PropertyAddChild) {
1246
+ GET_ARGS(2);
1247
+ READ_HANDLE(wz::WzImageProperty*, parent, args[0]);
1248
+ READ_HANDLE(wz::WzImageProperty*, child, args[1]);
1249
+ if (!IsMutablePropertyContainer(parent)) {
1250
+ NODE_API_THROW(env, "propertyAddChild: wrong property type");
1251
+ }
1252
+ auto result = parent->AddProperty(child);
1253
+ if (!CheckResult(env, result)) return nullptr;
1254
+ RETURN_UNDEFINED();
1255
+ }
1256
+
1257
+ FN(PropertyRemoveChild) {
1258
+ GET_ARGS(2);
1259
+ READ_HANDLE(wz::WzImageProperty*, parent, args[0]);
1260
+ READ_HANDLE(wz::WzImageProperty*, child, args[1]);
1261
+ if (!IsMutablePropertyContainer(parent)) {
1262
+ NODE_API_THROW(env, "propertyRemoveChild: wrong property type");
1263
+ }
1264
+ auto result = parent->RemoveProperty(child);
1265
+ if (!CheckResult(env, result)) return nullptr;
1266
+ (void)result.value().release();
1267
+ RETURN_UNDEFINED();
1268
+ }
1269
+
1270
+ FN(PropertyClearChildren) {
1271
+ GET_ARGS(1);
1272
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1273
+ if (!IsMutablePropertyContainer(prop)) {
1274
+ NODE_API_THROW(env, "propertyClearChildren: wrong property type");
1275
+ }
1276
+ auto result = prop->ClearProperties();
1277
+ if (!CheckResult(env, result)) return nullptr;
1278
+ RETURN_UNDEFINED();
1279
+ }
1280
+
1281
+ FN(CreatePropertyNull) {
1282
+ GET_ARGS(1);
1283
+ READ_STRING(name, args[0]);
1284
+ return ToHandle(env, new wz::WzNullProperty(name));
1285
+ }
1286
+
1287
+ FN(CreatePropertyShort) {
1288
+ GET_ARGS(2);
1289
+ READ_STRING(name, args[0]);
1290
+ READ_INT(value, args[1]);
1291
+ return ToHandle(env,
1292
+ new wz::WzShortProperty(name, static_cast<int16_t>(value)));
1293
+ }
1294
+
1295
+ FN(CreatePropertyInt) {
1296
+ GET_ARGS(2);
1297
+ READ_STRING(name, args[0]);
1298
+ READ_INT(value, args[1]);
1299
+ return ToHandle(env, new wz::WzIntProperty(name, value));
1300
+ }
1301
+
1302
+ FN(CreatePropertyLong) {
1303
+ GET_ARGS(2);
1304
+ READ_STRING(name, args[0]);
1305
+ int64_t value = 0;
1306
+ if (!ReadInt64(env, args[1], &value)) return nullptr;
1307
+ return ToHandle(env, new wz::WzLongProperty(name, value));
1308
+ }
1309
+
1310
+ FN(CreatePropertyFloat) {
1311
+ GET_ARGS(2);
1312
+ READ_STRING(name, args[0]);
1313
+ READ_DOUBLE(value, args[1]);
1314
+ return ToHandle(env,
1315
+ new wz::WzFloatProperty(name, static_cast<float>(value)));
1316
+ }
1317
+
1318
+ FN(CreatePropertyDouble) {
1319
+ GET_ARGS(2);
1320
+ READ_STRING(name, args[0]);
1321
+ READ_DOUBLE(value, args[1]);
1322
+ return ToHandle(env, new wz::WzDoubleProperty(name, value));
1323
+ }
1324
+
1325
+ FN(CreatePropertyString) {
1326
+ GET_ARGS(2);
1327
+ READ_STRING(name, args[0]);
1328
+ READ_STRING(value, args[1]);
1329
+ return ToHandle(env, new wz::WzStringProperty(name, value));
1330
+ }
1331
+
1332
+ FN(CreatePropertySub) {
1333
+ GET_ARGS(1);
1334
+ READ_STRING(name, args[0]);
1335
+ return ToHandle(env, new wz::WzSubProperty(name));
1336
+ }
1337
+
1338
+ FN(CreatePropertyVector) {
1339
+ GET_ARGS(3);
1340
+ READ_STRING(name, args[0]);
1341
+ READ_INT(x, args[1]);
1342
+ READ_INT(y, args[2]);
1343
+ return ToHandle(env, new wz::WzVectorProperty(name, x, y));
1344
+ }
1345
+
1346
+ FN(CreatePropertyUol) {
1347
+ GET_ARGS(2);
1348
+ READ_STRING(name, args[0]);
1349
+ READ_STRING(value, args[1]);
1350
+ return ToHandle(env, new wz::WzUOLProperty(name, value));
1351
+ }
1352
+
1353
+ FN(CreatePropertyCanvasFromPng) {
1354
+ GET_ARGS(2);
1355
+ READ_STRING(name, args[0]);
1356
+ READ_STRING(path, args[1]);
1357
+ auto png = wz::WzPngProperty::FromPngFile(path);
1358
+ if (!CheckResult(env, png)) return nullptr;
1359
+ auto canvas = std::make_unique<wz::WzCanvasProperty>(name);
1360
+ canvas->SetPngProperty(std::move(png.value()));
1361
+ auto addOrigin =
1362
+ canvas->AddProperty(std::make_unique<wz::WzVectorProperty>("origin", 0, 0));
1363
+ if (!CheckResult(env, addOrigin)) return nullptr;
1364
+ return ToHandle(env, canvas.release());
1365
+ }
1366
+
1367
+ template <typename T>
1368
+ T* TypedProp(napi_env env,
1369
+ napi_value value,
1370
+ wz::WzPropertyType type,
1371
+ const char* name) {
1372
+ wz::WzImageProperty* prop = nullptr;
1373
+ if (!ReadHandle<wz::WzImageProperty*>(env, value, &prop)) return nullptr;
1374
+ return CheckPropertyType(env, prop, type, name) ? static_cast<T*>(prop)
1375
+ : nullptr;
1376
+ }
1377
+
1378
+ FN(CanvasPng) {
1379
+ GET_ARGS(1);
1380
+ auto* prop = TypedProp<wz::WzCanvasProperty>(
1381
+ env, args[0], wz::WzPropertyType::Canvas, "canvasPng");
1382
+ if (!prop) return nullptr;
1383
+ return NullableHandle(env, prop->PngProperty());
1384
+ }
1385
+
1386
+ FN(CanvasContainsInlink) {
1387
+ GET_ARGS(1);
1388
+ auto* prop = TypedProp<wz::WzCanvasProperty>(
1389
+ env, args[0], wz::WzPropertyType::Canvas, "canvasContainsInlink");
1390
+ if (!prop) return nullptr;
1391
+ RETURN_BOOL(prop->ContainsInlinkProperty());
1392
+ }
1393
+
1394
+ FN(CanvasContainsOutlink) {
1395
+ GET_ARGS(1);
1396
+ auto* prop = TypedProp<wz::WzCanvasProperty>(
1397
+ env, args[0], wz::WzPropertyType::Canvas, "canvasContainsOutlink");
1398
+ if (!prop) return nullptr;
1399
+ RETURN_BOOL(prop->ContainsOutlinkProperty());
1400
+ }
1401
+
1402
+ FN(CanvasLinked) {
1403
+ GET_ARGS(1);
1404
+ auto* prop = TypedProp<wz::WzCanvasProperty>(
1405
+ env, args[0], wz::WzPropertyType::Canvas, "canvasLinked");
1406
+ if (!prop) return nullptr;
1407
+ auto result = prop->GetLinkedWzImageProperty();
1408
+ if (!CheckResult(env, result)) return nullptr;
1409
+ return NullableHandle(env, result.value());
1410
+ }
1411
+
1412
+ FN(CanvasSaveToFile) {
1413
+ GET_ARGS(2);
1414
+ auto* prop = TypedProp<wz::WzCanvasProperty>(
1415
+ env, args[0], wz::WzPropertyType::Canvas, "canvasSaveToFile");
1416
+ if (!prop) return nullptr;
1417
+ READ_STRING(path, args[1]);
1418
+ auto result = prop->SaveToFile(path);
1419
+ if (!CheckResult(env, result)) return nullptr;
1420
+ RETURN_BOOL(true);
1421
+ }
1422
+
1423
+ FN(PngWidth) {
1424
+ GET_ARGS(1);
1425
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1426
+ RETURN_INT(png->Width());
1427
+ }
1428
+
1429
+ FN(PngHeight) {
1430
+ GET_ARGS(1);
1431
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1432
+ RETURN_INT(png->Height());
1433
+ }
1434
+
1435
+ FN(PngFormat) {
1436
+ GET_ARGS(1);
1437
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1438
+ RETURN_INT(static_cast<int>(png->Format()));
1439
+ }
1440
+
1441
+ FN(PngListWzUsed) {
1442
+ GET_ARGS(1);
1443
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1444
+ RETURN_BOOL(png->ListWzUsed());
1445
+ }
1446
+
1447
+ FN(PngImage) {
1448
+ GET_ARGS(1);
1449
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1450
+ auto result = png->GetImage(false);
1451
+ if (!CheckResult(env, result)) return nullptr;
1452
+ return Bytes(env, result.value());
1453
+ }
1454
+
1455
+ FN(PngCompressedBytes) {
1456
+ GET_ARGS(1);
1457
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1458
+ auto result = png->GetCompressedBytes(false);
1459
+ if (!CheckResult(env, result)) return nullptr;
1460
+ return Bytes(env, result.value());
1461
+ }
1462
+
1463
+ FN(PngSaveToFile) {
1464
+ GET_ARGS(2);
1465
+ READ_HANDLE(wz::WzPngProperty*, png, args[0]);
1466
+ READ_STRING(path, args[1]);
1467
+ auto result = png->SaveToFile(path);
1468
+ if (!CheckResult(env, result)) return nullptr;
1469
+ RETURN_BOOL(true);
1470
+ }
1471
+
1472
+ FN(VectorX) {
1473
+ GET_ARGS(1);
1474
+ auto* prop = TypedProp<wz::WzVectorProperty>(
1475
+ env, args[0], wz::WzPropertyType::Vector, "vectorX");
1476
+ if (!prop) return nullptr;
1477
+ RETURN_INT(prop->X ? prop->X->Value() : 0);
1478
+ }
1479
+
1480
+ FN(VectorY) {
1481
+ GET_ARGS(1);
1482
+ auto* prop = TypedProp<wz::WzVectorProperty>(
1483
+ env, args[0], wz::WzPropertyType::Vector, "vectorY");
1484
+ if (!prop) return nullptr;
1485
+ RETURN_INT(prop->Y ? prop->Y->Value() : 0);
1486
+ }
1487
+
1488
+ FN(BinaryData) {
1489
+ GET_ARGS(1);
1490
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1491
+ env, args[0], wz::WzPropertyType::Sound, "binaryData");
1492
+ if (!prop) return nullptr;
1493
+ auto result = prop->GetBytes(false);
1494
+ if (!CheckResult(env, result)) return nullptr;
1495
+ return Bytes(env, result.value());
1496
+ }
1497
+
1498
+ FN(BinaryWav) {
1499
+ GET_ARGS(1);
1500
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1501
+ env, args[0], wz::WzPropertyType::Sound, "binaryWav");
1502
+ if (!prop) return nullptr;
1503
+ auto result = prop->GetBytesForWAVPlayback(false);
1504
+ if (!CheckResult(env, result)) return nullptr;
1505
+ return Bytes(env, result.value());
1506
+ }
1507
+
1508
+ FN(BinaryLength) {
1509
+ GET_ARGS(1);
1510
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1511
+ env, args[0], wz::WzPropertyType::Sound, "binaryLength");
1512
+ if (!prop) return nullptr;
1513
+ RETURN_INT(prop->Length());
1514
+ }
1515
+
1516
+ FN(BinaryFrequency) {
1517
+ GET_ARGS(1);
1518
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1519
+ env, args[0], wz::WzPropertyType::Sound, "binaryFrequency");
1520
+ if (!prop) return nullptr;
1521
+ RETURN_INT(prop->Frequency());
1522
+ }
1523
+
1524
+ FN(BinaryType) {
1525
+ GET_ARGS(1);
1526
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1527
+ env, args[0], wz::WzPropertyType::Sound, "binaryType");
1528
+ if (!prop) return nullptr;
1529
+ RETURN_INT(static_cast<int>(prop->Type()));
1530
+ }
1531
+
1532
+ FN(BinaryHeaderEncrypted) {
1533
+ GET_ARGS(1);
1534
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1535
+ env, args[0], wz::WzPropertyType::Sound, "binaryHeaderEncrypted");
1536
+ if (!prop) return nullptr;
1537
+ RETURN_BOOL(prop->HeaderEncrypted());
1538
+ }
1539
+
1540
+ FN(BinarySaveToFile) {
1541
+ GET_ARGS(2);
1542
+ auto* prop = TypedProp<wz::WzBinaryProperty>(
1543
+ env, args[0], wz::WzPropertyType::Sound, "binarySaveToFile");
1544
+ if (!prop) return nullptr;
1545
+ READ_STRING(path, args[1]);
1546
+ auto result = prop->SaveToFile(path);
1547
+ if (!CheckResult(env, result)) return nullptr;
1548
+ RETURN_BOOL(true);
1549
+ }
1550
+
1551
+ FN(RawData) {
1552
+ GET_ARGS(1);
1553
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1554
+ if (!prop || !prop->IsRawDataProperty()) {
1555
+ NODE_API_THROW(env, "rawData: wrong property type");
1556
+ }
1557
+ auto result = static_cast<wz::WzRawDataProperty*>(prop)->GetBytes(false);
1558
+ if (!CheckResult(env, result)) return nullptr;
1559
+ return Bytes(env, result.value());
1560
+ }
1561
+
1562
+ FN(RawType) {
1563
+ GET_ARGS(1);
1564
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1565
+ if (!prop || !prop->IsRawDataProperty()) {
1566
+ NODE_API_THROW(env, "rawType: wrong property type");
1567
+ }
1568
+ RETURN_INT(static_cast<wz::WzRawDataProperty*>(prop)->Type());
1569
+ }
1570
+
1571
+ FN(VideoData) {
1572
+ GET_ARGS(1);
1573
+ READ_HANDLE(wz::WzImageProperty*, prop, args[0]);
1574
+ if (!prop || !prop->IsVideoProperty()) {
1575
+ NODE_API_THROW(env, "videoData: wrong property type");
1576
+ }
1577
+ auto result = static_cast<wz::WzVideoProperty*>(prop)->GetBytes(false);
1578
+ if (!CheckResult(env, result)) return nullptr;
1579
+ return Bytes(env, result.value());
1580
+ }
1581
+
1582
+ FN(UolLinkValue) {
1583
+ GET_ARGS(1);
1584
+ auto* prop = TypedProp<wz::WzUOLProperty>(
1585
+ env, args[0], wz::WzPropertyType::UOL, "uolLinkValue");
1586
+ if (!prop) return nullptr;
1587
+ return NullableObject(env, prop->LinkValue());
1588
+ }
1589
+
1590
+ FN(LuaData) {
1591
+ GET_ARGS(1);
1592
+ auto* prop = TypedProp<wz::WzLuaProperty>(
1593
+ env, args[0], wz::WzPropertyType::Lua, "luaData");
1594
+ if (!prop) return nullptr;
1595
+ return Bytes(env, prop->Value());
1596
+ }
1597
+
1598
+ FN(LuaString) {
1599
+ GET_ARGS(1);
1600
+ auto* prop = TypedProp<wz::WzLuaProperty>(
1601
+ env, args[0], wz::WzPropertyType::Lua, "luaString");
1602
+ if (!prop) return nullptr;
1603
+ RETURN_STRING(prop->GetString());
1604
+ }
1605
+
1606
+ FN(DetectMapleVersion) {
1607
+ GET_ARGS(1);
1608
+ READ_STRING(path, args[0]);
1609
+ int16_t version = 0;
1610
+ auto maple_version = wz::WzTool::DetectMapleVersion(path, &version);
1611
+ napi_value result = nullptr;
1612
+ NODE_API_CALL(
1613
+ env, napi_create_object(env, &result), "failed to create version result");
1614
+ napi_value maple_version_value = nullptr;
1615
+ NODE_API_CALL(env,
1616
+ napi_create_int32(
1617
+ env, static_cast<int>(maple_version), &maple_version_value),
1618
+ "failed to create maple version value");
1619
+ NODE_API_CALL(
1620
+ env,
1621
+ napi_set_named_property(env, result, "mapleVersion", maple_version_value),
1622
+ "failed to set mapleVersion");
1623
+ napi_value version_value = nullptr;
1624
+ NODE_API_CALL(env,
1625
+ napi_create_int32(env, version, &version_value),
1626
+ "failed to create file version value");
1627
+ NODE_API_CALL(env,
1628
+ napi_set_named_property(env, result, "version", version_value),
1629
+ "failed to set version");
1630
+ return result;
1631
+ }
1632
+
1633
+ FN(IvForVersion) {
1634
+ GET_ARGS(1);
1635
+ READ_INT(version, args[0]);
1636
+ auto iv =
1637
+ wz::WzTool::GetIvByMapleVersion(static_cast<wz::WzMapleVersion>(version));
1638
+ return Bytes(env, std::vector<uint8_t>(iv.begin(), iv.end()));
1639
+ }
1640
+
1641
+ #define WZ_EXPORT_FN(name, fn) \
1642
+ {name, nullptr, fn, nullptr, nullptr, nullptr, napi_default, nullptr}
1643
+
1644
+ NAPI_MODULE_INIT() {
1645
+ const napi_property_descriptor descriptors[] = {
1646
+ WZ_EXPORT_FN("openFile", OpenFile),
1647
+ WZ_EXPORT_FN("openMemory", OpenMemory),
1648
+ WZ_EXPORT_FN("openImage", OpenImage),
1649
+ WZ_EXPORT_FN("openBlobSource", OpenBlobSource),
1650
+ WZ_EXPORT_FN("createFile", CreateFile),
1651
+ WZ_EXPORT_FN("parseFile", ParseFile),
1652
+ WZ_EXPORT_FN("closeFile", CloseFile),
1653
+ WZ_EXPORT_FN("fileSaveToDisk", FileSaveToDisk),
1654
+ WZ_EXPORT_FN("fileName", FileName),
1655
+ WZ_EXPORT_FN("filePath", FilePath),
1656
+ WZ_EXPORT_FN("fileVersion", FileVersion),
1657
+ WZ_EXPORT_FN("fileMapleVersion", FileMapleVersion),
1658
+ WZ_EXPORT_FN("fileWzDirectory", FileWzDirectory),
1659
+ WZ_EXPORT_FN("fileIs64Bit", FileIs64Bit),
1660
+ WZ_EXPORT_FN("fileIsUnloaded", FileIsUnloaded),
1661
+ WZ_EXPORT_FN("fileVersionHash", FileVersionHash),
1662
+ WZ_EXPORT_FN("fileObjectFromPath", FileObjectFromPath),
1663
+ WZ_EXPORT_FN("dirName", DirName),
1664
+ WZ_EXPORT_FN("dirCountImages", DirCountImages),
1665
+ WZ_EXPORT_FN("dirCountDirectories", DirCountDirectories),
1666
+ WZ_EXPORT_FN("dirCountImagesTotal", DirCountImagesTotal),
1667
+ WZ_EXPORT_FN("dirGetImage", DirGetImage),
1668
+ WZ_EXPORT_FN("dirGetImageByName", DirGetImageByName),
1669
+ WZ_EXPORT_FN("dirGetDirectory", DirGetDirectory),
1670
+ WZ_EXPORT_FN("dirGetDirectoryByName", DirGetDirectoryByName),
1671
+ WZ_EXPORT_FN("dirCreateDirectory", DirCreateDirectory),
1672
+ WZ_EXPORT_FN("dirCreateImage", DirCreateImage),
1673
+ WZ_EXPORT_FN("dirRemoveDirectory", DirRemoveDirectory),
1674
+ WZ_EXPORT_FN("dirRemoveImage", DirRemoveImage),
1675
+ WZ_EXPORT_FN("dirBlockSize", DirBlockSize),
1676
+ WZ_EXPORT_FN("dirChecksum", DirChecksum),
1677
+ WZ_EXPORT_FN("dirOffset", DirOffset),
1678
+ WZ_EXPORT_FN("imageName", ImageName),
1679
+ WZ_EXPORT_FN("imageParsed", ImageParsed),
1680
+ WZ_EXPORT_FN("imageChanged", ImageChanged),
1681
+ WZ_EXPORT_FN("imageBlockSize", ImageBlockSize),
1682
+ WZ_EXPORT_FN("imageChecksum", ImageChecksum),
1683
+ WZ_EXPORT_FN("imageOffset", ImageOffset),
1684
+ WZ_EXPORT_FN("imageIsLua", ImageIsLua),
1685
+ WZ_EXPORT_FN("imageParse", ImageParse),
1686
+ WZ_EXPORT_FN("imageCountProperties", ImageCountProperties),
1687
+ WZ_EXPORT_FN("imageGetProperty", ImageGetProperty),
1688
+ WZ_EXPORT_FN("imageGetFromPath", ImageGetFromPath),
1689
+ WZ_EXPORT_FN("imageAddProperty", ImageAddProperty),
1690
+ WZ_EXPORT_FN("imageRemoveProperty", ImageRemoveProperty),
1691
+ WZ_EXPORT_FN("imageClearProperties", ImageClearProperties),
1692
+ WZ_EXPORT_FN("objectType", ObjectType),
1693
+ WZ_EXPORT_FN("objectName", ObjectName),
1694
+ WZ_EXPORT_FN("objectParent", ObjectParent),
1695
+ WZ_EXPORT_FN("objectFullPath", ObjectFullPath),
1696
+ WZ_EXPORT_FN("objectWzFileParent", ObjectWzFileParent),
1697
+ WZ_EXPORT_FN("objectTopMostDirectory", ObjectTopMostDirectory),
1698
+ WZ_EXPORT_FN("objectTopMostImage", ObjectTopMostImage),
1699
+ WZ_EXPORT_FN("objectAt", ObjectAt),
1700
+ WZ_EXPORT_FN("objectSetName", ObjectSetName),
1701
+ WZ_EXPORT_FN("objectRemove", ObjectRemove),
1702
+ WZ_EXPORT_FN("objectFree", ObjectFree),
1703
+ WZ_EXPORT_FN("propType", PropType),
1704
+ WZ_EXPORT_FN("propIsRaw", PropIsRaw),
1705
+ WZ_EXPORT_FN("propIsVideo", PropIsVideo),
1706
+ WZ_EXPORT_FN("propName", PropName),
1707
+ WZ_EXPORT_FN("propCountChildren", PropCountChildren),
1708
+ WZ_EXPORT_FN("propGetChild", PropGetChild),
1709
+ WZ_EXPORT_FN("propGetChildByName", PropGetChildByName),
1710
+ WZ_EXPORT_FN("propGetFromPath", PropGetFromPath),
1711
+ WZ_EXPORT_FN("propGetInt", PropGetInt),
1712
+ WZ_EXPORT_FN("propGetShort", PropGetShort),
1713
+ WZ_EXPORT_FN("propGetLong", PropGetLong),
1714
+ WZ_EXPORT_FN("propGetFloat", PropGetFloat),
1715
+ WZ_EXPORT_FN("propGetDouble", PropGetDouble),
1716
+ WZ_EXPORT_FN("propGetString", PropGetString),
1717
+ WZ_EXPORT_FN("propGetBytes", PropGetBytes),
1718
+ WZ_EXPORT_FN("propLinked", PropLinked),
1719
+ WZ_EXPORT_FN("propertyValue", PropertyValue),
1720
+ WZ_EXPORT_FN("propertySetValue", PropertySetValue),
1721
+ WZ_EXPORT_FN("propertyCreateNull", CreatePropertyNull),
1722
+ WZ_EXPORT_FN("propertyCreateShort", CreatePropertyShort),
1723
+ WZ_EXPORT_FN("propertyCreateInt", CreatePropertyInt),
1724
+ WZ_EXPORT_FN("propertyCreateLong", CreatePropertyLong),
1725
+ WZ_EXPORT_FN("propertyCreateFloat", CreatePropertyFloat),
1726
+ WZ_EXPORT_FN("propertyCreateDouble", CreatePropertyDouble),
1727
+ WZ_EXPORT_FN("propertyCreateString", CreatePropertyString),
1728
+ WZ_EXPORT_FN("propertyCreateSub", CreatePropertySub),
1729
+ WZ_EXPORT_FN("propertyCreateVector", CreatePropertyVector),
1730
+ WZ_EXPORT_FN("propertyCreateUol", CreatePropertyUol),
1731
+ WZ_EXPORT_FN("propertyCreateCanvasFromPng", CreatePropertyCanvasFromPng),
1732
+ WZ_EXPORT_FN("propertyFree", PropertyFree),
1733
+ WZ_EXPORT_FN("propertyAddChild", PropertyAddChild),
1734
+ WZ_EXPORT_FN("propertyRemoveChild", PropertyRemoveChild),
1735
+ WZ_EXPORT_FN("propertyClearChildren", PropertyClearChildren),
1736
+ WZ_EXPORT_FN("pngWidth", PngWidth),
1737
+ WZ_EXPORT_FN("pngHeight", PngHeight),
1738
+ WZ_EXPORT_FN("pngFormat", PngFormat),
1739
+ WZ_EXPORT_FN("pngListWzUsed", PngListWzUsed),
1740
+ WZ_EXPORT_FN("pngImage", PngImage),
1741
+ WZ_EXPORT_FN("pngCompressedBytes", PngCompressedBytes),
1742
+ WZ_EXPORT_FN("pngSaveToFile", PngSaveToFile),
1743
+ WZ_EXPORT_FN("canvasPng", CanvasPng),
1744
+ WZ_EXPORT_FN("canvasContainsInlink", CanvasContainsInlink),
1745
+ WZ_EXPORT_FN("canvasContainsOutlink", CanvasContainsOutlink),
1746
+ WZ_EXPORT_FN("canvasLinked", CanvasLinked),
1747
+ WZ_EXPORT_FN("canvasSaveToFile", CanvasSaveToFile),
1748
+ WZ_EXPORT_FN("uolLinkValue", UolLinkValue),
1749
+ WZ_EXPORT_FN("vectorX", VectorX),
1750
+ WZ_EXPORT_FN("vectorY", VectorY),
1751
+ WZ_EXPORT_FN("luaData", LuaData),
1752
+ WZ_EXPORT_FN("luaString", LuaString),
1753
+ WZ_EXPORT_FN("binaryData", BinaryData),
1754
+ WZ_EXPORT_FN("binaryWav", BinaryWav),
1755
+ WZ_EXPORT_FN("binaryLength", BinaryLength),
1756
+ WZ_EXPORT_FN("binaryFrequency", BinaryFrequency),
1757
+ WZ_EXPORT_FN("binaryType", BinaryType),
1758
+ WZ_EXPORT_FN("binaryHeaderEncrypted", BinaryHeaderEncrypted),
1759
+ WZ_EXPORT_FN("binarySaveToFile", BinarySaveToFile),
1760
+ WZ_EXPORT_FN("rawData", RawData),
1761
+ WZ_EXPORT_FN("rawType", RawType),
1762
+ WZ_EXPORT_FN("videoData", VideoData),
1763
+ WZ_EXPORT_FN("detectMapleVersion", DetectMapleVersion),
1764
+ WZ_EXPORT_FN("ivForVersion", IvForVersion),
1765
+ };
1766
+ NODE_API_CALL(
1767
+ env,
1768
+ napi_define_properties(env,
1769
+ exports,
1770
+ sizeof(descriptors) / sizeof(descriptors[0]),
1771
+ descriptors),
1772
+ "failed to define exports");
1773
+ return exports;
1774
+ }
1775
+
1776
+ #undef WZ_EXPORT_FN