@ncukondo/search-hub 0.12.1 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +30 -0
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  3. package/dist/_virtual/aliases.js +5 -0
  4. package/dist/_virtual/aliases.js.map +1 -0
  5. package/dist/_virtual/attributes.js +5 -0
  6. package/dist/_virtual/attributes.js.map +1 -0
  7. package/dist/_virtual/back.js +5 -0
  8. package/dist/_virtual/back.js.map +1 -0
  9. package/dist/_virtual/comment.js +5 -0
  10. package/dist/_virtual/comment.js.map +1 -0
  11. package/dist/_virtual/compile.js +5 -0
  12. package/dist/_virtual/compile.js.map +1 -0
  13. package/dist/_virtual/compile2.js +5 -0
  14. package/dist/_virtual/compile2.js.map +1 -0
  15. package/dist/_virtual/decode-data-html.js +5 -0
  16. package/dist/_virtual/decode-data-html.js.map +1 -0
  17. package/dist/_virtual/decode-data-xml.js +5 -0
  18. package/dist/_virtual/decode-data-xml.js.map +1 -0
  19. package/dist/_virtual/decode.js +5 -0
  20. package/dist/_virtual/decode.js.map +1 -0
  21. package/dist/_virtual/decode_codepoint.js +5 -0
  22. package/dist/_virtual/decode_codepoint.js.map +1 -0
  23. package/dist/_virtual/encode-html.js +5 -0
  24. package/dist/_virtual/encode-html.js.map +1 -0
  25. package/dist/_virtual/encode.js +5 -0
  26. package/dist/_virtual/encode.js.map +1 -0
  27. package/dist/_virtual/escape.js +5 -0
  28. package/dist/_virtual/escape.js.map +1 -0
  29. package/dist/_virtual/feeds.js +5 -0
  30. package/dist/_virtual/feeds.js.map +1 -0
  31. package/dist/_virtual/filters.js +5 -0
  32. package/dist/_virtual/filters.js.map +1 -0
  33. package/dist/_virtual/foreignNames.js +5 -0
  34. package/dist/_virtual/foreignNames.js.map +1 -0
  35. package/dist/_virtual/general.js +5 -0
  36. package/dist/_virtual/general.js.map +1 -0
  37. package/dist/_virtual/he.js +5 -0
  38. package/dist/_virtual/he.js.map +1 -0
  39. package/dist/_virtual/helpers.js +5 -0
  40. package/dist/_virtual/helpers.js.map +1 -0
  41. package/dist/_virtual/html.js +5 -0
  42. package/dist/_virtual/html.js.map +1 -0
  43. package/dist/_virtual/index.js +6 -0
  44. package/dist/_virtual/index.js.map +1 -0
  45. package/dist/_virtual/index10.js +5 -0
  46. package/dist/_virtual/index10.js.map +1 -0
  47. package/dist/_virtual/index11.js +5 -0
  48. package/dist/_virtual/index11.js.map +1 -0
  49. package/dist/_virtual/index2.js +5 -0
  50. package/dist/_virtual/index2.js.map +1 -0
  51. package/dist/_virtual/index3.js +5 -0
  52. package/dist/_virtual/index3.js.map +1 -0
  53. package/dist/_virtual/index4.js +5 -0
  54. package/dist/_virtual/index4.js.map +1 -0
  55. package/dist/_virtual/index5.js +7 -0
  56. package/dist/_virtual/index5.js.map +1 -0
  57. package/dist/_virtual/index6.js +5 -0
  58. package/dist/_virtual/index6.js.map +1 -0
  59. package/dist/_virtual/index7.js +5 -0
  60. package/dist/_virtual/index7.js.map +1 -0
  61. package/dist/_virtual/index8.js +5 -0
  62. package/dist/_virtual/index8.js.map +1 -0
  63. package/dist/_virtual/index9.js +5 -0
  64. package/dist/_virtual/index9.js.map +1 -0
  65. package/dist/_virtual/legacy.js +5 -0
  66. package/dist/_virtual/legacy.js.map +1 -0
  67. package/dist/_virtual/manipulation.js +5 -0
  68. package/dist/_virtual/manipulation.js.map +1 -0
  69. package/dist/_virtual/matcher.js +5 -0
  70. package/dist/_virtual/matcher.js.map +1 -0
  71. package/dist/_virtual/node.js +5 -0
  72. package/dist/_virtual/node.js.map +1 -0
  73. package/dist/_virtual/node2.js +5 -0
  74. package/dist/_virtual/node2.js.map +1 -0
  75. package/dist/_virtual/parse.js +5 -0
  76. package/dist/_virtual/parse.js.map +1 -0
  77. package/dist/_virtual/parse2.js +5 -0
  78. package/dist/_virtual/parse2.js.map +1 -0
  79. package/dist/_virtual/pseudos.js +5 -0
  80. package/dist/_virtual/pseudos.js.map +1 -0
  81. package/dist/_virtual/querying.js +5 -0
  82. package/dist/_virtual/querying.js.map +1 -0
  83. package/dist/_virtual/sort.js +5 -0
  84. package/dist/_virtual/sort.js.map +1 -0
  85. package/dist/_virtual/stringify.js +5 -0
  86. package/dist/_virtual/stringify.js.map +1 -0
  87. package/dist/_virtual/subselects.js +5 -0
  88. package/dist/_virtual/subselects.js.map +1 -0
  89. package/dist/_virtual/text.js +5 -0
  90. package/dist/_virtual/text.js.map +1 -0
  91. package/dist/_virtual/traversal.js +5 -0
  92. package/dist/_virtual/traversal.js.map +1 -0
  93. package/dist/_virtual/type.js +5 -0
  94. package/dist/_virtual/type.js.map +1 -0
  95. package/dist/_virtual/valid.js +5 -0
  96. package/dist/_virtual/valid.js.map +1 -0
  97. package/dist/_virtual/void-tag.js +5 -0
  98. package/dist/_virtual/void-tag.js.map +1 -0
  99. package/dist/cli/commands/fulltext/attach.js +1 -1
  100. package/dist/cli/commands/fulltext/attach.js.map +1 -1
  101. package/dist/cli/commands/fulltext/check.d.ts +1 -2
  102. package/dist/cli/commands/fulltext/check.d.ts.map +1 -1
  103. package/dist/cli/commands/fulltext/check.js +4 -2
  104. package/dist/cli/commands/fulltext/check.js.map +1 -1
  105. package/dist/cli/commands/fulltext/convert.d.ts.map +1 -1
  106. package/dist/cli/commands/fulltext/convert.js +8 -8
  107. package/dist/cli/commands/fulltext/convert.js.map +1 -1
  108. package/dist/cli/commands/fulltext/fetch.d.ts.map +1 -1
  109. package/dist/cli/commands/fulltext/fetch.js +10 -6
  110. package/dist/cli/commands/fulltext/fetch.js.map +1 -1
  111. package/dist/cli/commands/fulltext/index.d.ts.map +1 -1
  112. package/dist/cli/commands/fulltext/index.js +2 -0
  113. package/dist/cli/commands/fulltext/index.js.map +1 -1
  114. package/dist/cli/commands/fulltext/init.d.ts.map +1 -1
  115. package/dist/cli/commands/fulltext/init.js +6 -5
  116. package/dist/cli/commands/fulltext/init.js.map +1 -1
  117. package/dist/cli/commands/fulltext/pending.d.ts +1 -1
  118. package/dist/cli/commands/fulltext/pending.d.ts.map +1 -1
  119. package/dist/cli/commands/fulltext/pending.js +4 -2
  120. package/dist/cli/commands/fulltext/pending.js.map +1 -1
  121. package/dist/cli/commands/fulltext/status.d.ts.map +1 -1
  122. package/dist/cli/commands/fulltext/status.js +4 -2
  123. package/dist/cli/commands/fulltext/status.js.map +1 -1
  124. package/dist/cli/commands/fulltext/sync.d.ts.map +1 -1
  125. package/dist/cli/commands/fulltext/sync.js +6 -2
  126. package/dist/cli/commands/fulltext/sync.js.map +1 -1
  127. package/dist/cli/commands/review/types.d.ts +1 -1
  128. package/dist/cli/commands/review/types.d.ts.map +1 -1
  129. package/dist/cli/commands/review/types.js.map +1 -1
  130. package/dist/config/schema.d.ts +2 -0
  131. package/dist/config/schema.d.ts.map +1 -1
  132. package/dist/config/schema.js +6 -0
  133. package/dist/config/schema.js.map +1 -1
  134. package/dist/{fulltext → integration}/attach-shared.d.ts +2 -2
  135. package/dist/integration/attach-shared.d.ts.map +1 -0
  136. package/dist/integration/attach-shared.js.map +1 -0
  137. package/dist/integration/fulltext-attach.js +1 -1
  138. package/dist/integration/fulltext-attach.js.map +1 -1
  139. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/citation-key.js +1 -1
  140. package/dist/node_modules/@ncukondo/academic-fulltext/dist/citation-key.js.map +1 -0
  141. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/arxiv-html-parser.js +434 -0
  142. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/arxiv-html-parser.js.map +1 -0
  143. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/index.js +93 -0
  144. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/index.js.map +1 -0
  145. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/jats-parser.js +1060 -0
  146. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/jats-parser.js.map +1 -0
  147. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/convert/markdown-writer.js +146 -117
  148. package/dist/node_modules/@ncukondo/academic-fulltext/dist/convert/markdown-writer.js.map +1 -0
  149. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/discovery/arxiv.js +8 -1
  150. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/arxiv.js.map +1 -0
  151. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/discovery/core.js +6 -3
  152. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/core.js.map +1 -0
  153. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/index.js +139 -0
  154. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/index.js.map +1 -0
  155. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/ncbi-id-converter.js +46 -0
  156. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/ncbi-id-converter.js.map +1 -0
  157. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/discovery/pmc.js +8 -4
  158. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/pmc.js.map +1 -0
  159. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/discovery/unpaywall.js +43 -9
  160. package/dist/node_modules/@ncukondo/academic-fulltext/dist/discovery/unpaywall.js.map +1 -0
  161. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/arxiv-html.js +48 -0
  162. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/arxiv-html.js.map +1 -0
  163. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/downloader.js +64 -0
  164. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/downloader.js.map +1 -0
  165. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/orchestrator.js +236 -0
  166. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/orchestrator.js.map +1 -0
  167. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/download/pmc-xml.js +2 -1
  168. package/dist/node_modules/@ncukondo/academic-fulltext/dist/download/pmc-xml.js.map +1 -0
  169. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/meta.js +15 -10
  170. package/dist/node_modules/@ncukondo/academic-fulltext/dist/meta.js.map +1 -0
  171. package/dist/node_modules/@ncukondo/academic-fulltext/dist/paths.js.map +1 -0
  172. package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/readme.js +8 -4
  173. package/dist/node_modules/@ncukondo/academic-fulltext/dist/readme.js.map +1 -0
  174. package/dist/node_modules/boolbase/index.js +19 -0
  175. package/dist/node_modules/boolbase/index.js.map +1 -0
  176. package/dist/node_modules/css-select/lib/attributes.js +203 -0
  177. package/dist/node_modules/css-select/lib/attributes.js.map +1 -0
  178. package/dist/node_modules/css-select/lib/compile.js +141 -0
  179. package/dist/node_modules/css-select/lib/compile.js.map +1 -0
  180. package/dist/node_modules/css-select/lib/general.js +154 -0
  181. package/dist/node_modules/css-select/lib/general.js.map +1 -0
  182. package/dist/node_modules/css-select/lib/index.js +128 -0
  183. package/dist/node_modules/css-select/lib/index.js.map +1 -0
  184. package/dist/node_modules/css-select/lib/pseudo-selectors/aliases.js +40 -0
  185. package/dist/node_modules/css-select/lib/pseudo-selectors/aliases.js.map +1 -0
  186. package/dist/node_modules/css-select/lib/pseudo-selectors/filters.js +163 -0
  187. package/dist/node_modules/css-select/lib/pseudo-selectors/filters.js.map +1 -0
  188. package/dist/node_modules/css-select/lib/pseudo-selectors/index.js +71 -0
  189. package/dist/node_modules/css-select/lib/pseudo-selectors/index.js.map +1 -0
  190. package/dist/node_modules/css-select/lib/pseudo-selectors/pseudos.js +93 -0
  191. package/dist/node_modules/css-select/lib/pseudo-selectors/pseudos.js.map +1 -0
  192. package/dist/node_modules/css-select/lib/pseudo-selectors/subselects.js +111 -0
  193. package/dist/node_modules/css-select/lib/pseudo-selectors/subselects.js.map +1 -0
  194. package/dist/node_modules/css-select/lib/sort.js +78 -0
  195. package/dist/node_modules/css-select/lib/sort.js.map +1 -0
  196. package/dist/node_modules/css-what/lib/es/index.js +12 -0
  197. package/dist/node_modules/css-what/lib/es/index.js.map +1 -0
  198. package/dist/node_modules/css-what/lib/es/parse.js +349 -0
  199. package/dist/node_modules/css-what/lib/es/parse.js.map +1 -0
  200. package/dist/node_modules/css-what/lib/es/stringify.js +102 -0
  201. package/dist/node_modules/css-what/lib/es/stringify.js.map +1 -0
  202. package/dist/node_modules/css-what/lib/es/types.js +37 -0
  203. package/dist/node_modules/css-what/lib/es/types.js.map +1 -0
  204. package/dist/node_modules/dom-serializer/lib/foreignNames.js +117 -0
  205. package/dist/node_modules/dom-serializer/lib/foreignNames.js.map +1 -0
  206. package/dist/node_modules/dom-serializer/lib/index.js +207 -0
  207. package/dist/node_modules/dom-serializer/lib/index.js.map +1 -0
  208. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode.js +368 -0
  209. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode.js.map +1 -0
  210. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js +70 -0
  211. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js.map +1 -0
  212. package/dist/node_modules/dom-serializer/node_modules/entities/lib/encode.js +61 -0
  213. package/dist/node_modules/dom-serializer/node_modules/entities/lib/encode.js.map +1 -0
  214. package/dist/node_modules/dom-serializer/node_modules/entities/lib/escape.js +79 -0
  215. package/dist/node_modules/dom-serializer/node_modules/entities/lib/escape.js.map +1 -0
  216. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-html.js +18 -0
  217. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-html.js.map +1 -0
  218. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-xml.js +18 -0
  219. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-xml.js.map +1 -0
  220. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/encode-html.js +19 -0
  221. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/encode-html.js.map +1 -0
  222. package/dist/node_modules/dom-serializer/node_modules/entities/lib/index.js +139 -0
  223. package/dist/node_modules/dom-serializer/node_modules/entities/lib/index.js.map +1 -0
  224. package/dist/node_modules/domelementtype/lib/index.js +40 -0
  225. package/dist/node_modules/domelementtype/lib/index.js.map +1 -0
  226. package/dist/node_modules/domhandler/lib/index.js +167 -0
  227. package/dist/node_modules/domhandler/lib/index.js.map +1 -0
  228. package/dist/node_modules/domhandler/lib/node.js +439 -0
  229. package/dist/node_modules/domhandler/lib/node.js.map +1 -0
  230. package/dist/node_modules/domutils/lib/feeds.js +146 -0
  231. package/dist/node_modules/domutils/lib/feeds.js.map +1 -0
  232. package/dist/node_modules/domutils/lib/helpers.js +97 -0
  233. package/dist/node_modules/domutils/lib/helpers.js.map +1 -0
  234. package/dist/node_modules/domutils/lib/index.js +65 -0
  235. package/dist/node_modules/domutils/lib/index.js.map +1 -0
  236. package/dist/node_modules/domutils/lib/legacy.js +124 -0
  237. package/dist/node_modules/domutils/lib/legacy.js.map +1 -0
  238. package/dist/node_modules/domutils/lib/manipulation.js +107 -0
  239. package/dist/node_modules/domutils/lib/manipulation.js.map +1 -0
  240. package/dist/node_modules/domutils/lib/querying.js +102 -0
  241. package/dist/node_modules/domutils/lib/querying.js.map +1 -0
  242. package/dist/node_modules/domutils/lib/stringify.js +65 -0
  243. package/dist/node_modules/domutils/lib/stringify.js.map +1 -0
  244. package/dist/node_modules/domutils/lib/traversal.js +69 -0
  245. package/dist/node_modules/domutils/lib/traversal.js.map +1 -0
  246. package/dist/node_modules/he/he.js +256 -0
  247. package/dist/node_modules/he/he.js.map +1 -0
  248. package/dist/node_modules/node-html-parser/dist/back.js +16 -0
  249. package/dist/node_modules/node-html-parser/dist/back.js.map +1 -0
  250. package/dist/node_modules/node-html-parser/dist/index.js +48 -0
  251. package/dist/node_modules/node-html-parser/dist/index.js.map +1 -0
  252. package/dist/node_modules/node-html-parser/dist/matcher.js +112 -0
  253. package/dist/node_modules/node-html-parser/dist/matcher.js.map +1 -0
  254. package/dist/node_modules/node-html-parser/dist/nodes/comment.js +41 -0
  255. package/dist/node_modules/node-html-parser/dist/nodes/comment.js.map +1 -0
  256. package/dist/node_modules/node-html-parser/dist/nodes/html.js +1048 -0
  257. package/dist/node_modules/node-html-parser/dist/nodes/html.js.map +1 -0
  258. package/dist/node_modules/node-html-parser/dist/nodes/node.js +49 -0
  259. package/dist/node_modules/node-html-parser/dist/nodes/node.js.map +1 -0
  260. package/dist/node_modules/node-html-parser/dist/nodes/text.js +106 -0
  261. package/dist/node_modules/node-html-parser/dist/nodes/text.js.map +1 -0
  262. package/dist/node_modules/node-html-parser/dist/nodes/type.js +19 -0
  263. package/dist/node_modules/node-html-parser/dist/nodes/type.js.map +1 -0
  264. package/dist/node_modules/node-html-parser/dist/parse.js +20 -0
  265. package/dist/node_modules/node-html-parser/dist/parse.js.map +1 -0
  266. package/dist/node_modules/node-html-parser/dist/valid.js +19 -0
  267. package/dist/node_modules/node-html-parser/dist/valid.js.map +1 -0
  268. package/dist/node_modules/node-html-parser/dist/void-tag.js +36 -0
  269. package/dist/node_modules/node-html-parser/dist/void-tag.js.map +1 -0
  270. package/dist/node_modules/nth-check/lib/compile.js +76 -0
  271. package/dist/node_modules/nth-check/lib/compile.js.map +1 -0
  272. package/dist/node_modules/nth-check/lib/index.js +36 -0
  273. package/dist/node_modules/nth-check/lib/index.js.map +1 -0
  274. package/dist/node_modules/nth-check/lib/parse.js +69 -0
  275. package/dist/node_modules/nth-check/lib/parse.js.map +1 -0
  276. package/package.json +2 -2
  277. package/dist/fulltext/attach-shared.d.ts.map +0 -1
  278. package/dist/fulltext/attach-shared.js.map +0 -1
  279. package/dist/fulltext/citation-key.d.ts +0 -15
  280. package/dist/fulltext/citation-key.d.ts.map +0 -1
  281. package/dist/fulltext/citation-key.js.map +0 -1
  282. package/dist/fulltext/convert/index.d.ts +0 -20
  283. package/dist/fulltext/convert/index.d.ts.map +0 -1
  284. package/dist/fulltext/convert/index.js +0 -50
  285. package/dist/fulltext/convert/index.js.map +0 -1
  286. package/dist/fulltext/convert/jats-parser.d.ts +0 -36
  287. package/dist/fulltext/convert/jats-parser.d.ts.map +0 -1
  288. package/dist/fulltext/convert/jats-parser.js +0 -887
  289. package/dist/fulltext/convert/jats-parser.js.map +0 -1
  290. package/dist/fulltext/convert/markdown-writer.d.ts +0 -6
  291. package/dist/fulltext/convert/markdown-writer.d.ts.map +0 -1
  292. package/dist/fulltext/convert/markdown-writer.js.map +0 -1
  293. package/dist/fulltext/convert/types.d.ts +0 -141
  294. package/dist/fulltext/convert/types.d.ts.map +0 -1
  295. package/dist/fulltext/discovery/arxiv.d.ts +0 -11
  296. package/dist/fulltext/discovery/arxiv.d.ts.map +0 -1
  297. package/dist/fulltext/discovery/arxiv.js.map +0 -1
  298. package/dist/fulltext/discovery/core.d.ts +0 -11
  299. package/dist/fulltext/discovery/core.d.ts.map +0 -1
  300. package/dist/fulltext/discovery/core.js.map +0 -1
  301. package/dist/fulltext/discovery/index.d.ts +0 -28
  302. package/dist/fulltext/discovery/index.d.ts.map +0 -1
  303. package/dist/fulltext/discovery/index.js +0 -75
  304. package/dist/fulltext/discovery/index.js.map +0 -1
  305. package/dist/fulltext/discovery/pmc.d.ts +0 -19
  306. package/dist/fulltext/discovery/pmc.d.ts.map +0 -1
  307. package/dist/fulltext/discovery/pmc.js.map +0 -1
  308. package/dist/fulltext/discovery/unpaywall.d.ts +0 -11
  309. package/dist/fulltext/discovery/unpaywall.d.ts.map +0 -1
  310. package/dist/fulltext/discovery/unpaywall.js.map +0 -1
  311. package/dist/fulltext/download/downloader.d.ts +0 -21
  312. package/dist/fulltext/download/downloader.d.ts.map +0 -1
  313. package/dist/fulltext/download/downloader.js +0 -59
  314. package/dist/fulltext/download/downloader.js.map +0 -1
  315. package/dist/fulltext/download/orchestrator.d.ts +0 -33
  316. package/dist/fulltext/download/orchestrator.d.ts.map +0 -1
  317. package/dist/fulltext/download/orchestrator.js +0 -125
  318. package/dist/fulltext/download/orchestrator.js.map +0 -1
  319. package/dist/fulltext/download/pmc-xml.d.ts +0 -13
  320. package/dist/fulltext/download/pmc-xml.d.ts.map +0 -1
  321. package/dist/fulltext/download/pmc-xml.js.map +0 -1
  322. package/dist/fulltext/meta.d.ts +0 -25
  323. package/dist/fulltext/meta.d.ts.map +0 -1
  324. package/dist/fulltext/meta.js.map +0 -1
  325. package/dist/fulltext/paths.d.ts +0 -12
  326. package/dist/fulltext/paths.d.ts.map +0 -1
  327. package/dist/fulltext/paths.js.map +0 -1
  328. package/dist/fulltext/readme.d.ts +0 -4
  329. package/dist/fulltext/readme.d.ts.map +0 -1
  330. package/dist/fulltext/readme.js.map +0 -1
  331. package/dist/fulltext/types.d.ts +0 -90
  332. package/dist/fulltext/types.d.ts.map +0 -1
  333. /package/dist/{fulltext → integration}/attach-shared.js +0 -0
  334. /package/dist/{fulltext → node_modules/@ncukondo/academic-fulltext/dist}/paths.js +0 -0
@@ -0,0 +1,69 @@
1
+ import { __exports as parse } from "../../../_virtual/parse2.js";
2
+ var hasRequiredParse;
3
+ function requireParse() {
4
+ if (hasRequiredParse) return parse;
5
+ hasRequiredParse = 1;
6
+ Object.defineProperty(parse, "__esModule", { value: true });
7
+ parse.parse = void 0;
8
+ var whitespace = /* @__PURE__ */ new Set([9, 10, 12, 13, 32]);
9
+ var ZERO = "0".charCodeAt(0);
10
+ var NINE = "9".charCodeAt(0);
11
+ function parse$1(formula) {
12
+ formula = formula.trim().toLowerCase();
13
+ if (formula === "even") {
14
+ return [2, 0];
15
+ } else if (formula === "odd") {
16
+ return [2, 1];
17
+ }
18
+ var idx = 0;
19
+ var a = 0;
20
+ var sign = readSign();
21
+ var number = readNumber();
22
+ if (idx < formula.length && formula.charAt(idx) === "n") {
23
+ idx++;
24
+ a = sign * (number !== null && number !== void 0 ? number : 1);
25
+ skipWhitespace();
26
+ if (idx < formula.length) {
27
+ sign = readSign();
28
+ skipWhitespace();
29
+ number = readNumber();
30
+ } else {
31
+ sign = number = 0;
32
+ }
33
+ }
34
+ if (number === null || idx < formula.length) {
35
+ throw new Error("n-th rule couldn't be parsed ('".concat(formula, "')"));
36
+ }
37
+ return [a, sign * number];
38
+ function readSign() {
39
+ if (formula.charAt(idx) === "-") {
40
+ idx++;
41
+ return -1;
42
+ }
43
+ if (formula.charAt(idx) === "+") {
44
+ idx++;
45
+ }
46
+ return 1;
47
+ }
48
+ function readNumber() {
49
+ var start = idx;
50
+ var value = 0;
51
+ while (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {
52
+ value = value * 10 + (formula.charCodeAt(idx) - ZERO);
53
+ idx++;
54
+ }
55
+ return idx === start ? null : value;
56
+ }
57
+ function skipWhitespace() {
58
+ while (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) {
59
+ idx++;
60
+ }
61
+ }
62
+ }
63
+ parse.parse = parse$1;
64
+ return parse;
65
+ }
66
+ export {
67
+ requireParse as __require
68
+ };
69
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sources":["../../../../node_modules/nth-check/lib/parse.js"],"sourcesContent":["\"use strict\";\n// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = void 0;\n// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is \" \\t\\r\\n\\f\"\nvar whitespace = new Set([9, 10, 12, 13, 32]);\nvar ZERO = \"0\".charCodeAt(0);\nvar NINE = \"9\".charCodeAt(0);\n/**\n * Parses an expression.\n *\n * @throws An `Error` if parsing fails.\n * @returns An array containing the integer step size and the integer offset of the nth rule.\n * @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n */\nfunction parse(formula) {\n formula = formula.trim().toLowerCase();\n if (formula === \"even\") {\n return [2, 0];\n }\n else if (formula === \"odd\") {\n return [2, 1];\n }\n // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\n var idx = 0;\n var a = 0;\n var sign = readSign();\n var number = readNumber();\n if (idx < formula.length && formula.charAt(idx) === \"n\") {\n idx++;\n a = sign * (number !== null && number !== void 0 ? number : 1);\n skipWhitespace();\n if (idx < formula.length) {\n sign = readSign();\n skipWhitespace();\n number = readNumber();\n }\n else {\n sign = number = 0;\n }\n }\n // Throw if there is anything else\n if (number === null || idx < formula.length) {\n throw new Error(\"n-th rule couldn't be parsed ('\".concat(formula, \"')\"));\n }\n return [a, sign * number];\n function readSign() {\n if (formula.charAt(idx) === \"-\") {\n idx++;\n return -1;\n }\n if (formula.charAt(idx) === \"+\") {\n idx++;\n }\n return 1;\n }\n function readNumber() {\n var start = idx;\n var value = 0;\n while (idx < formula.length &&\n formula.charCodeAt(idx) >= ZERO &&\n formula.charCodeAt(idx) <= NINE) {\n value = value * 10 + (formula.charCodeAt(idx) - ZERO);\n idx++;\n }\n // Return `null` if we didn't read anything.\n return idx === start ? null : value;\n }\n function skipWhitespace() {\n while (idx < formula.length &&\n whitespace.has(formula.charCodeAt(idx))) {\n idx++;\n }\n }\n}\nexports.parse = parse;\n//# sourceMappingURL=parse.js.map"],"names":["parse_1","parse"],"mappings":";;;;;AAEA,SAAO,eAAeA,OAAS,cAAc,EAAE,OAAO,MAAM;AAC5DA,QAAA,QAAgB;AAEhB,MAAI,aAAa,oBAAI,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC5C,MAAI,OAAO,IAAI,WAAW,CAAC;AAC3B,MAAI,OAAO,IAAI,WAAW,CAAC;AAQ3B,WAASC,QAAM,SAAS;AACpB,cAAU,QAAQ,KAAI,EAAG,YAAW;AACpC,QAAI,YAAY,QAAQ;AACpB,aAAO,CAAC,GAAG,CAAC;AAAA,IACpB,WACa,YAAY,OAAO;AACxB,aAAO,CAAC,GAAG,CAAC;AAAA,IACpB;AAEI,QAAI,MAAM;AACV,QAAI,IAAI;AACR,QAAI,OAAO,SAAQ;AACnB,QAAI,SAAS,WAAU;AACvB,QAAI,MAAM,QAAQ,UAAU,QAAQ,OAAO,GAAG,MAAM,KAAK;AACrD;AACA,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAS,SAAS;AAC5D,qBAAc;AACd,UAAI,MAAM,QAAQ,QAAQ;AACtB,eAAO,SAAQ;AACf,uBAAc;AACd,iBAAS,WAAU;AAAA,MAC/B,OACa;AACD,eAAO,SAAS;AAAA,MAC5B;AAAA,IACA;AAEI,QAAI,WAAW,QAAQ,MAAM,QAAQ,QAAQ;AACzC,YAAM,IAAI,MAAM,kCAAkC,OAAO,SAAS,IAAI,CAAC;AAAA,IAC/E;AACI,WAAO,CAAC,GAAG,OAAO,MAAM;AACxB,aAAS,WAAW;AAChB,UAAI,QAAQ,OAAO,GAAG,MAAM,KAAK;AAC7B;AACA,eAAO;AAAA,MACnB;AACQ,UAAI,QAAQ,OAAO,GAAG,MAAM,KAAK;AAC7B;AAAA,MACZ;AACQ,aAAO;AAAA,IACf;AACI,aAAS,aAAa;AAClB,UAAI,QAAQ;AACZ,UAAI,QAAQ;AACZ,aAAO,MAAM,QAAQ,UACjB,QAAQ,WAAW,GAAG,KAAK,QAC3B,QAAQ,WAAW,GAAG,KAAK,MAAM;AACjC,gBAAQ,QAAQ,MAAM,QAAQ,WAAW,GAAG,IAAI;AAChD;AAAA,MACZ;AAEQ,aAAO,QAAQ,QAAQ,OAAO;AAAA,IACtC;AACI,aAAS,iBAAiB;AACtB,aAAO,MAAM,QAAQ,UACjB,WAAW,IAAI,QAAQ,WAAW,GAAG,CAAC,GAAG;AACzC;AAAA,MACZ;AAAA,IACA;AAAA,EACA;AACAD,QAAA,QAAgBC;;;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncukondo/search-hub",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "A CLI tool for systematic literature searching across multiple academic databases",
5
5
  "type": "module",
6
6
  "engines": {
@@ -63,7 +63,7 @@
63
63
  "license": "MIT",
64
64
  "dependencies": {
65
65
  "@iarna/toml": "^3.0.0",
66
- "any-ascii": "^0.3.3",
66
+ "@ncukondo/academic-fulltext": "^0.2.0",
67
67
  "cli-progress": "^3.12.0",
68
68
  "commander": "^13.0.0",
69
69
  "dotenv": "^17.2.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"attach-shared.d.ts","sourceRoot":"","sources":["../../src/fulltext/attach-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,0CAA2C,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAUhG;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwBtF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,6BAA6B;IAC5C,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sDAAsD;IACtD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAsE/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attach-shared.js","sources":["../../src/fulltext/attach-shared.ts"],"sourcesContent":["/**\n * Shared fulltext attach utilities.\n * Used by both the integration attach (register flow) and standalone attach command.\n */\n\nimport { readdir, readFile, access } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { join } from 'node:path';\nimport type { FulltextMeta } from './types.js';\nimport type { FulltextAttachResult } from '../integration/types.js';\n\n/** Files we try to attach, in priority order. */\nexport const ATTACHABLE_FILES = ['fulltext.pdf', 'fulltext.md'] as const;\n\n/**\n * Find the ref ID matching a fulltext meta entry.\n * Tries DOI first, then PMID.\n */\nexport function findRefId(meta: FulltextMeta, refLookup: Map<string, string>): string | undefined {\n if (meta.doi) {\n const byDoi = refLookup.get(`doi:${meta.doi}`);\n if (byDoi) return byDoi;\n }\n if (meta.pmid) {\n const byPmid = refLookup.get(`pmid:${meta.pmid}`);\n if (byPmid) return byPmid;\n }\n return undefined;\n}\n\n/** A single article directory entry with its loaded metadata. */\nexport interface ArticleEntry {\n dirName: string;\n articleDir: string;\n meta: FulltextMeta | null;\n}\n\n/**\n * Scan a fulltext directory and load metadata for all article subdirectories.\n * Returns an empty array if the directory doesn't exist.\n */\nexport async function loadFulltextEntries(fulltextDir: string): Promise<ArticleEntry[]> {\n let dirNames: string[];\n try {\n const dirEntries = await readdir(fulltextDir, { withFileTypes: true });\n dirNames = dirEntries\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n } catch {\n return [];\n }\n\n const entries: ArticleEntry[] = [];\n for (const dirName of dirNames) {\n const articleDir = join(fulltextDir, dirName);\n try {\n const raw = await readFile(join(articleDir, 'meta.json'), 'utf-8');\n const meta = JSON.parse(raw) as FulltextMeta;\n entries.push({ dirName, articleDir, meta });\n } catch {\n // Will be handled as a failed entry by the caller\n entries.push({ dirName, articleDir, meta: null });\n }\n }\n return entries;\n}\n\n/**\n * Determine which attachable files exist for an article, verifying on disk.\n */\nexport async function resolveAttachableFiles(\n articleDir: string,\n meta: FulltextMeta,\n): Promise<string[]> {\n const filesToAttach: string[] = [];\n for (const filename of ATTACHABLE_FILES) {\n const fileKey = filename === 'fulltext.pdf' ? 'pdf' : 'markdown';\n if (meta.files[fileKey]) {\n try {\n await access(join(articleDir, filename), constants.R_OK);\n filesToAttach.push(filename);\n } catch {\n // File recorded in meta but not on disk — skip\n }\n }\n }\n return filesToAttach;\n}\n\n/** Options for processFulltextEntries. */\nexport interface ProcessFulltextEntriesOptions {\n /** Path to the fulltext directory (sessionDir/fulltext) */\n fulltextDir: string;\n /** Lookup map from identifiers to ref IDs */\n refLookup: Map<string, string>;\n /** Function to attach a single file to a ref entry */\n attachFile: (refId: string, filePath: string) => Promise<void>;\n /** If true, skip actual attach calls and just record what would be attached */\n dryRun?: boolean;\n /** Progress callback */\n onProgress?: (current: number, total: number) => void;\n}\n\n/**\n * Shared attach loop: scan fulltext entries, match to refs, and attach files.\n * Both the standalone and integrated attach commands delegate to this function.\n */\nexport async function processFulltextEntries(\n options: ProcessFulltextEntriesOptions,\n): Promise<FulltextAttachResult> {\n const { fulltextDir, refLookup, attachFile, dryRun = false, onProgress } = options;\n\n const result: FulltextAttachResult = {\n summary: { total: 0, attached: 0, skipped: 0, failed: 0 },\n attached: [],\n skipped: [],\n failed: [],\n };\n\n const entries = await loadFulltextEntries(fulltextDir);\n result.summary.total = entries.length;\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]!;\n const { dirName, articleDir, meta } = entry;\n\n if (onProgress) {\n onProgress(i + 1, entries.length);\n }\n\n if (!meta) {\n result.summary.failed++;\n result.failed.push({\n dirName,\n reason: 'meta_read_error',\n error: 'Failed to read meta.json',\n });\n continue;\n }\n\n const refId = findRefId(meta, refLookup);\n if (!refId) {\n result.summary.skipped++;\n result.skipped.push({ dirName, reason: 'not_in_ref' });\n continue;\n }\n\n const filesToAttach = await resolveAttachableFiles(articleDir, meta);\n\n if (filesToAttach.length === 0) {\n result.summary.skipped++;\n result.skipped.push({ dirName, reason: 'no_files' });\n continue;\n }\n\n if (dryRun) {\n result.summary.attached++;\n result.attached.push({ refId, files: filesToAttach });\n continue;\n }\n\n try {\n for (const filename of filesToAttach) {\n const filePath = join(articleDir, filename);\n await attachFile(refId, filePath);\n }\n result.summary.attached++;\n result.attached.push({ refId, files: filesToAttach });\n } catch (error) {\n result.summary.failed++;\n result.failed.push({\n dirName,\n reason: 'attach_error',\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n return result;\n}\n"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Citation key generation for fulltext directories.
3
- */
4
- /**
5
- * Generate a citation key from author and year.
6
- * Format: {family-name-lowercase}{year}
7
- * With collision handling via letter suffixes (a, b, c, ...).
8
- */
9
- export declare function generateCitationKey(author: string | undefined, year: string | undefined, existingKeys?: string[]): string;
10
- /**
11
- * Generate a directory name from a citation key.
12
- * Format: {citationKey}-{uuid8}
13
- */
14
- export declare function generateDirName(citationKey: string, uuid?: string): string;
15
- //# sourceMappingURL=citation-key.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"citation-key.d.ts","sourceRoot":"","sources":["../../src/fulltext/citation-key.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiCH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,MAAM,CA4BR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAI1E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"citation-key.js","sources":["../../src/fulltext/citation-key.ts"],"sourcesContent":["/**\n * Citation key generation for fulltext directories.\n */\n\nimport anyAscii from 'any-ascii';\nimport { randomUUID } from 'node:crypto';\n\n/**\n * Generate a collision suffix: a, b, ..., z, aa, ab, ...\n */\nfunction collisionSuffix(index: number): string {\n let result = '';\n let n = index;\n do {\n result = String.fromCodePoint(97 + (n % 26)) + result;\n n = Math.floor(n / 26) - 1;\n } while (n >= 0);\n return result;\n}\n\n/** CJK Unified Ideographs range: U+4E00–U+9FFF */\nconst CJK_REGEX = /[\\u4e00-\\u9fff]/;\n\n/**\n * Extract the family name portion from an author string.\n * Handles formats like \"Smith, J.\" → \"Smith\", \"Smith\" → \"Smith\".\n */\nfunction extractFamilyName(author: string): string {\n const commaIndex = author.indexOf(',');\n if (commaIndex >= 0) {\n return author.slice(0, commaIndex).trim();\n }\n return author.trim();\n}\n\n/**\n * Generate a citation key from author and year.\n * Format: {family-name-lowercase}{year}\n * With collision handling via letter suffixes (a, b, c, ...).\n */\nexport function generateCitationKey(\n author: string | undefined,\n year: string | undefined,\n existingKeys?: string[],\n): string {\n // Extract and normalize author\n const rawFamily = author?.trim() ? extractFamilyName(author) : 'unknown';\n\n // CJK characters cannot be accurately transliterated to the correct reading\n // (any-ascii maps them to Chinese pinyin, not Japanese romaji etc.)\n // Fall back to 'unknown' for names containing CJK ideographs.\n const normalizedFamily = CJK_REGEX.test(rawFamily)\n ? 'unknown'\n : anyAscii(rawFamily).toLowerCase().replace(/[^a-z]/g, '') || 'unknown';\n\n // Normalize year\n const normalizedYear = year?.trim() || '0000';\n\n const baseKey = `${normalizedFamily}${normalizedYear}`;\n\n // Handle collisions\n if (!existingKeys || !existingKeys.includes(baseKey)) {\n return baseKey;\n }\n\n // Find the first available suffix\n for (let i = 0; ; i++) {\n const candidateKey = `${baseKey}${collisionSuffix(i)}`;\n if (!existingKeys.includes(candidateKey)) {\n return candidateKey;\n }\n }\n}\n\n/**\n * Generate a directory name from a citation key.\n * Format: {citationKey}-{uuid8}\n */\nexport function generateDirName(citationKey: string, uuid?: string): string {\n const id = uuid ?? randomUUID();\n const uuid8 = id.slice(0, 8);\n return `${citationKey}-${uuid8}`;\n}\n"],"names":[],"mappings":";;AAUA,SAAS,gBAAgB,OAAuB;AAC9C,MAAI,SAAS;AACb,MAAI,IAAI;AACR,KAAG;AACD,aAAS,OAAO,cAAc,KAAM,IAAI,EAAG,IAAI;AAC/C,QAAI,KAAK,MAAM,IAAI,EAAE,IAAI;AAAA,EAC3B,SAAS,KAAK;AACd,SAAO;AACT;AAGA,MAAM,YAAY;AAMlB,SAAS,kBAAkB,QAAwB;AACjD,QAAM,aAAa,OAAO,QAAQ,GAAG;AACrC,MAAI,cAAc,GAAG;AACnB,WAAO,OAAO,MAAM,GAAG,UAAU,EAAE,KAAA;AAAA,EACrC;AACA,SAAO,OAAO,KAAA;AAChB;AAOO,SAAS,oBACd,QACA,MACA,cACQ;AAER,QAAM,YAAY,QAAQ,KAAA,IAAS,kBAAkB,MAAM,IAAI;AAK/D,QAAM,mBAAmB,UAAU,KAAK,SAAS,IAC7C,YACA,SAAS,SAAS,EAAE,YAAA,EAAc,QAAQ,WAAW,EAAE,KAAK;AAGhE,QAAM,iBAAiB,MAAM,KAAA,KAAU;AAEvC,QAAM,UAAU,GAAG,gBAAgB,GAAG,cAAc;AAGpD,MAAI,CAAC,gBAAgB,CAAC,aAAa,SAAS,OAAO,GAAG;AACpD,WAAO;AAAA,EACT;AAGA,WAAS,IAAI,KAAK,KAAK;AACrB,UAAM,eAAe,GAAG,OAAO,GAAG,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,aAAa,SAAS,YAAY,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAMO,SAAS,gBAAgB,aAAqB,MAAuB;AAC1E,QAAM,KAAK,QAAQ,WAAA;AACnB,QAAM,QAAQ,GAAG,MAAM,GAAG,CAAC;AAC3B,SAAO,GAAG,WAAW,IAAI,KAAK;AAChC;"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Conversion orchestrator for PMC XML to Markdown.
3
- *
4
- * Ties together the JATS parser and Markdown writer with file I/O.
5
- */
6
- export interface ConvertResult {
7
- success: boolean;
8
- error?: string;
9
- title?: string;
10
- sections?: number;
11
- references?: number;
12
- }
13
- /**
14
- * Convert a PMC JATS XML file to Markdown.
15
- *
16
- * Reads the XML, parses it into a JatsDocument, writes Markdown,
17
- * and optionally updates meta.json.
18
- */
19
- export declare function convertPmcXmlToMarkdown(xmlPath: string, mdPath: string, metaPath?: string): Promise<ConvertResult>;
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fulltext/convert/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAqDxB"}
@@ -1,50 +0,0 @@
1
- import { readFile, writeFile, stat } from "node:fs/promises";
2
- import { parseJatsMetadata, parseJatsBody, parseJatsReferences, parseJatsBackMatter } from "./jats-parser.js";
3
- import { writeMarkdown } from "./markdown-writer.js";
4
- async function convertPmcXmlToMarkdown(xmlPath, mdPath, metaPath) {
5
- try {
6
- const xml = await readFile(xmlPath, "utf-8");
7
- const metadata = parseJatsMetadata(xml);
8
- const sections = parseJatsBody(xml);
9
- const references = parseJatsReferences(xml);
10
- const backMatter = parseJatsBackMatter(xml);
11
- const doc = { metadata, sections, references };
12
- if (backMatter.acknowledgments) doc.acknowledgments = backMatter.acknowledgments;
13
- if (backMatter.appendices) doc.appendices = backMatter.appendices;
14
- if (backMatter.footnotes) doc.footnotes = backMatter.footnotes;
15
- if (backMatter.floats) doc.floats = backMatter.floats;
16
- if (backMatter.notes) doc.notes = backMatter.notes;
17
- const md = writeMarkdown(doc);
18
- await writeFile(mdPath, md, "utf-8");
19
- if (metaPath) {
20
- try {
21
- await stat(metaPath);
22
- const metaRaw = await readFile(metaPath, "utf-8");
23
- const meta = JSON.parse(metaRaw);
24
- const mdStat = await stat(mdPath);
25
- meta.files.markdown = {
26
- filename: "fulltext.md",
27
- source: "conversion",
28
- retrievedAt: (/* @__PURE__ */ new Date()).toISOString(),
29
- size: mdStat.size,
30
- convertedFrom: "fulltext.xml"
31
- };
32
- await writeFile(metaPath, JSON.stringify(meta, null, 2) + "\n", "utf-8");
33
- } catch {
34
- }
35
- }
36
- const result = { success: true };
37
- result.title = metadata.title;
38
- result.sections = sections.length;
39
- result.references = references.length;
40
- return result;
41
- } catch (err) {
42
- const result = { success: false };
43
- result.error = err instanceof Error ? err.message : String(err);
44
- return result;
45
- }
46
- }
47
- export {
48
- convertPmcXmlToMarkdown
49
- };
50
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/fulltext/convert/index.ts"],"sourcesContent":["/**\n * Conversion orchestrator for PMC XML to Markdown.\n *\n * Ties together the JATS parser and Markdown writer with file I/O.\n */\n\nimport { readFile, writeFile, stat } from 'node:fs/promises';\nimport { parseJatsMetadata, parseJatsBody, parseJatsReferences, parseJatsBackMatter } from './jats-parser.js';\nimport { writeMarkdown } from './markdown-writer.js';\nimport type { JatsDocument } from './types.js';\nimport type { FulltextMeta } from '../types.js';\n\nexport interface ConvertResult {\n success: boolean;\n error?: string;\n title?: string;\n sections?: number;\n references?: number;\n}\n\n/**\n * Convert a PMC JATS XML file to Markdown.\n *\n * Reads the XML, parses it into a JatsDocument, writes Markdown,\n * and optionally updates meta.json.\n */\nexport async function convertPmcXmlToMarkdown(\n xmlPath: string,\n mdPath: string,\n metaPath?: string,\n): Promise<ConvertResult> {\n try {\n const xml = await readFile(xmlPath, 'utf-8');\n\n // Parse\n const metadata = parseJatsMetadata(xml);\n const sections = parseJatsBody(xml);\n const references = parseJatsReferences(xml);\n const backMatter = parseJatsBackMatter(xml);\n\n const doc: JatsDocument = { metadata, sections, references };\n if (backMatter.acknowledgments) doc.acknowledgments = backMatter.acknowledgments;\n if (backMatter.appendices) doc.appendices = backMatter.appendices;\n if (backMatter.footnotes) doc.footnotes = backMatter.footnotes;\n if (backMatter.floats) doc.floats = backMatter.floats;\n if (backMatter.notes) doc.notes = backMatter.notes;\n\n // Write Markdown\n const md = writeMarkdown(doc);\n await writeFile(mdPath, md, 'utf-8');\n\n // Update meta.json if path provided and file exists\n if (metaPath) {\n try {\n await stat(metaPath);\n const metaRaw = await readFile(metaPath, 'utf-8');\n const meta = JSON.parse(metaRaw) as FulltextMeta;\n const mdStat = await stat(mdPath);\n\n meta.files.markdown = {\n filename: 'fulltext.md',\n source: 'conversion',\n retrievedAt: new Date().toISOString(),\n size: mdStat.size,\n convertedFrom: 'fulltext.xml',\n };\n\n await writeFile(metaPath, JSON.stringify(meta, null, 2) + '\\n', 'utf-8');\n } catch {\n // meta.json doesn't exist or can't be read, skip update\n }\n }\n\n const result: ConvertResult = { success: true };\n result.title = metadata.title;\n result.sections = sections.length;\n result.references = references.length;\n return result;\n } catch (err) {\n const result: ConvertResult = { success: false };\n result.error = err instanceof Error ? err.message : String(err);\n return result;\n }\n}\n"],"names":[],"mappings":";;;AA0BA,eAAsB,wBACpB,SACA,QACA,UACwB;AACxB,MAAI;AACF,UAAM,MAAM,MAAM,SAAS,SAAS,OAAO;AAG3C,UAAM,WAAW,kBAAkB,GAAG;AACtC,UAAM,WAAW,cAAc,GAAG;AAClC,UAAM,aAAa,oBAAoB,GAAG;AAC1C,UAAM,aAAa,oBAAoB,GAAG;AAE1C,UAAM,MAAoB,EAAE,UAAU,UAAU,WAAA;AAChD,QAAI,WAAW,gBAAiB,KAAI,kBAAkB,WAAW;AACjE,QAAI,WAAW,WAAY,KAAI,aAAa,WAAW;AACvD,QAAI,WAAW,UAAW,KAAI,YAAY,WAAW;AACrD,QAAI,WAAW,OAAQ,KAAI,SAAS,WAAW;AAC/C,QAAI,WAAW,MAAO,KAAI,QAAQ,WAAW;AAG7C,UAAM,KAAK,cAAc,GAAG;AAC5B,UAAM,UAAU,QAAQ,IAAI,OAAO;AAGnC,QAAI,UAAU;AACZ,UAAI;AACF,cAAM,KAAK,QAAQ;AACnB,cAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,cAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,cAAM,SAAS,MAAM,KAAK,MAAM;AAEhC,aAAK,MAAM,WAAW;AAAA,UACpB,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,cAAa,oBAAI,KAAA,GAAO,YAAA;AAAA,UACxB,MAAM,OAAO;AAAA,UACb,eAAe;AAAA,QAAA;AAGjB,cAAM,UAAU,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,MAAM,OAAO;AAAA,MACzE,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,SAAwB,EAAE,SAAS,KAAA;AACzC,WAAO,QAAQ,SAAS;AACxB,WAAO,WAAW,SAAS;AAC3B,WAAO,aAAa,WAAW;AAC/B,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,UAAM,SAAwB,EAAE,SAAS,MAAA;AACzC,WAAO,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC9D,WAAO;AAAA,EACT;AACF;"}
@@ -1,36 +0,0 @@
1
- import { JatsMetadata, JatsSection, JatsReference, JatsFootnote, BackMatterNote, BlockElement } from './types.js';
2
- /**
3
- * Parse JATS XML front matter to extract article metadata.
4
- */
5
- export declare function parseJatsMetadata(xml: string): JatsMetadata;
6
- /**
7
- * Parse a <table-wrap> element into a table block.
8
- * Exported for standalone use and used internally by parseBlockContent.
9
- */
10
- export declare function parseJatsTable(xml: string): {
11
- caption?: string;
12
- headers: string[];
13
- rows: string[][];
14
- };
15
- /**
16
- * Parse JATS XML body to extract sections and content.
17
- */
18
- export declare function parseJatsBody(xml: string): JatsSection[];
19
- /**
20
- * Parse JATS XML back matter to extract references.
21
- */
22
- export declare function parseJatsReferences(xml: string): JatsReference[];
23
- /** Result of parsing back matter and floats-group. */
24
- export interface BackMatterResult {
25
- acknowledgments?: string;
26
- appendices?: JatsSection[];
27
- footnotes?: JatsFootnote[];
28
- floats?: BlockElement[];
29
- notes?: BackMatterNote[];
30
- }
31
- /**
32
- * Parse JATS XML back matter sections (ack, app-group, fn-group)
33
- * and top-level floats-group.
34
- */
35
- export declare function parseJatsBackMatter(xml: string): BackMatterResult;
36
- //# sourceMappingURL=jats-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jats-parser.d.ts","sourceRoot":"","sources":["../../../src/fulltext/convert/jats-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EAEb,MAAM,YAAY,CAAC;AAuMpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CA2M3D;AAuLD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;CAClB,CAQA;AA4PD;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAwBxD;AA8JD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAkDhE;AAID,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAuIjE"}