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,24 @@
1
+ import { BookMeta } from '../../source/meta.js';
2
+ import { SourceAsset } from '../../source/types.js';
3
+ import 'zod';
4
+
5
+ interface EpubBook {
6
+ readonly cover: SourceAsset | undefined;
7
+ readonly meta: BookMeta;
8
+ readonly navXhtml: string;
9
+ readonly packageOpf: string;
10
+ readonly sections: readonly EpubSection[];
11
+ }
12
+ interface EpubNavItem {
13
+ readonly children: readonly EpubNavItem[];
14
+ readonly href: string | undefined;
15
+ readonly title: string;
16
+ }
17
+ interface EpubSection {
18
+ readonly href: string;
19
+ readonly id: string;
20
+ readonly title: string;
21
+ readonly xhtml: string;
22
+ }
23
+
24
+ export type { EpubBook, EpubNavItem, EpubSection };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,10 @@
1
+ import { BookMeta } from '../../source/meta.js';
2
+ import { TocItem } from '../../source/toc.js';
3
+ import { EpubSection, EpubNavItem } from './model.js';
4
+ import 'zod';
5
+ import '../../source/types.js';
6
+
7
+ declare function buildNavItems(items: readonly TocItem[], sectionMap: ReadonlyMap<number, EpubSection>): EpubNavItem[];
8
+ declare function createNavDocument(meta: BookMeta, language: string, items: readonly EpubNavItem[]): string;
9
+
10
+ export { buildNavItems, createNavDocument };
@@ -0,0 +1,39 @@
1
+ import { escapeXml } from "./shared.js";
2
+ import { renderNavDocument } from "./templates.js";
3
+ function buildNavItems(items, sectionMap) {
4
+ return items.map((item) => ({
5
+ children: buildNavItems(item.children, sectionMap),
6
+ href: item.serialId === void 0 ? void 0 : sectionMap.get(item.serialId)?.href,
7
+ title: item.title?.trim() || `Section ${item.serialId ?? 1}`
8
+ }));
9
+ }
10
+ function createNavDocument(meta, language, items) {
11
+ const title = meta.title?.trim() || "Untitled";
12
+ return renderNavDocument({
13
+ itemsMarkup: renderNavItems(items),
14
+ language,
15
+ title
16
+ });
17
+ }
18
+ function renderNavItems(items) {
19
+ if (items.length === 0) {
20
+ return "<ol></ol>";
21
+ }
22
+ return `<ol>
23
+ ${items.map((item) => renderNavItem(item, 1)).join("\n")}
24
+ </ol>`;
25
+ }
26
+ function renderNavItem(item, depth) {
27
+ const indent = " ".repeat(depth);
28
+ const label = item.href === void 0 ? `<span>${escapeXml(item.title)}</span>` : `<a href="${escapeXml(item.href)}">${escapeXml(item.title)}</a>`;
29
+ const children = item.children.length === 0 ? "" : `
30
+ ${indent} <ol>
31
+ ${item.children.map((child) => renderNavItem(child, depth + 2)).join("\n")}
32
+ ${indent} </ol>`;
33
+ return `${indent}<li>${label}${children}</li>`;
34
+ }
35
+ export {
36
+ buildNavItems,
37
+ createNavDocument
38
+ };
39
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/navigation.ts"],"sourcesContent":["import type { BookMeta, TocItem } from \"../../source/index.js\";\n\nimport type { EpubNavItem, EpubSection } from \"./model.js\";\nimport { escapeXml } from \"./shared.js\";\nimport { renderNavDocument } from \"./templates.js\";\n\nexport function buildNavItems(\n items: readonly TocItem[],\n sectionMap: ReadonlyMap<number, EpubSection>,\n): EpubNavItem[] {\n return items.map((item) => ({\n children: buildNavItems(item.children, sectionMap),\n href:\n item.serialId === undefined\n ? undefined\n : sectionMap.get(item.serialId)?.href,\n title: item.title?.trim() || `Section ${item.serialId ?? 1}`,\n }));\n}\n\nexport function createNavDocument(\n meta: BookMeta,\n language: string,\n items: readonly EpubNavItem[],\n): string {\n const title = meta.title?.trim() || \"Untitled\";\n\n return renderNavDocument({\n itemsMarkup: renderNavItems(items),\n language,\n title,\n });\n}\n\nfunction renderNavItems(items: readonly EpubNavItem[]): string {\n if (items.length === 0) {\n return \"<ol></ol>\";\n }\n\n return `<ol>\\n${items.map((item) => renderNavItem(item, 1)).join(\"\\n\")}\\n</ol>`;\n}\n\nfunction renderNavItem(item: EpubNavItem, depth: number): string {\n const indent = \" \".repeat(depth);\n const label =\n item.href === undefined\n ? `<span>${escapeXml(item.title)}</span>`\n : `<a href=\"${escapeXml(item.href)}\">${escapeXml(item.title)}</a>`;\n const children =\n item.children.length === 0\n ? \"\"\n : `\\n${indent} <ol>\\n${item.children\n .map((child) => renderNavItem(child, depth + 2))\n .join(\"\\n\")}\\n${indent} </ol>`;\n\n return `${indent}<li>${label}${children}</li>`;\n}\n"],"mappings":"AAGA,SAAS,iBAAiB;AAC1B,SAAS,yBAAyB;AAE3B,SAAS,cACd,OACA,YACe;AACf,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,UAAU,cAAc,KAAK,UAAU,UAAU;AAAA,IACjD,MACE,KAAK,aAAa,SACd,SACA,WAAW,IAAI,KAAK,QAAQ,GAAG;AAAA,IACrC,OAAO,KAAK,OAAO,KAAK,KAAK,WAAW,KAAK,YAAY,CAAC;AAAA,EAC5D,EAAE;AACJ;AAEO,SAAS,kBACd,MACA,UACA,OACQ;AACR,QAAM,QAAQ,KAAK,OAAO,KAAK,KAAK;AAEpC,SAAO,kBAAkB;AAAA,IACvB,aAAa,eAAe,KAAK;AAAA,IACjC;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,OAAuC;AAC7D,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,EAAS,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA;AACxE;AAEA,SAAS,cAAc,MAAmB,OAAuB;AAC/D,QAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAM,QACJ,KAAK,SAAS,SACV,SAAS,UAAU,KAAK,KAAK,CAAC,YAC9B,YAAY,UAAU,KAAK,IAAI,CAAC,KAAK,UAAU,KAAK,KAAK,CAAC;AAChE,QAAM,WACJ,KAAK,SAAS,WAAW,IACrB,KACA;AAAA,EAAK,MAAM;AAAA,EAAW,KAAK,SACxB,IAAI,CAAC,UAAU,cAAc,OAAO,QAAQ,CAAC,CAAC,EAC9C,KAAK,IAAI,CAAC;AAAA,EAAK,MAAM;AAE9B,SAAO,GAAG,MAAM,OAAO,KAAK,GAAG,QAAQ;AACzC;","names":[]}
@@ -0,0 +1,17 @@
1
+ import { BookMeta } from '../../source/meta.js';
2
+ import { EpubSection } from './model.js';
3
+ import 'zod';
4
+ import '../../source/types.js';
5
+
6
+ declare const EPUB_OUTPUT_VERSION = "3.0";
7
+ declare function createPackageOpf(input: {
8
+ readonly coverImageHref: string | undefined;
9
+ readonly coverMediaType: string | undefined;
10
+ readonly coverPageHref: string | undefined;
11
+ readonly language: string;
12
+ readonly meta: BookMeta;
13
+ readonly modifiedAt: string;
14
+ readonly sections: readonly EpubSection[];
15
+ }): string;
16
+
17
+ export { EPUB_OUTPUT_VERSION, createPackageOpf };
@@ -0,0 +1,29 @@
1
+ import { renderPackageOpf } from "./templates.js";
2
+ const EPUB_OUTPUT_VERSION = "3.0";
3
+ function createPackageOpf(input) {
4
+ const identifier = input.meta.identifier?.trim() || `urn:uuid:${crypto.randomUUID()}`;
5
+ const title = input.meta.title?.trim() || "Untitled";
6
+ return renderPackageOpf({
7
+ authors: input.meta.authors,
8
+ coverImageHref: input.coverImageHref,
9
+ coverMediaType: input.coverMediaType,
10
+ coverPageHref: input.coverPageHref,
11
+ description: input.meta.description,
12
+ identifier,
13
+ language: input.language,
14
+ modifiedAt: input.modifiedAt,
15
+ publishedAt: input.meta.publishedAt,
16
+ publisher: input.meta.publisher,
17
+ sections: input.sections.map((section) => ({
18
+ href: section.href,
19
+ id: section.id
20
+ })),
21
+ title,
22
+ version: EPUB_OUTPUT_VERSION
23
+ });
24
+ }
25
+ export {
26
+ EPUB_OUTPUT_VERSION,
27
+ createPackageOpf
28
+ };
29
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/package.ts"],"sourcesContent":["import type { BookMeta } from \"../../source/index.js\";\n\nimport type { EpubSection } from \"./model.js\";\nimport { renderPackageOpf } from \"./templates.js\";\n\nexport const EPUB_OUTPUT_VERSION = \"3.0\";\n\nexport function createPackageOpf(input: {\n readonly coverImageHref: string | undefined;\n readonly coverMediaType: string | undefined;\n readonly coverPageHref: string | undefined;\n readonly language: string;\n readonly meta: BookMeta;\n readonly modifiedAt: string;\n readonly sections: readonly EpubSection[];\n}): string {\n const identifier =\n input.meta.identifier?.trim() || `urn:uuid:${crypto.randomUUID()}`;\n const title = input.meta.title?.trim() || \"Untitled\";\n\n return renderPackageOpf({\n authors: input.meta.authors,\n coverImageHref: input.coverImageHref,\n coverMediaType: input.coverMediaType,\n coverPageHref: input.coverPageHref,\n description: input.meta.description,\n identifier,\n language: input.language,\n modifiedAt: input.modifiedAt,\n publishedAt: input.meta.publishedAt,\n publisher: input.meta.publisher,\n sections: input.sections.map((section) => ({\n href: section.href,\n id: section.id,\n })),\n title,\n version: EPUB_OUTPUT_VERSION,\n });\n}\n"],"mappings":"AAGA,SAAS,wBAAwB;AAE1B,MAAM,sBAAsB;AAE5B,SAAS,iBAAiB,OAQtB;AACT,QAAM,aACJ,MAAM,KAAK,YAAY,KAAK,KAAK,YAAY,OAAO,WAAW,CAAC;AAClE,QAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,KAAK;AAE1C,SAAO,iBAAiB;AAAA,IACtB,SAAS,MAAM,KAAK;AAAA,IACpB,gBAAgB,MAAM;AAAA,IACtB,gBAAgB,MAAM;AAAA,IACtB,eAAe,MAAM;AAAA,IACrB,aAAa,MAAM,KAAK;AAAA,IACxB;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM,KAAK;AAAA,IACxB,WAAW,MAAM,KAAK;AAAA,IACtB,UAAU,MAAM,SAAS,IAAI,CAAC,aAAa;AAAA,MACzC,MAAM,QAAQ;AAAA,MACd,IAAI,QAAQ;AAAA,IACd,EAAE;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;","names":[]}
@@ -0,0 +1,4 @@
1
+ declare function escapeXml(value: string): string;
2
+ declare function normalizeLanguage(language: string | null): string;
3
+
4
+ export { escapeXml, normalizeLanguage };
@@ -0,0 +1,12 @@
1
+ function escapeXml(value) {
2
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
3
+ }
4
+ function normalizeLanguage(language) {
5
+ const normalized = language?.trim();
6
+ return normalized === void 0 || normalized === "" ? "und" : normalized;
7
+ }
8
+ export {
9
+ escapeXml,
10
+ normalizeLanguage
11
+ };
12
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/shared.ts"],"sourcesContent":["export function escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n}\n\nexport function normalizeLanguage(language: string | null): string {\n const normalized = language?.trim();\n\n return normalized === undefined || normalized === \"\" ? \"und\" : normalized;\n}\n"],"mappings":"AAAO,SAAS,UAAU,OAAuB;AAC/C,SAAO,MACJ,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,QAAQ;AAC7B;AAEO,SAAS,kBAAkB,UAAiC;AACjE,QAAM,aAAa,UAAU,KAAK;AAElC,SAAO,eAAe,UAAa,eAAe,KAAK,QAAQ;AACjE;","names":[]}
@@ -0,0 +1,35 @@
1
+ declare function renderCoverPage(input: {
2
+ readonly coverImageHref: string;
3
+ readonly language: string;
4
+ readonly title: string;
5
+ }): string;
6
+ declare function renderNavDocument(input: {
7
+ readonly itemsMarkup: string;
8
+ readonly language: string;
9
+ readonly title: string;
10
+ }): string;
11
+ declare function renderPackageOpf(input: {
12
+ readonly authors: readonly string[];
13
+ readonly coverImageHref: string | undefined;
14
+ readonly coverMediaType: string | undefined;
15
+ readonly coverPageHref: string | undefined;
16
+ readonly description: string | null;
17
+ readonly identifier: string;
18
+ readonly language: string;
19
+ readonly modifiedAt: string;
20
+ readonly publishedAt: string | null;
21
+ readonly publisher: string | null;
22
+ readonly sections: readonly {
23
+ readonly href: string;
24
+ readonly id: string;
25
+ }[];
26
+ readonly title: string;
27
+ readonly version: string;
28
+ }): string;
29
+ declare function renderSectionDocument(input: {
30
+ readonly language: string;
31
+ readonly paragraphs: readonly string[];
32
+ readonly title: string;
33
+ }): string;
34
+
35
+ export { renderCoverPage, renderNavDocument, renderPackageOpf, renderSectionDocument };
@@ -0,0 +1,26 @@
1
+ import { resolveDataDirPath } from "../../common/data-dir.js";
2
+ import { createEnv } from "../../common/template.js";
3
+ let templateEnvironment;
4
+ function getTemplateEnvironment() {
5
+ templateEnvironment ??= createEnv(resolveDataDirPath());
6
+ return templateEnvironment;
7
+ }
8
+ function renderCoverPage(input) {
9
+ return getTemplateEnvironment().render("output/epub/cover.xhtml", input);
10
+ }
11
+ function renderNavDocument(input) {
12
+ return getTemplateEnvironment().render("output/epub/nav.xhtml", input);
13
+ }
14
+ function renderPackageOpf(input) {
15
+ return getTemplateEnvironment().render("output/epub/package.opf.xml", input);
16
+ }
17
+ function renderSectionDocument(input) {
18
+ return getTemplateEnvironment().render("output/epub/section.xhtml", input);
19
+ }
20
+ export {
21
+ renderCoverPage,
22
+ renderNavDocument,
23
+ renderPackageOpf,
24
+ renderSectionDocument
25
+ };
26
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/output/epub/templates.ts"],"sourcesContent":["import { resolveDataDirPath } from \"../../common/data-dir.js\";\nimport { createEnv } from \"../../common/template.js\";\n\nlet templateEnvironment: ReturnType<typeof createEnv> | undefined;\n\nfunction getTemplateEnvironment(): ReturnType<typeof createEnv> {\n templateEnvironment ??= createEnv(resolveDataDirPath());\n\n return templateEnvironment;\n}\n\nexport function renderCoverPage(input: {\n readonly coverImageHref: string;\n readonly language: string;\n readonly title: string;\n}): string {\n return getTemplateEnvironment().render(\"output/epub/cover.xhtml\", input);\n}\n\nexport function renderNavDocument(input: {\n readonly itemsMarkup: string;\n readonly language: string;\n readonly title: string;\n}): string {\n return getTemplateEnvironment().render(\"output/epub/nav.xhtml\", input);\n}\n\nexport function renderPackageOpf(input: {\n readonly authors: readonly string[];\n readonly coverImageHref: string | undefined;\n readonly coverMediaType: string | undefined;\n readonly coverPageHref: string | undefined;\n readonly description: string | null;\n readonly identifier: string;\n readonly language: string;\n readonly modifiedAt: string;\n readonly publishedAt: string | null;\n readonly publisher: string | null;\n readonly sections: readonly {\n readonly href: string;\n readonly id: string;\n }[];\n readonly title: string;\n readonly version: string;\n}): string {\n return getTemplateEnvironment().render(\"output/epub/package.opf.xml\", input);\n}\n\nexport function renderSectionDocument(input: {\n readonly language: string;\n readonly paragraphs: readonly string[];\n readonly title: string;\n}): string {\n return getTemplateEnvironment().render(\"output/epub/section.xhtml\", input);\n}\n"],"mappings":"AAAA,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAE1B,IAAI;AAEJ,SAAS,yBAAuD;AAC9D,0BAAwB,UAAU,mBAAmB,CAAC;AAEtD,SAAO;AACT;AAEO,SAAS,gBAAgB,OAIrB;AACT,SAAO,uBAAuB,EAAE,OAAO,2BAA2B,KAAK;AACzE;AAEO,SAAS,kBAAkB,OAIvB;AACT,SAAO,uBAAuB,EAAE,OAAO,yBAAyB,KAAK;AACvE;AAEO,SAAS,iBAAiB,OAiBtB;AACT,SAAO,uBAAuB,EAAE,OAAO,+BAA+B,KAAK;AAC7E;AAEO,SAAS,sBAAsB,OAI3B;AACT,SAAO,uBAAuB,EAAE,OAAO,6BAA6B,KAAK;AAC3E;","names":[]}
@@ -0,0 +1,14 @@
1
+ export { WritePlainTextOptions, writePlainText } from './plain-text.js';
2
+ export { WriteEpubOptions, writeEpub } from './epub/index.js';
3
+ export { EPUB_OUTPUT_VERSION } from './epub/package.js';
4
+ import '../document/document.js';
5
+ import '../source/meta.js';
6
+ import 'zod';
7
+ import '../source/toc.js';
8
+ import '../source/types.js';
9
+ import '../document/database.js';
10
+ import 'sqlite3';
11
+ import '../document/text-streams.js';
12
+ import '../document/types.js';
13
+ import '../document/stores.js';
14
+ import './epub/model.js';
@@ -0,0 +1,11 @@
1
+ import { writePlainText } from "./plain-text.js";
2
+ import {
3
+ EPUB_OUTPUT_VERSION,
4
+ writeEpub
5
+ } from "./epub/index.js";
6
+ export {
7
+ EPUB_OUTPUT_VERSION,
8
+ writeEpub,
9
+ writePlainText
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/output/index.ts"],"sourcesContent":["export { writePlainText, type WritePlainTextOptions } from \"./plain-text.js\";\nexport {\n EPUB_OUTPUT_VERSION,\n writeEpub,\n type WriteEpubOptions,\n} from \"./epub/index.js\";\n"],"mappings":"AAAA,SAAS,sBAAkD;AAC3D;AAAA,EACE;AAAA,EACA;AAAA,OAEK;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { ReadonlyDocument } from '../document/document.js';
2
+ import '../source/meta.js';
3
+ import 'zod';
4
+ import '../source/toc.js';
5
+ import '../source/types.js';
6
+ import '../document/database.js';
7
+ import 'sqlite3';
8
+ import '../document/text-streams.js';
9
+ import '../document/types.js';
10
+ import '../document/stores.js';
11
+
12
+ interface WritePlainTextOptions {
13
+ readonly document: ReadonlyDocument;
14
+ readonly path: string;
15
+ }
16
+ declare function writePlainText(options: WritePlainTextOptions): Promise<void>;
17
+
18
+ export { type WritePlainTextOptions, writePlainText };
@@ -0,0 +1,56 @@
1
+ import { mkdir, writeFile } from "fs/promises";
2
+ import { dirname } from "path";
3
+ async function writePlainText(options) {
4
+ const text = await options.document.openSession(
5
+ async (document) => await buildPlainText(document)
6
+ );
7
+ await mkdir(dirname(options.path), { recursive: true });
8
+ await writeFile(options.path, text, "utf8");
9
+ }
10
+ async function buildPlainText(document) {
11
+ const toc = await document.readToc();
12
+ if (toc === void 0) {
13
+ throw new Error("Document TOC is missing");
14
+ }
15
+ const blocks = await renderTocItems(document, toc.items);
16
+ if (blocks.length === 0) {
17
+ return "";
18
+ }
19
+ return `${blocks.join("\n\n")}
20
+ `;
21
+ }
22
+ async function renderTocItems(document, items) {
23
+ const blocks = [];
24
+ for (const item of items) {
25
+ const block = await renderTocItem(document, item);
26
+ if (block !== void 0) {
27
+ blocks.push(block);
28
+ }
29
+ }
30
+ return blocks;
31
+ }
32
+ async function renderTocItem(document, item) {
33
+ const parts = [item.title?.trim()].filter(
34
+ (value) => value !== void 0 && value !== ""
35
+ );
36
+ if (item.serialId !== void 0) {
37
+ const summary = await document.readSummary(item.serialId);
38
+ if (summary === void 0) {
39
+ throw new Error(
40
+ `Chapter ${item.serialId} summary is missing. Run \`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\` before export, or inspect the archive with \`wg <archive-uri>/chapter/tree get\`.`
41
+ );
42
+ }
43
+ if (summary.trim() !== "") {
44
+ parts.push(summary.trim());
45
+ }
46
+ }
47
+ const childBlocks = await renderTocItems(document, item.children);
48
+ if (parts.length === 0 && childBlocks.length === 0) {
49
+ return void 0;
50
+ }
51
+ return [...parts, ...childBlocks].join("\n\n");
52
+ }
53
+ export {
54
+ writePlainText
55
+ };
56
+ //# sourceMappingURL=plain-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/output/plain-text.ts"],"sourcesContent":["import { mkdir, writeFile } from \"fs/promises\";\nimport { dirname } from \"path\";\n\nimport type { ReadonlyDocument } from \"../document/index.js\";\nimport type { TocItem } from \"../source/index.js\";\n\nexport interface WritePlainTextOptions {\n readonly document: ReadonlyDocument;\n readonly path: string;\n}\n\nexport async function writePlainText(\n options: WritePlainTextOptions,\n): Promise<void> {\n const text = await options.document.openSession(\n async (document) => await buildPlainText(document),\n );\n\n await mkdir(dirname(options.path), { recursive: true });\n await writeFile(options.path, text, \"utf8\");\n}\n\nasync function buildPlainText(document: ReadonlyDocument): Promise<string> {\n const toc = await document.readToc();\n\n if (toc === undefined) {\n throw new Error(\"Document TOC is missing\");\n }\n\n const blocks = await renderTocItems(document, toc.items);\n\n if (blocks.length === 0) {\n return \"\";\n }\n\n return `${blocks.join(\"\\n\\n\")}\\n`;\n}\n\nasync function renderTocItems(\n document: ReadonlyDocument,\n items: readonly TocItem[],\n): Promise<string[]> {\n const blocks: string[] = [];\n\n for (const item of items) {\n const block = await renderTocItem(document, item);\n\n if (block !== undefined) {\n blocks.push(block);\n }\n }\n\n return blocks;\n}\n\nasync function renderTocItem(\n document: ReadonlyDocument,\n item: TocItem,\n): Promise<string | undefined> {\n const parts = [item.title?.trim()].filter(\n (value): value is string => value !== undefined && value !== \"\",\n );\n\n if (item.serialId !== undefined) {\n const summary = await document.readSummary(item.serialId);\n\n if (summary === undefined) {\n throw new Error(\n `Chapter ${item.serialId} summary is missing. Run \\`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\\` before export, or inspect the archive with \\`wg <archive-uri>/chapter/tree get\\`.`,\n );\n }\n if (summary.trim() !== \"\") {\n parts.push(summary.trim());\n }\n }\n\n const childBlocks = await renderTocItems(document, item.children);\n\n if (parts.length === 0 && childBlocks.length === 0) {\n return undefined;\n }\n\n return [...parts, ...childBlocks].join(\"\\n\\n\");\n}\n"],"mappings":"AAAA,SAAS,OAAO,iBAAiB;AACjC,SAAS,eAAe;AAUxB,eAAsB,eACpB,SACe;AACf,QAAM,OAAO,MAAM,QAAQ,SAAS;AAAA,IAClC,OAAO,aAAa,MAAM,eAAe,QAAQ;AAAA,EACnD;AAEA,QAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACtD,QAAM,UAAU,QAAQ,MAAM,MAAM,MAAM;AAC5C;AAEA,eAAe,eAAe,UAA6C;AACzE,QAAM,MAAM,MAAM,SAAS,QAAQ;AAEnC,MAAI,QAAQ,QAAW;AACrB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,SAAS,MAAM,eAAe,UAAU,IAAI,KAAK;AAEvD,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA;AAC/B;AAEA,eAAe,eACb,UACA,OACmB;AACnB,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,MAAM,cAAc,UAAU,IAAI;AAEhD,QAAI,UAAU,QAAW;AACvB,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,cACb,UACA,MAC6B;AAC7B,QAAM,QAAQ,CAAC,KAAK,OAAO,KAAK,CAAC,EAAE;AAAA,IACjC,CAAC,UAA2B,UAAU,UAAa,UAAU;AAAA,EAC/D;AAEA,MAAI,KAAK,aAAa,QAAW;AAC/B,UAAM,UAAU,MAAM,SAAS,YAAY,KAAK,QAAQ;AAExD,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI;AAAA,QACR,WAAW,KAAK,QAAQ;AAAA,MAC1B;AAAA,IACF;AACA,QAAI,QAAQ,KAAK,MAAM,IAAI;AACzB,YAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,eAAe,UAAU,KAAK,QAAQ;AAEhE,MAAI,MAAM,WAAW,KAAK,YAAY,WAAW,GAAG;AAClD,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,GAAG,OAAO,GAAG,WAAW,EAAE,KAAK,MAAM;AAC/C;","names":[]}
@@ -0,0 +1,3 @@
1
+ export { CreateDigestProgressTrackerOptions, DigestProgressTracker, SerialProgressTracker, createDigestProgressTracker } from './tracker.js';
2
+ export { ProgressReporter, createProgressReporter } from './reporter.js';
3
+ export { DigestProgressEvent, SerialDiscoveryItem, SerialProgressEvent, SerialsDiscoveredEvent, WikiGraphOperation, WikiGraphProgressCallback, WikiGraphProgressEvent, WikiGraphProgressEventType } from './types.js';
@@ -0,0 +1,14 @@
1
+ import {
2
+ createDigestProgressTracker,
3
+ DigestProgressTracker,
4
+ SerialProgressTracker
5
+ } from "./tracker.js";
6
+ import { createProgressReporter, ProgressReporter } from "./reporter.js";
7
+ export {
8
+ DigestProgressTracker,
9
+ ProgressReporter,
10
+ SerialProgressTracker,
11
+ createDigestProgressTracker,
12
+ createProgressReporter
13
+ };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/progress/index.ts"],"sourcesContent":["export {\n createDigestProgressTracker,\n DigestProgressTracker,\n SerialProgressTracker,\n type CreateDigestProgressTrackerOptions,\n} from \"./tracker.js\";\nexport { createProgressReporter, ProgressReporter } from \"./reporter.js\";\nexport type {\n DigestProgressEvent,\n SerialDiscoveryItem,\n SerialsDiscoveredEvent,\n SerialProgressEvent,\n WikiGraphOperation,\n WikiGraphProgressCallback,\n WikiGraphProgressEvent,\n WikiGraphProgressEventType,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,wBAAwB,wBAAwB;","names":[]}
@@ -0,0 +1,10 @@
1
+ import { WikiGraphOperation, WikiGraphProgressCallback, WikiGraphProgressEvent } from './types.js';
2
+
3
+ declare class ProgressReporter {
4
+ #private;
5
+ constructor(operation: WikiGraphOperation, callback?: WikiGraphProgressCallback);
6
+ emit(event: WikiGraphProgressEvent): Promise<void>;
7
+ }
8
+ declare function createProgressReporter(operation: WikiGraphOperation, callback?: WikiGraphProgressCallback): ProgressReporter;
9
+
10
+ export { ProgressReporter, createProgressReporter };
@@ -0,0 +1,79 @@
1
+ import { getLogger } from "../common/logging.js";
2
+ class ProgressReporter {
3
+ #callback;
4
+ #operation;
5
+ constructor(operation, callback) {
6
+ this.#callback = callback;
7
+ this.#operation = operation;
8
+ }
9
+ async emit(event) {
10
+ getLogger({
11
+ component: "progress",
12
+ eventType: event.type,
13
+ operation: this.#operation,
14
+ ...buildLogBindings(event)
15
+ }).info(buildLogMessage(event));
16
+ if (this.#callback === void 0) {
17
+ return;
18
+ }
19
+ try {
20
+ await this.#callback(event);
21
+ } catch (error) {
22
+ getLogger({
23
+ component: "progress",
24
+ operation: this.#operation
25
+ }).warn(
26
+ {
27
+ error: error instanceof Error ? { message: error.message, name: error.name } : String(error)
28
+ },
29
+ "Progress callback failed"
30
+ );
31
+ }
32
+ }
33
+ }
34
+ function createProgressReporter(operation, callback) {
35
+ return new ProgressReporter(operation, callback);
36
+ }
37
+ function buildLogBindings(event) {
38
+ switch (event.type) {
39
+ case "serials-discovered":
40
+ return {
41
+ available: Number(event.available),
42
+ serials: event.serials.length,
43
+ totalFragments: event.serials.reduce(
44
+ (sum, serial) => sum + (serial.fragments ?? 0),
45
+ 0
46
+ ),
47
+ totalWords: event.serials.reduce(
48
+ (sum, serial) => sum + serial.words,
49
+ 0
50
+ )
51
+ };
52
+ case "serial-progress":
53
+ return {
54
+ completedFragments: event.completedFragments,
55
+ completedWords: event.completedWords,
56
+ id: event.id
57
+ };
58
+ case "digest-progress":
59
+ return {
60
+ completedWords: event.completedWords,
61
+ totalWords: event.totalWords
62
+ };
63
+ }
64
+ }
65
+ function buildLogMessage(event) {
66
+ switch (event.type) {
67
+ case "serials-discovered":
68
+ return event.available ? `Discovered ${event.serials.length} serials` : "Serial discovery unavailable";
69
+ case "serial-progress":
70
+ return `Serial ${event.id} progressed`;
71
+ case "digest-progress":
72
+ return "Digest progressed";
73
+ }
74
+ }
75
+ export {
76
+ ProgressReporter,
77
+ createProgressReporter
78
+ };
79
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/progress/reporter.ts"],"sourcesContent":["import { getLogger } from \"../common/logging.js\";\n\nimport type {\n DigestProgressEvent,\n SerialProgressEvent,\n WikiGraphOperation,\n WikiGraphProgressCallback,\n WikiGraphProgressEvent,\n} from \"./types.js\";\n\nexport class ProgressReporter {\n readonly #callback: WikiGraphProgressCallback | undefined;\n readonly #operation: WikiGraphOperation;\n\n public constructor(\n operation: WikiGraphOperation,\n callback?: WikiGraphProgressCallback,\n ) {\n this.#callback = callback;\n this.#operation = operation;\n }\n\n public async emit(event: WikiGraphProgressEvent): Promise<void> {\n getLogger({\n component: \"progress\",\n eventType: event.type,\n operation: this.#operation,\n ...buildLogBindings(event),\n }).info(buildLogMessage(event));\n\n if (this.#callback === undefined) {\n return;\n }\n\n try {\n await this.#callback(event);\n } catch (error) {\n getLogger({\n component: \"progress\",\n operation: this.#operation,\n }).warn(\n {\n error:\n error instanceof Error\n ? { message: error.message, name: error.name }\n : String(error),\n },\n \"Progress callback failed\",\n );\n }\n }\n}\n\nexport function createProgressReporter(\n operation: WikiGraphOperation,\n callback?: WikiGraphProgressCallback,\n): ProgressReporter {\n return new ProgressReporter(operation, callback);\n}\n\nfunction buildLogBindings(\n event: WikiGraphProgressEvent,\n): Record<string, number> {\n switch (event.type) {\n case \"serials-discovered\":\n return {\n available: Number(event.available),\n serials: event.serials.length,\n totalFragments: event.serials.reduce(\n (sum, serial) => sum + (serial.fragments ?? 0),\n 0,\n ),\n totalWords: event.serials.reduce(\n (sum, serial) => sum + serial.words,\n 0,\n ),\n } satisfies Record<string, number>;\n case \"serial-progress\":\n return {\n completedFragments: event.completedFragments,\n completedWords: event.completedWords,\n id: event.id,\n } satisfies Record<keyof Omit<SerialProgressEvent, \"type\">, number>;\n case \"digest-progress\":\n return {\n completedWords: event.completedWords,\n totalWords: event.totalWords,\n } satisfies Record<keyof Omit<DigestProgressEvent, \"type\">, number>;\n }\n}\n\nfunction buildLogMessage(event: WikiGraphProgressEvent): string {\n switch (event.type) {\n case \"serials-discovered\":\n return event.available\n ? `Discovered ${event.serials.length} serials`\n : \"Serial discovery unavailable\";\n case \"serial-progress\":\n return `Serial ${event.id} progressed`;\n case \"digest-progress\":\n return \"Digest progressed\";\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAUnB,MAAM,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EAEF,YACL,WACA,UACA;AACA,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAa,KAAK,OAA8C;AAC9D,cAAU;AAAA,MACR,WAAW;AAAA,MACX,WAAW,MAAM;AAAA,MACjB,WAAW,KAAK;AAAA,MAChB,GAAG,iBAAiB,KAAK;AAAA,IAC3B,CAAC,EAAE,KAAK,gBAAgB,KAAK,CAAC;AAE9B,QAAI,KAAK,cAAc,QAAW;AAChC;AAAA,IACF;AAEA,QAAI;AACF,YAAM,KAAK,UAAU,KAAK;AAAA,IAC5B,SAAS,OAAO;AACd,gBAAU;AAAA,QACR,WAAW;AAAA,QACX,WAAW,KAAK;AAAA,MAClB,CAAC,EAAE;AAAA,QACD;AAAA,UACE,OACE,iBAAiB,QACb,EAAE,SAAS,MAAM,SAAS,MAAM,MAAM,KAAK,IAC3C,OAAO,KAAK;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,uBACd,WACA,UACkB;AAClB,SAAO,IAAI,iBAAiB,WAAW,QAAQ;AACjD;AAEA,SAAS,iBACP,OACwB;AACxB,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,QACL,WAAW,OAAO,MAAM,SAAS;AAAA,QACjC,SAAS,MAAM,QAAQ;AAAA,QACvB,gBAAgB,MAAM,QAAQ;AAAA,UAC5B,CAAC,KAAK,WAAW,OAAO,OAAO,aAAa;AAAA,UAC5C;AAAA,QACF;AAAA,QACA,YAAY,MAAM,QAAQ;AAAA,UACxB,CAAC,KAAK,WAAW,MAAM,OAAO;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,oBAAoB,MAAM;AAAA,QAC1B,gBAAgB,MAAM;AAAA,QACtB,IAAI,MAAM;AAAA,MACZ;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,gBAAgB,MAAM;AAAA,QACtB,YAAY,MAAM;AAAA,MACpB;AAAA,EACJ;AACF;AAEA,SAAS,gBAAgB,OAAuC;AAC9D,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,MAAM,YACT,cAAc,MAAM,QAAQ,MAAM,aAClC;AAAA,IACN,KAAK;AACH,aAAO,UAAU,MAAM,EAAE;AAAA,IAC3B,KAAK;AACH,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -0,0 +1,37 @@
1
+ import { WikiGraphProgressCallback, WikiGraphOperation, SerialDiscoveryItem } from './types.js';
2
+
3
+ interface CreateDigestProgressTrackerOptions {
4
+ readonly onProgress?: WikiGraphProgressCallback;
5
+ readonly operation: WikiGraphOperation;
6
+ }
7
+ declare class DigestProgressTracker {
8
+ #private;
9
+ constructor(options: CreateDigestProgressTrackerOptions);
10
+ createSerialTracker(input: {
11
+ readonly id: number;
12
+ }): SerialProgressTracker;
13
+ discoverSerials(serials: readonly SerialDiscoveryItem[]): Promise<void>;
14
+ markDiscoveryUnavailable(): Promise<void>;
15
+ completeSerial(input: {
16
+ readonly id: number;
17
+ readonly words: number;
18
+ }): Promise<void>;
19
+ emitSerialProgress(input: {
20
+ readonly completedFragments: number;
21
+ readonly completedWords: number;
22
+ readonly id: number;
23
+ }): Promise<void>;
24
+ }
25
+ declare class SerialProgressTracker {
26
+ #private;
27
+ constructor(digestTracker: DigestProgressTracker, id: number);
28
+ begin(_input?: {
29
+ readonly fragments: number;
30
+ readonly words: number;
31
+ }): Promise<void>;
32
+ advance(wordsCount: number): Promise<void>;
33
+ complete(finalWordsCount?: number): Promise<void>;
34
+ }
35
+ declare function createDigestProgressTracker(options: CreateDigestProgressTrackerOptions): DigestProgressTracker;
36
+
37
+ export { type CreateDigestProgressTrackerOptions, DigestProgressTracker, SerialProgressTracker, createDigestProgressTracker };
@@ -0,0 +1,119 @@
1
+ import { createProgressReporter } from "./reporter.js";
2
+ class DigestProgressTracker {
3
+ #reporter;
4
+ #completedWords = 0;
5
+ #completedWordsBySerial = /* @__PURE__ */ new Map();
6
+ #totalWords = 0;
7
+ #discoverySettled = false;
8
+ constructor(options) {
9
+ this.#reporter = createProgressReporter(
10
+ options.operation,
11
+ options.onProgress
12
+ );
13
+ }
14
+ createSerialTracker(input) {
15
+ return new SerialProgressTracker(this, input.id);
16
+ }
17
+ async discoverSerials(serials) {
18
+ this.#ensureDiscoveryOpen();
19
+ this.#discoverySettled = true;
20
+ this.#totalWords = serials.reduce((sum, serial) => sum + serial.words, 0);
21
+ await this.#reporter.emit({
22
+ available: true,
23
+ serials,
24
+ type: "serials-discovered"
25
+ });
26
+ await this.#emitDigestProgress();
27
+ }
28
+ async markDiscoveryUnavailable() {
29
+ this.#ensureDiscoveryOpen();
30
+ this.#discoverySettled = true;
31
+ await this.#reporter.emit({
32
+ available: false,
33
+ serials: [],
34
+ type: "serials-discovered"
35
+ });
36
+ }
37
+ async completeSerial(input) {
38
+ const previousCompletedWords = this.#completedWordsBySerial.get(input.id) ?? 0;
39
+ if (input.words !== previousCompletedWords) {
40
+ this.#completedWordsBySerial.set(input.id, input.words);
41
+ this.#completedWords += input.words - previousCompletedWords;
42
+ }
43
+ const nextTotalWords = Math.max(
44
+ this.#totalWords,
45
+ this.#completedWords,
46
+ input.words
47
+ );
48
+ if (nextTotalWords === this.#totalWords && input.words === previousCompletedWords) {
49
+ return;
50
+ }
51
+ this.#totalWords = nextTotalWords;
52
+ await this.#emitDigestProgress();
53
+ }
54
+ async emitSerialProgress(input) {
55
+ await this.#reporter.emit({
56
+ completedFragments: input.completedFragments,
57
+ completedWords: input.completedWords,
58
+ id: input.id,
59
+ type: "serial-progress"
60
+ });
61
+ }
62
+ async #emitDigestProgress() {
63
+ await this.#reporter.emit({
64
+ completedWords: this.#completedWords,
65
+ totalWords: this.#totalWords,
66
+ type: "digest-progress"
67
+ });
68
+ }
69
+ #ensureDiscoveryOpen() {
70
+ if (this.#discoverySettled) {
71
+ throw new Error("Serial discovery has already been reported");
72
+ }
73
+ }
74
+ }
75
+ class SerialProgressTracker {
76
+ #completedFragments = 0;
77
+ #digestTracker;
78
+ #completedWords = 0;
79
+ #id;
80
+ constructor(digestTracker, id) {
81
+ this.#digestTracker = digestTracker;
82
+ this.#id = id;
83
+ }
84
+ async begin(_input) {
85
+ }
86
+ async advance(wordsCount) {
87
+ this.#completedWords += wordsCount;
88
+ this.#completedFragments += 1;
89
+ await this.#digestTracker.emitSerialProgress({
90
+ completedFragments: this.#completedFragments,
91
+ completedWords: this.#completedWords,
92
+ id: this.#id
93
+ });
94
+ }
95
+ async complete(finalWordsCount = 0) {
96
+ this.#completedWords += finalWordsCount;
97
+ if (finalWordsCount > 0) {
98
+ this.#completedFragments += 1;
99
+ }
100
+ await this.#digestTracker.emitSerialProgress({
101
+ completedFragments: this.#completedFragments,
102
+ completedWords: this.#completedWords,
103
+ id: this.#id
104
+ });
105
+ await this.#digestTracker.completeSerial({
106
+ id: this.#id,
107
+ words: this.#completedWords
108
+ });
109
+ }
110
+ }
111
+ function createDigestProgressTracker(options) {
112
+ return new DigestProgressTracker(options);
113
+ }
114
+ export {
115
+ DigestProgressTracker,
116
+ SerialProgressTracker,
117
+ createDigestProgressTracker
118
+ };
119
+ //# sourceMappingURL=tracker.js.map