euparliamentmonitor 0.8.4

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 (276) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1005 -0
  3. package/SECURITY.md +151 -0
  4. package/package.json +131 -0
  5. package/scripts/constants/committee-indicator-map.d.ts +199 -0
  6. package/scripts/constants/committee-indicator-map.d.ts.map +1 -0
  7. package/scripts/constants/committee-indicator-map.js +1224 -0
  8. package/scripts/constants/committee-indicator-map.js.map +1 -0
  9. package/scripts/constants/config.d.ts +38 -0
  10. package/scripts/constants/config.d.ts.map +1 -0
  11. package/scripts/constants/config.js +66 -0
  12. package/scripts/constants/config.js.map +1 -0
  13. package/scripts/constants/language-articles.d.ts +84 -0
  14. package/scripts/constants/language-articles.d.ts.map +1 -0
  15. package/scripts/constants/language-articles.js +6771 -0
  16. package/scripts/constants/language-articles.js.map +1 -0
  17. package/scripts/constants/language-core.d.ts +38 -0
  18. package/scripts/constants/language-core.d.ts.map +1 -0
  19. package/scripts/constants/language-core.js +90 -0
  20. package/scripts/constants/language-core.js.map +1 -0
  21. package/scripts/constants/language-ui.d.ts +82 -0
  22. package/scripts/constants/language-ui.d.ts.map +1 -0
  23. package/scripts/constants/language-ui.js +889 -0
  24. package/scripts/constants/language-ui.js.map +1 -0
  25. package/scripts/constants/languages.d.ts +14 -0
  26. package/scripts/constants/languages.d.ts.map +1 -0
  27. package/scripts/constants/languages.js +15 -0
  28. package/scripts/constants/languages.js.map +1 -0
  29. package/scripts/generators/analysis-builders.d.ts +266 -0
  30. package/scripts/generators/analysis-builders.d.ts.map +1 -0
  31. package/scripts/generators/analysis-builders.js +2903 -0
  32. package/scripts/generators/analysis-builders.js.map +1 -0
  33. package/scripts/generators/breaking-content.d.ts +45 -0
  34. package/scripts/generators/breaking-content.d.ts.map +1 -0
  35. package/scripts/generators/breaking-content.js +530 -0
  36. package/scripts/generators/breaking-content.js.map +1 -0
  37. package/scripts/generators/committee-helpers.d.ts +54 -0
  38. package/scripts/generators/committee-helpers.d.ts.map +1 -0
  39. package/scripts/generators/committee-helpers.js +154 -0
  40. package/scripts/generators/committee-helpers.js.map +1 -0
  41. package/scripts/generators/dashboard-content.d.ts +95 -0
  42. package/scripts/generators/dashboard-content.d.ts.map +1 -0
  43. package/scripts/generators/dashboard-content.js +630 -0
  44. package/scripts/generators/dashboard-content.js.map +1 -0
  45. package/scripts/generators/deep-analysis-content.d.ts +23 -0
  46. package/scripts/generators/deep-analysis-content.d.ts.map +1 -0
  47. package/scripts/generators/deep-analysis-content.js +831 -0
  48. package/scripts/generators/deep-analysis-content.js.map +1 -0
  49. package/scripts/generators/mindmap-content.d.ts +55 -0
  50. package/scripts/generators/mindmap-content.d.ts.map +1 -0
  51. package/scripts/generators/mindmap-content.js +512 -0
  52. package/scripts/generators/mindmap-content.js.map +1 -0
  53. package/scripts/generators/motions-content.d.ts +50 -0
  54. package/scripts/generators/motions-content.d.ts.map +1 -0
  55. package/scripts/generators/motions-content.js +391 -0
  56. package/scripts/generators/motions-content.js.map +1 -0
  57. package/scripts/generators/news-enhanced.d.ts +14 -0
  58. package/scripts/generators/news-enhanced.d.ts.map +1 -0
  59. package/scripts/generators/news-enhanced.js +169 -0
  60. package/scripts/generators/news-enhanced.js.map +1 -0
  61. package/scripts/generators/news-indexes.d.ts +31 -0
  62. package/scripts/generators/news-indexes.d.ts.map +1 -0
  63. package/scripts/generators/news-indexes.js +410 -0
  64. package/scripts/generators/news-indexes.js.map +1 -0
  65. package/scripts/generators/pipeline/fetch-stage.d.ts +352 -0
  66. package/scripts/generators/pipeline/fetch-stage.d.ts.map +1 -0
  67. package/scripts/generators/pipeline/fetch-stage.js +1522 -0
  68. package/scripts/generators/pipeline/fetch-stage.js.map +1 -0
  69. package/scripts/generators/pipeline/generate-stage.d.ts +43 -0
  70. package/scripts/generators/pipeline/generate-stage.d.ts.map +1 -0
  71. package/scripts/generators/pipeline/generate-stage.js +204 -0
  72. package/scripts/generators/pipeline/generate-stage.js.map +1 -0
  73. package/scripts/generators/pipeline/output-stage.d.ts +48 -0
  74. package/scripts/generators/pipeline/output-stage.d.ts.map +1 -0
  75. package/scripts/generators/pipeline/output-stage.js +145 -0
  76. package/scripts/generators/pipeline/output-stage.js.map +1 -0
  77. package/scripts/generators/pipeline/transform-stage.d.ts +57 -0
  78. package/scripts/generators/pipeline/transform-stage.d.ts.map +1 -0
  79. package/scripts/generators/pipeline/transform-stage.js +111 -0
  80. package/scripts/generators/pipeline/transform-stage.js.map +1 -0
  81. package/scripts/generators/propositions-content.d.ts +29 -0
  82. package/scripts/generators/propositions-content.d.ts.map +1 -0
  83. package/scripts/generators/propositions-content.js +90 -0
  84. package/scripts/generators/propositions-content.js.map +1 -0
  85. package/scripts/generators/sankey-content.d.ts +45 -0
  86. package/scripts/generators/sankey-content.d.ts.map +1 -0
  87. package/scripts/generators/sankey-content.js +227 -0
  88. package/scripts/generators/sankey-content.js.map +1 -0
  89. package/scripts/generators/sitemap.d.ts +66 -0
  90. package/scripts/generators/sitemap.d.ts.map +1 -0
  91. package/scripts/generators/sitemap.js +562 -0
  92. package/scripts/generators/sitemap.js.map +1 -0
  93. package/scripts/generators/strategies/article-strategy.d.ts +146 -0
  94. package/scripts/generators/strategies/article-strategy.d.ts.map +1 -0
  95. package/scripts/generators/strategies/article-strategy.js +4 -0
  96. package/scripts/generators/strategies/article-strategy.js.map +1 -0
  97. package/scripts/generators/strategies/breaking-news-strategy.d.ts +64 -0
  98. package/scripts/generators/strategies/breaking-news-strategy.d.ts.map +1 -0
  99. package/scripts/generators/strategies/breaking-news-strategy.js +246 -0
  100. package/scripts/generators/strategies/breaking-news-strategy.js.map +1 -0
  101. package/scripts/generators/strategies/committee-reports-strategy.d.ts +93 -0
  102. package/scripts/generators/strategies/committee-reports-strategy.d.ts.map +1 -0
  103. package/scripts/generators/strategies/committee-reports-strategy.js +447 -0
  104. package/scripts/generators/strategies/committee-reports-strategy.js.map +1 -0
  105. package/scripts/generators/strategies/month-ahead-strategy.d.ts +60 -0
  106. package/scripts/generators/strategies/month-ahead-strategy.d.ts.map +1 -0
  107. package/scripts/generators/strategies/month-ahead-strategy.js +175 -0
  108. package/scripts/generators/strategies/month-ahead-strategy.js.map +1 -0
  109. package/scripts/generators/strategies/monthly-review-strategy.d.ts +66 -0
  110. package/scripts/generators/strategies/monthly-review-strategy.d.ts.map +1 -0
  111. package/scripts/generators/strategies/monthly-review-strategy.js +204 -0
  112. package/scripts/generators/strategies/monthly-review-strategy.js.map +1 -0
  113. package/scripts/generators/strategies/motions-strategy.d.ts +61 -0
  114. package/scripts/generators/strategies/motions-strategy.d.ts.map +1 -0
  115. package/scripts/generators/strategies/motions-strategy.js +215 -0
  116. package/scripts/generators/strategies/motions-strategy.js.map +1 -0
  117. package/scripts/generators/strategies/propositions-strategy.d.ts +60 -0
  118. package/scripts/generators/strategies/propositions-strategy.d.ts.map +1 -0
  119. package/scripts/generators/strategies/propositions-strategy.js +257 -0
  120. package/scripts/generators/strategies/propositions-strategy.js.map +1 -0
  121. package/scripts/generators/strategies/week-ahead-strategy.d.ts +57 -0
  122. package/scripts/generators/strategies/week-ahead-strategy.d.ts.map +1 -0
  123. package/scripts/generators/strategies/week-ahead-strategy.js +178 -0
  124. package/scripts/generators/strategies/week-ahead-strategy.js.map +1 -0
  125. package/scripts/generators/strategies/weekly-review-strategy.d.ts +63 -0
  126. package/scripts/generators/strategies/weekly-review-strategy.d.ts.map +1 -0
  127. package/scripts/generators/strategies/weekly-review-strategy.js +211 -0
  128. package/scripts/generators/strategies/weekly-review-strategy.js.map +1 -0
  129. package/scripts/generators/swot-content.d.ts +42 -0
  130. package/scripts/generators/swot-content.d.ts.map +1 -0
  131. package/scripts/generators/swot-content.js +366 -0
  132. package/scripts/generators/swot-content.js.map +1 -0
  133. package/scripts/generators/week-ahead-content.d.ts +103 -0
  134. package/scripts/generators/week-ahead-content.d.ts.map +1 -0
  135. package/scripts/generators/week-ahead-content.js +610 -0
  136. package/scripts/generators/week-ahead-content.js.map +1 -0
  137. package/scripts/index.d.ts +40 -0
  138. package/scripts/index.d.ts.map +1 -0
  139. package/scripts/index.js +53 -0
  140. package/scripts/index.js.map +1 -0
  141. package/scripts/mcp/ep-mcp-client.d.ts +471 -0
  142. package/scripts/mcp/ep-mcp-client.d.ts.map +1 -0
  143. package/scripts/mcp/ep-mcp-client.js +734 -0
  144. package/scripts/mcp/ep-mcp-client.js.map +1 -0
  145. package/scripts/mcp/mcp-connection.d.ts +264 -0
  146. package/scripts/mcp/mcp-connection.d.ts.map +1 -0
  147. package/scripts/mcp/mcp-connection.js +790 -0
  148. package/scripts/mcp/mcp-connection.js.map +1 -0
  149. package/scripts/mcp/mcp-health.d.ts +75 -0
  150. package/scripts/mcp/mcp-health.d.ts.map +1 -0
  151. package/scripts/mcp/mcp-health.js +78 -0
  152. package/scripts/mcp/mcp-health.js.map +1 -0
  153. package/scripts/mcp/mcp-retry.d.ts +94 -0
  154. package/scripts/mcp/mcp-retry.d.ts.map +1 -0
  155. package/scripts/mcp/mcp-retry.js +127 -0
  156. package/scripts/mcp/mcp-retry.js.map +1 -0
  157. package/scripts/mcp/wb-mcp-client.d.ts +38 -0
  158. package/scripts/mcp/wb-mcp-client.d.ts.map +1 -0
  159. package/scripts/mcp/wb-mcp-client.js +112 -0
  160. package/scripts/mcp/wb-mcp-client.js.map +1 -0
  161. package/scripts/templates/article-template.d.ts +9 -0
  162. package/scripts/templates/article-template.d.ts.map +1 -0
  163. package/scripts/templates/article-template.js +378 -0
  164. package/scripts/templates/article-template.js.map +1 -0
  165. package/scripts/templates/section-builders.d.ts +28 -0
  166. package/scripts/templates/section-builders.d.ts.map +1 -0
  167. package/scripts/templates/section-builders.js +142 -0
  168. package/scripts/templates/section-builders.js.map +1 -0
  169. package/scripts/types/analysis.d.ts +115 -0
  170. package/scripts/types/analysis.d.ts.map +1 -0
  171. package/scripts/types/analysis.js +4 -0
  172. package/scripts/types/analysis.js.map +1 -0
  173. package/scripts/types/common.d.ts +584 -0
  174. package/scripts/types/common.d.ts.map +1 -0
  175. package/scripts/types/common.js +96 -0
  176. package/scripts/types/common.js.map +1 -0
  177. package/scripts/types/generation.d.ts +104 -0
  178. package/scripts/types/generation.d.ts.map +1 -0
  179. package/scripts/types/generation.js +4 -0
  180. package/scripts/types/generation.js.map +1 -0
  181. package/scripts/types/index.d.ts +24 -0
  182. package/scripts/types/index.d.ts.map +1 -0
  183. package/scripts/types/index.js +16 -0
  184. package/scripts/types/index.js.map +1 -0
  185. package/scripts/types/intelligence.d.ts +129 -0
  186. package/scripts/types/intelligence.d.ts.map +1 -0
  187. package/scripts/types/intelligence.js +4 -0
  188. package/scripts/types/intelligence.js.map +1 -0
  189. package/scripts/types/mcp.d.ts +418 -0
  190. package/scripts/types/mcp.d.ts.map +1 -0
  191. package/scripts/types/mcp.js +4 -0
  192. package/scripts/types/mcp.js.map +1 -0
  193. package/scripts/types/parliament.d.ts +388 -0
  194. package/scripts/types/parliament.d.ts.map +1 -0
  195. package/scripts/types/parliament.js +4 -0
  196. package/scripts/types/parliament.js.map +1 -0
  197. package/scripts/types/quality.d.ts +114 -0
  198. package/scripts/types/quality.d.ts.map +1 -0
  199. package/scripts/types/quality.js +4 -0
  200. package/scripts/types/quality.js.map +1 -0
  201. package/scripts/types/stakeholder.d.ts +88 -0
  202. package/scripts/types/stakeholder.d.ts.map +1 -0
  203. package/scripts/types/stakeholder.js +16 -0
  204. package/scripts/types/stakeholder.js.map +1 -0
  205. package/scripts/types/visualization.d.ts +708 -0
  206. package/scripts/types/visualization.d.ts.map +1 -0
  207. package/scripts/types/visualization.js +4 -0
  208. package/scripts/types/visualization.js.map +1 -0
  209. package/scripts/types/world-bank.d.ts +85 -0
  210. package/scripts/types/world-bank.d.ts.map +1 -0
  211. package/scripts/types/world-bank.js +4 -0
  212. package/scripts/types/world-bank.js.map +1 -0
  213. package/scripts/utils/article-category.d.ts +18 -0
  214. package/scripts/utils/article-category.d.ts.map +1 -0
  215. package/scripts/utils/article-category.js +49 -0
  216. package/scripts/utils/article-category.js.map +1 -0
  217. package/scripts/utils/article-quality-scorer.d.ts +87 -0
  218. package/scripts/utils/article-quality-scorer.d.ts.map +1 -0
  219. package/scripts/utils/article-quality-scorer.js +1048 -0
  220. package/scripts/utils/article-quality-scorer.js.map +1 -0
  221. package/scripts/utils/content-metadata.d.ts +34 -0
  222. package/scripts/utils/content-metadata.d.ts.map +1 -0
  223. package/scripts/utils/content-metadata.js +249 -0
  224. package/scripts/utils/content-metadata.js.map +1 -0
  225. package/scripts/utils/content-validator.d.ts +94 -0
  226. package/scripts/utils/content-validator.d.ts.map +1 -0
  227. package/scripts/utils/content-validator.js +489 -0
  228. package/scripts/utils/content-validator.js.map +1 -0
  229. package/scripts/utils/copy-test-reports.d.ts +9 -0
  230. package/scripts/utils/copy-test-reports.d.ts.map +1 -0
  231. package/scripts/utils/copy-test-reports.js +508 -0
  232. package/scripts/utils/copy-test-reports.js.map +1 -0
  233. package/scripts/utils/file-utils.d.ts +144 -0
  234. package/scripts/utils/file-utils.d.ts.map +1 -0
  235. package/scripts/utils/file-utils.js +374 -0
  236. package/scripts/utils/file-utils.js.map +1 -0
  237. package/scripts/utils/fix-articles.d.ts +27 -0
  238. package/scripts/utils/fix-articles.d.ts.map +1 -0
  239. package/scripts/utils/fix-articles.js +510 -0
  240. package/scripts/utils/fix-articles.js.map +1 -0
  241. package/scripts/utils/generate-docs-index.d.ts +8 -0
  242. package/scripts/utils/generate-docs-index.d.ts.map +1 -0
  243. package/scripts/utils/generate-docs-index.js +275 -0
  244. package/scripts/utils/generate-docs-index.js.map +1 -0
  245. package/scripts/utils/html-sanitize.d.ts +18 -0
  246. package/scripts/utils/html-sanitize.d.ts.map +1 -0
  247. package/scripts/utils/html-sanitize.js +57 -0
  248. package/scripts/utils/html-sanitize.js.map +1 -0
  249. package/scripts/utils/intelligence-analysis.d.ts +173 -0
  250. package/scripts/utils/intelligence-analysis.d.ts.map +1 -0
  251. package/scripts/utils/intelligence-analysis.js +936 -0
  252. package/scripts/utils/intelligence-analysis.js.map +1 -0
  253. package/scripts/utils/intelligence-index.d.ts +126 -0
  254. package/scripts/utils/intelligence-index.d.ts.map +1 -0
  255. package/scripts/utils/intelligence-index.js +731 -0
  256. package/scripts/utils/intelligence-index.js.map +1 -0
  257. package/scripts/utils/metadata-utils.d.ts +14 -0
  258. package/scripts/utils/metadata-utils.d.ts.map +1 -0
  259. package/scripts/utils/metadata-utils.js +18 -0
  260. package/scripts/utils/metadata-utils.js.map +1 -0
  261. package/scripts/utils/news-metadata.d.ts +47 -0
  262. package/scripts/utils/news-metadata.d.ts.map +1 -0
  263. package/scripts/utils/news-metadata.js +259 -0
  264. package/scripts/utils/news-metadata.js.map +1 -0
  265. package/scripts/utils/validate-articles.d.ts +2 -0
  266. package/scripts/utils/validate-articles.d.ts.map +1 -0
  267. package/scripts/utils/validate-articles.js +284 -0
  268. package/scripts/utils/validate-articles.js.map +1 -0
  269. package/scripts/utils/validate-ep-api.d.ts +51 -0
  270. package/scripts/utils/validate-ep-api.d.ts.map +1 -0
  271. package/scripts/utils/validate-ep-api.js +160 -0
  272. package/scripts/utils/validate-ep-api.js.map +1 -0
  273. package/scripts/utils/world-bank-data.d.ts +84 -0
  274. package/scripts/utils/world-bank-data.d.ts.map +1 -0
  275. package/scripts/utils/world-bank-data.js +311 -0
  276. package/scripts/utils/world-bank-data.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligence-index.js","sourceRoot":"","sources":["../../src/utils/intelligence-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module Utils/MetadataUtils
3
+ * @description Shared helpers for article metadata generation.
4
+ */
5
+ /**
6
+ * Return singular or plural form based on count.
7
+ *
8
+ * @param n - Item count
9
+ * @param singular - Singular form
10
+ * @param plural - Plural form
11
+ * @returns `"N singular"` or `"N plural"`
12
+ */
13
+ export declare function pl(n: number, singular: string, plural: string): string;
14
+ //# sourceMappingURL=metadata-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-utils.d.ts","sourceRoot":"","sources":["../../src/utils/metadata-utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;;GAOG;AACH,wBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,18 @@
1
+ // SPDX-FileCopyrightText: 2024-2026 Hack23 AB
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * @module Utils/MetadataUtils
5
+ * @description Shared helpers for article metadata generation.
6
+ */
7
+ /**
8
+ * Return singular or plural form based on count.
9
+ *
10
+ * @param n - Item count
11
+ * @param singular - Singular form
12
+ * @param plural - Plural form
13
+ * @returns `"N singular"` or `"N plural"`
14
+ */
15
+ export function pl(n, singular, plural) {
16
+ return `${n} ${n === 1 ? singular : plural}`;
17
+ }
18
+ //# sourceMappingURL=metadata-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-utils.js","sourceRoot":"","sources":["../../src/utils/metadata-utils.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sCAAsC;AAEtC;;;GAGG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,EAAE,CAAC,CAAS,EAAE,QAAgB,EAAE,MAAc;IAC5D,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { NewsMetadataDatabase, IntelligenceIndex } from '../types/index.js';
2
+ /**
3
+ * Build metadata database from news article files
4
+ *
5
+ * @param newsDir - News directory path
6
+ * @returns News metadata database object
7
+ */
8
+ export declare function buildMetadataDatabase(newsDir?: string): NewsMetadataDatabase;
9
+ /**
10
+ * Write metadata database to JSON file
11
+ *
12
+ * @param database - Metadata database to write
13
+ * @param outputPath - Output file path (defaults to news/articles-metadata.json)
14
+ */
15
+ export declare function writeMetadataDatabase(database: NewsMetadataDatabase, outputPath?: string): void;
16
+ /**
17
+ * Read metadata database from JSON file
18
+ *
19
+ * @param inputPath - Input file path (defaults to news/articles-metadata.json)
20
+ * @returns Metadata database or null if file doesn't exist
21
+ */
22
+ export declare function readMetadataDatabase(inputPath?: string): NewsMetadataDatabase | null;
23
+ /**
24
+ * Update metadata database by rescanning the news directory
25
+ *
26
+ * @param newsDir - News directory to scan
27
+ * @param outputPath - Output path for metadata JSON
28
+ * @returns Updated metadata database
29
+ */
30
+ export declare function updateMetadataDatabase(newsDir?: string, outputPath?: string): NewsMetadataDatabase;
31
+ /**
32
+ * Scan the news directory, rebuild the intelligence index from article metadata,
33
+ * and persist the updated index to disk.
34
+ *
35
+ * Starts from a fresh empty index on every call so that articles that have been
36
+ * deleted or renamed are automatically pruned — no stale entries can survive.
37
+ *
38
+ * Each article file is parsed to extract its date, type, language, and metadata.
39
+ * The resulting {@link ArticleIndexEntry} objects are accumulated into an
40
+ * {@link IntelligenceIndex} whose trend detections are refreshed on every call.
41
+ *
42
+ * @param newsDir - News directory to scan for article HTML files
43
+ * @param indexPath - Path to the intelligence index JSON file
44
+ * @returns The rebuilt {@link IntelligenceIndex}
45
+ */
46
+ export declare function updateIntelligenceIndex(newsDir?: string, indexPath?: string): IntelligenceIndex;
47
+ //# sourceMappingURL=news-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/news-metadata.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAEV,oBAAoB,EACpB,iBAAiB,EAElB,MAAM,mBAAmB,CAAC;AAW3B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAiB,GAAG,oBAAoB,CA2BtF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,GAAE,MAAyB,GACpC,IAAI,CAMN;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,GAAE,MAAyB,GACnC,oBAAoB,GAAG,IAAI,CAO7B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,MAAiB,EAC1B,UAAU,GAAE,MAAyB,GACpC,oBAAoB,CAItB;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,MAAiB,EAC1B,SAAS,GAAE,MAAgC,GAC1C,iBAAiB,CA6CnB"}
@@ -0,0 +1,259 @@
1
+ // SPDX-FileCopyrightText: 2024-2026 Hack23 AB
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * @module Utils/NewsMetadata
5
+ * @description News metadata database management.
6
+ * Maintains a JSON database of article metadata that can be loaded
7
+ * by client-side JavaScript, removing the need to edit all index HTML
8
+ * files when adding new articles.
9
+ */
10
+ import fs from 'fs';
11
+ import path from 'path';
12
+ import { NEWS_DIR } from '../constants/config.js';
13
+ import { getNewsArticles, parseArticleFilename, formatSlug, extractArticleMeta, } from './file-utils.js';
14
+ import { buildIndexFromEntries, detectTrends, saveIntelligenceIndex, } from './intelligence-index.js';
15
+ import { detectCategory } from './article-category.js';
16
+ /** Default path for the metadata database file */
17
+ const METADATA_DB_PATH = path.join(NEWS_DIR, 'articles-metadata.json');
18
+ /**
19
+ * Build metadata database from news article files
20
+ *
21
+ * @param newsDir - News directory path
22
+ * @returns News metadata database object
23
+ */
24
+ export function buildMetadataDatabase(newsDir = NEWS_DIR) {
25
+ const articleFiles = getNewsArticles(newsDir);
26
+ const articles = [];
27
+ for (const filename of articleFiles) {
28
+ const parsed = parseArticleFilename(filename);
29
+ if (parsed) {
30
+ const filepath = path.join(newsDir, filename);
31
+ const meta = extractArticleMeta(filepath);
32
+ articles.push({
33
+ filename: parsed.filename,
34
+ date: parsed.date,
35
+ slug: parsed.slug,
36
+ lang: parsed.lang,
37
+ title: meta.title || formatSlug(parsed.slug),
38
+ description: meta.description,
39
+ });
40
+ }
41
+ }
42
+ // Sort by date (newest first)
43
+ articles.sort((a, b) => b.date.localeCompare(a.date));
44
+ return {
45
+ lastUpdated: new Date().toISOString(),
46
+ articles,
47
+ };
48
+ }
49
+ /**
50
+ * Write metadata database to JSON file
51
+ *
52
+ * @param database - Metadata database to write
53
+ * @param outputPath - Output file path (defaults to news/articles-metadata.json)
54
+ */
55
+ export function writeMetadataDatabase(database, outputPath = METADATA_DB_PATH) {
56
+ const dir = path.dirname(outputPath);
57
+ if (!fs.existsSync(dir)) {
58
+ fs.mkdirSync(dir, { recursive: true });
59
+ }
60
+ fs.writeFileSync(outputPath, JSON.stringify(database, null, 2), 'utf-8');
61
+ }
62
+ /**
63
+ * Read metadata database from JSON file
64
+ *
65
+ * @param inputPath - Input file path (defaults to news/articles-metadata.json)
66
+ * @returns Metadata database or null if file doesn't exist
67
+ */
68
+ export function readMetadataDatabase(inputPath = METADATA_DB_PATH) {
69
+ if (!fs.existsSync(inputPath)) {
70
+ return null;
71
+ }
72
+ const content = fs.readFileSync(inputPath, 'utf-8');
73
+ return JSON.parse(content);
74
+ }
75
+ /**
76
+ * Update metadata database by rescanning the news directory
77
+ *
78
+ * @param newsDir - News directory to scan
79
+ * @param outputPath - Output path for metadata JSON
80
+ * @returns Updated metadata database
81
+ */
82
+ export function updateMetadataDatabase(newsDir = NEWS_DIR, outputPath = METADATA_DB_PATH) {
83
+ const database = buildMetadataDatabase(newsDir);
84
+ writeMetadataDatabase(database, outputPath);
85
+ return database;
86
+ }
87
+ /** Default path for the intelligence index JSON file */
88
+ const INTELLIGENCE_INDEX_PATH = path.join(NEWS_DIR, 'intelligence-index.json');
89
+ /**
90
+ * Scan the news directory, rebuild the intelligence index from article metadata,
91
+ * and persist the updated index to disk.
92
+ *
93
+ * Starts from a fresh empty index on every call so that articles that have been
94
+ * deleted or renamed are automatically pruned — no stale entries can survive.
95
+ *
96
+ * Each article file is parsed to extract its date, type, language, and metadata.
97
+ * The resulting {@link ArticleIndexEntry} objects are accumulated into an
98
+ * {@link IntelligenceIndex} whose trend detections are refreshed on every call.
99
+ *
100
+ * @param newsDir - News directory to scan for article HTML files
101
+ * @param indexPath - Path to the intelligence index JSON file
102
+ * @returns The rebuilt {@link IntelligenceIndex}
103
+ */
104
+ export function updateIntelligenceIndex(newsDir = NEWS_DIR, indexPath = INTELLIGENCE_INDEX_PATH) {
105
+ const articleFiles = getNewsArticles(newsDir);
106
+ // Collect all entries in a single pass, then build the index in O(n) time
107
+ const entries = [];
108
+ for (const filename of articleFiles) {
109
+ const parsed = parseArticleFilename(filename);
110
+ if (!parsed)
111
+ continue;
112
+ const articleId = `${parsed.date}-${parsed.slug}-${parsed.lang}`;
113
+ const filepath = path.join(newsDir, filename);
114
+ const meta = extractArticleMeta(filepath);
115
+ // Derive the ArticleCategory from the slug using the shared detection logic
116
+ const category = detectCategory(parsed.slug);
117
+ // Extract meaningful key topics from the slug and article metadata
118
+ const keyTopics = deriveKeyTopics(parsed.slug, parsed.lang, meta.title, meta.description);
119
+ entries.push({
120
+ id: articleId,
121
+ date: parsed.date,
122
+ type: category,
123
+ lang: parsed.lang,
124
+ keyTopics,
125
+ keyActors: [],
126
+ procedures: [],
127
+ crossReferences: [],
128
+ trendContributions: [],
129
+ });
130
+ }
131
+ // Sort deterministically (date desc, then id asc) so the persisted index
132
+ // does not churn between runs due to platform-dependent readdir ordering.
133
+ entries.sort((a, b) => b.date.localeCompare(a.date) || a.id.localeCompare(b.id));
134
+ let index = buildIndexFromEntries(entries);
135
+ // Refresh trend detections
136
+ const trends = detectTrends(index);
137
+ index = { ...index, trends, lastUpdated: new Date().toISOString() };
138
+ saveIntelligenceIndex(index, indexPath);
139
+ return index;
140
+ }
141
+ /**
142
+ * Stop-words excluded from key topic extraction.
143
+ * Common English function words that carry no policy-domain meaning.
144
+ * Expand this set as needed for EU Parliament domain-specific noise.
145
+ */
146
+ const STOP_WORDS = new Set([
147
+ 'the',
148
+ 'a',
149
+ 'an',
150
+ 'and',
151
+ 'or',
152
+ 'but',
153
+ 'in',
154
+ 'on',
155
+ 'at',
156
+ 'to',
157
+ 'for',
158
+ 'of',
159
+ 'with',
160
+ 'by',
161
+ 'from',
162
+ 'is',
163
+ 'are',
164
+ 'was',
165
+ 'were',
166
+ 'be',
167
+ 'been',
168
+ 'has',
169
+ 'have',
170
+ 'had',
171
+ 'this',
172
+ 'that',
173
+ 'it',
174
+ 'its',
175
+ 'as',
176
+ 'not',
177
+ 'no',
178
+ ]);
179
+ /**
180
+ * Article-type taxonomy tokens that should be excluded from keyTopics
181
+ * to prevent unrelated articles of the same type from appearing "related".
182
+ */
183
+ const ARTICLE_TYPE_NOISE = new Set([
184
+ 'week',
185
+ 'month',
186
+ 'year',
187
+ 'ahead',
188
+ 'review',
189
+ 'breaking',
190
+ 'committee',
191
+ 'motions',
192
+ 'motion',
193
+ 'propositions',
194
+ 'proposition',
195
+ 'proposal',
196
+ 'deep',
197
+ 'analysis',
198
+ 'reports',
199
+ 'report',
200
+ 'news',
201
+ ]);
202
+ /**
203
+ * Extract meaningful words from a text string, excluding stop-words and
204
+ * tokens shorter than `minLength`.
205
+ *
206
+ * Uses Unicode-aware character classes to preserve accented characters
207
+ * (e.g. "é", "ü") and non-Latin scripts (AR, HE, JA, KO, ZH).
208
+ *
209
+ * @param text - Input text to tokenise
210
+ * @param tokens - Set to accumulate tokens into
211
+ * @param minLength - Minimum cleaned token length (inclusive)
212
+ */
213
+ function extractTokens(text, tokens, minLength) {
214
+ for (const word of text.toLowerCase().split(/[\s\-_]+/)) {
215
+ const cleaned = word.replace(/[^\p{L}\p{N}]/gu, '');
216
+ if (cleaned.length >= minLength &&
217
+ !STOP_WORDS.has(cleaned) &&
218
+ !ARTICLE_TYPE_NOISE.has(cleaned)) {
219
+ tokens.add(cleaned);
220
+ }
221
+ }
222
+ }
223
+ /** Minimum token length for slug-derived topics (shorter segments are too generic) */
224
+ const MIN_SLUG_TOKEN_LENGTH = 3;
225
+ /** Minimum token length for title/description-derived topics (stricter to reduce noise) */
226
+ const MIN_METADATA_TOKEN_LENGTH = 4;
227
+ /**
228
+ * Derive key topics from the article slug and extracted metadata.
229
+ *
230
+ * Splits the slug on hyphens to produce topic tokens and appends any
231
+ * meaningful words from the title and description. Common stop-words
232
+ * and very short tokens are filtered out.
233
+ *
234
+ * For non-English articles, title and description tokens are skipped because
235
+ * the {@link STOP_WORDS} set is English-only and would let through common
236
+ * function words in other languages, creating noisy cross-language trends.
237
+ * The slug (which is structured and language-neutral) is always tokenised.
238
+ *
239
+ * @param slug - Article slug (e.g. "week-ahead" or "breaking")
240
+ * @param lang - ISO 639-1 language code (e.g. "en", "fr", "de")
241
+ * @param title - Article title extracted from HTML (may be empty)
242
+ * @param description - Article description extracted from HTML (may be empty)
243
+ * @returns Deduplicated array of key topic strings
244
+ */
245
+ function deriveKeyTopics(slug, lang, title, description) {
246
+ const tokens = new Set();
247
+ extractTokens(slug, tokens, MIN_SLUG_TOKEN_LENGTH);
248
+ // Only apply title/description tokenisation for English articles where
249
+ // STOP_WORDS provides meaningful filtering; non-English articles rely
250
+ // on slug tokens to avoid noisy cross-language relations.
251
+ if (lang === 'en') {
252
+ if (title)
253
+ extractTokens(title, tokens, MIN_METADATA_TOKEN_LENGTH);
254
+ if (description)
255
+ extractTokens(description, tokens, MIN_METADATA_TOKEN_LENGTH);
256
+ }
257
+ return [...tokens];
258
+ }
259
+ //# sourceMappingURL=news-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"news-metadata.js","sourceRoot":"","sources":["../../src/utils/news-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate-articles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-articles.d.ts","sourceRoot":"","sources":["../../src/utils/validate-articles.ts"],"names":[],"mappings":""}