neozipkit 0.2.1 → 0.3.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 (301) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +410 -186
  3. package/contracts/ABI.txt +889 -0
  4. package/contracts/Bytecode.txt +1 -0
  5. package/contracts/COMPILATION_NOTES.md +59 -0
  6. package/contracts/QUICK_DEPLOY.md +286 -0
  7. package/contracts/README.md +235 -131
  8. package/contracts/VERIFICATION.md +308 -0
  9. package/contracts/deploy-interactive.js +448 -0
  10. package/contracts/deployment-arbitrum-sepolia.json +12 -0
  11. package/contracts/deployment-arbitrum.json +12 -0
  12. package/contracts/deployment-eth-sepolia.json +12 -0
  13. package/contracts/hardhat.config.js +114 -0
  14. package/contracts/package.json +20 -0
  15. package/contracts/scripts/compile-and-extract.js +119 -0
  16. package/contracts/scripts/verify-contract.js +223 -0
  17. package/contracts/src/{NZIP-NFT-Private.sol → NZIP-NFT-v2.0.sol} +66 -151
  18. package/contracts/src/NZIP-NFT.sol +9 -15
  19. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts +67 -0
  20. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
  21. package/dist/blockchain/browser/TokenVerifierBrowser.js +313 -0
  22. package/dist/blockchain/browser/TokenVerifierBrowser.js.map +1 -0
  23. package/dist/blockchain/browser/WalletManagerBrowser.d.ts +98 -0
  24. package/dist/blockchain/browser/WalletManagerBrowser.d.ts.map +1 -0
  25. package/dist/blockchain/browser/WalletManagerBrowser.js +434 -0
  26. package/dist/blockchain/browser/WalletManagerBrowser.js.map +1 -0
  27. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts +58 -0
  28. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts.map +1 -0
  29. package/dist/blockchain/browser/ZipkitMinterBrowser.js +317 -0
  30. package/dist/blockchain/browser/ZipkitMinterBrowser.js.map +1 -0
  31. package/dist/blockchain/browser/index.d.ts +11 -0
  32. package/dist/blockchain/browser/index.d.ts.map +1 -0
  33. package/dist/blockchain/browser/index.js +16 -0
  34. package/dist/blockchain/browser/index.js.map +1 -0
  35. package/dist/blockchain/core/WalletManager.d.ts +124 -0
  36. package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
  37. package/dist/blockchain/{ZipKitWallet.js → core/WalletManager.js} +157 -177
  38. package/dist/blockchain/core/WalletManager.js.map +1 -0
  39. package/dist/blockchain/{ZipKitMinter.d.ts → core/ZipkitMinter.d.ts} +46 -11
  40. package/dist/blockchain/core/ZipkitMinter.d.ts.map +1 -0
  41. package/dist/blockchain/core/ZipkitMinter.js +548 -0
  42. package/dist/blockchain/core/ZipkitMinter.js.map +1 -0
  43. package/dist/blockchain/{ZipKitOTS.d.ts → core/ZipkitOTS.d.ts} +6 -15
  44. package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
  45. package/dist/blockchain/{ZipKitOTS.js → core/ZipkitOTS.js} +26 -84
  46. package/dist/blockchain/core/ZipkitOTS.js.map +1 -0
  47. package/dist/blockchain/core/ZipkitVerifier.d.ts +177 -0
  48. package/dist/blockchain/core/ZipkitVerifier.d.ts.map +1 -0
  49. package/dist/blockchain/core/ZipkitVerifier.js +632 -0
  50. package/dist/blockchain/core/ZipkitVerifier.js.map +1 -0
  51. package/dist/blockchain/core/contracts.d.ts +83 -0
  52. package/dist/blockchain/core/contracts.d.ts.map +1 -0
  53. package/dist/blockchain/core/contracts.js +341 -0
  54. package/dist/blockchain/core/contracts.js.map +1 -0
  55. package/dist/blockchain/core/index.d.ts +12 -0
  56. package/dist/blockchain/core/index.d.ts.map +1 -0
  57. package/dist/blockchain/core/index.js +59 -0
  58. package/dist/blockchain/core/index.js.map +1 -0
  59. package/dist/blockchain/index.d.ts +11 -7
  60. package/dist/blockchain/index.d.ts.map +1 -0
  61. package/dist/blockchain/index.js +18 -34
  62. package/dist/blockchain/index.js.map +1 -0
  63. package/dist/blockchain/node/WalletManagerNode.d.ts +47 -0
  64. package/dist/blockchain/node/WalletManagerNode.d.ts.map +1 -0
  65. package/dist/blockchain/node/WalletManagerNode.js +203 -0
  66. package/dist/blockchain/node/WalletManagerNode.js.map +1 -0
  67. package/dist/blockchain/node/index.d.ts +12 -0
  68. package/dist/blockchain/node/index.d.ts.map +1 -0
  69. package/dist/blockchain/node/index.js +24 -0
  70. package/dist/blockchain/node/index.js.map +1 -0
  71. package/dist/browser/ZipkitBrowser.d.ts +27 -0
  72. package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
  73. package/dist/browser/{ZipKitBrowser.js → ZipkitBrowser.js} +96 -43
  74. package/dist/browser/ZipkitBrowser.js.map +1 -0
  75. package/dist/browser/index.d.ts +12 -0
  76. package/dist/browser/index.d.ts.map +1 -0
  77. package/dist/browser/index.js +42 -0
  78. package/dist/browser/index.js.map +1 -0
  79. package/dist/browser-esm/index.d.ts +12 -0
  80. package/dist/browser-esm/index.js +59559 -0
  81. package/dist/browser-esm/index.js.map +7 -0
  82. package/dist/browser-umd/index.d.ts +12 -0
  83. package/dist/browser-umd/index.js +59576 -0
  84. package/dist/browser-umd/index.js.map +7 -0
  85. package/dist/browser-umd/index.min.js +63 -0
  86. package/dist/browser.d.ts +8 -14
  87. package/dist/browser.js +13 -28
  88. package/dist/core/ZipCompress.d.ts +99 -0
  89. package/dist/core/ZipCompress.d.ts.map +1 -0
  90. package/dist/core/ZipCompress.js +309 -0
  91. package/dist/core/ZipCompress.js.map +1 -0
  92. package/dist/core/ZipDecompress.d.ts +58 -0
  93. package/dist/core/ZipDecompress.d.ts.map +1 -0
  94. package/dist/core/ZipDecompress.js +172 -0
  95. package/dist/core/ZipDecompress.js.map +1 -0
  96. package/dist/{shared → core}/ZipEntry.d.ts +8 -1
  97. package/dist/core/ZipEntry.d.ts.map +1 -0
  98. package/dist/{shared → core}/ZipEntry.js +225 -82
  99. package/dist/core/ZipEntry.js.map +1 -0
  100. package/dist/core/Zipkit.d.ts +315 -0
  101. package/dist/core/Zipkit.d.ts.map +1 -0
  102. package/dist/core/Zipkit.js +647 -0
  103. package/dist/core/Zipkit.js.map +1 -0
  104. package/dist/core/components/HashCalculator.d.ts +138 -0
  105. package/dist/core/components/HashCalculator.d.ts.map +1 -0
  106. package/dist/core/components/HashCalculator.js +360 -0
  107. package/dist/core/components/HashCalculator.js.map +1 -0
  108. package/dist/core/components/Logger.d.ts +73 -0
  109. package/dist/core/components/Logger.d.ts.map +1 -0
  110. package/dist/core/components/Logger.js +156 -0
  111. package/dist/core/components/Logger.js.map +1 -0
  112. package/dist/core/components/ProgressTracker.d.ts +43 -0
  113. package/dist/core/components/ProgressTracker.d.ts.map +1 -0
  114. package/dist/core/components/ProgressTracker.js +112 -0
  115. package/dist/core/components/ProgressTracker.js.map +1 -0
  116. package/dist/{shared → core}/components/Support.d.ts +1 -0
  117. package/dist/core/components/Support.d.ts.map +1 -0
  118. package/dist/{shared → core}/components/Support.js +1 -0
  119. package/dist/core/components/Support.js.map +1 -0
  120. package/dist/{shared → core}/components/Util.d.ts +7 -2
  121. package/dist/core/components/Util.d.ts.map +1 -0
  122. package/dist/{shared → core}/components/Util.js +14 -34
  123. package/dist/core/components/Util.js.map +1 -0
  124. package/dist/{shared → core}/constants/Errors.d.ts +1 -2
  125. package/dist/core/constants/Errors.d.ts.map +1 -0
  126. package/dist/{shared → core}/constants/Errors.js +1 -3
  127. package/dist/core/constants/Errors.js.map +1 -0
  128. package/dist/{shared → core}/constants/Headers.d.ts +3 -0
  129. package/dist/core/constants/Headers.d.ts.map +1 -0
  130. package/dist/{shared → core}/constants/Headers.js +20 -17
  131. package/dist/core/constants/Headers.js.map +1 -0
  132. package/dist/core/encryption/Manager.d.ts +58 -0
  133. package/dist/core/encryption/Manager.d.ts.map +1 -0
  134. package/dist/core/encryption/Manager.js +121 -0
  135. package/dist/core/encryption/Manager.js.map +1 -0
  136. package/dist/core/encryption/ZipCrypto.d.ts +172 -0
  137. package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
  138. package/dist/core/encryption/ZipCrypto.js +554 -0
  139. package/dist/core/encryption/ZipCrypto.js.map +1 -0
  140. package/dist/core/encryption/index.d.ts +9 -0
  141. package/dist/core/encryption/index.d.ts.map +1 -0
  142. package/dist/core/encryption/index.js +17 -0
  143. package/dist/core/encryption/index.js.map +1 -0
  144. package/dist/core/encryption/types.d.ts +29 -0
  145. package/dist/core/encryption/types.d.ts.map +1 -0
  146. package/dist/core/encryption/types.js +12 -0
  147. package/dist/core/encryption/types.js.map +1 -0
  148. package/dist/core/index.d.ts +24 -0
  149. package/dist/core/index.d.ts.map +1 -0
  150. package/dist/core/index.js +57 -0
  151. package/dist/core/index.js.map +1 -0
  152. package/dist/core/version.d.ts +5 -0
  153. package/dist/core/version.d.ts.map +1 -0
  154. package/dist/core/version.js +31 -0
  155. package/dist/core/version.js.map +1 -0
  156. package/dist/index.d.ts +8 -18
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +29 -35
  159. package/dist/index.js.map +1 -0
  160. package/dist/node/ZipCompressNode.d.ts +123 -0
  161. package/dist/node/ZipCompressNode.d.ts.map +1 -0
  162. package/dist/node/ZipCompressNode.js +576 -0
  163. package/dist/node/ZipCompressNode.js.map +1 -0
  164. package/dist/node/ZipDecompressNode.d.ts +120 -0
  165. package/dist/node/ZipDecompressNode.d.ts.map +1 -0
  166. package/dist/node/ZipDecompressNode.js +461 -0
  167. package/dist/node/ZipDecompressNode.js.map +1 -0
  168. package/dist/node/ZipkitNode.d.ts +406 -0
  169. package/dist/node/ZipkitNode.d.ts.map +1 -0
  170. package/dist/node/ZipkitNode.js +1305 -0
  171. package/dist/node/ZipkitNode.js.map +1 -0
  172. package/dist/node/index.d.ts +26 -0
  173. package/dist/node/index.d.ts.map +1 -0
  174. package/dist/node/index.js +65 -0
  175. package/dist/node/index.js.map +1 -0
  176. package/dist/types/index.d.ts +59 -0
  177. package/dist/types/index.d.ts.map +1 -0
  178. package/dist/types/index.js +36 -1
  179. package/dist/types/index.js.map +1 -0
  180. package/examples/README.md +269 -0
  181. package/examples/blockchain-tokenize.ts +354 -0
  182. package/examples/create-zip.ts +172 -0
  183. package/examples/extract-zip.ts +158 -0
  184. package/examples/list-zip.ts +161 -0
  185. package/examples/test-files/data.json +116 -0
  186. package/examples/test-files/document.md +80 -0
  187. package/examples/test-files/document.txt +2 -0
  188. package/examples/test-files/file1.txt +48 -0
  189. package/examples/test-files/file2.txt +80 -0
  190. package/examples/tsconfig.json +44 -0
  191. package/examples/unzip-token.ts +491 -0
  192. package/examples/verify-tokenized-zip.ts +305 -0
  193. package/examples/zip-token.ts +604 -0
  194. package/package.json +108 -24
  195. package/src/blockchain/README.md +59 -66
  196. package/src/{browser/TokenVerifierBrowser.ts-remove → blockchain/browser/TokenVerifierBrowser.ts} +125 -79
  197. package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
  198. package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
  199. package/src/blockchain/browser/index.ts +13 -0
  200. package/src/blockchain/{ZipKitWallet.ts → core/WalletManager.ts} +241 -143
  201. package/src/blockchain/core/ZipkitMinter.ts +716 -0
  202. package/src/blockchain/{ZipKitOTS.ts → core/ZipkitOTS.ts} +28 -62
  203. package/src/blockchain/core/ZipkitVerifier.ts +853 -0
  204. package/src/blockchain/core/contracts.ts +370 -0
  205. package/src/blockchain/core/index.ts +71 -0
  206. package/src/blockchain/index.ts +21 -55
  207. package/src/blockchain/node/WalletManagerNode.ts +171 -0
  208. package/src/blockchain/node/index.ts +40 -0
  209. package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
  210. package/src/browser/index.esm.ts +37 -0
  211. package/src/browser/index.ts +25 -0
  212. package/src/core/ZipCompress.ts +398 -0
  213. package/src/core/ZipDecompress.ts +212 -0
  214. package/src/{shared → core}/ZipEntry.ts +240 -90
  215. package/src/core/Zipkit.ts +794 -0
  216. package/src/core/components/HashCalculator.ts +384 -0
  217. package/src/core/components/Logger.ts +180 -0
  218. package/src/core/components/ProgressTracker.ts +134 -0
  219. package/src/{shared → core}/components/Util.ts +12 -34
  220. package/src/{shared → core}/constants/Errors.ts +0 -4
  221. package/src/{shared → core}/constants/Headers.ts +19 -17
  222. package/src/core/encryption/Manager.ts +137 -0
  223. package/src/core/encryption/ZipCrypto.ts +650 -0
  224. package/src/core/encryption/index.ts +15 -0
  225. package/src/core/encryption/types.ts +33 -0
  226. package/src/core/index.ts +34 -0
  227. package/src/core/version.ts +33 -0
  228. package/src/index.ts +54 -25
  229. package/src/node/ZipCompressNode.ts +632 -0
  230. package/src/node/ZipDecompressNode.ts +508 -0
  231. package/src/node/ZipkitNode.ts +1559 -0
  232. package/src/node/index.ts +69 -0
  233. package/src/types/index.ts +131 -1
  234. package/src/types/modules.d.ts +1 -11
  235. package/src/types/opentimestamps.d.ts +1 -23
  236. package/contracts/INTEGRATION.md +0 -338
  237. package/contracts/NETWORKS.md +0 -156
  238. package/contracts/NZIP-NFT-bytecode.txt +0 -1
  239. package/contracts/constants.ts +0 -952
  240. package/contracts/deploy-bytecode.mjs +0 -94
  241. package/dist/blockchain/CertificateToken.d.ts +0 -48
  242. package/dist/blockchain/CertificateToken.js +0 -386
  243. package/dist/blockchain/ZipKitMinter.js +0 -347
  244. package/dist/blockchain/ZipKitNFT.d.ts +0 -3
  245. package/dist/blockchain/ZipKitNFT.js +0 -7
  246. package/dist/blockchain/ZipKitVerifier.d.ts +0 -69
  247. package/dist/blockchain/ZipKitVerifier.js +0 -289
  248. package/dist/blockchain/ZipKitWallet.d.ts +0 -69
  249. package/dist/blockchain/contracts.d.ts +0 -14
  250. package/dist/blockchain/contracts.js +0 -77
  251. package/dist/blockchain/types.d.ts +0 -47
  252. package/dist/blockchain/types.js +0 -30
  253. package/dist/browser/ZipKitBrowser.d.ts +0 -18
  254. package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
  255. package/dist/browser/ZipKitStampBrowser.js +0 -12
  256. package/dist/browser-index.d.ts +0 -18
  257. package/dist/browser-index.js +0 -57
  258. package/dist/server/ZipKitServer.d.ts +0 -74
  259. package/dist/server/ZipKitServer.js +0 -310
  260. package/dist/shared/ZipKit.d.ts +0 -243
  261. package/dist/shared/ZipKit.js +0 -772
  262. package/dist/shared/components/CertificateOTS.d.ts +0 -15
  263. package/dist/shared/components/CertificateOTS.js +0 -116
  264. package/dist/shared/components/FileSys.d.ts +0 -2
  265. package/dist/shared/components/FileSys.js +0 -113
  266. package/dist/shared/components/HashAccumulator.d.ts +0 -55
  267. package/dist/shared/components/HashAccumulator.js +0 -100
  268. package/dist/shared/components/ZipCrypto.d.ts +0 -3
  269. package/dist/shared/components/ZipCrypto.js +0 -78
  270. package/dist/shared/components/merkleTree.d.ts +0 -66
  271. package/dist/shared/components/merkleTree.js +0 -136
  272. package/dist/shared/types/index.d.ts +0 -21
  273. package/dist/shared/types/index.js +0 -3
  274. package/dist/shared/types.d.ts +0 -33
  275. package/dist/shared/types.js +0 -8
  276. package/dist/shared/version.d.ts +0 -2
  277. package/dist/shared/version.js +0 -6
  278. package/src/blockchain/CertificateToken.ts +0 -444
  279. package/src/blockchain/ZipKitMinter.ts +0 -470
  280. package/src/blockchain/ZipKitNFT.ts +0 -12
  281. package/src/blockchain/ZipKitVerifier.ts +0 -382
  282. package/src/blockchain/contracts.ts +0 -88
  283. package/src/blockchain/types.ts +0 -91
  284. package/src/browser/CertificateGeneratorBrowser.ts-remove +0 -498
  285. package/src/browser/ZipKitStampBrowser.ts +0 -9
  286. package/src/browser-index.ts +0 -36
  287. package/src/server/README.md +0 -25
  288. package/src/server/ZipKitServer.ts +0 -305
  289. package/src/shared/ZipKit.ts +0 -881
  290. package/src/shared/components/CertificateOTS.ts +0 -132
  291. package/src/shared/components/FileSys.ts +0 -87
  292. package/src/shared/components/HashAccumulator.ts +0 -113
  293. package/src/shared/components/ZipCrypto.ts +0 -91
  294. package/src/shared/components/merkleTree.ts +0 -162
  295. package/src/shared/types/index.ts +0 -25
  296. package/src/shared/types/modules.d.ts +0 -22
  297. package/src/shared/types/opentimestamps.d.ts +0 -23
  298. package/src/shared/types.d.ts +0 -8
  299. package/src/shared/types.ts +0 -43
  300. package/src/shared/version.ts +0 -3
  301. /package/src/{shared → core}/components/Support.ts +0 -0
@@ -8,9 +8,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
9
9
  };
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ZipEntry = void 0;
11
12
  const Errors_1 = __importDefault(require("./constants/Errors"));
12
13
  const Headers_1 = require("./constants/Headers");
13
- const Util_1 = require("./components/Util");
14
+ const Logger_1 = require("./components/Logger");
15
+ const ZipCrypto_1 = require("./encryption/ZipCrypto");
14
16
  const VER_ENCODING = 30;
15
17
  const VER_EXTRACT = 10; // Version needed to extract (1.0)
16
18
  /**
@@ -24,7 +26,7 @@ class ZipEntry {
24
26
  * @param debug - Enable debug logging
25
27
  */
26
28
  constructor(fname, comment, debug) {
27
- this.debug = false;
29
+ this.debug = true;
28
30
  this.verMadeBy = 0; // Read Version Made By
29
31
  this.verExtract = 0; // Read Version Needed to Extract
30
32
  this.bitFlags = 0; // General purpose bit flag
@@ -58,6 +60,13 @@ class ZipEntry {
58
60
  this.uid = null; // User ID
59
61
  this.gid = null; // Group ID
60
62
  this.sha256 = null; // SHA-256 hash of the file
63
+ // Symbolic link data
64
+ this.isSymlink = false; // Entry is a symbolic link
65
+ this.linkTarget = null; // Target path for symbolic links
66
+ // Hard link data
67
+ this.isHardLink = false; // Entry is a hard link
68
+ this.originalEntry = null; // Original entry name for hard links
69
+ this.inode = null; // Inode number for hard links
61
70
  this.isMSDOS = this.platform === null;
62
71
  this.isUnixLike = this.platform != null && this.platform !== 'win32';
63
72
  this.isMacOS = this.platform != null && this.platform === 'darwin';
@@ -147,13 +156,13 @@ class ZipEntry {
147
156
  const nameCrc32 = _data.readUInt32LE(1);
148
157
  // Calculate CRC32 of the current filename
149
158
  const fnameBuf = Buffer.from(this.filename);
150
- const calculatedCrc = (0, Util_1.crc32)(fnameBuf);
159
+ const calculatedCrc = (0, ZipCrypto_1.crc32)(fnameBuf);
151
160
  // If CRCs match, use the UTF-8 filename from the extra field
152
161
  if (calculatedCrc === nameCrc32) {
153
162
  const unicodeName = _data.subarray(5).toString('utf8');
154
163
  this.filename = unicodeName;
155
164
  if (this.debug) {
156
- console.log(`Using Unicode Path: ${this.filename}`);
165
+ Logger_1.Logger.log(`Using Unicode Path: ${this.filename}`);
157
166
  }
158
167
  }
159
168
  }
@@ -199,6 +208,29 @@ class ZipEntry {
199
208
  }
200
209
  }
201
210
  }
211
+ else if (_id === Headers_1.HDR_ID.SYMLINK) {
212
+ // Extract symbolic link information
213
+ if (_len >= 3) { // Version + Target Length + Target
214
+ const version = _data.readUInt8(0);
215
+ const targetLength = _data.readUInt16LE(1);
216
+ if (targetLength > 0 && _len >= 3 + targetLength) {
217
+ this.isSymlink = true;
218
+ this.linkTarget = _data.subarray(3, 3 + targetLength).toString('utf8');
219
+ }
220
+ }
221
+ }
222
+ else if (_id === Headers_1.HDR_ID.HARDLINK) {
223
+ // Extract hard link information
224
+ if (_len >= 11) { // Version + Inode + Original Length + Original
225
+ const version = _data.readUInt8(0);
226
+ this.inode = _data.readUInt32LE(1);
227
+ const originalLength = _data.readUInt16LE(5);
228
+ if (originalLength > 0 && _len >= 7 + originalLength) {
229
+ this.isHardLink = true;
230
+ this.originalEntry = _data.subarray(7, 7 + originalLength).toString('utf8');
231
+ }
232
+ }
233
+ }
202
234
  // Skip Unicode Path here as we already processed it
203
235
  i += 4 + _len;
204
236
  }
@@ -206,7 +238,7 @@ class ZipEntry {
206
238
  // File Comment Length - 2 bytes
207
239
  let comLen = data.readUInt16LE(Headers_1.CENTRAL_DIR.COMMENT_LEN);
208
240
  if (comLen > 0)
209
- this.comment = data.toString('utf8', Headers_1.CENTRAL_DIR.SIZE + fnameLen + extraLen, Headers_1.CENTRAL_DIR.SIZE + fnameLen + extraLen + comLen);
241
+ this.comment = data.toString('utf8', Headers_1.CENTRAL_DIR.SIZE + fnameLen, Headers_1.CENTRAL_DIR.SIZE + fnameLen + comLen);
210
242
  if (this.debug)
211
243
  this.showVerboseInfo();
212
244
  // Calculate the Buffer for the next entry
@@ -234,7 +266,7 @@ class ZipEntry {
234
266
  // Create an ASCII version by replacing non-ASCII chars with '?'
235
267
  const asciiName = this.filename.replace(/[^\x00-\x7E]/g, '?');
236
268
  const asciiNameBuf = Buffer.from(asciiName, 'ascii');
237
- const nameCrc32 = (0, Util_1.crc32)(asciiNameBuf);
269
+ const nameCrc32 = (0, ZipCrypto_1.crc32)(asciiNameBuf);
238
270
  // 1 byte version + 4 bytes CRC + filename
239
271
  const unicodePathLen = 5 + unicodePathBuf.length;
240
272
  // Write Unicode Path Extra Field (0x7075)
@@ -250,7 +282,6 @@ class ZipEntry {
250
282
  * @returns Buffer containing the local header data
251
283
  */
252
284
  createLocalHdr() {
253
- const commentLen = this.comment?.length ?? 0;
254
285
  let extraFieldLen = 0;
255
286
  // Only create Unicode Path field if needed
256
287
  const needsUnicode = this.needsUnicodeHandling();
@@ -259,7 +290,7 @@ class ZipEntry {
259
290
  const unicodeNameLen = Buffer.from(this.filename, 'utf8').length;
260
291
  extraFieldLen = 5 + unicodeNameLen + 4;
261
292
  }
262
- const data = Buffer.alloc(Headers_1.LOCAL_HDR.SIZE + this.filename.length + commentLen + extraFieldLen);
293
+ const data = Buffer.alloc(Headers_1.LOCAL_HDR.SIZE + this.filename.length + extraFieldLen);
263
294
  // "PK\003\004"
264
295
  data.writeUInt32LE(Headers_1.LOCAL_HDR.SIGNATURE, 0);
265
296
  // version needed to extract
@@ -290,11 +321,8 @@ class ZipEntry {
290
321
  if (needsUnicode) {
291
322
  extraOffset = this.addUnicodePathField(data, extraOffset);
292
323
  }
293
- // Add comment if present (after extra field)
294
- if (commentLen > 0 && this.comment) {
295
- const commentBuf = Buffer.from(this.comment, 'utf8');
296
- commentBuf.copy(data, extraOffset);
297
- }
324
+ // File comments are NOT stored in local headers (ZIP specification)
325
+ // They are only stored in the central directory
298
326
  return data;
299
327
  }
300
328
  /**
@@ -303,11 +331,17 @@ class ZipEntry {
303
331
  */
304
332
  centralDirEntry() {
305
333
  // Calculate the length of the extra fields
306
- const commentLen = this.comment?.length ?? 0;
334
+ const commentLen = this.comment ? Buffer.from(this.comment, 'utf8').length : 0;
307
335
  const utfLen = this.universalTime ? 9 : 0; // 4 bytes header + 5 bytes data
308
336
  const uidgidLen = this.uid && this.gid ? 11 + 4 : 0; // 1 byte version + 1 byte size + 4 bytes data + 1 byte size + 4 bytes data
309
337
  const sha256Buf = this.sha256 ? Buffer.from(this.sha256, 'hex') : null;
310
338
  const sha256Len = sha256Buf ? (sha256Buf.length + 4) : 0;
339
+ // Calculate symbolic link extra field length
340
+ const symlinkLen = this.isSymlink && this.linkTarget ?
341
+ (4 + 1 + 2 + Buffer.byteLength(this.linkTarget, 'utf8')) : 0; // 4 bytes header + 1 byte version + 2 bytes length + target
342
+ // Calculate hard link extra field length
343
+ const hardlinkLen = this.isHardLink && this.originalEntry && this.inode !== null ?
344
+ (4 + 1 + 4 + 2 + Buffer.byteLength(this.originalEntry, 'utf8')) : 0; // 4 bytes header + 1 byte version + 4 bytes inode + 2 bytes length + original
311
345
  // Only add Unicode Path field if needed
312
346
  const needsUnicode = this.needsUnicodeHandling();
313
347
  let unicodePathLen = 0;
@@ -316,9 +350,12 @@ class ZipEntry {
316
350
  const unicodeNameLen = Buffer.from(this.filename, 'utf8').length;
317
351
  unicodePathLen = 5 + unicodeNameLen + 4;
318
352
  }
319
- const extraLen = utfLen + sha256Len + uidgidLen + (needsUnicode ? unicodePathLen : 0);
353
+ const extraLen = utfLen + sha256Len + uidgidLen + symlinkLen + hardlinkLen + (needsUnicode ? unicodePathLen : 0);
354
+ // Calculate actual filename length (ASCII conversion may change length)
355
+ const asciiName = this.filename.replace(/[^\x00-\x7E]/g, '?');
356
+ const fnameLen = asciiName.length;
320
357
  // Central directory header size (46 Bytes + filename + comment + extra fields)
321
- const data = Buffer.alloc(Headers_1.CENTRAL_DIR.SIZE + this.filename.length + commentLen + extraLen);
358
+ const data = Buffer.alloc(Headers_1.CENTRAL_DIR.SIZE + fnameLen + commentLen + extraLen);
322
359
  // "PK\001\002"
323
360
  data.writeUInt32LE(Headers_1.CENTRAL_DIR.SIGNATURE, 0);
324
361
  // Version made by - Needs to be set for NeoZip
@@ -353,46 +390,71 @@ class ZipEntry {
353
390
  data.writeUInt32LE(this.localHdrOffset, Headers_1.CENTRAL_DIR.LOCAL_HDR_OFFSET);
354
391
  // Write filename - use ASCII filename (replacing non-ASCII with ?)
355
392
  // This ensures compatibility with older ZIP readers
356
- const asciiName = this.filename.replace(/[^\x00-\x7E]/g, '?');
357
393
  const fnameBuf = Buffer.from(asciiName);
358
394
  fnameBuf.copy(data, Headers_1.CENTRAL_DIR.SIZE);
395
+ // Add file comment immediately after filename (InfoZip format)
396
+ let currentOffset = Headers_1.CENTRAL_DIR.SIZE + fnameLen;
359
397
  if (commentLen > 0 && this.comment) {
360
398
  const commentBuf = Buffer.from(this.comment, 'utf8');
361
- commentBuf.copy(data, Headers_1.CENTRAL_DIR.SIZE + fnameBuf.length);
399
+ commentBuf.copy(data, currentOffset);
400
+ currentOffset += commentLen;
362
401
  }
363
- // Add Extra Field data
364
- let extraOffset = Headers_1.CENTRAL_DIR.SIZE + fnameBuf.length + commentLen;
402
+ // Add Extra Field data after file comment
403
+ let extraOffset = currentOffset;
365
404
  // Add Universal Time field
366
405
  if (this.universalTime) {
367
406
  data.writeUInt16LE(Headers_1.HDR_ID.UNV_TIME, extraOffset); // 0x5455
368
407
  data.writeUInt16LE(5, extraOffset + 2); // Length of data (flags + time)
369
- data.writeUInt8(0x03, extraOffset + 4); // Flags: 1=Mod time, 2=Access time
370
- data.writeUInt32LE(this.universalTime, extraOffset + 5); // Unix timestamp
371
- extraOffset += 9; // 4 bytes header + 1 byte flags + 4 bytes data
408
+ data.writeUInt8(1, extraOffset + 4); // Flags: modification time present
409
+ data.writeUInt32LE(Math.floor(Date.now() / 1000), extraOffset + 5); // Unix timestamp
410
+ extraOffset += 9;
411
+ }
412
+ // Add SHA-256 field
413
+ if (sha256Buf) {
414
+ data.writeUInt16LE(Headers_1.HDR_ID.SHA256, extraOffset); // 0x1f
415
+ data.writeUInt16LE(sha256Buf.length, extraOffset + 2); // Length of data
416
+ sha256Buf.copy(data, extraOffset + 4);
417
+ extraOffset += 4 + sha256Buf.length;
372
418
  }
373
- // Unix UID/GID Extra Field (0x7875)
419
+ // Add UID/GID field
374
420
  if (this.uid && this.gid) {
375
- const uidgidLen = 11; // 1 byte version + 1 byte size + 4 bytes data + 1 byte size + 4 bytes data
376
421
  data.writeUInt16LE(Headers_1.HDR_ID.UID_GID, extraOffset); // 0x7875
377
- data.writeUInt16LE(uidgidLen, extraOffset + 2); // Length
422
+ data.writeUInt16LE(11, extraOffset + 2); // Length of data
378
423
  data.writeUInt8(1, extraOffset + 4); // Version
379
- data.writeUInt8(4, extraOffset + 5); // Size of UID/GID
424
+ data.writeUInt8(4, extraOffset + 5); // UID size
380
425
  data.writeUInt32LE(this.uid, extraOffset + 6); // UID
381
- data.writeUInt8(4, extraOffset + 10); // Size of UID/GID
426
+ data.writeUInt8(4, extraOffset + 10); // GID size
382
427
  data.writeUInt32LE(this.gid, extraOffset + 11); // GID
383
- extraOffset += uidgidLen + 4;
428
+ extraOffset += 15;
384
429
  }
385
- // Add Unicode Path Extra Field only if needed
430
+ // Add symbolic link field
431
+ if (this.isSymlink && this.linkTarget) {
432
+ const targetBuf = Buffer.from(this.linkTarget, 'utf8');
433
+ const dataLen = 1 + 2 + targetBuf.length; // version + length + target
434
+ data.writeUInt16LE(Headers_1.HDR_ID.SYMLINK, extraOffset); // 0x7855
435
+ data.writeUInt16LE(dataLen, extraOffset + 2); // Length of data
436
+ data.writeUInt8(1, extraOffset + 4); // Version
437
+ data.writeUInt16LE(targetBuf.length, extraOffset + 5); // Target length
438
+ targetBuf.copy(data, extraOffset + 7); // Target path
439
+ extraOffset += 4 + dataLen;
440
+ }
441
+ // Add hard link field
442
+ if (this.isHardLink && this.originalEntry && this.inode !== null) {
443
+ const originalBuf = Buffer.from(this.originalEntry, 'utf8');
444
+ const dataLen = 1 + 4 + 2 + originalBuf.length; // version + inode + length + original
445
+ data.writeUInt16LE(Headers_1.HDR_ID.HARDLINK, extraOffset); // 0x7865
446
+ data.writeUInt16LE(dataLen, extraOffset + 2); // Length of data
447
+ data.writeUInt8(1, extraOffset + 4); // Version
448
+ data.writeUInt32LE(this.inode, extraOffset + 5); // Inode number
449
+ data.writeUInt16LE(originalBuf.length, extraOffset + 9); // Original entry length
450
+ originalBuf.copy(data, extraOffset + 11); // Original entry path
451
+ extraOffset += 4 + dataLen;
452
+ }
453
+ // Add Unicode Path field if needed
386
454
  if (needsUnicode) {
387
455
  extraOffset = this.addUnicodePathField(data, extraOffset);
388
456
  }
389
- // Add SHA256 field
390
- if (sha256Buf) {
391
- data.writeUInt16LE(Headers_1.HDR_ID.SHA256, extraOffset);
392
- data.writeUInt16LE(sha256Buf.length, extraOffset + 2);
393
- sha256Buf.copy(data, extraOffset + 4);
394
- extraOffset += sha256Buf.length + 4;
395
- }
457
+ // File comment is already written immediately after filename
396
458
  return data;
397
459
  }
398
460
  // ======================================
@@ -406,13 +468,21 @@ class ZipEntry {
406
468
  setDateTime(date) {
407
469
  if (!date)
408
470
  return 0;
409
- let time = (((date.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980
410
- ((date.getMonth() + 1) << 21) | // b05-08 month
411
- (date.getDate() << 16) | // b00-04 hour
412
- // 2 bytes time
413
- (date.getHours() << 11) | // b11-15 hour
414
- (date.getMinutes() << 5) | // b05-10 minute
415
- (date.getSeconds() >> 1); // b00-04 seconds divided by 2
471
+ // DOS date/time format:
472
+ // Date part (16 bits): Year (7 bits) + Month (4 bits) + Day (5 bits)
473
+ // Time part (16 bits): Hour (5 bits) + Minute (6 bits) + Second (5 bits, stored as seconds/2)
474
+ const year = date.getFullYear() - 1980; // Years since 1980
475
+ const month = date.getMonth() + 1; // Month (1-12)
476
+ const day = date.getDate(); // Day (1-31)
477
+ const hour = date.getHours(); // Hour (0-23)
478
+ const minute = date.getMinutes(); // Minute (0-59)
479
+ const second = date.getSeconds(); // Second (0-59)
480
+ // Pack date: year (7 bits) + month (4 bits) + day (5 bits)
481
+ const datePart = ((year & 0x7f) << 9) | ((month & 0x0f) << 5) | (day & 0x1f);
482
+ // Pack time: hour (5 bits) + minute (6 bits) + second/2 (5 bits)
483
+ const timePart = ((hour & 0x1f) << 11) | ((minute & 0x3f) << 5) | ((second >> 1) & 0x1f);
484
+ // Combine date and time parts
485
+ const time = (datePart << 16) | timePart;
416
486
  return time;
417
487
  }
418
488
  /**
@@ -423,12 +493,17 @@ class ZipEntry {
423
493
  parseDateTime(timeStamp) {
424
494
  if (timeStamp == 0)
425
495
  return null;
426
- return new Date(((timeStamp >> 25) & 0x3f) + 1980, // Year
427
- ((timeStamp >> 21) & 0x0f) - 1, // Month
428
- (timeStamp >> 16) & 0x1f, // Day
429
- (timeStamp >> 11) & 0x1f, // Hour
430
- (timeStamp >> 5) & 0x3f, // Min
431
- (timeStamp & 0x1f) << 1); // Sec
496
+ // Extract date part (upper 16 bits)
497
+ const datePart = (timeStamp >> 16) & 0xffff;
498
+ const year = ((datePart >> 9) & 0x7f) + 1980; // Year (7 bits) + 1980
499
+ const month = ((datePart >> 5) & 0x0f) - 1; // Month (4 bits) - 1 for 0-based
500
+ const day = datePart & 0x1f; // Day (5 bits)
501
+ // Extract time part (lower 16 bits)
502
+ const timePart = timeStamp & 0xffff;
503
+ const hour = (timePart >> 11) & 0x1f; // Hour (5 bits)
504
+ const minute = (timePart >> 5) & 0x3f; // Minute (6 bits)
505
+ const second = (timePart & 0x1f) << 1; // Second (5 bits) * 2
506
+ return new Date(year, month, day, hour, minute, second);
432
507
  }
433
508
  /**
434
509
  * Formats the entry's date in local format
@@ -573,30 +648,30 @@ class ZipEntry {
573
648
  * Includes compression, encryption, timestamps, and extra fields
574
649
  */
575
650
  showVerboseInfo() {
576
- console.log('=== Central Directory Entry (%s) ===', this.filename);
577
- console.log('unzip from start of archive: ', this.localHdrOffset);
578
- console.log('File system or operating system of origin: ', this.fileSystemToString());
579
- console.log('Version of encoding software: ', this.verMadeBy);
580
- console.log('Compression Method: ', this.cmpMethodToString());
581
- console.log('File Security Status: ', this.bitFlags & Headers_1.GP_FLAG.ENCRYPTED ?
651
+ Logger_1.Logger.log('=== Central Directory Entry (%s) ===', this.filename);
652
+ Logger_1.Logger.log('unzip from start of archive: ', this.localHdrOffset);
653
+ Logger_1.Logger.log('File system or operating system of origin: ', this.fileSystemToString());
654
+ Logger_1.Logger.log('Version of encoding software: ', this.verMadeBy);
655
+ Logger_1.Logger.log('Compression Method: ', this.cmpMethodToString());
656
+ Logger_1.Logger.log('File Security Status: ', this.bitFlags & Headers_1.GP_FLAG.ENCRYPTED ?
582
657
  this.bitFlags & Headers_1.GP_FLAG.STRONG_ENCRYPT ? 'Strong Encrypt' : 'Encrypted' :
583
658
  'Not Encrypted');
584
- console.log('File Modified (DOS date/time) ', this.toFormattedDateString());
585
- console.log('File Modified (UTC) ', this.toFormattedUTCDateString());
586
- console.log('Compressed Size: ', this.compressedSize);
587
- console.log('UnCompressed Size: ', this.uncompressedSize);
588
- console.log(`32-bit CRC value (hex): ${this.crc.toString(16).padStart(8, '0')}`);
589
- console.log('Length of extra field: ', this.extraField?.length ?? 0);
590
- console.log('Length of file comment: ', this.comment?.length ?? 0);
591
- console.log('Unix File Attributes: ');
592
- console.log('MS-DOS File Attributes: ', this.dosAttributesToString());
659
+ Logger_1.Logger.log('File Modified (DOS date/time) ', this.toFormattedDateString());
660
+ Logger_1.Logger.log('File Modified (UTC) ', this.toFormattedUTCDateString());
661
+ Logger_1.Logger.log('Compressed Size: ', this.compressedSize);
662
+ Logger_1.Logger.log('UnCompressed Size: ', this.uncompressedSize);
663
+ Logger_1.Logger.log(`32-bit CRC value (hex): ${this.crc.toString(16).padStart(8, '0')}`);
664
+ Logger_1.Logger.log('Length of extra field: ', this.extraField?.length ?? 0);
665
+ Logger_1.Logger.log('Length of file comment: ', this.comment?.length ?? 0);
666
+ Logger_1.Logger.log('Unix File Attributes: ');
667
+ Logger_1.Logger.log('MS-DOS File Attributes: ', this.dosAttributesToString());
593
668
  if (this.extraField) {
594
- console.log('\nThe Central-Directory Extra Field contains:');
669
+ Logger_1.Logger.log('\nThe Central-Directory Extra Field contains:');
595
670
  try {
596
671
  for (let i = 0; i < this.extraField.length;) {
597
672
  // Ensure we have at least 4 bytes (header ID + length)
598
673
  if (i + 4 > this.extraField.length) {
599
- console.log(` Warning: Truncated extra field at offset ${i}`);
674
+ Logger_1.Logger.log(` Warning: Truncated extra field at offset ${i}`);
600
675
  break;
601
676
  }
602
677
  let _id = this.extraField.readUInt16LE(i);
@@ -604,23 +679,23 @@ class ZipEntry {
604
679
  let _len = this.extraField.readUInt16LE(i + 2);
605
680
  // Validate the length to ensure it doesn't exceed buffer bounds
606
681
  if (_len < 0 || i + 4 + _len > this.extraField.length) {
607
- console.log(` Warning: Invalid extra field length (${_len}) at offset ${i} for ID ${_idStr}`);
682
+ Logger_1.Logger.log(` Warning: Invalid extra field length (${_len}) at offset ${i} for ID ${_idStr}`);
608
683
  break;
609
684
  }
610
685
  let _data = this.extraField.subarray(i + 4, i + 4 + _len);
611
686
  try {
612
687
  if (_id === Headers_1.HDR_ID.SHA256) {
613
- console.log(` ID[0x${_idStr}] NeoZip-SHA256: ${_data.toString('hex')}`);
688
+ Logger_1.Logger.log(` ID[0x${_idStr}] NeoZip-SHA256: ${_data.toString('hex')}`);
614
689
  }
615
690
  else if (_id === Headers_1.HDR_ID.UNV_TIME) {
616
691
  if (_len >= 5) {
617
692
  const flags = _data.readUInt8(0);
618
693
  const timestamp = _data.readUInt32LE(1);
619
694
  const date = new Date(timestamp * 1000);
620
- console.log(` ID[0x${_idStr}] Universal Time: flags=${flags}, time=${date.toISOString()}`);
695
+ Logger_1.Logger.log(` ID[0x${_idStr}] Universal Time: flags=${flags}, time=${date.toISOString()}`);
621
696
  }
622
697
  else {
623
- console.log(` ID[0x${_idStr}] Universal Time: (invalid length ${_len})`);
698
+ Logger_1.Logger.log(` ID[0x${_idStr}] Universal Time: (invalid length ${_len})`);
624
699
  }
625
700
  }
626
701
  else if (_id === Headers_1.HDR_ID.UID_GID) {
@@ -628,7 +703,7 @@ class ZipEntry {
628
703
  const version = _data.readUInt8(0);
629
704
  const uidSize = _data.readUInt8(1);
630
705
  if (2 + uidSize > _len) {
631
- console.log(` ID[0x${_idStr}] Unix UID/GID: (invalid UID size ${uidSize})`);
706
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unix UID/GID: (invalid UID size ${uidSize})`);
632
707
  }
633
708
  else {
634
709
  const uid = _data.readUIntLE(2, Math.min(uidSize, 4));
@@ -639,11 +714,44 @@ class ZipEntry {
639
714
  gid = _data.readUIntLE(2 + uidSize + 1, Math.min(gidSize, 4));
640
715
  }
641
716
  }
642
- console.log(` ID[0x${_idStr}] Unix UID/GID: version=${version}, uid=${uid}, gid=${gid}`);
717
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unix UID/GID: version=${version}, uid=${uid}, gid=${gid}`);
643
718
  }
644
719
  }
645
720
  else {
646
- console.log(` ID[0x${_idStr}] Unix UID/GID: (invalid length ${_len})`);
721
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unix UID/GID: (invalid length ${_len})`);
722
+ }
723
+ }
724
+ else if (_id === Headers_1.HDR_ID.SYMLINK) {
725
+ if (_len >= 3) {
726
+ const version = _data.readUInt8(0);
727
+ const targetLength = _data.readUInt16LE(1);
728
+ if (targetLength > 0 && _len >= 3 + targetLength) {
729
+ const target = _data.subarray(3, 3 + targetLength).toString('utf8');
730
+ Logger_1.Logger.log(` ID[0x${_idStr}] Symbolic Link: version=${version}, target="${target}"`);
731
+ }
732
+ else {
733
+ Logger_1.Logger.log(` ID[0x${_idStr}] Symbolic Link: (invalid target length ${targetLength})`);
734
+ }
735
+ }
736
+ else {
737
+ Logger_1.Logger.log(` ID[0x${_idStr}] Symbolic Link: (invalid length ${_len})`);
738
+ }
739
+ }
740
+ else if (_id === Headers_1.HDR_ID.HARDLINK) {
741
+ if (_len >= 11) {
742
+ const version = _data.readUInt8(0);
743
+ const inode = _data.readUInt32LE(1);
744
+ const originalLength = _data.readUInt16LE(5);
745
+ if (originalLength > 0 && _len >= 7 + originalLength) {
746
+ const original = _data.subarray(7, 7 + originalLength).toString('utf8');
747
+ Logger_1.Logger.log(` ID[0x${_idStr}] Hard Link: version=${version}, inode=${inode}, original="${original}"`);
748
+ }
749
+ else {
750
+ Logger_1.Logger.log(` ID[0x${_idStr}] Hard Link: (invalid original length ${originalLength})`);
751
+ }
752
+ }
753
+ else {
754
+ Logger_1.Logger.log(` ID[0x${_idStr}] Hard Link: (invalid length ${_len})`);
647
755
  }
648
756
  }
649
757
  else if (_id === Headers_1.HDR_ID.UNICODE_PATH) {
@@ -653,13 +761,46 @@ class ZipEntry {
653
761
  const unicodeName = _data.subarray(5).toString('utf8');
654
762
  // Calculate CRC32 of the original filename for verification
655
763
  const fnameBuf = Buffer.from(this.filename);
656
- const calculatedCrc = (0, Util_1.crc32)(fnameBuf);
764
+ const calculatedCrc = (0, ZipCrypto_1.crc32)(fnameBuf);
657
765
  const crcMatch = nameCrc32 === calculatedCrc ? 'MATCH' : 'MISMATCH';
658
- console.log(` ID[0x${_idStr}] Unicode Path: version=${version}, CRC32=${nameCrc32.toString(16)} (${crcMatch})`);
659
- console.log(` Path: "${unicodeName}"`);
766
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unicode Path: version=${version}, CRC32=${nameCrc32.toString(16)} (${crcMatch})`);
767
+ Logger_1.Logger.log(` Path: "${unicodeName}"`);
768
+ }
769
+ else {
770
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unicode Path: (invalid length ${_len})`);
771
+ }
772
+ }
773
+ else if (_id === Headers_1.HDR_ID.ZIP64) {
774
+ // ZIP64 Extended Information (0x0001)
775
+ Logger_1.Logger.log(` ID[0x${_idStr}] ZIP64 Extended Information:`);
776
+ if (_len >= 8) {
777
+ let offset = 0;
778
+ // Read uncompressed size (8 bytes) if present
779
+ if (offset + 8 <= _len) {
780
+ const uncompressedSize = _data.readBigUInt64LE(offset);
781
+ Logger_1.Logger.log(` Uncompressed Size (ZIP64): ${uncompressedSize.toString()} bytes`);
782
+ offset += 8;
783
+ }
784
+ // Read compressed size (8 bytes) if present
785
+ if (offset + 8 <= _len) {
786
+ const compressedSize = _data.readBigUInt64LE(offset);
787
+ Logger_1.Logger.log(` Compressed Size (ZIP64): ${compressedSize.toString()} bytes`);
788
+ offset += 8;
789
+ }
790
+ // Read local header offset (8 bytes) if present
791
+ if (offset + 8 <= _len) {
792
+ const localHeaderOffset = _data.readBigUInt64LE(offset);
793
+ Logger_1.Logger.log(` Local Header Offset (ZIP64): ${localHeaderOffset.toString()}`);
794
+ offset += 8;
795
+ }
796
+ // Read disk number (4 bytes) if present
797
+ if (offset + 4 <= _len) {
798
+ const diskNumber = _data.readUInt32LE(offset);
799
+ Logger_1.Logger.log(` Disk Number (ZIP64): ${diskNumber}`);
800
+ }
660
801
  }
661
802
  else {
662
- console.log(` ID[0x${_idStr}] Unicode Path: (invalid length ${_len})`);
803
+ Logger_1.Logger.log(` ZIP64 Extended Information: (invalid length ${_len})`);
663
804
  }
664
805
  }
665
806
  else {
@@ -667,20 +808,22 @@ class ZipEntry {
667
808
  const preview = _len > 0
668
809
  ? _data.slice(0, Math.min(16, _len)).toString('hex')
669
810
  : '';
670
- console.log(` ID[0x${_idStr}] Unknown field: length=${_len} bytes${preview ? ', data=' + preview + '...' : ''}`);
811
+ Logger_1.Logger.log(` ID[0x${_idStr}] Unknown field: length=${_len} bytes${preview ? ', data=' + preview + '...' : ''}`);
671
812
  }
672
813
  }
673
814
  catch (error) {
674
- console.log(` Error parsing extra field ID[0x${_idStr}]: ${error.message}`);
815
+ Logger_1.Logger.log(` Error parsing extra field ID[0x${_idStr}]: ${error.message}`);
675
816
  }
676
817
  i += 4 + _len;
677
818
  }
678
819
  }
679
820
  catch (error) {
680
- console.log(` Error parsing extra fields: ${error.message}`);
821
+ Logger_1.Logger.log(` Error parsing extra fields: ${error.message}`);
681
822
  }
682
823
  }
683
- console.log('\n');
824
+ Logger_1.Logger.log('\n');
684
825
  }
685
826
  }
686
827
  exports.default = ZipEntry;
828
+ exports.ZipEntry = ZipEntry;
829
+ //# sourceMappingURL=ZipEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipEntry.js","sourceRoot":"","sources":["../../src/core/ZipEntry.ts"],"names":[],"mappings":"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"}