wiki-graph-core 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (576) hide show
  1. package/LICENSE +201 -0
  2. package/data/editor/clue_reviewer.jinja +410 -0
  3. package/data/editor/clue_reviewer_generator.jinja +428 -0
  4. package/data/editor/revision_feedback.jinja +5 -0
  5. package/data/editor/text_compressor.jinja +127 -0
  6. package/data/guaranteed/response_intent_classifier.jinja +8 -0
  7. package/data/help/commands/archive/next.jinja +29 -0
  8. package/data/help/commands/gc.jinja +38 -0
  9. package/data/help/commands/legacy/migrate.jinja +20 -0
  10. package/data/help/commands/legacy.jinja +19 -0
  11. package/data/help/commands/maintenance/chapter/add.jinja +41 -0
  12. package/data/help/commands/maintenance/chapter/list.jinja +33 -0
  13. package/data/help/commands/maintenance/chapter/move.jinja +36 -0
  14. package/data/help/commands/maintenance/chapter/remove.jinja +26 -0
  15. package/data/help/commands/maintenance/chapter/reset.jinja +29 -0
  16. package/data/help/commands/maintenance/chapter/set-source.jinja +34 -0
  17. package/data/help/commands/maintenance/chapter/set-summary.jinja +31 -0
  18. package/data/help/commands/maintenance/chapter/set-title.jinja +29 -0
  19. package/data/help/commands/maintenance/chapter/tree.jinja +58 -0
  20. package/data/help/commands/maintenance/chapter.jinja +59 -0
  21. package/data/help/commands/maintenance/cover.jinja +28 -0
  22. package/data/help/commands/maintenance/meta.jinja +55 -0
  23. package/data/help/commands/predicate.jinja +460 -0
  24. package/data/help/commands/root.jinja +83 -0
  25. package/data/help/commands/transform.jinja +34 -0
  26. package/data/help/commands/uri.jinja +274 -0
  27. package/data/help/topics/config.jinja +88 -0
  28. package/data/help/topics/format.jinja +72 -0
  29. package/data/help/topics/readiness.jinja +99 -0
  30. package/data/help/topics/recipe.jinja +151 -0
  31. package/data/help/topics/runtime.jinja +62 -0
  32. package/data/help/topics/uri.jinja +178 -0
  33. package/data/output/epub/cover.xhtml.jinja +13 -0
  34. package/data/output/epub/nav.xhtml.jinja +12 -0
  35. package/data/output/epub/package.opf.xml.jinja +39 -0
  36. package/data/output/epub/section.xhtml.jinja +12 -0
  37. package/data/topologization/book_coherence_extraction.jinja +223 -0
  38. package/data/topologization/chunk_extraction.jinja +233 -0
  39. package/data/topologization/evidence_choice.jinja +38 -0
  40. package/data/topologization/translate_chunks.jinja +138 -0
  41. package/data/topologization/user_focused_extraction.jinja +378 -0
  42. package/dist/archive/query/archive-view.d.ts +26 -0
  43. package/dist/archive/query/archive-view.js +4540 -0
  44. package/dist/archive/query/archive-view.js.map +1 -0
  45. package/dist/archive/query/continuation-cursor.d.ts +61 -0
  46. package/dist/archive/query/continuation-cursor.js +363 -0
  47. package/dist/archive/query/continuation-cursor.js.map +1 -0
  48. package/dist/archive/query/index.d.ts +29 -0
  49. package/dist/archive/query/index.js +63 -0
  50. package/dist/archive/query/index.js.map +1 -0
  51. package/dist/archive/query/lexical-search.d.ts +22 -0
  52. package/dist/archive/query/lexical-search.js +137 -0
  53. package/dist/archive/query/lexical-search.js.map +1 -0
  54. package/dist/archive/query/search-cache.d.ts +192 -0
  55. package/dist/archive/query/search-cache.js +1248 -0
  56. package/dist/archive/query/search-cache.js.map +1 -0
  57. package/dist/archive/search-index/index.d.ts +26 -0
  58. package/dist/archive/search-index/index.js +29 -0
  59. package/dist/archive/search-index/index.js.map +1 -0
  60. package/dist/archive/search-index/search-index.d.ts +26 -0
  61. package/dist/archive/search-index/search-index.js +555 -0
  62. package/dist/archive/search-index/search-index.js.map +1 -0
  63. package/dist/archive/search-index/search-tokenizer.d.ts +16 -0
  64. package/dist/archive/search-index/search-tokenizer.js +225 -0
  65. package/dist/archive/search-index/search-tokenizer.js.map +1 -0
  66. package/dist/common/cli-command.d.ts +4 -0
  67. package/dist/common/cli-command.js +7 -0
  68. package/dist/common/cli-command.js.map +1 -0
  69. package/dist/common/data-dir.d.ts +3 -0
  70. package/dist/common/data-dir.js +48 -0
  71. package/dist/common/data-dir.js.map +1 -0
  72. package/dist/common/language.d.ts +55 -0
  73. package/dist/common/language.js +208 -0
  74. package/dist/common/language.js.map +1 -0
  75. package/dist/common/llm-scope.d.ts +19 -0
  76. package/dist/common/llm-scope.js +31 -0
  77. package/dist/common/llm-scope.js.map +1 -0
  78. package/dist/common/logging.d.ts +22 -0
  79. package/dist/common/logging.js +141 -0
  80. package/dist/common/logging.js.map +1 -0
  81. package/dist/common/template.d.ts +8 -0
  82. package/dist/common/template.js +54 -0
  83. package/dist/common/template.js.map +1 -0
  84. package/dist/common/tinyld-language.d.ts +6 -0
  85. package/dist/common/tinyld-language.js +34 -0
  86. package/dist/common/tinyld-language.js.map +1 -0
  87. package/dist/common/wiki-graph-dir.d.ts +10 -0
  88. package/dist/common/wiki-graph-dir.js +41 -0
  89. package/dist/common/wiki-graph-dir.js.map +1 -0
  90. package/dist/common/wiki-graph-temp.d.ts +6 -0
  91. package/dist/common/wiki-graph-temp.js +21 -0
  92. package/dist/common/wiki-graph-temp.js.map +1 -0
  93. package/dist/common/wiki-graph-uri.d.ts +28 -0
  94. package/dist/common/wiki-graph-uri.js +171 -0
  95. package/dist/common/wiki-graph-uri.js.map +1 -0
  96. package/dist/context/index.d.ts +1 -0
  97. package/dist/context/index.js +13 -0
  98. package/dist/context/index.js.map +1 -0
  99. package/dist/context/task-context.d.ts +41 -0
  100. package/dist/context/task-context.js +111 -0
  101. package/dist/context/task-context.js.map +1 -0
  102. package/dist/document/database.d.ts +30 -0
  103. package/dist/document/database.js +273 -0
  104. package/dist/document/database.js.map +1 -0
  105. package/dist/document/document.d.ts +153 -0
  106. package/dist/document/document.js +615 -0
  107. package/dist/document/document.js.map +1 -0
  108. package/dist/document/fragments.d.ts +63 -0
  109. package/dist/document/fragments.js +371 -0
  110. package/dist/document/fragments.js.map +1 -0
  111. package/dist/document/index.d.ts +13 -0
  112. package/dist/document/index.js +62 -0
  113. package/dist/document/index.js.map +1 -0
  114. package/dist/document/schema.d.ts +8 -0
  115. package/dist/document/schema.js +472 -0
  116. package/dist/document/schema.js.map +1 -0
  117. package/dist/document/shared-state-database.d.ts +9 -0
  118. package/dist/document/shared-state-database.js +193 -0
  119. package/dist/document/shared-state-database.js.map +1 -0
  120. package/dist/document/stores.d.ts +203 -0
  121. package/dist/document/stores.js +1678 -0
  122. package/dist/document/stores.js.map +1 -0
  123. package/dist/document/text-streams.d.ts +86 -0
  124. package/dist/document/text-streams.js +515 -0
  125. package/dist/document/text-streams.js.map +1 -0
  126. package/dist/document/types.d.ts +148 -0
  127. package/dist/document/types.js +69 -0
  128. package/dist/document/types.js.map +1 -0
  129. package/dist/editor/clue.d.ts +27 -0
  130. package/dist/editor/clue.js +158 -0
  131. package/dist/editor/clue.js.map +1 -0
  132. package/dist/editor/compressor.d.ts +18 -0
  133. package/dist/editor/compressor.js +68 -0
  134. package/dist/editor/compressor.js.map +1 -0
  135. package/dist/editor/editor.d.ts +39 -0
  136. package/dist/editor/editor.js +253 -0
  137. package/dist/editor/editor.js.map +1 -0
  138. package/dist/editor/feedback.d.ts +16 -0
  139. package/dist/editor/feedback.js +104 -0
  140. package/dist/editor/feedback.js.map +1 -0
  141. package/dist/editor/index.d.ts +17 -0
  142. package/dist/editor/index.js +5 -0
  143. package/dist/editor/index.js.map +1 -0
  144. package/dist/editor/language-review.d.ts +14 -0
  145. package/dist/editor/language-review.js +35 -0
  146. package/dist/editor/language-review.js.map +1 -0
  147. package/dist/editor/log.d.ts +37 -0
  148. package/dist/editor/log.js +202 -0
  149. package/dist/editor/log.js.map +1 -0
  150. package/dist/editor/markup.d.ts +20 -0
  151. package/dist/editor/markup.js +294 -0
  152. package/dist/editor/markup.js.map +1 -0
  153. package/dist/editor/prompt-templates.d.ts +6 -0
  154. package/dist/editor/prompt-templates.js +11 -0
  155. package/dist/editor/prompt-templates.js.map +1 -0
  156. package/dist/editor/response.d.ts +5 -0
  157. package/dist/editor/response.js +31 -0
  158. package/dist/editor/response.js.map +1 -0
  159. package/dist/editor/review.d.ts +34 -0
  160. package/dist/editor/review.js +189 -0
  161. package/dist/editor/review.js.map +1 -0
  162. package/dist/editor/types.d.ts +31 -0
  163. package/dist/editor/types.js +21 -0
  164. package/dist/editor/types.js.map +1 -0
  165. package/dist/evidence-selection/anchor-resolver.d.ts +43 -0
  166. package/dist/evidence-selection/anchor-resolver.js +783 -0
  167. package/dist/evidence-selection/anchor-resolver.js.map +1 -0
  168. package/dist/evidence-selection/anchor-types.d.ts +27 -0
  169. package/dist/evidence-selection/anchor-types.js +1 -0
  170. package/dist/evidence-selection/anchor-types.js.map +1 -0
  171. package/dist/evidence-selection/index.d.ts +8 -0
  172. package/dist/evidence-selection/index.js +32 -0
  173. package/dist/evidence-selection/index.js.map +1 -0
  174. package/dist/evidence-selection/prompt.d.ts +18 -0
  175. package/dist/evidence-selection/prompt.js +54 -0
  176. package/dist/evidence-selection/prompt.js.map +1 -0
  177. package/dist/evidence-selection/quote-score.d.ts +29 -0
  178. package/dist/evidence-selection/quote-score.js +331 -0
  179. package/dist/evidence-selection/quote-score.js.map +1 -0
  180. package/dist/evidence-selection/selection-resolver.d.ts +19 -0
  181. package/dist/evidence-selection/selection-resolver.js +303 -0
  182. package/dist/evidence-selection/selection-resolver.js.map +1 -0
  183. package/dist/evidence-selection/text.d.ts +4 -0
  184. package/dist/evidence-selection/text.js +66 -0
  185. package/dist/evidence-selection/text.js.map +1 -0
  186. package/dist/evidence-selection/types.d.ts +36 -0
  187. package/dist/evidence-selection/types.js +1 -0
  188. package/dist/evidence-selection/types.js.map +1 -0
  189. package/dist/facade/app.d.ts +75 -0
  190. package/dist/facade/app.js +141 -0
  191. package/dist/facade/app.js.map +1 -0
  192. package/dist/facade/build-queue.d.ts +181 -0
  193. package/dist/facade/build-queue.js +1442 -0
  194. package/dist/facade/build-queue.js.map +1 -0
  195. package/dist/facade/chapter-build.d.ts +60 -0
  196. package/dist/facade/chapter-build.js +1020 -0
  197. package/dist/facade/chapter-build.js.map +1 -0
  198. package/dist/facade/chapter.d.ts +168 -0
  199. package/dist/facade/chapter.js +944 -0
  200. package/dist/facade/chapter.js.map +1 -0
  201. package/dist/facade/digest.d.ts +55 -0
  202. package/dist/facade/digest.js +168 -0
  203. package/dist/facade/digest.js.map +1 -0
  204. package/dist/facade/graph.d.ts +60 -0
  205. package/dist/facade/graph.js +203 -0
  206. package/dist/facade/graph.js.map +1 -0
  207. package/dist/facade/import.d.ts +49 -0
  208. package/dist/facade/import.js +262 -0
  209. package/dist/facade/import.js.map +1 -0
  210. package/dist/facade/index.d.ts +39 -0
  211. package/dist/facade/index.js +171 -0
  212. package/dist/facade/index.js.map +1 -0
  213. package/dist/facade/knowledge-graph-build.d.ts +75 -0
  214. package/dist/facade/knowledge-graph-build.js +897 -0
  215. package/dist/facade/knowledge-graph-build.js.map +1 -0
  216. package/dist/facade/llm-sampling.d.ts +11 -0
  217. package/dist/facade/llm-sampling.js +58 -0
  218. package/dist/facade/llm-sampling.js.map +1 -0
  219. package/dist/facade/types.d.ts +8 -0
  220. package/dist/facade/types.js +1 -0
  221. package/dist/facade/types.js.map +1 -0
  222. package/dist/facade/wiki-graph-archive.d.ts +41 -0
  223. package/dist/facade/wiki-graph-archive.js +130 -0
  224. package/dist/facade/wiki-graph-archive.js.map +1 -0
  225. package/dist/gc/files.d.ts +15 -0
  226. package/dist/gc/files.js +141 -0
  227. package/dist/gc/files.js.map +1 -0
  228. package/dist/gc/index.d.ts +2 -0
  229. package/dist/gc/index.js +5 -0
  230. package/dist/gc/index.js.map +1 -0
  231. package/dist/gc/lock.d.ts +3 -0
  232. package/dist/gc/lock.js +137 -0
  233. package/dist/gc/lock.js.map +1 -0
  234. package/dist/gc/runner.d.ts +9 -0
  235. package/dist/gc/runner.js +129 -0
  236. package/dist/gc/runner.js.map +1 -0
  237. package/dist/gc/tmp-gc.d.ts +5 -0
  238. package/dist/gc/tmp-gc.js +57 -0
  239. package/dist/gc/tmp-gc.js.map +1 -0
  240. package/dist/gc/types.d.ts +24 -0
  241. package/dist/gc/types.js +1 -0
  242. package/dist/gc/types.js.map +1 -0
  243. package/dist/gc.cjs +10041 -0
  244. package/dist/gc.cjs.map +1 -0
  245. package/dist/gc.d.cts +10 -0
  246. package/dist/gc.d.ts +2 -0
  247. package/dist/gc.js +5 -0
  248. package/dist/gc.js.map +1 -0
  249. package/dist/guaranteed/classifier.d.ts +10 -0
  250. package/dist/guaranteed/classifier.js +88 -0
  251. package/dist/guaranteed/classifier.js.map +1 -0
  252. package/dist/guaranteed/errors.d.ts +38 -0
  253. package/dist/guaranteed/errors.js +73 -0
  254. package/dist/guaranteed/errors.js.map +1 -0
  255. package/dist/guaranteed/index.d.ts +7 -0
  256. package/dist/guaranteed/index.js +21 -0
  257. package/dist/guaranteed/index.js.map +1 -0
  258. package/dist/guaranteed/request.d.ts +8 -0
  259. package/dist/guaranteed/request.js +206 -0
  260. package/dist/guaranteed/request.js.map +1 -0
  261. package/dist/guaranteed/response.d.ts +12 -0
  262. package/dist/guaranteed/response.js +98 -0
  263. package/dist/guaranteed/response.js.map +1 -0
  264. package/dist/guaranteed/types.d.ts +20 -0
  265. package/dist/guaranteed/types.js +1 -0
  266. package/dist/guaranteed/types.js.map +1 -0
  267. package/dist/index-B8NNnQ8P.d.ts +424 -0
  268. package/dist/index.cjs +34774 -0
  269. package/dist/index.cjs.map +1 -0
  270. package/dist/index.d.cts +2462 -0
  271. package/dist/index.d.ts +79 -0
  272. package/dist/index.js +168 -0
  273. package/dist/index.js.map +1 -0
  274. package/dist/legacy-sdpub/upgrade.d.ts +7 -0
  275. package/dist/legacy-sdpub/upgrade.js +795 -0
  276. package/dist/legacy-sdpub/upgrade.js.map +1 -0
  277. package/dist/llm/cache.d.ts +13 -0
  278. package/dist/llm/cache.js +35 -0
  279. package/dist/llm/cache.js.map +1 -0
  280. package/dist/llm/client.d.ts +26 -0
  281. package/dist/llm/client.js +572 -0
  282. package/dist/llm/client.js.map +1 -0
  283. package/dist/llm/context.d.ts +22 -0
  284. package/dist/llm/context.js +78 -0
  285. package/dist/llm/context.js.map +1 -0
  286. package/dist/llm/errors.d.ts +7 -0
  287. package/dist/llm/errors.js +12 -0
  288. package/dist/llm/errors.js.map +1 -0
  289. package/dist/llm/index.d.ts +7 -0
  290. package/dist/llm/index.js +17 -0
  291. package/dist/llm/index.js.map +1 -0
  292. package/dist/llm/request-log.d.ts +9 -0
  293. package/dist/llm/request-log.js +35 -0
  294. package/dist/llm/request-log.js.map +1 -0
  295. package/dist/llm/sampling.d.ts +11 -0
  296. package/dist/llm/sampling.js +67 -0
  297. package/dist/llm/sampling.js.map +1 -0
  298. package/dist/llm/types.d.ts +50 -0
  299. package/dist/llm/types.js +1 -0
  300. package/dist/llm/types.js.map +1 -0
  301. package/dist/output/epub/archive.d.ts +9 -0
  302. package/dist/output/epub/archive.js +81 -0
  303. package/dist/output/epub/archive.js.map +1 -0
  304. package/dist/output/epub/book.d.ts +15 -0
  305. package/dist/output/epub/book.js +76 -0
  306. package/dist/output/epub/book.js.map +1 -0
  307. package/dist/output/epub/content.d.ts +9 -0
  308. package/dist/output/epub/content.js +35 -0
  309. package/dist/output/epub/content.js.map +1 -0
  310. package/dist/output/epub/index.d.ts +20 -0
  311. package/dist/output/epub/index.js +14 -0
  312. package/dist/output/epub/index.js.map +1 -0
  313. package/dist/output/epub/model.d.ts +24 -0
  314. package/dist/output/epub/model.js +1 -0
  315. package/dist/output/epub/model.js.map +1 -0
  316. package/dist/output/epub/navigation.d.ts +10 -0
  317. package/dist/output/epub/navigation.js +39 -0
  318. package/dist/output/epub/navigation.js.map +1 -0
  319. package/dist/output/epub/package.d.ts +17 -0
  320. package/dist/output/epub/package.js +29 -0
  321. package/dist/output/epub/package.js.map +1 -0
  322. package/dist/output/epub/shared.d.ts +4 -0
  323. package/dist/output/epub/shared.js +12 -0
  324. package/dist/output/epub/shared.js.map +1 -0
  325. package/dist/output/epub/templates.d.ts +35 -0
  326. package/dist/output/epub/templates.js +26 -0
  327. package/dist/output/epub/templates.js.map +1 -0
  328. package/dist/output/index.d.ts +14 -0
  329. package/dist/output/index.js +11 -0
  330. package/dist/output/index.js.map +1 -0
  331. package/dist/output/plain-text.d.ts +18 -0
  332. package/dist/output/plain-text.js +56 -0
  333. package/dist/output/plain-text.js.map +1 -0
  334. package/dist/progress/index.d.ts +3 -0
  335. package/dist/progress/index.js +14 -0
  336. package/dist/progress/index.js.map +1 -0
  337. package/dist/progress/reporter.d.ts +10 -0
  338. package/dist/progress/reporter.js +79 -0
  339. package/dist/progress/reporter.js.map +1 -0
  340. package/dist/progress/tracker.d.ts +37 -0
  341. package/dist/progress/tracker.js +119 -0
  342. package/dist/progress/tracker.js.map +1 -0
  343. package/dist/progress/types.d.ts +28 -0
  344. package/dist/progress/types.js +1 -0
  345. package/dist/progress/types.js.map +1 -0
  346. package/dist/reader/attention/attention.d.ts +39 -0
  347. package/dist/reader/attention/attention.js +123 -0
  348. package/dist/reader/attention/attention.js.map +1 -0
  349. package/dist/reader/attention/index.d.ts +9 -0
  350. package/dist/reader/attention/index.js +5 -0
  351. package/dist/reader/attention/index.js.map +1 -0
  352. package/dist/reader/attention/wave-reflection.d.ts +21 -0
  353. package/dist/reader/attention/wave-reflection.js +153 -0
  354. package/dist/reader/attention/wave-reflection.js.map +1 -0
  355. package/dist/reader/attention/working-memory.d.ts +28 -0
  356. package/dist/reader/attention/working-memory.js +62 -0
  357. package/dist/reader/attention/working-memory.js.map +1 -0
  358. package/dist/reader/chunk-batch/extract.d.ts +13 -0
  359. package/dist/reader/chunk-batch/extract.js +14 -0
  360. package/dist/reader/chunk-batch/extract.js.map +1 -0
  361. package/dist/reader/chunk-batch/extractor.d.ts +17 -0
  362. package/dist/reader/chunk-batch/extractor.js +337 -0
  363. package/dist/reader/chunk-batch/extractor.js.map +1 -0
  364. package/dist/reader/chunk-batch/fragment-projection.d.ts +34 -0
  365. package/dist/reader/chunk-batch/fragment-projection.js +94 -0
  366. package/dist/reader/chunk-batch/fragment-projection.js.map +1 -0
  367. package/dist/reader/chunk-batch/index.d.ts +12 -0
  368. package/dist/reader/chunk-batch/index.js +13 -0
  369. package/dist/reader/chunk-batch/index.js.map +1 -0
  370. package/dist/reader/chunk-batch/language.d.ts +9 -0
  371. package/dist/reader/chunk-batch/language.js +23 -0
  372. package/dist/reader/chunk-batch/language.js.map +1 -0
  373. package/dist/reader/chunk-batch/parser.d.ts +94 -0
  374. package/dist/reader/chunk-batch/parser.js +640 -0
  375. package/dist/reader/chunk-batch/parser.js.map +1 -0
  376. package/dist/reader/chunk-batch/prompt-templates.d.ts +6 -0
  377. package/dist/reader/chunk-batch/prompt-templates.js +11 -0
  378. package/dist/reader/chunk-batch/prompt-templates.js.map +1 -0
  379. package/dist/reader/chunk-batch/types.d.ts +85 -0
  380. package/dist/reader/chunk-batch/types.js +1 -0
  381. package/dist/reader/chunk-batch/types.js.map +1 -0
  382. package/dist/reader/index.d.ts +13 -0
  383. package/dist/reader/index.js +7 -0
  384. package/dist/reader/index.js.map +1 -0
  385. package/dist/reader/reader.d.ts +37 -0
  386. package/dist/reader/reader.js +82 -0
  387. package/dist/reader/reader.js.map +1 -0
  388. package/dist/reader/segment/index.d.ts +2 -0
  389. package/dist/reader/segment/index.js +5 -0
  390. package/dist/reader/segment/index.js.map +1 -0
  391. package/dist/reader/segment/intl-segmenter.d.ts +5 -0
  392. package/dist/reader/segment/intl-segmenter.js +102 -0
  393. package/dist/reader/segment/intl-segmenter.js.map +1 -0
  394. package/dist/reader/segment/segment.d.ts +5 -0
  395. package/dist/reader/segment/segment.js +9 -0
  396. package/dist/reader/segment/segment.js.map +1 -0
  397. package/dist/reader/segment/types.d.ts +14 -0
  398. package/dist/reader/segment/types.js +1 -0
  399. package/dist/reader/segment/types.js.map +1 -0
  400. package/dist/reader/types.d.ts +29 -0
  401. package/dist/reader/types.js +1 -0
  402. package/dist/reader/types.js.map +1 -0
  403. package/dist/serial.d.ts +89 -0
  404. package/dist/serial.js +476 -0
  405. package/dist/serial.js.map +1 -0
  406. package/dist/source/adapter.d.ts +15 -0
  407. package/dist/source/adapter.js +1 -0
  408. package/dist/source/adapter.js.map +1 -0
  409. package/dist/source/epub/archive.d.ts +27 -0
  410. package/dist/source/epub/archive.js +189 -0
  411. package/dist/source/epub/archive.js.map +1 -0
  412. package/dist/source/epub/content.d.ts +22 -0
  413. package/dist/source/epub/content.js +183 -0
  414. package/dist/source/epub/content.js.map +1 -0
  415. package/dist/source/epub/document.d.ts +55 -0
  416. package/dist/source/epub/document.js +179 -0
  417. package/dist/source/epub/document.js.map +1 -0
  418. package/dist/source/epub/index.d.ts +10 -0
  419. package/dist/source/epub/index.js +6 -0
  420. package/dist/source/epub/index.js.map +1 -0
  421. package/dist/source/epub/navigation.d.ts +16 -0
  422. package/dist/source/epub/navigation.js +215 -0
  423. package/dist/source/epub/navigation.js.map +1 -0
  424. package/dist/source/epub/package.d.ts +33 -0
  425. package/dist/source/epub/package.js +237 -0
  426. package/dist/source/epub/package.js.map +1 -0
  427. package/dist/source/epub/xml.d.ts +16 -0
  428. package/dist/source/epub/xml.js +111 -0
  429. package/dist/source/epub/xml.js.map +1 -0
  430. package/dist/source/index.d.ts +12 -0
  431. package/dist/source/index.js +32 -0
  432. package/dist/source/index.js.map +1 -0
  433. package/dist/source/meta.d.ts +30 -0
  434. package/dist/source/meta.js +22 -0
  435. package/dist/source/meta.js.map +1 -0
  436. package/dist/source/plain-text.d.ts +16 -0
  437. package/dist/source/plain-text.js +86 -0
  438. package/dist/source/plain-text.js.map +1 -0
  439. package/dist/source/toc.d.ts +16 -0
  440. package/dist/source/toc.js +17 -0
  441. package/dist/source/toc.js.map +1 -0
  442. package/dist/source/types.d.ts +16 -0
  443. package/dist/source/types.js +1 -0
  444. package/dist/source/types.js.map +1 -0
  445. package/dist/topology/grouping.d.ts +15 -0
  446. package/dist/topology/grouping.js +18 -0
  447. package/dist/topology/grouping.js.map +1 -0
  448. package/dist/topology/index.d.ts +21 -0
  449. package/dist/topology/index.js +5 -0
  450. package/dist/topology/index.js.map +1 -0
  451. package/dist/topology/resource-segmentation.d.ts +13 -0
  452. package/dist/topology/resource-segmentation.js +111 -0
  453. package/dist/topology/resource-segmentation.js.map +1 -0
  454. package/dist/topology/segment-incision.d.ts +18 -0
  455. package/dist/topology/segment-incision.js +197 -0
  456. package/dist/topology/segment-incision.js.map +1 -0
  457. package/dist/topology/snake-detector.d.ts +13 -0
  458. package/dist/topology/snake-detector.js +520 -0
  459. package/dist/topology/snake-detector.js.map +1 -0
  460. package/dist/topology/snake-graph-builder.d.ts +14 -0
  461. package/dist/topology/snake-graph-builder.js +76 -0
  462. package/dist/topology/snake-graph-builder.js.map +1 -0
  463. package/dist/topology/topology.d.ts +29 -0
  464. package/dist/topology/topology.js +348 -0
  465. package/dist/topology/topology.js.map +1 -0
  466. package/dist/topology/weights.d.ts +10 -0
  467. package/dist/topology/weights.js +84 -0
  468. package/dist/topology/weights.js.map +1 -0
  469. package/dist/types-FVIqiLC9.d.cts +24 -0
  470. package/dist/utils/async-semaphore.d.ts +7 -0
  471. package/dist/utils/async-semaphore.js +40 -0
  472. package/dist/utils/async-semaphore.js.map +1 -0
  473. package/dist/utils/enum.d.ts +5 -0
  474. package/dist/utils/enum.js +18 -0
  475. package/dist/utils/enum.js.map +1 -0
  476. package/dist/utils/hash.d.ts +3 -0
  477. package/dist/utils/hash.js +132 -0
  478. package/dist/utils/hash.js.map +1 -0
  479. package/dist/utils/node-error.d.ts +4 -0
  480. package/dist/utils/node-error.js +59 -0
  481. package/dist/utils/node-error.js.map +1 -0
  482. package/dist/wikg/archive-uri.d.ts +1 -0
  483. package/dist/wikg/archive-uri.js +37 -0
  484. package/dist/wikg/archive-uri.js.map +1 -0
  485. package/dist/wikg/archive.d.ts +28 -0
  486. package/dist/wikg/archive.js +496 -0
  487. package/dist/wikg/archive.js.map +1 -0
  488. package/dist/wikg/index.d.ts +31 -0
  489. package/dist/wikg/index.js +60 -0
  490. package/dist/wikg/index.js.map +1 -0
  491. package/dist/wikg/wikg-coordinator.d.ts +45 -0
  492. package/dist/wikg/wikg-coordinator.js +1687 -0
  493. package/dist/wikg/wikg-coordinator.js.map +1 -0
  494. package/dist/wikg/wiki-graph-archive-file.d.ts +42 -0
  495. package/dist/wikg/wiki-graph-archive-file.js +78 -0
  496. package/dist/wikg/wiki-graph-archive-file.js.map +1 -0
  497. package/dist/wikilink/index.d.ts +10 -0
  498. package/dist/wikilink/index.js +7 -0
  499. package/dist/wikilink/index.js.map +1 -0
  500. package/dist/wikilink/relation-discovery.d.ts +31 -0
  501. package/dist/wikilink/relation-discovery.js +477 -0
  502. package/dist/wikilink/relation-discovery.js.map +1 -0
  503. package/dist/wikilink/types.d.ts +23 -0
  504. package/dist/wikilink/types.js +1 -0
  505. package/dist/wikilink/types.js.map +1 -0
  506. package/dist/wikilink/window.d.ts +7 -0
  507. package/dist/wikilink/window.js +53 -0
  508. package/dist/wikilink/window.js.map +1 -0
  509. package/dist/wikimatch/enrichment.d.ts +10 -0
  510. package/dist/wikimatch/enrichment.js +55 -0
  511. package/dist/wikimatch/enrichment.js.map +1 -0
  512. package/dist/wikimatch/index.d.ts +16 -0
  513. package/dist/wikimatch/index.js +66 -0
  514. package/dist/wikimatch/index.js.map +1 -0
  515. package/dist/wikimatch/option-narrowing.d.ts +17 -0
  516. package/dist/wikimatch/option-narrowing.js +208 -0
  517. package/dist/wikimatch/option-narrowing.js.map +1 -0
  518. package/dist/wikimatch/options.d.ts +14 -0
  519. package/dist/wikimatch/options.js +155 -0
  520. package/dist/wikimatch/options.js.map +1 -0
  521. package/dist/wikimatch/policy-judge.d.ts +17 -0
  522. package/dist/wikimatch/policy-judge.js +430 -0
  523. package/dist/wikimatch/policy-judge.js.map +1 -0
  524. package/dist/wikimatch/range-suppression.d.ts +9 -0
  525. package/dist/wikimatch/range-suppression.js +27 -0
  526. package/dist/wikimatch/range-suppression.js.map +1 -0
  527. package/dist/wikimatch/surface-screening.d.ts +16 -0
  528. package/dist/wikimatch/surface-screening.js +168 -0
  529. package/dist/wikimatch/surface-screening.js.map +1 -0
  530. package/dist/wikimatch/surface-window.d.ts +6 -0
  531. package/dist/wikimatch/surface-window.js +44 -0
  532. package/dist/wikimatch/surface-window.js.map +1 -0
  533. package/dist/wikimatch/types.d.ts +151 -0
  534. package/dist/wikimatch/types.js +1 -0
  535. package/dist/wikimatch/types.js.map +1 -0
  536. package/dist/wikimatch/wikispine.d.ts +43 -0
  537. package/dist/wikimatch/wikispine.js +399 -0
  538. package/dist/wikimatch/wikispine.js.map +1 -0
  539. package/dist/wikimatch/window.d.ts +6 -0
  540. package/dist/wikimatch/window.js +83 -0
  541. package/dist/wikimatch/window.js.map +1 -0
  542. package/dist/wikimatch/words.d.ts +16 -0
  543. package/dist/wikimatch/words.js +66 -0
  544. package/dist/wikimatch/words.js.map +1 -0
  545. package/dist/wikipage/cache.d.ts +18 -0
  546. package/dist/wikipage/cache.js +404 -0
  547. package/dist/wikipage/cache.js.map +1 -0
  548. package/dist/wikipage/fetch-log.d.ts +17 -0
  549. package/dist/wikipage/fetch-log.js +143 -0
  550. package/dist/wikipage/fetch-log.js.map +1 -0
  551. package/dist/wikipage/index.d.ts +14 -0
  552. package/dist/wikipage/index.js +17 -0
  553. package/dist/wikipage/index.js.map +1 -0
  554. package/dist/wikipage/normalizer.d.ts +14 -0
  555. package/dist/wikipage/normalizer.js +147 -0
  556. package/dist/wikipage/normalizer.js.map +1 -0
  557. package/dist/wikipage/rate-limiter.d.ts +13 -0
  558. package/dist/wikipage/rate-limiter.js +84 -0
  559. package/dist/wikipage/rate-limiter.js.map +1 -0
  560. package/dist/wikipage/resolver.d.ts +26 -0
  561. package/dist/wikipage/resolver.js +325 -0
  562. package/dist/wikipage/resolver.js.map +1 -0
  563. package/dist/wikipage/types.d.ts +96 -0
  564. package/dist/wikipage/types.js +1 -0
  565. package/dist/wikipage/types.js.map +1 -0
  566. package/dist/wikipage/wikimedia-client.d.ts +48 -0
  567. package/dist/wikipage/wikimedia-client.js +397 -0
  568. package/dist/wikipage/wikimedia-client.js.map +1 -0
  569. package/dist/worker-BgQ0Xl8T.d.cts +181 -0
  570. package/dist/worker.cjs +5259 -0
  571. package/dist/worker.cjs.map +1 -0
  572. package/dist/worker.d.cts +2 -0
  573. package/dist/worker.d.ts +2 -0
  574. package/dist/worker.js +5 -0
  575. package/dist/worker.js.map +1 -0
  576. package/package.json +78 -0
@@ -0,0 +1,496 @@
1
+ import { randomBytes } from "crypto";
2
+ import { createWriteStream } from "fs";
3
+ import {
4
+ mkdir,
5
+ open as openFile,
6
+ readFile,
7
+ readdir,
8
+ writeFile
9
+ } from "fs/promises";
10
+ import { dirname, join, posix, relative, resolve, sep } from "path";
11
+ import { finished } from "stream/promises";
12
+ import { inflateRaw } from "zlib";
13
+ import { z } from "zod";
14
+ import {
15
+ open as openZip
16
+ } from "yauzl";
17
+ import { ZipFile as YazlZipFile } from "yazl";
18
+ import { Database } from "../document/database.js";
19
+ const WIKG_FORMAT_VERSION = 1;
20
+ const WIKG_MUTATION_TOKEN_PATH = ".wikg-mutation-token";
21
+ const WIKG_MANIFEST_PATH = "manifest.json";
22
+ const SEARCH_INDEX_DATABASE_PATH = "fts.db";
23
+ const WIKG_MANIFEST_CONTENT = `${JSON.stringify({
24
+ formatVersion: WIKG_FORMAT_VERSION
25
+ })}
26
+ `;
27
+ const WIKG_MUTATION_TOKEN_MAGIC = "wikg-mutation-token:v1";
28
+ const WIKG_MUTATION_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;
29
+ const WIKG_ARCHIVE_PATTERNS = [
30
+ /^\.wikg-mutation-token$/u,
31
+ /^manifest\.json$/u,
32
+ /^database\.db$/u,
33
+ /^fts\.db$/u,
34
+ /^toc\.json$/u,
35
+ /^cover\/(?:data\.bin|info\.json)$/u,
36
+ /^texts\/(?:source|summary)\/\d+\.txt$/u
37
+ ];
38
+ const wikgManifestSchema = z.object({
39
+ formatVersion: z.literal(WIKG_FORMAT_VERSION)
40
+ });
41
+ class WikgArchiveReader {
42
+ #entryByPath;
43
+ #entries;
44
+ #file;
45
+ #path;
46
+ #zipFile;
47
+ constructor(path, zipFile, entries) {
48
+ this.#path = path;
49
+ this.#zipFile = zipFile;
50
+ this.#entryByPath = new Map(
51
+ entries.map((entry) => [normalizeArchivePath(entry.fileName), entry]).filter(([entryPath]) => entryPath !== "").filter(([entryPath]) => isWikgArchivePath(entryPath))
52
+ );
53
+ this.#entries = [...this.#entryByPath.keys()].sort(
54
+ (left, right) => left.localeCompare(right)
55
+ );
56
+ }
57
+ static async open(inputPath) {
58
+ const { entries, zipFile } = await openIndexedArchive(inputPath);
59
+ return new WikgArchiveReader(inputPath, zipFile, entries);
60
+ }
61
+ close() {
62
+ this.#zipFile.close();
63
+ if (this.#file !== void 0) {
64
+ void this.#file.then(async (file) => {
65
+ await file.close();
66
+ });
67
+ this.#file = void 0;
68
+ }
69
+ }
70
+ listEntries() {
71
+ return this.#entries;
72
+ }
73
+ async readEntry(entryPath) {
74
+ const entry = this.#entryByPath.get(normalizeArchivePath(entryPath));
75
+ if (entry === void 0) {
76
+ return void 0;
77
+ }
78
+ return await readArchiveEntryBufferFromFile(await this.#getFile(), entry);
79
+ }
80
+ async #getFile() {
81
+ this.#file ??= openFile(this.#path, "r");
82
+ return await this.#file;
83
+ }
84
+ }
85
+ async function extractWikgArchive(inputPath, outputDirectoryPath) {
86
+ const { entries, zipFile } = await openIndexedArchive(inputPath);
87
+ const file = await openFile(inputPath, "r");
88
+ try {
89
+ for (const entry of entries) {
90
+ const archivePath = normalizeArchivePath(entry.fileName);
91
+ if (archivePath === "") {
92
+ throw new Error(`Invalid archive entry path: ${entry.fileName}`);
93
+ }
94
+ if (!isWikgArchivePath(archivePath)) {
95
+ continue;
96
+ }
97
+ const targetPath = resolve(outputDirectoryPath, archivePath);
98
+ assertWithinDirectory(outputDirectoryPath, targetPath, archivePath);
99
+ await mkdir(dirname(targetPath), { recursive: true });
100
+ await writeFile(
101
+ targetPath,
102
+ await readArchiveEntryBufferFromFile(file, entry)
103
+ );
104
+ }
105
+ } finally {
106
+ await file.close();
107
+ zipFile.close();
108
+ }
109
+ }
110
+ async function writeWikgArchive(documentDirectoryPath, outputPath) {
111
+ await mkdir(dirname(outputPath), { recursive: true });
112
+ const zipFile = new YazlZipFile();
113
+ const files = await listDocumentFiles(documentDirectoryPath);
114
+ const includeSearchIndex = await shouldEmbedSearchIndex(
115
+ documentDirectoryPath
116
+ );
117
+ const entries = sortArchiveEntriesForWrite([
118
+ {
119
+ archivePath: WIKG_MUTATION_TOKEN_PATH,
120
+ content: createWikgMutationTokenContent()
121
+ },
122
+ {
123
+ archivePath: WIKG_MANIFEST_PATH,
124
+ content: Buffer.from(WIKG_MANIFEST_CONTENT, "utf8")
125
+ },
126
+ ...files.filter((file) => {
127
+ if (file.archivePath === WIKG_MANIFEST_PATH) {
128
+ return false;
129
+ }
130
+ if (file.archivePath === WIKG_MUTATION_TOKEN_PATH) {
131
+ return false;
132
+ }
133
+ return file.archivePath !== SEARCH_INDEX_DATABASE_PATH || includeSearchIndex;
134
+ })
135
+ ]);
136
+ for (const entry of entries) {
137
+ if ("content" in entry) {
138
+ zipFile.addBuffer(entry.content, entry.archivePath, {
139
+ compress: false
140
+ });
141
+ } else {
142
+ zipFile.addFile(entry.absolutePath, entry.archivePath, {
143
+ compress: false
144
+ });
145
+ }
146
+ }
147
+ zipFile.end();
148
+ const output = createWriteStream(outputPath);
149
+ const outputDone = finished(output);
150
+ const zipDone = finished(zipFile.outputStream);
151
+ zipFile.outputStream.pipe(output);
152
+ await Promise.all([outputDone, zipDone]);
153
+ }
154
+ async function listWikgArchiveEntries(inputPath) {
155
+ const reader = await WikgArchiveReader.open(inputPath);
156
+ try {
157
+ return reader.listEntries();
158
+ } finally {
159
+ reader.close();
160
+ }
161
+ }
162
+ async function readWikgArchiveEntry(inputPath, entryPath) {
163
+ const reader = await WikgArchiveReader.open(inputPath);
164
+ try {
165
+ return await reader.readEntry(entryPath);
166
+ } finally {
167
+ reader.close();
168
+ }
169
+ }
170
+ async function readWikgArchiveMutationToken(inputPath) {
171
+ const reader = await WikgArchiveReader.open(inputPath);
172
+ try {
173
+ const content = await reader.readEntry(WIKG_MUTATION_TOKEN_PATH);
174
+ if (content === void 0) {
175
+ throw new Error(
176
+ `Missing WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`
177
+ );
178
+ }
179
+ return parseWikgMutationToken(content.toString("utf8"));
180
+ } finally {
181
+ reader.close();
182
+ }
183
+ }
184
+ async function writeWikgArchiveWithOverlays(inputPath, outputPath, overlays) {
185
+ await mkdir(dirname(outputPath), { recursive: true });
186
+ const { entries: sourceEntries, zipFile } = await openIndexedArchive(inputPath);
187
+ const overlayByPath = new Map(
188
+ overlays.map((overlay) => [
189
+ normalizeArchivePath(overlay.entryPath),
190
+ overlay
191
+ ])
192
+ );
193
+ const entryPaths = /* @__PURE__ */ new Set();
194
+ for (const entry of sourceEntries) {
195
+ const archivePath = normalizeArchivePath(entry.fileName);
196
+ if (archivePath !== "" && isWikgArchivePath(archivePath)) {
197
+ entryPaths.add(archivePath);
198
+ }
199
+ }
200
+ for (const overlay of overlayByPath.values()) {
201
+ const archivePath = normalizeArchivePath(overlay.entryPath);
202
+ if (archivePath !== "" && isWikgArchivePath(archivePath)) {
203
+ entryPaths.add(archivePath);
204
+ }
205
+ }
206
+ entryPaths.add(WIKG_MUTATION_TOKEN_PATH);
207
+ entryPaths.add(WIKG_MANIFEST_PATH);
208
+ const outputZipFile = new YazlZipFile();
209
+ const sourceFile = await openFile(inputPath, "r");
210
+ try {
211
+ for (const entryPath of sortArchiveEntryPathsForWrite(entryPaths)) {
212
+ const overlay = overlayByPath.get(entryPath);
213
+ if (entryPath === WIKG_MUTATION_TOKEN_PATH) {
214
+ outputZipFile.addBuffer(createWikgMutationTokenContent(), entryPath, {
215
+ compress: false
216
+ });
217
+ continue;
218
+ }
219
+ if (entryPath === WIKG_MANIFEST_PATH) {
220
+ outputZipFile.addBuffer(
221
+ Buffer.from(WIKG_MANIFEST_CONTENT, "utf8"),
222
+ entryPath,
223
+ { compress: false }
224
+ );
225
+ continue;
226
+ }
227
+ if (overlay?.kind === "deleted") {
228
+ continue;
229
+ }
230
+ if (overlay?.kind === "file") {
231
+ outputZipFile.addFile(overlay.workspacePath, entryPath, {
232
+ compress: false
233
+ });
234
+ continue;
235
+ }
236
+ const sourceEntry = sourceEntries.find(
237
+ (candidate) => normalizeArchivePath(candidate.fileName) === entryPath
238
+ );
239
+ if (sourceEntry === void 0) {
240
+ continue;
241
+ }
242
+ outputZipFile.addBuffer(
243
+ await readArchiveEntryBufferFromFile(sourceFile, sourceEntry),
244
+ entryPath,
245
+ { compress: false }
246
+ );
247
+ }
248
+ } finally {
249
+ await sourceFile.close();
250
+ zipFile.close();
251
+ }
252
+ outputZipFile.end();
253
+ const output = createWriteStream(outputPath);
254
+ const outputDone = finished(output);
255
+ const zipDone = finished(outputZipFile.outputStream);
256
+ outputZipFile.outputStream.pipe(output);
257
+ await Promise.all([outputDone, zipDone]);
258
+ }
259
+ async function readWikgArchiveFormatVersion(documentDirectoryPath) {
260
+ return parseWikgManifest(
261
+ await readFile(join(documentDirectoryPath, WIKG_MANIFEST_PATH), "utf8")
262
+ ).formatVersion;
263
+ }
264
+ async function listDocumentFiles(rootDirectoryPath, currentDirectoryPath = rootDirectoryPath) {
265
+ const entries = await readdir(currentDirectoryPath, { withFileTypes: true });
266
+ const files = [];
267
+ for (const entry of [...entries].sort(compareDirEntryName)) {
268
+ const absolutePath = join(currentDirectoryPath, entry.name);
269
+ if (entry.isDirectory()) {
270
+ files.push(...await listDocumentFiles(rootDirectoryPath, absolutePath));
271
+ continue;
272
+ }
273
+ if (!entry.isFile()) {
274
+ continue;
275
+ }
276
+ files.push({
277
+ absolutePath,
278
+ archivePath: relative(rootDirectoryPath, absolutePath).split(sep).join(posix.sep)
279
+ });
280
+ }
281
+ return files.filter((file) => isWikgArchivePath(file.archivePath));
282
+ }
283
+ async function shouldEmbedSearchIndex(documentDirectoryPath) {
284
+ const database = await Database.open(
285
+ join(documentDirectoryPath, "database.db"),
286
+ "",
287
+ {
288
+ readonly: true
289
+ }
290
+ ).catch(() => void 0);
291
+ if (database === void 0) {
292
+ return false;
293
+ }
294
+ try {
295
+ const row = await database.queryOne(
296
+ `
297
+ SELECT fts_embedded
298
+ FROM archive_index_settings
299
+ WHERE id = 1
300
+ `,
301
+ void 0,
302
+ (value) => Number(value.fts_embedded) !== 0
303
+ );
304
+ return row ?? false;
305
+ } catch {
306
+ return false;
307
+ } finally {
308
+ await database.close();
309
+ }
310
+ }
311
+ async function openIndexedArchive(inputPath) {
312
+ const zipFile = await openArchive(inputPath);
313
+ try {
314
+ const entries = await indexArchiveEntries(zipFile);
315
+ await validateArchiveManifest(inputPath, entries);
316
+ return { entries, zipFile };
317
+ } catch (error) {
318
+ zipFile.close();
319
+ throw error;
320
+ }
321
+ }
322
+ async function indexArchiveEntries(zipFile) {
323
+ return await new Promise((resolve2, reject) => {
324
+ const entries = [];
325
+ zipFile.on("entry", (entry) => {
326
+ if (entry.fileName.endsWith("/")) {
327
+ zipFile.readEntry();
328
+ return;
329
+ }
330
+ entries.push(entry);
331
+ zipFile.readEntry();
332
+ });
333
+ zipFile.once("end", () => {
334
+ resolve2(entries);
335
+ });
336
+ zipFile.once("error", (error) => {
337
+ reject(error);
338
+ });
339
+ zipFile.readEntry();
340
+ });
341
+ }
342
+ function compareDirEntryName(left, right) {
343
+ return left.name.localeCompare(right.name);
344
+ }
345
+ function sortArchiveEntriesForWrite(entries) {
346
+ return [...entries].sort(
347
+ (left, right) => compareArchiveEntryPathsForWrite(left.archivePath, right.archivePath)
348
+ );
349
+ }
350
+ function sortArchiveEntryPathsForWrite(paths) {
351
+ return [...paths].sort(compareArchiveEntryPathsForWrite);
352
+ }
353
+ function compareArchiveEntryPathsForWrite(left, right) {
354
+ if (left === WIKG_MUTATION_TOKEN_PATH) {
355
+ return right === WIKG_MUTATION_TOKEN_PATH ? 0 : -1;
356
+ }
357
+ if (right === WIKG_MUTATION_TOKEN_PATH) {
358
+ return 1;
359
+ }
360
+ return left.localeCompare(right);
361
+ }
362
+ function isWikgArchivePath(archivePath) {
363
+ return WIKG_ARCHIVE_PATTERNS.some((pattern) => pattern.test(archivePath));
364
+ }
365
+ async function validateArchiveManifest(inputPath, entries) {
366
+ await validateArchiveMutationToken(inputPath, entries);
367
+ const entry = entries.find(
368
+ (candidate) => normalizeArchivePath(candidate.fileName) === WIKG_MANIFEST_PATH
369
+ );
370
+ if (entry === void 0) {
371
+ throw new Error(`Missing WIKG manifest: ${WIKG_MANIFEST_PATH}.`);
372
+ }
373
+ parseWikgManifest(await readArchiveEntryText(inputPath, entry));
374
+ }
375
+ async function validateArchiveMutationToken(inputPath, entries) {
376
+ const firstEntryPath = normalizeArchivePath(entries[0]?.fileName ?? "");
377
+ if (firstEntryPath !== WIKG_MUTATION_TOKEN_PATH) {
378
+ throw new Error(
379
+ `Missing WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`
380
+ );
381
+ }
382
+ parseWikgMutationToken(await readArchiveEntryText(inputPath, entries[0]));
383
+ }
384
+ function parseWikgManifest(content) {
385
+ let parsed;
386
+ try {
387
+ parsed = JSON.parse(content);
388
+ } catch {
389
+ throw new Error(`Invalid WIKG manifest: ${WIKG_MANIFEST_PATH}.`);
390
+ }
391
+ const result = wikgManifestSchema.safeParse(parsed);
392
+ if (!result.success) {
393
+ throw new Error(
394
+ `Unsupported WIKG format version in ${WIKG_MANIFEST_PATH}.`
395
+ );
396
+ }
397
+ return result.data;
398
+ }
399
+ function createWikgMutationTokenContent() {
400
+ const token = randomBytes(32).toString("base64url");
401
+ return Buffer.from(`${WIKG_MUTATION_TOKEN_MAGIC}
402
+ ${token}
403
+ `, "utf8");
404
+ }
405
+ function parseWikgMutationToken(content) {
406
+ const lines = content.split(/\r?\n/u);
407
+ const magic = lines[0];
408
+ const token = lines[1];
409
+ if (magic !== WIKG_MUTATION_TOKEN_MAGIC || token === void 0 || !WIKG_MUTATION_TOKEN_PATTERN.test(token)) {
410
+ throw new Error(
411
+ `Invalid WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`
412
+ );
413
+ }
414
+ return token;
415
+ }
416
+ function assertWithinDirectory(rootDirectoryPath, targetPath, archivePath) {
417
+ const resolvedRootDirectoryPath = resolve(rootDirectoryPath);
418
+ const rootPrefix = resolvedRootDirectoryPath.endsWith(sep) ? resolvedRootDirectoryPath : `${resolvedRootDirectoryPath}${sep}`;
419
+ if (targetPath === resolvedRootDirectoryPath || targetPath.startsWith(rootPrefix)) {
420
+ return;
421
+ }
422
+ throw new Error(`Invalid archive entry path: ${archivePath}`);
423
+ }
424
+ function normalizeArchivePath(path) {
425
+ const normalized = path.replaceAll("\\", "/").trim();
426
+ const withoutLeadingSlash = normalized.startsWith("/") ? normalized.slice(1) : normalized;
427
+ return posix.normalize(withoutLeadingSlash).replace(/^(\.\/)+/u, "").replace(/^\/+/u, "");
428
+ }
429
+ async function openArchive(path) {
430
+ return await new Promise((resolve2, reject) => {
431
+ openZip(path, { autoClose: false, lazyEntries: true }, (error, zipFile) => {
432
+ if (error !== null || zipFile === void 0) {
433
+ reject(error ?? new Error(`Cannot open archive: ${path}`));
434
+ return;
435
+ }
436
+ resolve2(zipFile);
437
+ });
438
+ });
439
+ }
440
+ async function readArchiveEntryText(inputPath, entry) {
441
+ return (await readArchiveEntryBuffer(inputPath, entry)).toString("utf8");
442
+ }
443
+ async function readArchiveEntryBuffer(inputPath, entry) {
444
+ const file = await openFile(inputPath, "r");
445
+ try {
446
+ return await readArchiveEntryBufferFromFile(file, entry);
447
+ } finally {
448
+ await file.close();
449
+ }
450
+ }
451
+ async function readArchiveEntryBufferFromFile(file, entry) {
452
+ const compressed = await readCompressedArchiveEntryBuffer(file, entry);
453
+ if (entry.compressionMethod === 0) {
454
+ return compressed;
455
+ }
456
+ if (entry.compressionMethod === 8) {
457
+ return await inflateRawBuffer(compressed);
458
+ }
459
+ throw new Error(`Unsupported ZIP compression method: ${entry.fileName}`);
460
+ }
461
+ async function readCompressedArchiveEntryBuffer(file, entry) {
462
+ const header = Buffer.alloc(30);
463
+ await file.read(header, 0, header.length, entry.relativeOffsetOfLocalHeader);
464
+ if (header.readUInt32LE(0) !== 67324752) {
465
+ throw new Error(`Invalid ZIP local file header: ${entry.fileName}`);
466
+ }
467
+ const fileNameLength = header.readUInt16LE(26);
468
+ const extraFieldLength = header.readUInt16LE(28);
469
+ const dataOffset = entry.relativeOffsetOfLocalHeader + 30 + fileNameLength + extraFieldLength;
470
+ const compressed = Buffer.alloc(entry.compressedSize);
471
+ await file.read(compressed, 0, compressed.length, dataOffset);
472
+ return compressed;
473
+ }
474
+ async function inflateRawBuffer(input) {
475
+ return await new Promise((resolveInflate, rejectInflate) => {
476
+ inflateRaw(input, (error, output) => {
477
+ if (error !== null) {
478
+ rejectInflate(error);
479
+ return;
480
+ }
481
+ resolveInflate(output);
482
+ });
483
+ });
484
+ }
485
+ export {
486
+ WIKG_FORMAT_VERSION,
487
+ WikgArchiveReader,
488
+ extractWikgArchive,
489
+ listWikgArchiveEntries,
490
+ readWikgArchiveEntry,
491
+ readWikgArchiveFormatVersion,
492
+ readWikgArchiveMutationToken,
493
+ writeWikgArchive,
494
+ writeWikgArchiveWithOverlays
495
+ };
496
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikg/archive.ts"],"sourcesContent":["import { randomBytes } from \"crypto\";\nimport { createWriteStream } from \"fs\";\nimport {\n mkdir,\n open as openFile,\n readFile,\n readdir,\n writeFile,\n type FileHandle,\n} from \"fs/promises\";\nimport { dirname, join, posix, relative, resolve, sep } from \"path\";\nimport { finished } from \"stream/promises\";\nimport { inflateRaw } from \"zlib\";\n\nimport { z } from \"zod\";\nimport {\n open as openZip,\n type Entry,\n type ZipFile as YauzlZipFile,\n} from \"yauzl\";\nimport { ZipFile as YazlZipFile } from \"yazl\";\n\nimport { Database } from \"../document/database.js\";\n\nexport const WIKG_FORMAT_VERSION = 1;\nconst WIKG_MUTATION_TOKEN_PATH = \".wikg-mutation-token\";\nconst WIKG_MANIFEST_PATH = \"manifest.json\";\nconst SEARCH_INDEX_DATABASE_PATH = \"fts.db\";\nconst WIKG_MANIFEST_CONTENT = `${JSON.stringify({\n formatVersion: WIKG_FORMAT_VERSION,\n})}\\n`;\nconst WIKG_MUTATION_TOKEN_MAGIC = \"wikg-mutation-token:v1\";\nconst WIKG_MUTATION_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;\n\nconst WIKG_ARCHIVE_PATTERNS = [\n /^\\.wikg-mutation-token$/u,\n /^manifest\\.json$/u,\n /^database\\.db$/u,\n /^fts\\.db$/u,\n /^toc\\.json$/u,\n /^cover\\/(?:data\\.bin|info\\.json)$/u,\n /^texts\\/(?:source|summary)\\/\\d+\\.txt$/u,\n] as const;\n\nconst wikgManifestSchema = z.object({\n formatVersion: z.literal(WIKG_FORMAT_VERSION),\n});\n\nexport type WikgArchiveOverlay =\n | {\n readonly entryPath: string;\n readonly kind: \"deleted\";\n }\n | {\n readonly entryPath: string;\n readonly kind: \"file\";\n readonly workspacePath: string;\n };\n\nexport class WikgArchiveReader {\n readonly #entryByPath: Map<string, Entry>;\n readonly #entries: readonly string[];\n #file: Promise<FileHandle> | undefined;\n readonly #path: string;\n readonly #zipFile: YauzlZipFile;\n\n public constructor(\n path: string,\n zipFile: YauzlZipFile,\n entries: readonly Entry[],\n ) {\n this.#path = path;\n this.#zipFile = zipFile;\n this.#entryByPath = new Map(\n entries\n .map((entry) => [normalizeArchivePath(entry.fileName), entry] as const)\n .filter(([entryPath]) => entryPath !== \"\")\n .filter(([entryPath]) => isWikgArchivePath(entryPath)),\n );\n this.#entries = [...this.#entryByPath.keys()].sort((left, right) =>\n left.localeCompare(right),\n );\n }\n\n public static async open(inputPath: string): Promise<WikgArchiveReader> {\n const { entries, zipFile } = await openIndexedArchive(inputPath);\n\n return new WikgArchiveReader(inputPath, zipFile, entries);\n }\n\n public close(): void {\n this.#zipFile.close();\n if (this.#file !== undefined) {\n void this.#file.then(async (file) => {\n await file.close();\n });\n this.#file = undefined;\n }\n }\n\n public listEntries(): readonly string[] {\n return this.#entries;\n }\n\n public async readEntry(entryPath: string): Promise<Buffer | undefined> {\n const entry = this.#entryByPath.get(normalizeArchivePath(entryPath));\n\n if (entry === undefined) {\n return undefined;\n }\n\n return await readArchiveEntryBufferFromFile(await this.#getFile(), entry);\n }\n\n async #getFile(): Promise<FileHandle> {\n this.#file ??= openFile(this.#path, \"r\");\n return await this.#file;\n }\n}\n\nexport async function extractWikgArchive(\n inputPath: string,\n outputDirectoryPath: string,\n): Promise<void> {\n const { entries, zipFile } = await openIndexedArchive(inputPath);\n const file = await openFile(inputPath, \"r\");\n\n try {\n for (const entry of entries) {\n const archivePath = normalizeArchivePath(entry.fileName);\n\n if (archivePath === \"\") {\n throw new Error(`Invalid archive entry path: ${entry.fileName}`);\n }\n if (!isWikgArchivePath(archivePath)) {\n continue;\n }\n\n const targetPath = resolve(outputDirectoryPath, archivePath);\n\n assertWithinDirectory(outputDirectoryPath, targetPath, archivePath);\n await mkdir(dirname(targetPath), { recursive: true });\n await writeFile(\n targetPath,\n await readArchiveEntryBufferFromFile(file, entry),\n );\n }\n } finally {\n await file.close();\n zipFile.close();\n }\n}\n\nexport async function writeWikgArchive(\n documentDirectoryPath: string,\n outputPath: string,\n): Promise<void> {\n await mkdir(dirname(outputPath), { recursive: true });\n\n const zipFile = new YazlZipFile();\n const files = await listDocumentFiles(documentDirectoryPath);\n const includeSearchIndex = await shouldEmbedSearchIndex(\n documentDirectoryPath,\n );\n const entries = sortArchiveEntriesForWrite([\n {\n archivePath: WIKG_MUTATION_TOKEN_PATH,\n content: createWikgMutationTokenContent(),\n },\n {\n archivePath: WIKG_MANIFEST_PATH,\n content: Buffer.from(WIKG_MANIFEST_CONTENT, \"utf8\"),\n },\n ...files.filter((file) => {\n if (file.archivePath === WIKG_MANIFEST_PATH) {\n return false;\n }\n if (file.archivePath === WIKG_MUTATION_TOKEN_PATH) {\n return false;\n }\n\n return (\n file.archivePath !== SEARCH_INDEX_DATABASE_PATH || includeSearchIndex\n );\n }),\n ]);\n\n for (const entry of entries) {\n if (\"content\" in entry) {\n zipFile.addBuffer(entry.content, entry.archivePath, {\n compress: false,\n });\n } else {\n zipFile.addFile(entry.absolutePath, entry.archivePath, {\n compress: false,\n });\n }\n }\n\n zipFile.end();\n\n const output = createWriteStream(outputPath);\n const outputDone = finished(output);\n const zipDone = finished(zipFile.outputStream);\n\n zipFile.outputStream.pipe(output);\n await Promise.all([outputDone, zipDone]);\n}\n\nexport async function listWikgArchiveEntries(\n inputPath: string,\n): Promise<readonly string[]> {\n const reader = await WikgArchiveReader.open(inputPath);\n\n try {\n return reader.listEntries();\n } finally {\n reader.close();\n }\n}\n\nexport async function readWikgArchiveEntry(\n inputPath: string,\n entryPath: string,\n): Promise<Buffer | undefined> {\n const reader = await WikgArchiveReader.open(inputPath);\n\n try {\n return await reader.readEntry(entryPath);\n } finally {\n reader.close();\n }\n}\n\nexport async function readWikgArchiveMutationToken(\n inputPath: string,\n): Promise<string> {\n const reader = await WikgArchiveReader.open(inputPath);\n\n try {\n const content = await reader.readEntry(WIKG_MUTATION_TOKEN_PATH);\n\n if (content === undefined) {\n throw new Error(\n `Missing WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`,\n );\n }\n\n return parseWikgMutationToken(content.toString(\"utf8\"));\n } finally {\n reader.close();\n }\n}\n\nexport async function writeWikgArchiveWithOverlays(\n inputPath: string,\n outputPath: string,\n overlays: readonly WikgArchiveOverlay[],\n): Promise<void> {\n await mkdir(dirname(outputPath), { recursive: true });\n\n const { entries: sourceEntries, zipFile } =\n await openIndexedArchive(inputPath);\n const overlayByPath = new Map(\n overlays.map((overlay) => [\n normalizeArchivePath(overlay.entryPath),\n overlay,\n ]),\n );\n const entryPaths = new Set<string>();\n\n for (const entry of sourceEntries) {\n const archivePath = normalizeArchivePath(entry.fileName);\n\n if (archivePath !== \"\" && isWikgArchivePath(archivePath)) {\n entryPaths.add(archivePath);\n }\n }\n for (const overlay of overlayByPath.values()) {\n const archivePath = normalizeArchivePath(overlay.entryPath);\n\n if (archivePath !== \"\" && isWikgArchivePath(archivePath)) {\n entryPaths.add(archivePath);\n }\n }\n entryPaths.add(WIKG_MUTATION_TOKEN_PATH);\n entryPaths.add(WIKG_MANIFEST_PATH);\n\n const outputZipFile = new YazlZipFile();\n const sourceFile = await openFile(inputPath, \"r\");\n\n try {\n for (const entryPath of sortArchiveEntryPathsForWrite(entryPaths)) {\n const overlay = overlayByPath.get(entryPath);\n\n if (entryPath === WIKG_MUTATION_TOKEN_PATH) {\n outputZipFile.addBuffer(createWikgMutationTokenContent(), entryPath, {\n compress: false,\n });\n continue;\n }\n if (entryPath === WIKG_MANIFEST_PATH) {\n outputZipFile.addBuffer(\n Buffer.from(WIKG_MANIFEST_CONTENT, \"utf8\"),\n entryPath,\n { compress: false },\n );\n continue;\n }\n if (overlay?.kind === \"deleted\") {\n continue;\n }\n if (overlay?.kind === \"file\") {\n outputZipFile.addFile(overlay.workspacePath, entryPath, {\n compress: false,\n });\n continue;\n }\n\n const sourceEntry = sourceEntries.find(\n (candidate) => normalizeArchivePath(candidate.fileName) === entryPath,\n );\n\n if (sourceEntry === undefined) {\n continue;\n }\n\n outputZipFile.addBuffer(\n await readArchiveEntryBufferFromFile(sourceFile, sourceEntry),\n entryPath,\n { compress: false },\n );\n }\n } finally {\n await sourceFile.close();\n zipFile.close();\n }\n\n outputZipFile.end();\n\n const output = createWriteStream(outputPath);\n const outputDone = finished(output);\n const zipDone = finished(outputZipFile.outputStream);\n\n outputZipFile.outputStream.pipe(output);\n await Promise.all([outputDone, zipDone]);\n}\n\nexport async function readWikgArchiveFormatVersion(\n documentDirectoryPath: string,\n): Promise<number> {\n return parseWikgManifest(\n await readFile(join(documentDirectoryPath, WIKG_MANIFEST_PATH), \"utf8\"),\n ).formatVersion;\n}\n\nasync function listDocumentFiles(\n rootDirectoryPath: string,\n currentDirectoryPath = rootDirectoryPath,\n): Promise<Array<{ absolutePath: string; archivePath: string }>> {\n const entries = await readdir(currentDirectoryPath, { withFileTypes: true });\n const files: Array<{ absolutePath: string; archivePath: string }> = [];\n\n for (const entry of [...entries].sort(compareDirEntryName)) {\n const absolutePath = join(currentDirectoryPath, entry.name);\n\n if (entry.isDirectory()) {\n files.push(...(await listDocumentFiles(rootDirectoryPath, absolutePath)));\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n\n files.push({\n absolutePath,\n archivePath: relative(rootDirectoryPath, absolutePath)\n .split(sep)\n .join(posix.sep),\n });\n }\n\n return files.filter((file) => isWikgArchivePath(file.archivePath));\n}\n\nasync function shouldEmbedSearchIndex(\n documentDirectoryPath: string,\n): Promise<boolean> {\n const database = await Database.open(\n join(documentDirectoryPath, \"database.db\"),\n \"\",\n {\n readonly: true,\n },\n ).catch(() => undefined);\n\n if (database === undefined) {\n return false;\n }\n\n try {\n const row = await database.queryOne(\n `\n SELECT fts_embedded\n FROM archive_index_settings\n WHERE id = 1\n `,\n undefined,\n (value) => Number(value.fts_embedded) !== 0,\n );\n\n return row ?? false;\n } catch {\n return false;\n } finally {\n await database.close();\n }\n}\n\nasync function openIndexedArchive(inputPath: string): Promise<{\n readonly entries: readonly Entry[];\n readonly zipFile: YauzlZipFile;\n}> {\n const zipFile = await openArchive(inputPath);\n\n try {\n const entries = await indexArchiveEntries(zipFile);\n\n await validateArchiveManifest(inputPath, entries);\n return { entries, zipFile };\n } catch (error) {\n zipFile.close();\n throw error;\n }\n}\n\nasync function indexArchiveEntries(\n zipFile: YauzlZipFile,\n): Promise<readonly Entry[]> {\n return await new Promise((resolve, reject) => {\n const entries: Entry[] = [];\n\n zipFile.on(\"entry\", (entry: Entry) => {\n if (entry.fileName.endsWith(\"/\")) {\n zipFile.readEntry();\n return;\n }\n\n entries.push(entry);\n zipFile.readEntry();\n });\n zipFile.once(\"end\", () => {\n resolve(entries);\n });\n zipFile.once(\"error\", (error: Error) => {\n reject(error);\n });\n\n zipFile.readEntry();\n });\n}\n\nfunction compareDirEntryName(\n left: { readonly name: string },\n right: { readonly name: string },\n): number {\n return left.name.localeCompare(right.name);\n}\n\nfunction sortArchiveEntriesForWrite<T extends { readonly archivePath: string }>(\n entries: readonly T[],\n): T[] {\n return [...entries].sort((left, right) =>\n compareArchiveEntryPathsForWrite(left.archivePath, right.archivePath),\n );\n}\n\nfunction sortArchiveEntryPathsForWrite(paths: Iterable<string>): string[] {\n return [...paths].sort(compareArchiveEntryPathsForWrite);\n}\n\nfunction compareArchiveEntryPathsForWrite(left: string, right: string): number {\n if (left === WIKG_MUTATION_TOKEN_PATH) {\n return right === WIKG_MUTATION_TOKEN_PATH ? 0 : -1;\n }\n if (right === WIKG_MUTATION_TOKEN_PATH) {\n return 1;\n }\n\n return left.localeCompare(right);\n}\n\nfunction isWikgArchivePath(archivePath: string): boolean {\n return WIKG_ARCHIVE_PATTERNS.some((pattern) => pattern.test(archivePath));\n}\n\nasync function validateArchiveManifest(\n inputPath: string,\n entries: readonly Entry[],\n): Promise<void> {\n await validateArchiveMutationToken(inputPath, entries);\n\n const entry = entries.find(\n (candidate) =>\n normalizeArchivePath(candidate.fileName) === WIKG_MANIFEST_PATH,\n );\n\n if (entry === undefined) {\n throw new Error(`Missing WIKG manifest: ${WIKG_MANIFEST_PATH}.`);\n }\n\n parseWikgManifest(await readArchiveEntryText(inputPath, entry));\n}\n\nasync function validateArchiveMutationToken(\n inputPath: string,\n entries: readonly Entry[],\n): Promise<void> {\n const firstEntryPath = normalizeArchivePath(entries[0]?.fileName ?? \"\");\n\n if (firstEntryPath !== WIKG_MUTATION_TOKEN_PATH) {\n throw new Error(\n `Missing WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`,\n );\n }\n\n parseWikgMutationToken(await readArchiveEntryText(inputPath, entries[0]!));\n}\n\nfunction parseWikgManifest(\n content: string,\n): z.infer<typeof wikgManifestSchema> {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(content);\n } catch {\n throw new Error(`Invalid WIKG manifest: ${WIKG_MANIFEST_PATH}.`);\n }\n\n const result = wikgManifestSchema.safeParse(parsed);\n\n if (!result.success) {\n throw new Error(\n `Unsupported WIKG format version in ${WIKG_MANIFEST_PATH}.`,\n );\n }\n\n return result.data;\n}\n\nfunction createWikgMutationTokenContent(): Buffer {\n const token = randomBytes(32).toString(\"base64url\");\n\n return Buffer.from(`${WIKG_MUTATION_TOKEN_MAGIC}\\n${token}\\n`, \"utf8\");\n}\n\nfunction parseWikgMutationToken(content: string): string {\n const lines = content.split(/\\r?\\n/u);\n const magic = lines[0];\n const token = lines[1];\n\n if (\n magic !== WIKG_MUTATION_TOKEN_MAGIC ||\n token === undefined ||\n !WIKG_MUTATION_TOKEN_PATTERN.test(token)\n ) {\n throw new Error(\n `Invalid WIKG mutation token: ${WIKG_MUTATION_TOKEN_PATH}.`,\n );\n }\n\n return token;\n}\n\nfunction assertWithinDirectory(\n rootDirectoryPath: string,\n targetPath: string,\n archivePath: string,\n): void {\n const resolvedRootDirectoryPath = resolve(rootDirectoryPath);\n const rootPrefix = resolvedRootDirectoryPath.endsWith(sep)\n ? resolvedRootDirectoryPath\n : `${resolvedRootDirectoryPath}${sep}`;\n\n if (\n targetPath === resolvedRootDirectoryPath ||\n targetPath.startsWith(rootPrefix)\n ) {\n return;\n }\n\n throw new Error(`Invalid archive entry path: ${archivePath}`);\n}\n\nfunction normalizeArchivePath(path: string): string {\n const normalized = path.replaceAll(\"\\\\\", \"/\").trim();\n const withoutLeadingSlash = normalized.startsWith(\"/\")\n ? normalized.slice(1)\n : normalized;\n\n return posix\n .normalize(withoutLeadingSlash)\n .replace(/^(\\.\\/)+/u, \"\")\n .replace(/^\\/+/u, \"\");\n}\n\nasync function openArchive(path: string): Promise<YauzlZipFile> {\n return await new Promise((resolve, reject) => {\n openZip(path, { autoClose: false, lazyEntries: true }, (error, zipFile) => {\n if (error !== null || zipFile === undefined) {\n reject(error ?? new Error(`Cannot open archive: ${path}`));\n return;\n }\n\n resolve(zipFile);\n });\n });\n}\n\nasync function readArchiveEntryText(\n inputPath: string,\n entry: Entry,\n): Promise<string> {\n return (await readArchiveEntryBuffer(inputPath, entry)).toString(\"utf8\");\n}\n\nasync function readArchiveEntryBuffer(\n inputPath: string,\n entry: Entry,\n): Promise<Buffer> {\n const file = await openFile(inputPath, \"r\");\n\n try {\n return await readArchiveEntryBufferFromFile(file, entry);\n } finally {\n await file.close();\n }\n}\n\nasync function readArchiveEntryBufferFromFile(\n file: FileHandle,\n entry: Entry,\n): Promise<Buffer> {\n const compressed = await readCompressedArchiveEntryBuffer(file, entry);\n\n if (entry.compressionMethod === 0) {\n return compressed;\n }\n if (entry.compressionMethod === 8) {\n return await inflateRawBuffer(compressed);\n }\n\n throw new Error(`Unsupported ZIP compression method: ${entry.fileName}`);\n}\n\nasync function readCompressedArchiveEntryBuffer(\n file: FileHandle,\n entry: Entry,\n): Promise<Buffer> {\n const header = Buffer.alloc(30);\n\n await file.read(header, 0, header.length, entry.relativeOffsetOfLocalHeader);\n if (header.readUInt32LE(0) !== 0x04034b50) {\n throw new Error(`Invalid ZIP local file header: ${entry.fileName}`);\n }\n\n const fileNameLength = header.readUInt16LE(26);\n const extraFieldLength = header.readUInt16LE(28);\n const dataOffset =\n entry.relativeOffsetOfLocalHeader + 30 + fileNameLength + extraFieldLength;\n const compressed = Buffer.alloc(entry.compressedSize);\n\n await file.read(compressed, 0, compressed.length, dataOffset);\n return compressed;\n}\n\nasync function inflateRawBuffer(input: Buffer): Promise<Buffer> {\n return await new Promise((resolveInflate, rejectInflate) => {\n inflateRaw(input, (error, output) => {\n if (error !== null) {\n rejectInflate(error);\n return;\n }\n\n resolveInflate(output);\n });\n });\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,SAAS,MAAM,OAAO,UAAU,SAAS,WAAW;AAC7D,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAE3B,SAAS,SAAS;AAClB;AAAA,EACE,QAAQ;AAAA,OAGH;AACP,SAAS,WAAW,mBAAmB;AAEvC,SAAS,gBAAgB;AAElB,MAAM,sBAAsB;AACnC,MAAM,2BAA2B;AACjC,MAAM,qBAAqB;AAC3B,MAAM,6BAA6B;AACnC,MAAM,wBAAwB,GAAG,KAAK,UAAU;AAAA,EAC9C,eAAe;AACjB,CAAC,CAAC;AAAA;AACF,MAAM,4BAA4B;AAClC,MAAM,8BAA8B;AAEpC,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,eAAe,EAAE,QAAQ,mBAAmB;AAC9C,CAAC;AAaM,MAAM,kBAAkB;AAAA,EACpB;AAAA,EACA;AAAA,EACT;AAAA,EACS;AAAA,EACA;AAAA,EAEF,YACL,MACA,SACA,SACA;AACA,SAAK,QAAQ;AACb,SAAK,WAAW;AAChB,SAAK,eAAe,IAAI;AAAA,MACtB,QACG,IAAI,CAAC,UAAU,CAAC,qBAAqB,MAAM,QAAQ,GAAG,KAAK,CAAU,EACrE,OAAO,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,EACxC,OAAO,CAAC,CAAC,SAAS,MAAM,kBAAkB,SAAS,CAAC;AAAA,IACzD;AACA,SAAK,WAAW,CAAC,GAAG,KAAK,aAAa,KAAK,CAAC,EAAE;AAAA,MAAK,CAAC,MAAM,UACxD,KAAK,cAAc,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,aAAoB,KAAK,WAA+C;AACtE,UAAM,EAAE,SAAS,QAAQ,IAAI,MAAM,mBAAmB,SAAS;AAE/D,WAAO,IAAI,kBAAkB,WAAW,SAAS,OAAO;AAAA,EAC1D;AAAA,EAEO,QAAc;AACnB,SAAK,SAAS,MAAM;AACpB,QAAI,KAAK,UAAU,QAAW;AAC5B,WAAK,KAAK,MAAM,KAAK,OAAO,SAAS;AACnC,cAAM,KAAK,MAAM;AAAA,MACnB,CAAC;AACD,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEO,cAAiC;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,UAAU,WAAgD;AACrE,UAAM,QAAQ,KAAK,aAAa,IAAI,qBAAqB,SAAS,CAAC;AAEnE,QAAI,UAAU,QAAW;AACvB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,+BAA+B,MAAM,KAAK,SAAS,GAAG,KAAK;AAAA,EAC1E;AAAA,EAEA,MAAM,WAAgC;AACpC,SAAK,UAAU,SAAS,KAAK,OAAO,GAAG;AACvC,WAAO,MAAM,KAAK;AAAA,EACpB;AACF;AAEA,eAAsB,mBACpB,WACA,qBACe;AACf,QAAM,EAAE,SAAS,QAAQ,IAAI,MAAM,mBAAmB,SAAS;AAC/D,QAAM,OAAO,MAAM,SAAS,WAAW,GAAG;AAE1C,MAAI;AACF,eAAW,SAAS,SAAS;AAC3B,YAAM,cAAc,qBAAqB,MAAM,QAAQ;AAEvD,UAAI,gBAAgB,IAAI;AACtB,cAAM,IAAI,MAAM,+BAA+B,MAAM,QAAQ,EAAE;AAAA,MACjE;AACA,UAAI,CAAC,kBAAkB,WAAW,GAAG;AACnC;AAAA,MACF;AAEA,YAAM,aAAa,QAAQ,qBAAqB,WAAW;AAE3D,4BAAsB,qBAAqB,YAAY,WAAW;AAClE,YAAM,MAAM,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD,YAAM;AAAA,QACJ;AAAA,QACA,MAAM,+BAA+B,MAAM,KAAK;AAAA,MAClD;AAAA,IACF;AAAA,EACF,UAAE;AACA,UAAM,KAAK,MAAM;AACjB,YAAQ,MAAM;AAAA,EAChB;AACF;AAEA,eAAsB,iBACpB,uBACA,YACe;AACf,QAAM,MAAM,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAEpD,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,QAAQ,MAAM,kBAAkB,qBAAqB;AAC3D,QAAM,qBAAqB,MAAM;AAAA,IAC/B;AAAA,EACF;AACA,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,MACE,aAAa;AAAA,MACb,SAAS,+BAA+B;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS,OAAO,KAAK,uBAAuB,MAAM;AAAA,IACpD;AAAA,IACA,GAAG,MAAM,OAAO,CAAC,SAAS;AACxB,UAAI,KAAK,gBAAgB,oBAAoB;AAC3C,eAAO;AAAA,MACT;AACA,UAAI,KAAK,gBAAgB,0BAA0B;AACjD,eAAO;AAAA,MACT;AAEA,aACE,KAAK,gBAAgB,8BAA8B;AAAA,IAEvD,CAAC;AAAA,EACH,CAAC;AAED,aAAW,SAAS,SAAS;AAC3B,QAAI,aAAa,OAAO;AACtB,cAAQ,UAAU,MAAM,SAAS,MAAM,aAAa;AAAA,QAClD,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,QAAQ,MAAM,cAAc,MAAM,aAAa;AAAA,QACrD,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,UAAQ,IAAI;AAEZ,QAAM,SAAS,kBAAkB,UAAU;AAC3C,QAAM,aAAa,SAAS,MAAM;AAClC,QAAM,UAAU,SAAS,QAAQ,YAAY;AAE7C,UAAQ,aAAa,KAAK,MAAM;AAChC,QAAM,QAAQ,IAAI,CAAC,YAAY,OAAO,CAAC;AACzC;AAEA,eAAsB,uBACpB,WAC4B;AAC5B,QAAM,SAAS,MAAM,kBAAkB,KAAK,SAAS;AAErD,MAAI;AACF,WAAO,OAAO,YAAY;AAAA,EAC5B,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AAEA,eAAsB,qBACpB,WACA,WAC6B;AAC7B,QAAM,SAAS,MAAM,kBAAkB,KAAK,SAAS;AAErD,MAAI;AACF,WAAO,MAAM,OAAO,UAAU,SAAS;AAAA,EACzC,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AAEA,eAAsB,6BACpB,WACiB;AACjB,QAAM,SAAS,MAAM,kBAAkB,KAAK,SAAS;AAErD,MAAI;AACF,UAAM,UAAU,MAAM,OAAO,UAAU,wBAAwB;AAE/D,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI;AAAA,QACR,gCAAgC,wBAAwB;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO,uBAAuB,QAAQ,SAAS,MAAM,CAAC;AAAA,EACxD,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AAEA,eAAsB,6BACpB,WACA,YACA,UACe;AACf,QAAM,MAAM,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAEpD,QAAM,EAAE,SAAS,eAAe,QAAQ,IACtC,MAAM,mBAAmB,SAAS;AACpC,QAAM,gBAAgB,IAAI;AAAA,IACxB,SAAS,IAAI,CAAC,YAAY;AAAA,MACxB,qBAAqB,QAAQ,SAAS;AAAA,MACtC;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,aAAa,oBAAI,IAAY;AAEnC,aAAW,SAAS,eAAe;AACjC,UAAM,cAAc,qBAAqB,MAAM,QAAQ;AAEvD,QAAI,gBAAgB,MAAM,kBAAkB,WAAW,GAAG;AACxD,iBAAW,IAAI,WAAW;AAAA,IAC5B;AAAA,EACF;AACA,aAAW,WAAW,cAAc,OAAO,GAAG;AAC5C,UAAM,cAAc,qBAAqB,QAAQ,SAAS;AAE1D,QAAI,gBAAgB,MAAM,kBAAkB,WAAW,GAAG;AACxD,iBAAW,IAAI,WAAW;AAAA,IAC5B;AAAA,EACF;AACA,aAAW,IAAI,wBAAwB;AACvC,aAAW,IAAI,kBAAkB;AAEjC,QAAM,gBAAgB,IAAI,YAAY;AACtC,QAAM,aAAa,MAAM,SAAS,WAAW,GAAG;AAEhD,MAAI;AACF,eAAW,aAAa,8BAA8B,UAAU,GAAG;AACjE,YAAM,UAAU,cAAc,IAAI,SAAS;AAE3C,UAAI,cAAc,0BAA0B;AAC1C,sBAAc,UAAU,+BAA+B,GAAG,WAAW;AAAA,UACnE,UAAU;AAAA,QACZ,CAAC;AACD;AAAA,MACF;AACA,UAAI,cAAc,oBAAoB;AACpC,sBAAc;AAAA,UACZ,OAAO,KAAK,uBAAuB,MAAM;AAAA,UACzC;AAAA,UACA,EAAE,UAAU,MAAM;AAAA,QACpB;AACA;AAAA,MACF;AACA,UAAI,SAAS,SAAS,WAAW;AAC/B;AAAA,MACF;AACA,UAAI,SAAS,SAAS,QAAQ;AAC5B,sBAAc,QAAQ,QAAQ,eAAe,WAAW;AAAA,UACtD,UAAU;AAAA,QACZ,CAAC;AACD;AAAA,MACF;AAEA,YAAM,cAAc,cAAc;AAAA,QAChC,CAAC,cAAc,qBAAqB,UAAU,QAAQ,MAAM;AAAA,MAC9D;AAEA,UAAI,gBAAgB,QAAW;AAC7B;AAAA,MACF;AAEA,oBAAc;AAAA,QACZ,MAAM,+BAA+B,YAAY,WAAW;AAAA,QAC5D;AAAA,QACA,EAAE,UAAU,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF,UAAE;AACA,UAAM,WAAW,MAAM;AACvB,YAAQ,MAAM;AAAA,EAChB;AAEA,gBAAc,IAAI;AAElB,QAAM,SAAS,kBAAkB,UAAU;AAC3C,QAAM,aAAa,SAAS,MAAM;AAClC,QAAM,UAAU,SAAS,cAAc,YAAY;AAEnD,gBAAc,aAAa,KAAK,MAAM;AACtC,QAAM,QAAQ,IAAI,CAAC,YAAY,OAAO,CAAC;AACzC;AAEA,eAAsB,6BACpB,uBACiB;AACjB,SAAO;AAAA,IACL,MAAM,SAAS,KAAK,uBAAuB,kBAAkB,GAAG,MAAM;AAAA,EACxE,EAAE;AACJ;AAEA,eAAe,kBACb,mBACA,uBAAuB,mBACwC;AAC/D,QAAM,UAAU,MAAM,QAAQ,sBAAsB,EAAE,eAAe,KAAK,CAAC;AAC3E,QAAM,QAA8D,CAAC;AAErE,aAAW,SAAS,CAAC,GAAG,OAAO,EAAE,KAAK,mBAAmB,GAAG;AAC1D,UAAM,eAAe,KAAK,sBAAsB,MAAM,IAAI;AAE1D,QAAI,MAAM,YAAY,GAAG;AACvB,YAAM,KAAK,GAAI,MAAM,kBAAkB,mBAAmB,YAAY,CAAE;AACxE;AAAA,IACF;AACA,QAAI,CAAC,MAAM,OAAO,GAAG;AACnB;AAAA,IACF;AAEA,UAAM,KAAK;AAAA,MACT;AAAA,MACA,aAAa,SAAS,mBAAmB,YAAY,EAClD,MAAM,GAAG,EACT,KAAK,MAAM,GAAG;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,SAAO,MAAM,OAAO,CAAC,SAAS,kBAAkB,KAAK,WAAW,CAAC;AACnE;AAEA,eAAe,uBACb,uBACkB;AAClB,QAAM,WAAW,MAAM,SAAS;AAAA,IAC9B,KAAK,uBAAuB,aAAa;AAAA,IACzC;AAAA,IACA;AAAA,MACE,UAAU;AAAA,IACZ;AAAA,EACF,EAAE,MAAM,MAAM,MAAS;AAEvB,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,MAAM,MAAM,SAAS;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA;AAAA,MACA,CAAC,UAAU,OAAO,MAAM,YAAY,MAAM;AAAA,IAC5C;AAEA,WAAO,OAAO;AAAA,EAChB,QAAQ;AACN,WAAO;AAAA,EACT,UAAE;AACA,UAAM,SAAS,MAAM;AAAA,EACvB;AACF;AAEA,eAAe,mBAAmB,WAG/B;AACD,QAAM,UAAU,MAAM,YAAY,SAAS;AAE3C,MAAI;AACF,UAAM,UAAU,MAAM,oBAAoB,OAAO;AAEjD,UAAM,wBAAwB,WAAW,OAAO;AAChD,WAAO,EAAE,SAAS,QAAQ;AAAA,EAC5B,SAAS,OAAO;AACd,YAAQ,MAAM;AACd,UAAM;AAAA,EACR;AACF;AAEA,eAAe,oBACb,SAC2B;AAC3B,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AAC5C,UAAM,UAAmB,CAAC;AAE1B,YAAQ,GAAG,SAAS,CAAC,UAAiB;AACpC,UAAI,MAAM,SAAS,SAAS,GAAG,GAAG;AAChC,gBAAQ,UAAU;AAClB;AAAA,MACF;AAEA,cAAQ,KAAK,KAAK;AAClB,cAAQ,UAAU;AAAA,IACpB,CAAC;AACD,YAAQ,KAAK,OAAO,MAAM;AACxB,MAAAA,SAAQ,OAAO;AAAA,IACjB,CAAC;AACD,YAAQ,KAAK,SAAS,CAAC,UAAiB;AACtC,aAAO,KAAK;AAAA,IACd,CAAC;AAED,YAAQ,UAAU;AAAA,EACpB,CAAC;AACH;AAEA,SAAS,oBACP,MACA,OACQ;AACR,SAAO,KAAK,KAAK,cAAc,MAAM,IAAI;AAC3C;AAEA,SAAS,2BACP,SACK;AACL,SAAO,CAAC,GAAG,OAAO,EAAE;AAAA,IAAK,CAAC,MAAM,UAC9B,iCAAiC,KAAK,aAAa,MAAM,WAAW;AAAA,EACtE;AACF;AAEA,SAAS,8BAA8B,OAAmC;AACxE,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,gCAAgC;AACzD;AAEA,SAAS,iCAAiC,MAAc,OAAuB;AAC7E,MAAI,SAAS,0BAA0B;AACrC,WAAO,UAAU,2BAA2B,IAAI;AAAA,EAClD;AACA,MAAI,UAAU,0BAA0B;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,cAAc,KAAK;AACjC;AAEA,SAAS,kBAAkB,aAA8B;AACvD,SAAO,sBAAsB,KAAK,CAAC,YAAY,QAAQ,KAAK,WAAW,CAAC;AAC1E;AAEA,eAAe,wBACb,WACA,SACe;AACf,QAAM,6BAA6B,WAAW,OAAO;AAErD,QAAM,QAAQ,QAAQ;AAAA,IACpB,CAAC,cACC,qBAAqB,UAAU,QAAQ,MAAM;AAAA,EACjD;AAEA,MAAI,UAAU,QAAW;AACvB,UAAM,IAAI,MAAM,0BAA0B,kBAAkB,GAAG;AAAA,EACjE;AAEA,oBAAkB,MAAM,qBAAqB,WAAW,KAAK,CAAC;AAChE;AAEA,eAAe,6BACb,WACA,SACe;AACf,QAAM,iBAAiB,qBAAqB,QAAQ,CAAC,GAAG,YAAY,EAAE;AAEtE,MAAI,mBAAmB,0BAA0B;AAC/C,UAAM,IAAI;AAAA,MACR,gCAAgC,wBAAwB;AAAA,IAC1D;AAAA,EACF;AAEA,yBAAuB,MAAM,qBAAqB,WAAW,QAAQ,CAAC,CAAE,CAAC;AAC3E;AAEA,SAAS,kBACP,SACoC;AACpC,MAAI;AAEJ,MAAI;AACF,aAAS,KAAK,MAAM,OAAO;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,MAAM,0BAA0B,kBAAkB,GAAG;AAAA,EACjE;AAEA,QAAM,SAAS,mBAAmB,UAAU,MAAM;AAElD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,sCAAsC,kBAAkB;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAEA,SAAS,iCAAyC;AAChD,QAAM,QAAQ,YAAY,EAAE,EAAE,SAAS,WAAW;AAElD,SAAO,OAAO,KAAK,GAAG,yBAAyB;AAAA,EAAK,KAAK;AAAA,GAAM,MAAM;AACvE;AAEA,SAAS,uBAAuB,SAAyB;AACvD,QAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,QAAM,QAAQ,MAAM,CAAC;AACrB,QAAM,QAAQ,MAAM,CAAC;AAErB,MACE,UAAU,6BACV,UAAU,UACV,CAAC,4BAA4B,KAAK,KAAK,GACvC;AACA,UAAM,IAAI;AAAA,MACR,gCAAgC,wBAAwB;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,sBACP,mBACA,YACA,aACM;AACN,QAAM,4BAA4B,QAAQ,iBAAiB;AAC3D,QAAM,aAAa,0BAA0B,SAAS,GAAG,IACrD,4BACA,GAAG,yBAAyB,GAAG,GAAG;AAEtC,MACE,eAAe,6BACf,WAAW,WAAW,UAAU,GAChC;AACA;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,+BAA+B,WAAW,EAAE;AAC9D;AAEA,SAAS,qBAAqB,MAAsB;AAClD,QAAM,aAAa,KAAK,WAAW,MAAM,GAAG,EAAE,KAAK;AACnD,QAAM,sBAAsB,WAAW,WAAW,GAAG,IACjD,WAAW,MAAM,CAAC,IAClB;AAEJ,SAAO,MACJ,UAAU,mBAAmB,EAC7B,QAAQ,aAAa,EAAE,EACvB,QAAQ,SAAS,EAAE;AACxB;AAEA,eAAe,YAAY,MAAqC;AAC9D,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AAC5C,YAAQ,MAAM,EAAE,WAAW,OAAO,aAAa,KAAK,GAAG,CAAC,OAAO,YAAY;AACzE,UAAI,UAAU,QAAQ,YAAY,QAAW;AAC3C,eAAO,SAAS,IAAI,MAAM,wBAAwB,IAAI,EAAE,CAAC;AACzD;AAAA,MACF;AAEA,MAAAA,SAAQ,OAAO;AAAA,IACjB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAe,qBACb,WACA,OACiB;AACjB,UAAQ,MAAM,uBAAuB,WAAW,KAAK,GAAG,SAAS,MAAM;AACzE;AAEA,eAAe,uBACb,WACA,OACiB;AACjB,QAAM,OAAO,MAAM,SAAS,WAAW,GAAG;AAE1C,MAAI;AACF,WAAO,MAAM,+BAA+B,MAAM,KAAK;AAAA,EACzD,UAAE;AACA,UAAM,KAAK,MAAM;AAAA,EACnB;AACF;AAEA,eAAe,+BACb,MACA,OACiB;AACjB,QAAM,aAAa,MAAM,iCAAiC,MAAM,KAAK;AAErE,MAAI,MAAM,sBAAsB,GAAG;AACjC,WAAO;AAAA,EACT;AACA,MAAI,MAAM,sBAAsB,GAAG;AACjC,WAAO,MAAM,iBAAiB,UAAU;AAAA,EAC1C;AAEA,QAAM,IAAI,MAAM,uCAAuC,MAAM,QAAQ,EAAE;AACzE;AAEA,eAAe,iCACb,MACA,OACiB;AACjB,QAAM,SAAS,OAAO,MAAM,EAAE;AAE9B,QAAM,KAAK,KAAK,QAAQ,GAAG,OAAO,QAAQ,MAAM,2BAA2B;AAC3E,MAAI,OAAO,aAAa,CAAC,MAAM,UAAY;AACzC,UAAM,IAAI,MAAM,kCAAkC,MAAM,QAAQ,EAAE;AAAA,EACpE;AAEA,QAAM,iBAAiB,OAAO,aAAa,EAAE;AAC7C,QAAM,mBAAmB,OAAO,aAAa,EAAE;AAC/C,QAAM,aACJ,MAAM,8BAA8B,KAAK,iBAAiB;AAC5D,QAAM,aAAa,OAAO,MAAM,MAAM,cAAc;AAEpD,QAAM,KAAK,KAAK,YAAY,GAAG,WAAW,QAAQ,UAAU;AAC5D,SAAO;AACT;AAEA,eAAe,iBAAiB,OAAgC;AAC9D,SAAO,MAAM,IAAI,QAAQ,CAAC,gBAAgB,kBAAkB;AAC1D,eAAW,OAAO,CAAC,OAAO,WAAW;AACnC,UAAI,UAAU,MAAM;AAClB,sBAAc,KAAK;AACnB;AAAA,MACF;AAEA,qBAAe,MAAM;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AACH;","names":["resolve"]}
@@ -0,0 +1,31 @@
1
+ export { WIKG_FORMAT_VERSION, WikgArchiveOverlay, WikgArchiveReader, extractWikgArchive, listWikgArchiveEntries, readWikgArchiveEntry, readWikgArchiveFormatVersion, writeWikgArchive, writeWikgArchiveWithOverlays } from './archive.js';
2
+ export { LocatedWikiGraphUri, WIKI_GRAPH_ARCHIVE_EXTENSION, WIKI_GRAPH_JOB_URI_PREFIX, WIKI_GRAPH_URI_PREFIX, formatLocatedChapterResourceUri, formatLocatedChapterSourceCollectionUri, formatLocatedChapterUri, formatLocatedWikiGraphUri, formatWikiGraphCommandUri, formatWikiGraphObjectUri, formatWikiGraphUriExpectedError, isWikiGraphJobUri, isWikiGraphUri, parseLocatedWikiGraphUri, requireArchiveUri, requireLocatedObjectOrArchiveUri, requireLocatedObjectUri } from '../common/wiki-graph-uri.js';
3
+ export { WikiGraphArchiveFile } from './wiki-graph-archive-file.js';
4
+ export { WikgCoordinator, runWikgCoordinatorGc } from './wikg-coordinator.js';
5
+ import 'yauzl';
6
+ import '../document/document.js';
7
+ import '../source/meta.js';
8
+ import 'zod';
9
+ import '../source/toc.js';
10
+ import '../source/types.js';
11
+ import '../document/database.js';
12
+ import 'sqlite3';
13
+ import '../document/text-streams.js';
14
+ import '../document/types.js';
15
+ import '../document/stores.js';
16
+ import '../facade/wiki-graph-archive.js';
17
+ import '../facade/chapter.js';
18
+ import '../common/language.js';
19
+ import '../common/llm-scope.js';
20
+ import '../llm/client.js';
21
+ import '../llm/context.js';
22
+ import '../llm/cache.js';
23
+ import '../llm/types.js';
24
+ import 'ai';
25
+ import '../reader/types.js';
26
+ import '../reader/attention/attention.js';
27
+ import '../reader/chunk-batch/types.js';
28
+ import '../reader/segment/types.js';
29
+ import '../serial.js';
30
+ import '../facade/types.js';
31
+ import '../gc/types.js';
@@ -0,0 +1,60 @@
1
+ import {
2
+ extractWikgArchive,
3
+ listWikgArchiveEntries,
4
+ readWikgArchiveEntry,
5
+ readWikgArchiveFormatVersion,
6
+ WikgArchiveReader,
7
+ WIKG_FORMAT_VERSION,
8
+ writeWikgArchive,
9
+ writeWikgArchiveWithOverlays
10
+ } from "./archive.js";
11
+ import {
12
+ formatLocatedChapterResourceUri,
13
+ formatLocatedChapterSourceCollectionUri,
14
+ formatLocatedChapterUri,
15
+ formatLocatedWikiGraphUri,
16
+ formatWikiGraphCommandUri,
17
+ formatWikiGraphObjectUri,
18
+ formatWikiGraphUriExpectedError,
19
+ isWikiGraphJobUri,
20
+ isWikiGraphUri,
21
+ parseLocatedWikiGraphUri,
22
+ requireArchiveUri,
23
+ requireLocatedObjectOrArchiveUri,
24
+ requireLocatedObjectUri,
25
+ WIKI_GRAPH_ARCHIVE_EXTENSION,
26
+ WIKI_GRAPH_JOB_URI_PREFIX,
27
+ WIKI_GRAPH_URI_PREFIX
28
+ } from "./archive-uri.js";
29
+ import { WikiGraphArchiveFile } from "./wiki-graph-archive-file.js";
30
+ import { runWikgCoordinatorGc, WikgCoordinator } from "./wikg-coordinator.js";
31
+ export {
32
+ WIKG_FORMAT_VERSION,
33
+ WIKI_GRAPH_ARCHIVE_EXTENSION,
34
+ WIKI_GRAPH_JOB_URI_PREFIX,
35
+ WIKI_GRAPH_URI_PREFIX,
36
+ WikgArchiveReader,
37
+ WikgCoordinator,
38
+ WikiGraphArchiveFile,
39
+ extractWikgArchive,
40
+ formatLocatedChapterResourceUri,
41
+ formatLocatedChapterSourceCollectionUri,
42
+ formatLocatedChapterUri,
43
+ formatLocatedWikiGraphUri,
44
+ formatWikiGraphCommandUri,
45
+ formatWikiGraphObjectUri,
46
+ formatWikiGraphUriExpectedError,
47
+ isWikiGraphJobUri,
48
+ isWikiGraphUri,
49
+ listWikgArchiveEntries,
50
+ parseLocatedWikiGraphUri,
51
+ readWikgArchiveEntry,
52
+ readWikgArchiveFormatVersion,
53
+ requireArchiveUri,
54
+ requireLocatedObjectOrArchiveUri,
55
+ requireLocatedObjectUri,
56
+ runWikgCoordinatorGc,
57
+ writeWikgArchive,
58
+ writeWikgArchiveWithOverlays
59
+ };
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikg/index.ts"],"sourcesContent":["export {\n extractWikgArchive,\n listWikgArchiveEntries,\n readWikgArchiveEntry,\n readWikgArchiveFormatVersion,\n WikgArchiveReader,\n WIKG_FORMAT_VERSION,\n writeWikgArchive,\n writeWikgArchiveWithOverlays,\n} from \"./archive.js\";\nexport type { WikgArchiveOverlay } from \"./archive.js\";\nexport {\n formatLocatedChapterResourceUri,\n formatLocatedChapterSourceCollectionUri,\n formatLocatedChapterUri,\n formatLocatedWikiGraphUri,\n formatWikiGraphCommandUri,\n formatWikiGraphObjectUri,\n formatWikiGraphUriExpectedError,\n isWikiGraphJobUri,\n isWikiGraphUri,\n parseLocatedWikiGraphUri,\n requireArchiveUri,\n requireLocatedObjectOrArchiveUri,\n requireLocatedObjectUri,\n WIKI_GRAPH_ARCHIVE_EXTENSION,\n WIKI_GRAPH_JOB_URI_PREFIX,\n WIKI_GRAPH_URI_PREFIX,\n} from \"./archive-uri.js\";\nexport type { LocatedWikiGraphUri } from \"./archive-uri.js\";\nexport { WikiGraphArchiveFile } from \"./wiki-graph-archive-file.js\";\nexport { runWikgCoordinatorGc, WikgCoordinator } from \"./wikg-coordinator.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,4BAA4B;AACrC,SAAS,sBAAsB,uBAAuB;","names":[]}