riksdagsmonitor 0.8.12 → 0.8.15

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 (779) hide show
  1. package/dist/lib/cia/dashboard-init.d.ts +26 -0
  2. package/dist/lib/cia/dashboard-init.d.ts.map +1 -0
  3. package/dist/lib/cia/dashboard-init.js +108 -0
  4. package/dist/lib/cia/dashboard-init.js.map +1 -0
  5. package/dist/lib/cia/data-loader.d.ts +408 -0
  6. package/dist/lib/cia/data-loader.d.ts.map +1 -0
  7. package/dist/lib/cia/data-loader.js +867 -0
  8. package/dist/lib/cia/data-loader.js.map +1 -0
  9. package/dist/lib/cia/election-predictions.d.ts +78 -0
  10. package/dist/lib/cia/election-predictions.d.ts.map +1 -0
  11. package/dist/lib/cia/election-predictions.js +259 -0
  12. package/dist/lib/cia/election-predictions.js.map +1 -0
  13. package/dist/lib/cia/i18n-translations.d.ts +111 -0
  14. package/dist/lib/cia/i18n-translations.d.ts.map +1 -0
  15. package/dist/lib/cia/i18n-translations.js +619 -0
  16. package/dist/lib/cia/i18n-translations.js.map +1 -0
  17. package/dist/lib/cia/visualizations.d.ts +64 -0
  18. package/dist/lib/cia/visualizations.d.ts.map +1 -0
  19. package/dist/lib/cia/visualizations.js +662 -0
  20. package/dist/lib/cia/visualizations.js.map +1 -0
  21. package/dist/lib/dashboards/anomaly-detection.d.ts +44 -0
  22. package/dist/lib/dashboards/anomaly-detection.d.ts.map +1 -0
  23. package/dist/lib/dashboards/anomaly-detection.js +1017 -0
  24. package/dist/lib/dashboards/anomaly-detection.js.map +1 -0
  25. package/dist/lib/dashboards/coalition-dashboard.d.ts +36 -0
  26. package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -0
  27. package/dist/lib/dashboards/coalition-dashboard.js +629 -0
  28. package/dist/lib/dashboards/coalition-dashboard.js.map +1 -0
  29. package/dist/lib/dashboards/coalition-loader.d.ts +43 -0
  30. package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -0
  31. package/dist/lib/dashboards/coalition-loader.js +665 -0
  32. package/dist/lib/dashboards/coalition-loader.js.map +1 -0
  33. package/dist/lib/dashboards/committees-dashboard.d.ts +23 -0
  34. package/dist/lib/dashboards/committees-dashboard.d.ts.map +1 -0
  35. package/dist/lib/dashboards/committees-dashboard.js +886 -0
  36. package/dist/lib/dashboards/committees-dashboard.js.map +1 -0
  37. package/dist/lib/dashboards/election-cycle.d.ts +62 -0
  38. package/dist/lib/dashboards/election-cycle.d.ts.map +1 -0
  39. package/dist/lib/dashboards/election-cycle.js +484 -0
  40. package/dist/lib/dashboards/election-cycle.js.map +1 -0
  41. package/dist/lib/dashboards/ministry-dashboard.d.ts +46 -0
  42. package/dist/lib/dashboards/ministry-dashboard.d.ts.map +1 -0
  43. package/dist/lib/dashboards/ministry-dashboard.js +1114 -0
  44. package/dist/lib/dashboards/ministry-dashboard.js.map +1 -0
  45. package/dist/lib/dashboards/party-dashboard.d.ts +56 -0
  46. package/dist/lib/dashboards/party-dashboard.d.ts.map +1 -0
  47. package/dist/lib/dashboards/party-dashboard.js +981 -0
  48. package/dist/lib/dashboards/party-dashboard.js.map +1 -0
  49. package/dist/lib/dashboards/politician-dashboard.d.ts +41 -0
  50. package/dist/lib/dashboards/politician-dashboard.d.ts.map +1 -0
  51. package/dist/lib/dashboards/politician-dashboard.js +611 -0
  52. package/dist/lib/dashboards/politician-dashboard.js.map +1 -0
  53. package/dist/lib/dashboards/pre-election.d.ts +64 -0
  54. package/dist/lib/dashboards/pre-election.d.ts.map +1 -0
  55. package/dist/lib/dashboards/pre-election.js +604 -0
  56. package/dist/lib/dashboards/pre-election.js.map +1 -0
  57. package/dist/lib/dashboards/risk-dashboard.d.ts +37 -0
  58. package/dist/lib/dashboards/risk-dashboard.d.ts.map +1 -0
  59. package/dist/lib/dashboards/risk-dashboard.js +863 -0
  60. package/dist/lib/dashboards/risk-dashboard.js.map +1 -0
  61. package/dist/lib/dashboards/seasonal-patterns.d.ts +24 -0
  62. package/dist/lib/dashboards/seasonal-patterns.d.ts.map +1 -0
  63. package/dist/lib/dashboards/seasonal-patterns.js +535 -0
  64. package/dist/lib/dashboards/seasonal-patterns.js.map +1 -0
  65. package/dist/lib/dashboards/stats-loader.d.ts +35 -0
  66. package/dist/lib/dashboards/stats-loader.d.ts.map +1 -0
  67. package/dist/lib/dashboards/stats-loader.js +145 -0
  68. package/dist/lib/dashboards/stats-loader.js.map +1 -0
  69. package/dist/lib/shared/chart-factory.d.ts.map +1 -0
  70. package/dist/lib/shared/chart-factory.js.map +1 -0
  71. package/dist/lib/shared/data-loader.d.ts.map +1 -0
  72. package/dist/lib/shared/data-loader.js.map +1 -0
  73. package/dist/lib/shared/dom-utils.d.ts.map +1 -0
  74. package/dist/lib/shared/dom-utils.js.map +1 -0
  75. package/dist/lib/shared/error-boundary.d.ts.map +1 -0
  76. package/dist/lib/shared/error-boundary.js.map +1 -0
  77. package/dist/lib/shared/fallback-ui.d.ts.map +1 -0
  78. package/dist/lib/shared/fallback-ui.js.map +1 -0
  79. package/dist/lib/shared/index.d.ts.map +1 -0
  80. package/dist/lib/shared/index.js.map +1 -0
  81. package/dist/lib/shared/logger.d.ts.map +1 -0
  82. package/dist/lib/shared/logger.js.map +1 -0
  83. package/dist/lib/shared/register-globals.d.ts +14 -0
  84. package/dist/lib/shared/register-globals.d.ts.map +1 -0
  85. package/dist/lib/shared/register-globals.js +21 -0
  86. package/dist/lib/shared/register-globals.js.map +1 -0
  87. package/dist/lib/shared/theme.d.ts.map +1 -0
  88. package/dist/lib/shared/theme.js.map +1 -0
  89. package/dist/lib/shared/types.d.ts.map +1 -0
  90. package/dist/lib/shared/types.js.map +1 -0
  91. package/dist/lib/ui/back-to-top.d.ts +13 -0
  92. package/dist/lib/ui/back-to-top.d.ts.map +1 -0
  93. package/dist/lib/ui/back-to-top.js +48 -0
  94. package/dist/lib/ui/back-to-top.js.map +1 -0
  95. package/dist/scripts/ai-analysis/coalition-detector.d.ts +28 -0
  96. package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +1 -0
  97. package/dist/scripts/ai-analysis/coalition-detector.js +242 -0
  98. package/dist/scripts/ai-analysis/coalition-detector.js.map +1 -0
  99. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +73 -0
  100. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +1 -0
  101. package/dist/scripts/ai-analysis/dashboard-analyzer.js +511 -0
  102. package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +1 -0
  103. package/dist/scripts/ai-analysis/document-analyzer.d.ts +196 -0
  104. package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +1 -0
  105. package/dist/scripts/ai-analysis/document-analyzer.js +1001 -0
  106. package/dist/scripts/ai-analysis/document-analyzer.js.map +1 -0
  107. package/dist/scripts/ai-analysis/domains/index.d.ts +15 -0
  108. package/dist/scripts/ai-analysis/domains/index.d.ts.map +1 -0
  109. package/dist/scripts/ai-analysis/domains/index.js +494 -0
  110. package/dist/scripts/ai-analysis/domains/index.js.map +1 -0
  111. package/dist/scripts/ai-analysis/helpers.d.ts +43 -0
  112. package/dist/scripts/ai-analysis/helpers.d.ts.map +1 -0
  113. package/dist/scripts/ai-analysis/helpers.js +79 -0
  114. package/dist/scripts/ai-analysis/helpers.js.map +1 -0
  115. package/dist/scripts/ai-analysis/index.d.ts +15 -0
  116. package/dist/scripts/ai-analysis/index.d.ts.map +1 -0
  117. package/dist/scripts/ai-analysis/index.js +14 -0
  118. package/dist/scripts/ai-analysis/index.js.map +1 -0
  119. package/dist/scripts/ai-analysis/pipeline.d.ts +41 -0
  120. package/dist/scripts/ai-analysis/pipeline.d.ts.map +1 -0
  121. package/dist/scripts/ai-analysis/pipeline.js +208 -0
  122. package/dist/scripts/ai-analysis/pipeline.js.map +1 -0
  123. package/dist/scripts/ai-analysis/political-significance.d.ts +63 -0
  124. package/dist/scripts/ai-analysis/political-significance.d.ts.map +1 -0
  125. package/dist/scripts/ai-analysis/political-significance.js +227 -0
  126. package/dist/scripts/ai-analysis/political-significance.js.map +1 -0
  127. package/dist/scripts/ai-analysis/quality-assessor.d.ts +104 -0
  128. package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +1 -0
  129. package/dist/scripts/ai-analysis/quality-assessor.js +554 -0
  130. package/dist/scripts/ai-analysis/quality-assessor.js.map +1 -0
  131. package/dist/scripts/ai-analysis/swot/index.d.ts +56 -0
  132. package/dist/scripts/ai-analysis/swot/index.d.ts.map +1 -0
  133. package/dist/scripts/ai-analysis/swot/index.js +360 -0
  134. package/dist/scripts/ai-analysis/swot/index.js.map +1 -0
  135. package/dist/scripts/ai-analysis/swot/placeholders.d.ts +30 -0
  136. package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +1 -0
  137. package/dist/scripts/ai-analysis/swot/placeholders.js +381 -0
  138. package/dist/scripts/ai-analysis/swot/placeholders.js.map +1 -0
  139. package/dist/scripts/ai-analysis/types.d.ts +333 -0
  140. package/dist/scripts/ai-analysis/types.d.ts.map +1 -0
  141. package/dist/scripts/ai-analysis/types.js +19 -0
  142. package/dist/scripts/ai-analysis/types.js.map +1 -0
  143. package/dist/scripts/ai-analysis/visualisation/index.d.ts +15 -0
  144. package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +1 -0
  145. package/dist/scripts/ai-analysis/visualisation/index.js +179 -0
  146. package/dist/scripts/ai-analysis/visualisation/index.js.map +1 -0
  147. package/dist/scripts/analysis-framework/cross-reference.d.ts +35 -0
  148. package/dist/scripts/analysis-framework/cross-reference.d.ts.map +1 -0
  149. package/dist/scripts/analysis-framework/cross-reference.js +290 -0
  150. package/dist/scripts/analysis-framework/cross-reference.js.map +1 -0
  151. package/dist/scripts/analysis-framework/index.d.ts +79 -0
  152. package/dist/scripts/analysis-framework/index.d.ts.map +1 -0
  153. package/dist/scripts/analysis-framework/index.js +133 -0
  154. package/dist/scripts/analysis-framework/index.js.map +1 -0
  155. package/dist/scripts/analysis-framework/lenses/citizen.d.ts +29 -0
  156. package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +1 -0
  157. package/dist/scripts/analysis-framework/lenses/citizen.js +220 -0
  158. package/dist/scripts/analysis-framework/lenses/citizen.js.map +1 -0
  159. package/dist/scripts/analysis-framework/lenses/economic.d.ts +29 -0
  160. package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +1 -0
  161. package/dist/scripts/analysis-framework/lenses/economic.js +227 -0
  162. package/dist/scripts/analysis-framework/lenses/economic.js.map +1 -0
  163. package/dist/scripts/analysis-framework/lenses/government.d.ts +32 -0
  164. package/dist/scripts/analysis-framework/lenses/government.d.ts.map +1 -0
  165. package/dist/scripts/analysis-framework/lenses/government.js +265 -0
  166. package/dist/scripts/analysis-framework/lenses/government.js.map +1 -0
  167. package/dist/scripts/analysis-framework/lenses/international.d.ts +29 -0
  168. package/dist/scripts/analysis-framework/lenses/international.d.ts.map +1 -0
  169. package/dist/scripts/analysis-framework/lenses/international.js +248 -0
  170. package/dist/scripts/analysis-framework/lenses/international.js.map +1 -0
  171. package/dist/scripts/analysis-framework/lenses/media.d.ts +29 -0
  172. package/dist/scripts/analysis-framework/lenses/media.d.ts.map +1 -0
  173. package/dist/scripts/analysis-framework/lenses/media.js +211 -0
  174. package/dist/scripts/analysis-framework/lenses/media.js.map +1 -0
  175. package/dist/scripts/analysis-framework/lenses/opposition.d.ts +29 -0
  176. package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +1 -0
  177. package/dist/scripts/analysis-framework/lenses/opposition.js +234 -0
  178. package/dist/scripts/analysis-framework/lenses/opposition.js.map +1 -0
  179. package/dist/scripts/analysis-framework/methodology-types.d.ts +309 -0
  180. package/dist/scripts/analysis-framework/methodology-types.d.ts.map +1 -0
  181. package/dist/scripts/analysis-framework/methodology-types.js +38 -0
  182. package/dist/scripts/analysis-framework/methodology-types.js.map +1 -0
  183. package/dist/scripts/analysis-framework/political-classification.d.ts +58 -0
  184. package/dist/scripts/analysis-framework/political-classification.d.ts.map +1 -0
  185. package/dist/scripts/analysis-framework/political-classification.js +414 -0
  186. package/dist/scripts/analysis-framework/political-classification.js.map +1 -0
  187. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +74 -0
  188. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +1 -0
  189. package/dist/scripts/analysis-framework/political-risk-assessment.js +656 -0
  190. package/dist/scripts/analysis-framework/political-risk-assessment.js.map +1 -0
  191. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +65 -0
  192. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +1 -0
  193. package/dist/scripts/analysis-framework/political-threat-analysis.js +553 -0
  194. package/dist/scripts/analysis-framework/political-threat-analysis.js.map +1 -0
  195. package/dist/scripts/analysis-framework/significance-scorer.d.ts +62 -0
  196. package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +1 -0
  197. package/dist/scripts/analysis-framework/significance-scorer.js +196 -0
  198. package/dist/scripts/analysis-framework/significance-scorer.js.map +1 -0
  199. package/dist/scripts/analysis-framework/types.d.ts +138 -0
  200. package/dist/scripts/analysis-framework/types.d.ts.map +1 -0
  201. package/dist/scripts/analysis-framework/types.js +12 -0
  202. package/dist/scripts/analysis-framework/types.js.map +1 -0
  203. package/dist/scripts/analysis-reader.d.ts +240 -0
  204. package/dist/scripts/analysis-reader.d.ts.map +1 -0
  205. package/dist/scripts/analysis-reader.js +495 -0
  206. package/dist/scripts/analysis-reader.js.map +1 -0
  207. package/dist/scripts/article-quality-enhancer.d.ts +148 -0
  208. package/dist/scripts/article-quality-enhancer.d.ts.map +1 -0
  209. package/dist/scripts/article-quality-enhancer.js +430 -0
  210. package/dist/scripts/article-quality-enhancer.js.map +1 -0
  211. package/dist/scripts/article-template/constants.d.ts +104 -0
  212. package/dist/scripts/article-template/constants.d.ts.map +1 -0
  213. package/dist/scripts/article-template/constants.js +225 -0
  214. package/dist/scripts/article-template/constants.js.map +1 -0
  215. package/dist/scripts/article-template/helpers.d.ts +83 -0
  216. package/dist/scripts/article-template/helpers.d.ts.map +1 -0
  217. package/dist/scripts/article-template/helpers.js +236 -0
  218. package/dist/scripts/article-template/helpers.js.map +1 -0
  219. package/dist/scripts/article-template/index.d.ts +39 -0
  220. package/dist/scripts/article-template/index.d.ts.map +1 -0
  221. package/dist/scripts/article-template/index.js +37 -0
  222. package/dist/scripts/article-template/index.js.map +1 -0
  223. package/dist/scripts/article-template/registry.d.ts +64 -0
  224. package/dist/scripts/article-template/registry.d.ts.map +1 -0
  225. package/dist/scripts/article-template/registry.js +405 -0
  226. package/dist/scripts/article-template/registry.js.map +1 -0
  227. package/dist/scripts/article-template/template.d.ts +18 -0
  228. package/dist/scripts/article-template/template.d.ts.map +1 -0
  229. package/dist/scripts/article-template/template.js +359 -0
  230. package/dist/scripts/article-template/template.js.map +1 -0
  231. package/dist/scripts/article-template/types.d.ts +90 -0
  232. package/dist/scripts/article-template/types.d.ts.map +1 -0
  233. package/dist/scripts/article-template/types.js +96 -0
  234. package/dist/scripts/article-template/types.js.map +1 -0
  235. package/dist/scripts/article-template.d.ts +18 -0
  236. package/dist/scripts/article-template.d.ts.map +1 -0
  237. package/dist/scripts/article-template.js +18 -0
  238. package/dist/scripts/article-template.js.map +1 -0
  239. package/dist/scripts/catalog-downloaded-data.d.ts +66 -0
  240. package/dist/scripts/catalog-downloaded-data.d.ts.map +1 -0
  241. package/dist/scripts/catalog-downloaded-data.js +239 -0
  242. package/dist/scripts/catalog-downloaded-data.js.map +1 -0
  243. package/dist/scripts/check-cia-schema-updates.d.ts +186 -0
  244. package/dist/scripts/check-cia-schema-updates.d.ts.map +1 -0
  245. package/dist/scripts/check-cia-schema-updates.js +363 -0
  246. package/dist/scripts/check-cia-schema-updates.js.map +1 -0
  247. package/dist/scripts/data-transformers/calendar.d.ts +16 -0
  248. package/dist/scripts/data-transformers/calendar.d.ts.map +1 -0
  249. package/dist/scripts/data-transformers/calendar.js +137 -0
  250. package/dist/scripts/data-transformers/calendar.js.map +1 -0
  251. package/dist/scripts/data-transformers/constants/committee-names.d.ts +15 -0
  252. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +1 -0
  253. package/dist/scripts/data-transformers/constants/committee-names.js +30 -0
  254. package/dist/scripts/data-transformers/constants/committee-names.js.map +1 -0
  255. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +11 -0
  256. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +1 -0
  257. package/dist/scripts/data-transformers/constants/content-labels-part1.js +900 -0
  258. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +1 -0
  259. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +11 -0
  260. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +1 -0
  261. package/dist/scripts/data-transformers/constants/content-labels-part2.js +900 -0
  262. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +1 -0
  263. package/dist/scripts/data-transformers/constants/content-labels.d.ts +13 -0
  264. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +1 -0
  265. package/dist/scripts/data-transformers/constants/content-labels.js +18 -0
  266. package/dist/scripts/data-transformers/constants/content-labels.js.map +1 -0
  267. package/dist/scripts/data-transformers/constants/index.d.ts +15 -0
  268. package/dist/scripts/data-transformers/constants/index.d.ts.map +1 -0
  269. package/dist/scripts/data-transformers/constants/index.js +15 -0
  270. package/dist/scripts/data-transformers/constants/index.js.map +1 -0
  271. package/dist/scripts/data-transformers/constants/locale-map.d.ts +13 -0
  272. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +1 -0
  273. package/dist/scripts/data-transformers/constants/locale-map.js +17 -0
  274. package/dist/scripts/data-transformers/constants/locale-map.js.map +1 -0
  275. package/dist/scripts/data-transformers/constants.d.ts +14 -0
  276. package/dist/scripts/data-transformers/constants.d.ts.map +1 -0
  277. package/dist/scripts/data-transformers/constants.js +14 -0
  278. package/dist/scripts/data-transformers/constants.js.map +1 -0
  279. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +64 -0
  280. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +1 -0
  281. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +805 -0
  282. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +1 -0
  283. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +89 -0
  284. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +1 -0
  285. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +667 -0
  286. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +1 -0
  287. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +50 -0
  288. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +1 -0
  289. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +310 -0
  290. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +1 -0
  291. package/dist/scripts/data-transformers/content-generators/committee.d.ts +12 -0
  292. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +1 -0
  293. package/dist/scripts/data-transformers/content-generators/committee.js +247 -0
  294. package/dist/scripts/data-transformers/content-generators/committee.js.map +1 -0
  295. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +124 -0
  296. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +1 -0
  297. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +564 -0
  298. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +1 -0
  299. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +82 -0
  300. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +1 -0
  301. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +321 -0
  302. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +1 -0
  303. package/dist/scripts/data-transformers/content-generators/generic.d.ts +12 -0
  304. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +1 -0
  305. package/dist/scripts/data-transformers/content-generators/generic.js +295 -0
  306. package/dist/scripts/data-transformers/content-generators/generic.js.map +1 -0
  307. package/dist/scripts/data-transformers/content-generators/index.d.ts +56 -0
  308. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -0
  309. package/dist/scripts/data-transformers/content-generators/index.js +45 -0
  310. package/dist/scripts/data-transformers/content-generators/index.js.map +1 -0
  311. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +12 -0
  312. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +1 -0
  313. package/dist/scripts/data-transformers/content-generators/interpellations.js +124 -0
  314. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +1 -0
  315. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +137 -0
  316. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +1 -0
  317. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +286 -0
  318. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +1 -0
  319. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +17 -0
  320. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +1 -0
  321. package/dist/scripts/data-transformers/content-generators/month-ahead.js +212 -0
  322. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +1 -0
  323. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +17 -0
  324. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +1 -0
  325. package/dist/scripts/data-transformers/content-generators/monthly-review.js +173 -0
  326. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +1 -0
  327. package/dist/scripts/data-transformers/content-generators/motions.d.ts +12 -0
  328. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +1 -0
  329. package/dist/scripts/data-transformers/content-generators/motions.js +158 -0
  330. package/dist/scripts/data-transformers/content-generators/motions.js.map +1 -0
  331. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +52 -0
  332. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +1 -0
  333. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +244 -0
  334. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +1 -0
  335. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +12 -0
  336. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +1 -0
  337. package/dist/scripts/data-transformers/content-generators/propositions.js +263 -0
  338. package/dist/scripts/data-transformers/content-generators/propositions.js.map +1 -0
  339. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +92 -0
  340. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +1 -0
  341. package/dist/scripts/data-transformers/content-generators/sankey-section.js +257 -0
  342. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +1 -0
  343. package/dist/scripts/data-transformers/content-generators/shared.d.ts +81 -0
  344. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -0
  345. package/dist/scripts/data-transformers/content-generators/shared.js +913 -0
  346. package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -0
  347. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +83 -0
  348. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +1 -0
  349. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +219 -0
  350. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +1 -0
  351. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +50 -0
  352. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +1 -0
  353. package/dist/scripts/data-transformers/content-generators/swot-section.js +177 -0
  354. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +1 -0
  355. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +12 -0
  356. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +1 -0
  357. package/dist/scripts/data-transformers/content-generators/week-ahead.js +332 -0
  358. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +1 -0
  359. package/dist/scripts/data-transformers/content-generators.d.ts +15 -0
  360. package/dist/scripts/data-transformers/content-generators.d.ts.map +1 -0
  361. package/dist/scripts/data-transformers/content-generators.js +14 -0
  362. package/dist/scripts/data-transformers/content-generators.js.map +1 -0
  363. package/dist/scripts/data-transformers/document-analysis.d.ts +58 -0
  364. package/dist/scripts/data-transformers/document-analysis.d.ts.map +1 -0
  365. package/dist/scripts/data-transformers/document-analysis.js +396 -0
  366. package/dist/scripts/data-transformers/document-analysis.js.map +1 -0
  367. package/dist/scripts/data-transformers/helpers.d.ts +144 -0
  368. package/dist/scripts/data-transformers/helpers.d.ts.map +1 -0
  369. package/dist/scripts/data-transformers/helpers.js +408 -0
  370. package/dist/scripts/data-transformers/helpers.js.map +1 -0
  371. package/dist/scripts/data-transformers/index.d.ts +45 -0
  372. package/dist/scripts/data-transformers/index.d.ts.map +1 -0
  373. package/dist/scripts/data-transformers/index.js +66 -0
  374. package/dist/scripts/data-transformers/index.js.map +1 -0
  375. package/dist/scripts/data-transformers/metadata.d.ts +42 -0
  376. package/dist/scripts/data-transformers/metadata.d.ts.map +1 -0
  377. package/dist/scripts/data-transformers/metadata.js +385 -0
  378. package/dist/scripts/data-transformers/metadata.js.map +1 -0
  379. package/dist/scripts/data-transformers/policy-analysis.d.ts +105 -0
  380. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +1 -0
  381. package/dist/scripts/data-transformers/policy-analysis.js +686 -0
  382. package/dist/scripts/data-transformers/policy-analysis.js.map +1 -0
  383. package/dist/scripts/data-transformers/risk-analysis.d.ts +104 -0
  384. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +1 -0
  385. package/dist/scripts/data-transformers/risk-analysis.js +279 -0
  386. package/dist/scripts/data-transformers/risk-analysis.js.map +1 -0
  387. package/dist/scripts/data-transformers/types.d.ts +260 -0
  388. package/dist/scripts/data-transformers/types.d.ts.map +1 -0
  389. package/dist/scripts/data-transformers/types.js +11 -0
  390. package/dist/scripts/data-transformers/types.js.map +1 -0
  391. package/dist/scripts/data-transformers.d.ts +23 -0
  392. package/dist/scripts/data-transformers.d.ts.map +1 -0
  393. package/dist/scripts/data-transformers.js +35 -0
  394. package/dist/scripts/data-transformers.js.map +1 -0
  395. package/dist/scripts/deep-inspection/index.d.ts +55 -0
  396. package/dist/scripts/deep-inspection/index.d.ts.map +1 -0
  397. package/dist/scripts/deep-inspection/index.js +66 -0
  398. package/dist/scripts/deep-inspection/index.js.map +1 -0
  399. package/dist/scripts/detect-swedish-leakage.d.ts +69 -0
  400. package/dist/scripts/detect-swedish-leakage.d.ts.map +1 -0
  401. package/dist/scripts/detect-swedish-leakage.js +417 -0
  402. package/dist/scripts/detect-swedish-leakage.js.map +1 -0
  403. package/dist/scripts/editorial-framework.d.ts +121 -0
  404. package/dist/scripts/editorial-framework.d.ts.map +1 -0
  405. package/dist/scripts/editorial-framework.js +364 -0
  406. package/dist/scripts/editorial-framework.js.map +1 -0
  407. package/dist/scripts/editorial-pillars.d.ts +43 -0
  408. package/dist/scripts/editorial-pillars.d.ts.map +1 -0
  409. package/dist/scripts/editorial-pillars.js +215 -0
  410. package/dist/scripts/editorial-pillars.js.map +1 -0
  411. package/dist/scripts/extract-news-metadata.d.ts +12 -0
  412. package/dist/scripts/extract-news-metadata.d.ts.map +1 -0
  413. package/dist/scripts/extract-news-metadata.js +107 -0
  414. package/dist/scripts/extract-news-metadata.js.map +1 -0
  415. package/dist/scripts/extract-vocabulary.d.ts +15 -0
  416. package/dist/scripts/extract-vocabulary.d.ts.map +1 -0
  417. package/dist/scripts/extract-vocabulary.js +255 -0
  418. package/dist/scripts/extract-vocabulary.js.map +1 -0
  419. package/dist/scripts/fix-article-navigation.d.ts +37 -0
  420. package/dist/scripts/fix-article-navigation.d.ts.map +1 -0
  421. package/dist/scripts/fix-article-navigation.js +198 -0
  422. package/dist/scripts/fix-article-navigation.js.map +1 -0
  423. package/dist/scripts/fix-keywords-localization.d.ts +18 -0
  424. package/dist/scripts/fix-keywords-localization.d.ts.map +1 -0
  425. package/dist/scripts/fix-keywords-localization.js +270 -0
  426. package/dist/scripts/fix-keywords-localization.js.map +1 -0
  427. package/dist/scripts/fix-old-articles-branding.d.ts +17 -0
  428. package/dist/scripts/fix-old-articles-branding.d.ts.map +1 -0
  429. package/dist/scripts/fix-old-articles-branding.js +229 -0
  430. package/dist/scripts/fix-old-articles-branding.js.map +1 -0
  431. package/dist/scripts/generate-news-backport.d.ts +16 -0
  432. package/dist/scripts/generate-news-backport.d.ts.map +1 -0
  433. package/dist/scripts/generate-news-backport.js +379 -0
  434. package/dist/scripts/generate-news-backport.js.map +1 -0
  435. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +124 -0
  436. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +1 -0
  437. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +529 -0
  438. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +1 -0
  439. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +59 -0
  440. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +1 -0
  441. package/dist/scripts/generate-news-enhanced/analysis-cache.js +116 -0
  442. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +1 -0
  443. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +58 -0
  444. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +1 -0
  445. package/dist/scripts/generate-news-enhanced/analysis-labels.js +144 -0
  446. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +1 -0
  447. package/dist/scripts/generate-news-enhanced/config.d.ts +57 -0
  448. package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -0
  449. package/dist/scripts/generate-news-enhanced/config.js +286 -0
  450. package/dist/scripts/generate-news-enhanced/config.js.map +1 -0
  451. package/dist/scripts/generate-news-enhanced/generators.d.ts +119 -0
  452. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -0
  453. package/dist/scripts/generate-news-enhanced/generators.js +2108 -0
  454. package/dist/scripts/generate-news-enhanced/generators.js.map +1 -0
  455. package/dist/scripts/generate-news-enhanced/helpers.d.ts +123 -0
  456. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -0
  457. package/dist/scripts/generate-news-enhanced/helpers.js +438 -0
  458. package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -0
  459. package/dist/scripts/generate-news-enhanced/index.d.ts +19 -0
  460. package/dist/scripts/generate-news-enhanced/index.d.ts.map +1 -0
  461. package/dist/scripts/generate-news-enhanced/index.js +221 -0
  462. package/dist/scripts/generate-news-enhanced/index.js.map +1 -0
  463. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +35 -0
  464. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -0
  465. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +1179 -0
  466. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -0
  467. package/dist/scripts/generate-news-enhanced/types.d.ts +34 -0
  468. package/dist/scripts/generate-news-enhanced/types.d.ts.map +1 -0
  469. package/dist/scripts/generate-news-enhanced/types.js +9 -0
  470. package/dist/scripts/generate-news-enhanced/types.js.map +1 -0
  471. package/dist/scripts/generate-news-enhanced.d.ts +25 -0
  472. package/dist/scripts/generate-news-enhanced.d.ts.map +1 -0
  473. package/dist/scripts/generate-news-enhanced.js +37 -0
  474. package/dist/scripts/generate-news-enhanced.js.map +1 -0
  475. package/dist/scripts/generate-news-indexes/constants.d.ts +20 -0
  476. package/dist/scripts/generate-news-indexes/constants.d.ts.map +1 -0
  477. package/dist/scripts/generate-news-indexes/constants.js +308 -0
  478. package/dist/scripts/generate-news-indexes/constants.js.map +1 -0
  479. package/dist/scripts/generate-news-indexes/helpers.d.ts +73 -0
  480. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +1 -0
  481. package/dist/scripts/generate-news-indexes/helpers.js +352 -0
  482. package/dist/scripts/generate-news-indexes/helpers.js.map +1 -0
  483. package/dist/scripts/generate-news-indexes/index.d.ts +20 -0
  484. package/dist/scripts/generate-news-indexes/index.d.ts.map +1 -0
  485. package/dist/scripts/generate-news-indexes/index.js +75 -0
  486. package/dist/scripts/generate-news-indexes/index.js.map +1 -0
  487. package/dist/scripts/generate-news-indexes/template.d.ts +25 -0
  488. package/dist/scripts/generate-news-indexes/template.d.ts.map +1 -0
  489. package/dist/scripts/generate-news-indexes/template.js +644 -0
  490. package/dist/scripts/generate-news-indexes/template.js.map +1 -0
  491. package/dist/scripts/generate-news-indexes/types.d.ts +96 -0
  492. package/dist/scripts/generate-news-indexes/types.d.ts.map +1 -0
  493. package/dist/scripts/generate-news-indexes/types.js +9 -0
  494. package/dist/scripts/generate-news-indexes/types.js.map +1 -0
  495. package/dist/scripts/generate-news-indexes.d.ts +20 -0
  496. package/dist/scripts/generate-news-indexes.d.ts.map +1 -0
  497. package/dist/scripts/generate-news-indexes.js +19 -0
  498. package/dist/scripts/generate-news-indexes.js.map +1 -0
  499. package/dist/scripts/generate-rss.d.ts +48 -0
  500. package/dist/scripts/generate-rss.d.ts.map +1 -0
  501. package/dist/scripts/generate-rss.js +299 -0
  502. package/dist/scripts/generate-rss.js.map +1 -0
  503. package/dist/scripts/generate-sitemap-html.d.ts +79 -0
  504. package/dist/scripts/generate-sitemap-html.d.ts.map +1 -0
  505. package/dist/scripts/generate-sitemap-html.js +878 -0
  506. package/dist/scripts/generate-sitemap-html.js.map +1 -0
  507. package/dist/scripts/generate-sitemap.d.ts +23 -0
  508. package/dist/scripts/generate-sitemap.d.ts.map +1 -0
  509. package/dist/scripts/generate-sitemap.js +476 -0
  510. package/dist/scripts/generate-sitemap.js.map +1 -0
  511. package/dist/scripts/generate-types-from-cia-schemas.d.ts +176 -0
  512. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +1 -0
  513. package/dist/scripts/generate-types-from-cia-schemas.js +318 -0
  514. package/dist/scripts/generate-types-from-cia-schemas.js.map +1 -0
  515. package/dist/scripts/government-role-validator.d.ts +65 -0
  516. package/dist/scripts/government-role-validator.d.ts.map +1 -0
  517. package/dist/scripts/government-role-validator.js +217 -0
  518. package/dist/scripts/government-role-validator.js.map +1 -0
  519. package/dist/scripts/html-utils.d.ts +17 -0
  520. package/dist/scripts/html-utils.d.ts.map +1 -0
  521. package/dist/scripts/html-utils.js +29 -0
  522. package/dist/scripts/html-utils.js.map +1 -0
  523. package/dist/scripts/load-cia-stats.d.ts +89 -0
  524. package/dist/scripts/load-cia-stats.d.ts.map +1 -0
  525. package/dist/scripts/load-cia-stats.js +400 -0
  526. package/dist/scripts/load-cia-stats.js.map +1 -0
  527. package/dist/scripts/mcp-client/client.d.ts +73 -0
  528. package/dist/scripts/mcp-client/client.d.ts.map +1 -0
  529. package/dist/scripts/mcp-client/client.js +526 -0
  530. package/dist/scripts/mcp-client/client.js.map +1 -0
  531. package/dist/scripts/mcp-client/document-types.d.ts +23 -0
  532. package/dist/scripts/mcp-client/document-types.d.ts.map +1 -0
  533. package/dist/scripts/mcp-client/document-types.js +62 -0
  534. package/dist/scripts/mcp-client/document-types.js.map +1 -0
  535. package/dist/scripts/mcp-client/index.d.ts +34 -0
  536. package/dist/scripts/mcp-client/index.d.ts.map +1 -0
  537. package/dist/scripts/mcp-client/index.js +67 -0
  538. package/dist/scripts/mcp-client/index.js.map +1 -0
  539. package/dist/scripts/mcp-client/transport.d.ts +32 -0
  540. package/dist/scripts/mcp-client/transport.d.ts.map +1 -0
  541. package/dist/scripts/mcp-client/transport.js +102 -0
  542. package/dist/scripts/mcp-client/transport.js.map +1 -0
  543. package/dist/scripts/mcp-client.d.ts +18 -0
  544. package/dist/scripts/mcp-client.d.ts.map +1 -0
  545. package/dist/scripts/mcp-client.js +18 -0
  546. package/dist/scripts/mcp-client.js.map +1 -0
  547. package/dist/scripts/mcp-query-cli.d.ts +25 -0
  548. package/dist/scripts/mcp-query-cli.d.ts.map +1 -0
  549. package/dist/scripts/mcp-query-cli.js +66 -0
  550. package/dist/scripts/mcp-query-cli.js.map +1 -0
  551. package/dist/scripts/news-types/breaking-news.d.ts +178 -0
  552. package/dist/scripts/news-types/breaking-news.d.ts.map +1 -0
  553. package/dist/scripts/news-types/breaking-news.js +428 -0
  554. package/dist/scripts/news-types/breaking-news.js.map +1 -0
  555. package/dist/scripts/news-types/committee-reports.d.ts +212 -0
  556. package/dist/scripts/news-types/committee-reports.d.ts.map +1 -0
  557. package/dist/scripts/news-types/committee-reports.js +404 -0
  558. package/dist/scripts/news-types/committee-reports.js.map +1 -0
  559. package/dist/scripts/news-types/month-ahead.d.ts +71 -0
  560. package/dist/scripts/news-types/month-ahead.d.ts.map +1 -0
  561. package/dist/scripts/news-types/month-ahead.js +392 -0
  562. package/dist/scripts/news-types/month-ahead.js.map +1 -0
  563. package/dist/scripts/news-types/monthly-review.d.ts +61 -0
  564. package/dist/scripts/news-types/monthly-review.d.ts.map +1 -0
  565. package/dist/scripts/news-types/monthly-review.js +417 -0
  566. package/dist/scripts/news-types/monthly-review.js.map +1 -0
  567. package/dist/scripts/news-types/motions.d.ts +214 -0
  568. package/dist/scripts/news-types/motions.d.ts.map +1 -0
  569. package/dist/scripts/news-types/motions.js +447 -0
  570. package/dist/scripts/news-types/motions.js.map +1 -0
  571. package/dist/scripts/news-types/propositions.d.ts +204 -0
  572. package/dist/scripts/news-types/propositions.d.ts.map +1 -0
  573. package/dist/scripts/news-types/propositions.js +401 -0
  574. package/dist/scripts/news-types/propositions.js.map +1 -0
  575. package/dist/scripts/news-types/week-ahead.d.ts +231 -0
  576. package/dist/scripts/news-types/week-ahead.d.ts.map +1 -0
  577. package/dist/scripts/news-types/week-ahead.js +441 -0
  578. package/dist/scripts/news-types/week-ahead.js.map +1 -0
  579. package/dist/scripts/news-types/weekly-review/analysis.d.ts +47 -0
  580. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +1 -0
  581. package/dist/scripts/news-types/weekly-review/analysis.js +276 -0
  582. package/dist/scripts/news-types/weekly-review/analysis.js.map +1 -0
  583. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +51 -0
  584. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +1 -0
  585. package/dist/scripts/news-types/weekly-review/data-loader.js +298 -0
  586. package/dist/scripts/news-types/weekly-review/data-loader.js.map +1 -0
  587. package/dist/scripts/news-types/weekly-review/generator.d.ts +18 -0
  588. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +1 -0
  589. package/dist/scripts/news-types/weekly-review/generator.js +284 -0
  590. package/dist/scripts/news-types/weekly-review/generator.js.map +1 -0
  591. package/dist/scripts/news-types/weekly-review/index.d.ts +20 -0
  592. package/dist/scripts/news-types/weekly-review/index.d.ts.map +1 -0
  593. package/dist/scripts/news-types/weekly-review/index.js +23 -0
  594. package/dist/scripts/news-types/weekly-review/index.js.map +1 -0
  595. package/dist/scripts/news-types/weekly-review/types.d.ts +72 -0
  596. package/dist/scripts/news-types/weekly-review/types.d.ts.map +1 -0
  597. package/dist/scripts/news-types/weekly-review/types.js +20 -0
  598. package/dist/scripts/news-types/weekly-review/types.js.map +1 -0
  599. package/dist/scripts/news-types/weekly-review/validation.d.ts +10 -0
  600. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +1 -0
  601. package/dist/scripts/news-types/weekly-review/validation.js +95 -0
  602. package/dist/scripts/news-types/weekly-review/validation.js.map +1 -0
  603. package/dist/scripts/news-types/weekly-review.d.ts +15 -0
  604. package/dist/scripts/news-types/weekly-review.d.ts.map +1 -0
  605. package/dist/scripts/news-types/weekly-review.js +14 -0
  606. package/dist/scripts/news-types/weekly-review.js.map +1 -0
  607. package/dist/scripts/party-variants.d.ts +23 -0
  608. package/dist/scripts/party-variants.d.ts.map +1 -0
  609. package/dist/scripts/party-variants.js +50 -0
  610. package/dist/scripts/party-variants.js.map +1 -0
  611. package/dist/scripts/pipeline/index.d.ts +19 -0
  612. package/dist/scripts/pipeline/index.d.ts.map +1 -0
  613. package/dist/scripts/pipeline/index.js +17 -0
  614. package/dist/scripts/pipeline/index.js.map +1 -0
  615. package/dist/scripts/pipeline/orchestrator.d.ts +56 -0
  616. package/dist/scripts/pipeline/orchestrator.d.ts.map +1 -0
  617. package/dist/scripts/pipeline/orchestrator.js +147 -0
  618. package/dist/scripts/pipeline/orchestrator.js.map +1 -0
  619. package/dist/scripts/pipeline/types.d.ts +117 -0
  620. package/dist/scripts/pipeline/types.d.ts.map +1 -0
  621. package/dist/scripts/pipeline/types.js +13 -0
  622. package/dist/scripts/pipeline/types.js.map +1 -0
  623. package/dist/scripts/pipeline/validation.d.ts +66 -0
  624. package/dist/scripts/pipeline/validation.d.ts.map +1 -0
  625. package/dist/scripts/pipeline/validation.js +129 -0
  626. package/dist/scripts/pipeline/validation.js.map +1 -0
  627. package/dist/scripts/populate-analysis-data.d.ts +41 -0
  628. package/dist/scripts/populate-analysis-data.d.ts.map +1 -0
  629. package/dist/scripts/populate-analysis-data.js +255 -0
  630. package/dist/scripts/populate-analysis-data.js.map +1 -0
  631. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +80 -0
  632. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +1 -0
  633. package/dist/scripts/pre-article-analysis/data-downloader.js +230 -0
  634. package/dist/scripts/pre-article-analysis/data-downloader.js.map +1 -0
  635. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +141 -0
  636. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +1 -0
  637. package/dist/scripts/pre-article-analysis/data-persistence.js +345 -0
  638. package/dist/scripts/pre-article-analysis/data-persistence.js.map +1 -0
  639. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +95 -0
  640. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -0
  641. package/dist/scripts/pre-article-analysis/markdown-serializer.js +648 -0
  642. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -0
  643. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +58 -0
  644. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +1 -0
  645. package/dist/scripts/pre-article-analysis/pdf-converter.js +142 -0
  646. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +1 -0
  647. package/dist/scripts/pre-article-analysis.d.ts +41 -0
  648. package/dist/scripts/pre-article-analysis.d.ts.map +1 -0
  649. package/dist/scripts/pre-article-analysis.js +578 -0
  650. package/dist/scripts/pre-article-analysis.js.map +1 -0
  651. package/dist/scripts/scb-client.d.ts +104 -0
  652. package/dist/scripts/scb-client.d.ts.map +1 -0
  653. package/dist/scripts/scb-client.js +286 -0
  654. package/dist/scripts/scb-client.js.map +1 -0
  655. package/dist/scripts/scb-context.d.ts +88 -0
  656. package/dist/scripts/scb-context.d.ts.map +1 -0
  657. package/dist/scripts/scb-context.js +307 -0
  658. package/dist/scripts/scb-context.js.map +1 -0
  659. package/dist/scripts/shared/version.d.ts +9 -0
  660. package/dist/scripts/shared/version.d.ts.map +1 -0
  661. package/dist/scripts/shared/version.js +28 -0
  662. package/dist/scripts/shared/version.js.map +1 -0
  663. package/dist/scripts/statistical-claims-detector.d.ts +119 -0
  664. package/dist/scripts/statistical-claims-detector.d.ts.map +1 -0
  665. package/dist/scripts/statistical-claims-detector.js +391 -0
  666. package/dist/scripts/statistical-claims-detector.js.map +1 -0
  667. package/dist/scripts/sync-cia-schemas.d.ts +52 -0
  668. package/dist/scripts/sync-cia-schemas.d.ts.map +1 -0
  669. package/dist/scripts/sync-cia-schemas.js +195 -0
  670. package/dist/scripts/sync-cia-schemas.js.map +1 -0
  671. package/dist/scripts/translation-dictionary.d.ts +45 -0
  672. package/dist/scripts/translation-dictionary.d.ts.map +1 -0
  673. package/dist/scripts/translation-dictionary.js +3642 -0
  674. package/dist/scripts/translation-dictionary.js.map +1 -0
  675. package/dist/scripts/types/article.d.ts +362 -0
  676. package/dist/scripts/types/article.d.ts.map +1 -0
  677. package/dist/scripts/types/article.js +6 -0
  678. package/dist/scripts/types/article.js.map +1 -0
  679. package/dist/scripts/types/content.d.ts +167 -0
  680. package/dist/scripts/types/content.d.ts.map +1 -0
  681. package/dist/scripts/types/content.js +6 -0
  682. package/dist/scripts/types/content.js.map +1 -0
  683. package/dist/scripts/types/editorial.d.ts +17 -0
  684. package/dist/scripts/types/editorial.d.ts.map +1 -0
  685. package/dist/scripts/types/editorial.js +6 -0
  686. package/dist/scripts/types/editorial.js.map +1 -0
  687. package/dist/scripts/types/language.d.ts +7 -0
  688. package/dist/scripts/types/language.d.ts.map +1 -0
  689. package/dist/scripts/types/language.js +6 -0
  690. package/dist/scripts/types/language.js.map +1 -0
  691. package/dist/scripts/types/mcp.d.ts +117 -0
  692. package/dist/scripts/types/mcp.d.ts.map +1 -0
  693. package/dist/scripts/types/mcp.js +6 -0
  694. package/dist/scripts/types/mcp.js.map +1 -0
  695. package/dist/scripts/types/party.d.ts +9 -0
  696. package/dist/scripts/types/party.d.ts.map +1 -0
  697. package/dist/scripts/types/party.js +6 -0
  698. package/dist/scripts/types/party.js.map +1 -0
  699. package/dist/scripts/types/validation.d.ts +136 -0
  700. package/dist/scripts/types/validation.d.ts.map +1 -0
  701. package/dist/scripts/types/validation.js +6 -0
  702. package/dist/scripts/types/validation.js.map +1 -0
  703. package/dist/scripts/types/workflow.d.ts +78 -0
  704. package/dist/scripts/types/workflow.d.ts.map +1 -0
  705. package/dist/scripts/types/workflow.js +6 -0
  706. package/dist/scripts/types/workflow.js.map +1 -0
  707. package/dist/scripts/update-stats-from-cia.d.ts +44 -0
  708. package/dist/scripts/update-stats-from-cia.d.ts.map +1 -0
  709. package/dist/scripts/update-stats-from-cia.js +310 -0
  710. package/dist/scripts/update-stats-from-cia.js.map +1 -0
  711. package/dist/scripts/validate-against-cia-schemas.d.ts +126 -0
  712. package/dist/scripts/validate-against-cia-schemas.d.ts.map +1 -0
  713. package/dist/scripts/validate-against-cia-schemas.js +299 -0
  714. package/dist/scripts/validate-against-cia-schemas.js.map +1 -0
  715. package/dist/scripts/validate-cross-references.d.ts +49 -0
  716. package/dist/scripts/validate-cross-references.d.ts.map +1 -0
  717. package/dist/scripts/validate-cross-references.js +183 -0
  718. package/dist/scripts/validate-cross-references.js.map +1 -0
  719. package/dist/scripts/validate-file-ownership.d.ts +68 -0
  720. package/dist/scripts/validate-file-ownership.d.ts.map +1 -0
  721. package/dist/scripts/validate-file-ownership.js +135 -0
  722. package/dist/scripts/validate-file-ownership.js.map +1 -0
  723. package/dist/scripts/validate-news-translations.d.ts +27 -0
  724. package/dist/scripts/validate-news-translations.d.ts.map +1 -0
  725. package/dist/scripts/validate-news-translations.js +258 -0
  726. package/dist/scripts/validate-news-translations.js.map +1 -0
  727. package/dist/scripts/validate-translations.d.ts +162 -0
  728. package/dist/scripts/validate-translations.d.ts.map +1 -0
  729. package/dist/scripts/validate-translations.js +378 -0
  730. package/dist/scripts/validate-translations.js.map +1 -0
  731. package/dist/scripts/workflow-state-coordinator.d.ts +354 -0
  732. package/dist/scripts/workflow-state-coordinator.d.ts.map +1 -0
  733. package/dist/scripts/workflow-state-coordinator.js +876 -0
  734. package/dist/scripts/workflow-state-coordinator.js.map +1 -0
  735. package/dist/scripts/world-bank-client.d.ts +122 -0
  736. package/dist/scripts/world-bank-client.d.ts.map +1 -0
  737. package/dist/scripts/world-bank-client.js +192 -0
  738. package/dist/scripts/world-bank-client.js.map +1 -0
  739. package/dist/scripts/world-bank-context.d.ts +88 -0
  740. package/dist/scripts/world-bank-context.d.ts.map +1 -0
  741. package/dist/scripts/world-bank-context.js +331 -0
  742. package/dist/scripts/world-bank-context.js.map +1 -0
  743. package/package.json +32 -7
  744. package/dist/lib/chart-factory.d.ts.map +0 -1
  745. package/dist/lib/chart-factory.js.map +0 -1
  746. package/dist/lib/data-loader.d.ts.map +0 -1
  747. package/dist/lib/data-loader.js.map +0 -1
  748. package/dist/lib/dom-utils.d.ts.map +0 -1
  749. package/dist/lib/dom-utils.js.map +0 -1
  750. package/dist/lib/error-boundary.d.ts.map +0 -1
  751. package/dist/lib/error-boundary.js.map +0 -1
  752. package/dist/lib/fallback-ui.d.ts.map +0 -1
  753. package/dist/lib/fallback-ui.js.map +0 -1
  754. package/dist/lib/index.d.ts.map +0 -1
  755. package/dist/lib/index.js.map +0 -1
  756. package/dist/lib/logger.d.ts.map +0 -1
  757. package/dist/lib/logger.js.map +0 -1
  758. package/dist/lib/theme.d.ts.map +0 -1
  759. package/dist/lib/theme.js.map +0 -1
  760. package/dist/lib/types.d.ts.map +0 -1
  761. package/dist/lib/types.js.map +0 -1
  762. /package/dist/lib/{chart-factory.d.ts → shared/chart-factory.d.ts} +0 -0
  763. /package/dist/lib/{chart-factory.js → shared/chart-factory.js} +0 -0
  764. /package/dist/lib/{data-loader.d.ts → shared/data-loader.d.ts} +0 -0
  765. /package/dist/lib/{data-loader.js → shared/data-loader.js} +0 -0
  766. /package/dist/lib/{dom-utils.d.ts → shared/dom-utils.d.ts} +0 -0
  767. /package/dist/lib/{dom-utils.js → shared/dom-utils.js} +0 -0
  768. /package/dist/lib/{error-boundary.d.ts → shared/error-boundary.d.ts} +0 -0
  769. /package/dist/lib/{error-boundary.js → shared/error-boundary.js} +0 -0
  770. /package/dist/lib/{fallback-ui.d.ts → shared/fallback-ui.d.ts} +0 -0
  771. /package/dist/lib/{fallback-ui.js → shared/fallback-ui.js} +0 -0
  772. /package/dist/lib/{index.d.ts → shared/index.d.ts} +0 -0
  773. /package/dist/lib/{index.js → shared/index.js} +0 -0
  774. /package/dist/lib/{logger.d.ts → shared/logger.d.ts} +0 -0
  775. /package/dist/lib/{logger.js → shared/logger.js} +0 -0
  776. /package/dist/lib/{theme.d.ts → shared/theme.d.ts} +0 -0
  777. /package/dist/lib/{theme.js → shared/theme.js} +0 -0
  778. /package/dist/lib/{types.d.ts → shared/types.d.ts} +0 -0
  779. /package/dist/lib/{types.js → shared/types.js} +0 -0
@@ -0,0 +1,417 @@
1
+ /**
2
+ * @module Swedish Leakage Detector
3
+ * @description Detects untranslated Swedish text in non-Swedish articles.
4
+ *
5
+ * Scans HTML content for Swedish-specific tokens that should have been
6
+ * translated. Reports leaked terms with their positions and a leakage score.
7
+ *
8
+ * Typically used as an advisory CI check: the script exits non-zero if any
9
+ * non-SV article contains ≥ threshold untranslated Swedish tokens, but CI
10
+ * workflows may choose to run it with `continue-on-error`.
11
+ *
12
+ * Usage:
13
+ * npx tsx scripts/detect-swedish-leakage.ts --dir news/ --threshold 5
14
+ */
15
+ import { join, resolve } from 'path';
16
+ import { fileURLToPath } from 'url';
17
+ // ---------------------------------------------------------------------------
18
+ // Swedish-only vocabulary – high-confidence tokens that are exclusively Swedish
19
+ // and should never appear in correctly translated content.
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * Common Swedish function words that are almost never valid in other languages.
23
+ * Each word is a lower-case Swedish term.
24
+ */
25
+ export const SWEDISH_STOP_WORDS = new Set([
26
+ 'och', 'att', 'det', 'som', 'är', 'för', 'med', 'har', 'den',
27
+ 'inte', 'ska', 'kan', 'till', 'ett', 'var', 'blir', 'också',
28
+ 'efter', 'vid', 'eller', 'från', 'dessa', 'samt', 'enligt',
29
+ 'genom', 'inom', 'redan', 'dels', 'bland', 'dock', 'även',
30
+ 'mellan', 'under', 'utan', 'sedan', 'bör', 'hos', 'mot',
31
+ ]);
32
+ /**
33
+ * Swedish parliamentary terms that should always be translated.
34
+ * These are domain-specific Swedish words that should never appear in e.g. English articles.
35
+ * Includes common inflected forms (definite, plural, genitive) to catch actual leaked tokens.
36
+ */
37
+ export const SWEDISH_PARLIAMENTARY_TERMS = new Set([
38
+ // Betänkande (committee report) – base + common inflections
39
+ 'betänkande', 'betänkanden', 'betänkandet', 'betänkandena',
40
+ // Proposition (government bill)
41
+ 'proposition', 'propositionen', 'propositioner', 'propositionerna',
42
+ // Utskott (committee)
43
+ 'utskott', 'utskottet', 'utskotten', 'utskottets', 'utskottens',
44
+ // Riksdag (parliament)
45
+ 'riksdag', 'riksdagen', 'riksdagens',
46
+ // Regering (government)
47
+ 'regering', 'regeringen', 'regeringens',
48
+ // Motion (member's bill)
49
+ 'motion', 'motionen', 'motioner', 'motionerna', 'motionens',
50
+ // Interpellation (formal question)
51
+ 'interpellation', 'interpellationen', 'interpellationer', 'interpellationerna',
52
+ // Anförande (speech)
53
+ 'anförande', 'anförandet', 'anföranden', 'anförandena',
54
+ // Votering / omröstning (vote)
55
+ 'votering', 'voteringen', 'voteringar', 'voteringarna',
56
+ 'omröstning', 'omröstningen', 'omröstningar', 'omröstningarna',
57
+ // Bordläggning (tabling)
58
+ 'bordläggning', 'bordläggningen',
59
+ // Remiss / yttrande (referral / opinion)
60
+ 'remiss', 'remissen', 'remisser', 'remisserna',
61
+ 'yttrande', 'yttrandet', 'yttranden', 'yttrandena',
62
+ // Statsråd / ledamot / riksdagsledamot (minister / member of parliament)
63
+ 'statsråd', 'statsrådet', 'statsråden',
64
+ 'ledamot', 'ledamoten', 'ledamöter', 'ledamöterna',
65
+ 'riksdagsledamot', 'riksdagsledamoten', 'riksdagsledamöter', 'riksdagsledamöterna',
66
+ // Budget terms
67
+ 'utgiftsområde', 'utgiftsområdet', 'utgiftsområden',
68
+ 'budgetpropositionen', 'vårpropositionen',
69
+ // Committee names (already definite form)
70
+ 'finansutskottet', 'justitieutskottet', 'försvarsutskottet',
71
+ 'socialutskottet', 'utbildningsutskottet', 'utrikesutskottet',
72
+ 'skatteutskottet', 'trafikutskottet', 'kulturutskottet',
73
+ // Other procedure terms
74
+ 'tillkännagivande', 'tillkännagivanden', 'tillkännagivandet',
75
+ 'lagförslag', 'lagförslaget', 'lagförslagen',
76
+ 'lagstiftning', 'lagstiftningen',
77
+ 'sammanträde', 'sammanträdet', 'sammanträden',
78
+ 'anmälan', 'anmälningar', 'anmälningarna',
79
+ 'granskning', 'granskningen', 'granskningar',
80
+ 'beredning', 'beredningen', 'beredningar',
81
+ 'anslag', 'anslaget', 'anslagen',
82
+ 'utgiftstak', 'utgiftstaket',
83
+ 'statsbudgeten',
84
+ // Swedish government ministries (departement) – should always be translated
85
+ 'finansdepartementet',
86
+ 'utrikesdepartementet',
87
+ 'justitiedepartementet',
88
+ 'försvarsdepartementet',
89
+ 'utbildningsdepartementet',
90
+ 'socialdepartementet',
91
+ 'kulturdepartementet',
92
+ 'miljödepartementet',
93
+ 'infrastrukturdepartementet',
94
+ 'arbetsmarknadsdepartementet',
95
+ 'näringsdepartementet',
96
+ ]);
97
+ /** Valid boundary after an HTML tag name. */
98
+ function isTagNameBoundary(ch) {
99
+ return ch === undefined || ch === '>' || ch === '/' || /\s/.test(ch);
100
+ }
101
+ /**
102
+ * Strip specific HTML tag blocks using a single-pass index-based scan
103
+ * (avoids regex tag filters and repeated toLowerCase).
104
+ *
105
+ * For preserveNewlines=true, removed content is replaced with spaces while keeping '\n'
106
+ * positions intact so line numbering remains stable.
107
+ */
108
+ function stripTagBlocks(html, tagNames, preserveNewlines) {
109
+ const lower = html.toLowerCase();
110
+ const length = html.length;
111
+ const resultParts = [];
112
+ let copyFrom = 0;
113
+ let i = 0;
114
+ while (i < length) {
115
+ if (lower[i] !== '<') {
116
+ i++;
117
+ continue;
118
+ }
119
+ let matchedBlock = false;
120
+ for (const tagName of tagNames) {
121
+ const openPrefix = `<${tagName}`;
122
+ if (!lower.startsWith(openPrefix, i))
123
+ continue;
124
+ const openNameBoundaryIndex = i + 1 + tagName.length;
125
+ if (!isTagNameBoundary(lower[openNameBoundaryIndex]))
126
+ continue;
127
+ const openEnd = lower.indexOf('>', openNameBoundaryIndex);
128
+ if (openEnd === -1)
129
+ continue;
130
+ const closePrefix = `</${tagName}`;
131
+ const closeStart = lower.indexOf(closePrefix, openEnd + 1);
132
+ if (closeStart === -1)
133
+ continue;
134
+ const closeNameBoundaryIndex = closeStart + 2 + tagName.length;
135
+ if (!isTagNameBoundary(lower[closeNameBoundaryIndex]))
136
+ continue;
137
+ const closeEnd = lower.indexOf('>', closeNameBoundaryIndex);
138
+ if (closeEnd === -1)
139
+ continue;
140
+ // Push text before this block
141
+ if (i > copyFrom) {
142
+ resultParts.push(html.slice(copyFrom, i));
143
+ }
144
+ // Push replacement for the matched block
145
+ const block = html.slice(i, closeEnd + 1);
146
+ const replacement = preserveNewlines
147
+ ? block.replace(/[^\n]/g, ' ')
148
+ : ' ';
149
+ resultParts.push(replacement);
150
+ i = closeEnd + 1;
151
+ copyFrom = i;
152
+ matchedBlock = true;
153
+ break;
154
+ }
155
+ if (!matchedBlock) {
156
+ i++;
157
+ }
158
+ }
159
+ // Push remaining text after the last matched block
160
+ if (copyFrom < length) {
161
+ resultParts.push(html.slice(copyFrom));
162
+ }
163
+ return resultParts.join('');
164
+ }
165
+ /** Remove all remaining HTML tags using an index-based state machine. */
166
+ function stripAllTags(html) {
167
+ const chunks = [];
168
+ let inTag = false;
169
+ for (let i = 0; i < html.length; i++) {
170
+ const ch = html[i];
171
+ if (ch === '<') {
172
+ if (!inTag) {
173
+ chunks.push(' ');
174
+ }
175
+ inTag = true;
176
+ continue;
177
+ }
178
+ if (ch === '>' && inTag) {
179
+ inTag = false;
180
+ continue;
181
+ }
182
+ if (!inTag) {
183
+ chunks.push(ch);
184
+ }
185
+ }
186
+ return chunks.join('');
187
+ }
188
+ /**
189
+ * Strip HTML tags and decode common entities to get plain text.
190
+ * This is used only for analysis/detection purposes, NOT for sanitisation.
191
+ * @param html - Raw HTML string
192
+ * @returns Plain text content
193
+ */
194
+ export function stripHtml(html, options = {}) {
195
+ let text = html;
196
+ if (!options.skipBlockStripping) {
197
+ // Remove script/style blocks first to avoid matching inner tag-like content.
198
+ text = stripTagBlocks(text, ['script', 'style'], false);
199
+ }
200
+ // Remove remaining tags
201
+ text = stripAllTags(text);
202
+ // Decode common entities.
203
+ // First, decode doubly-encoded entity references (&amp;#xE4; → &#xE4;) so that
204
+ // the subsequent hex/numeric patterns can match them in a single pass.
205
+ text = text.replace(/&amp;(#\w+;)/g, '&$1');
206
+ text = text
207
+ .replace(/&lt;/g, '<')
208
+ .replace(/&gt;/g, '>')
209
+ .replace(/&quot;/g, '"')
210
+ .replace(/&#0*39;|&#[xX]0*27;/g, "'")
211
+ .replace(/&nbsp;/g, ' ')
212
+ // Swedish characters (HTML named and numeric entities, case-insensitive hex)
213
+ .replace(/&auml;|&#228;|&#[xX]0*[eE]4;/g, 'ä')
214
+ .replace(/&Auml;|&#196;|&#[xX]0*[cC]4;/g, 'Ä')
215
+ .replace(/&ouml;|&#246;|&#[xX]0*[fF]6;/g, 'ö')
216
+ .replace(/&Ouml;|&#214;|&#[xX]0*[dD]6;/g, 'Ö')
217
+ .replace(/&aring;|&#229;|&#[xX]0*[eE]5;/g, 'å')
218
+ .replace(/&Aring;|&#197;|&#[xX]0*[cC]5;/g, 'Å')
219
+ // Common quote and dash entities (case-insensitive hex, optional leading zeros)
220
+ .replace(/&ndash;|&#8211;|&#[xX]0*2013;/g, '-')
221
+ .replace(/&mdash;|&#8212;|&#[xX]0*2014;/g, '-')
222
+ .replace(/&ldquo;|&rdquo;|&#8220;|&#8221;|&#[xX]0*201[Cc];|&#[xX]0*201[Dd];/g, '"')
223
+ .replace(/&lsquo;|&rsquo;|&#8216;|&#8217;|&#[xX]0*2018;|&#[xX]0*2019;|&apos;/g, "'")
224
+ .replace(/&amp;/g, '&');
225
+ // Normalise whitespace
226
+ return text.replace(/\s+/g, ' ').trim();
227
+ }
228
+ // ---------------------------------------------------------------------------
229
+ // Core detection logic
230
+ // ---------------------------------------------------------------------------
231
+ /**
232
+ * Detect Swedish leakage in HTML content intended for a non-Swedish audience.
233
+ *
234
+ * @param html - Full article HTML
235
+ * @param targetLang - The article's target language (e.g. 'en', 'de')
236
+ * @returns LeakageReport with leaked terms and score
237
+ */
238
+ export function detectSwedishLeakage(html, targetLang) {
239
+ // Swedish articles are expected to contain Swedish text.
240
+ if (targetLang === 'sv') {
241
+ return { leakedTerms: [], score: 0 };
242
+ }
243
+ // Strip script/style blocks on the full HTML first so multi-line blocks are
244
+ // removed correctly. Preserve newline count so reported line numbers remain accurate.
245
+ const cleaned = stripTagBlocks(html, ['script', 'style'], true);
246
+ const lines = cleaned.split('\n');
247
+ const leaked = [];
248
+ /** First-seen line for each term. */
249
+ const firstLine = new Map();
250
+ /** Per-term occurrence count. */
251
+ const counts = new Map();
252
+ for (let i = 0; i < lines.length; i++) {
253
+ const plainLine = stripHtml(lines[i], { skipBlockStripping: true });
254
+ const words = plainLine.split(/[-\s,.:;!?()[\]{}'"]+/).filter(Boolean);
255
+ for (const word of words) {
256
+ const lower = word.toLowerCase();
257
+ // Check against Swedish stop words (require ≥2 chars to avoid false positives)
258
+ if (lower.length >= 2 && SWEDISH_STOP_WORDS.has(lower)) {
259
+ if (!isSharedWord(lower, targetLang)) {
260
+ counts.set(lower, (counts.get(lower) ?? 0) + 1);
261
+ if (!firstLine.has(lower)) {
262
+ firstLine.set(lower, i + 1);
263
+ }
264
+ }
265
+ }
266
+ // Check against Swedish parliamentary terms, also applying shared-word filter
267
+ // to avoid false positives in Scandinavian languages (e.g. "proposition" shared across languages)
268
+ if (SWEDISH_PARLIAMENTARY_TERMS.has(lower)) {
269
+ if (!isSharedParliamentaryTerm(lower, targetLang)) {
270
+ counts.set(lower, (counts.get(lower) ?? 0) + 1);
271
+ if (!firstLine.has(lower)) {
272
+ firstLine.set(lower, i + 1);
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ // Build deduplicated results with counts
279
+ for (const [term, line] of firstLine) {
280
+ leaked.push({ term, line, count: counts.get(term) ?? 1 });
281
+ }
282
+ // Score: total number of Swedish token occurrences detected across all leaked terms
283
+ const totalOccurrences = Array.from(counts.values()).reduce((sum, value) => sum + value, 0);
284
+ return { leakedTerms: leaked, score: totalOccurrences };
285
+ }
286
+ // ---------------------------------------------------------------------------
287
+ // Shared word filter – some Swedish words are valid in other languages
288
+ // ---------------------------------------------------------------------------
289
+ /** Words shared between Swedish and specific other languages. */
290
+ const SHARED_WORDS = {
291
+ // Danish shares some common words with Swedish but not 'och', 'att', 'från' etc.
292
+ da: new Set(['det', 'den', 'var', 'kan', 'efter', 'eller', 'under', 'mot', 'med', 'som', 'har']),
293
+ // Norwegian shares some common words with Swedish
294
+ no: new Set(['det', 'den', 'var', 'kan', 'eller', 'under', 'mot', 'med', 'som', 'har']),
295
+ // German: do not treat "det" or "var" as shared, to avoid hiding Swedish leakage
296
+ de: new Set([]),
297
+ // Dutch: currently no Swedish stop words are treated as shared
298
+ nl: new Set([]),
299
+ fr: new Set([]),
300
+ es: new Set([]),
301
+ fi: new Set([]),
302
+ en: new Set([]),
303
+ ar: new Set([]),
304
+ he: new Set([]),
305
+ ja: new Set([]),
306
+ ko: new Set([]),
307
+ zh: new Set([]),
308
+ };
309
+ /**
310
+ * Check if a Swedish word is also a valid word in the target language,
311
+ * to avoid false positives (e.g. "det" in Danish).
312
+ */
313
+ function isSharedWord(word, targetLang) {
314
+ const shared = SHARED_WORDS[targetLang];
315
+ return shared ? shared.has(word) : false;
316
+ }
317
+ /**
318
+ * Parliamentary terms that are valid/identical in specific Scandinavian target
319
+ * languages and should not be flagged as Swedish leakage for those languages.
320
+ * Includes inflected forms to match the expanded SWEDISH_PARLIAMENTARY_TERMS set.
321
+ */
322
+ const SHARED_PARLIAMENTARY_TERMS = {
323
+ // Norwegian uses many of the same parliamentary terms as Swedish
324
+ no: new Set([
325
+ 'proposition', 'propositionen', 'propositioner', 'propositionerna',
326
+ 'interpellation', 'interpellationen', 'interpellationer', 'interpellationerna',
327
+ 'regeringen', 'regeringens',
328
+ 'statsråd', 'statsrådet', 'statsråden',
329
+ // Only keep ministry names whose spelling is truly identical in Swedish and Norwegian.
330
+ // Swedish-only spellings (försvarsdepartementet, miljödepartementet,
331
+ // arbetsmarknadsdepartementet, näringsdepartementet) are NOT shared —
332
+ // Norwegian uses distinct forms, so Swedish spellings should be flagged.
333
+ 'finansdepartementet',
334
+ 'kulturdepartementet',
335
+ 'infrastrukturdepartementet',
336
+ ]),
337
+ // Danish shares some parliamentary vocabulary
338
+ da: new Set([
339
+ 'proposition', 'propositionen', 'propositioner', 'propositionerna',
340
+ 'interpellation', 'interpellationen', 'interpellationer', 'interpellationerna',
341
+ 'regeringen', 'regeringens',
342
+ ]),
343
+ };
344
+ /**
345
+ * Check if a Swedish parliamentary term is also valid in the target language.
346
+ */
347
+ function isSharedParliamentaryTerm(term, targetLang) {
348
+ const shared = SHARED_PARLIAMENTARY_TERMS[targetLang];
349
+ return shared ? shared.has(term) : false;
350
+ }
351
+ // ---------------------------------------------------------------------------
352
+ // CLI entry point
353
+ // ---------------------------------------------------------------------------
354
+ async function main() {
355
+ const args = process.argv.slice(2);
356
+ let dir = 'news/';
357
+ let threshold = 5;
358
+ for (let i = 0; i < args.length; i++) {
359
+ if (args[i] === '--dir' && args[i + 1]) {
360
+ dir = args[i + 1];
361
+ i++;
362
+ }
363
+ if (args[i] === '--threshold' && args[i + 1]) {
364
+ const rawThreshold = args[i + 1];
365
+ // Validate: must be a positive integer (optional leading zeros allowed, e.g. "03")
366
+ if (!/^0*[1-9]\d*$/.test(rawThreshold)) {
367
+ console.error(`Invalid --threshold value "${rawThreshold}". Threshold must be a positive integer.`);
368
+ process.exit(1);
369
+ }
370
+ const parsed = Number(rawThreshold);
371
+ if (!Number.isInteger(parsed) || parsed <= 0) {
372
+ console.error(`Invalid --threshold value "${rawThreshold}". Threshold must be a positive integer.`);
373
+ process.exit(1);
374
+ }
375
+ threshold = parsed;
376
+ i++;
377
+ }
378
+ }
379
+ const { readdirSync, readFileSync } = await import('fs');
380
+ const files = readdirSync(dir).filter((f) => f.endsWith('.html'));
381
+ const langCodes = [
382
+ 'en', 'da', 'no', 'fi', 'de', 'fr', 'es', 'nl', 'ar', 'he', 'ja', 'ko', 'zh',
383
+ ];
384
+ let totalFailures = 0;
385
+ for (const langCode of langCodes) {
386
+ const langFiles = files.filter((f) => f.endsWith(`-${langCode}.html`));
387
+ for (const file of langFiles) {
388
+ const html = readFileSync(join(dir, file), 'utf-8');
389
+ const report = detectSwedishLeakage(html, langCode);
390
+ if (report.score >= threshold) {
391
+ console.error(`❌ ${file}: ${report.score} Swedish tokens detected (threshold: ${threshold})`);
392
+ for (const t of report.leakedTerms.slice(0, 5)) {
393
+ console.error(` Line ${t.line}: "${t.term}" (×${t.count})`);
394
+ }
395
+ totalFailures++;
396
+ }
397
+ }
398
+ }
399
+ if (totalFailures > 0) {
400
+ console.error(`\n${totalFailures} file(s) exceeded the Swedish leakage threshold.`);
401
+ process.exit(1);
402
+ }
403
+ else {
404
+ console.log('✅ All non-Swedish articles passed Swedish leakage check.');
405
+ }
406
+ }
407
+ // Run CLI when invoked directly
408
+ const isMainModule = typeof process !== 'undefined' &&
409
+ typeof process.argv?.[1] === 'string' &&
410
+ resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1]);
411
+ if (isMainModule) {
412
+ main().catch((err) => {
413
+ console.error(err);
414
+ process.exit(1);
415
+ });
416
+ }
417
+ //# sourceMappingURL=detect-swedish-leakage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-swedish-leakage.js","sourceRoot":"","sources":["../../scripts/detect-swedish-leakage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @module Intelligence/EditorialFramework
3
+ * @description Article type profiles defining AI analysis depth, editorial sections,
4
+ * and quality thresholds for each article type in the Riksdagsmonitor news pipeline.
5
+ *
6
+ * Each profile specifies:
7
+ * - SWOT analysis requirements (full, condensed, quick, none)
8
+ * - Dashboard chart requirements (Chart.js visualizations)
9
+ * - Mindmap requirements (CSS mindmap sections)
10
+ * - Minimum stakeholder count for analysis
11
+ * - Number of AI analysis iterations required
12
+ * - Minimum word count thresholds
13
+ * - Required editorial sections
14
+ *
15
+ * @author Hack23 AB
16
+ * @license Apache-2.0
17
+ */
18
+ import type { ArticleType } from './types/article.js';
19
+ /**
20
+ * SWOT analysis depth for an article type.
21
+ * - 'full': Complete SWOT with 5+ stakeholder perspectives per quadrant
22
+ * - 'condensed': Abbreviated SWOT with 3 stakeholder perspectives
23
+ * - 'quick': Single-paragraph SWOT overview
24
+ * - 'none': No SWOT required
25
+ */
26
+ export type SwotDepth = 'full' | 'condensed' | 'quick' | 'none';
27
+ /**
28
+ * Analysis depth tier for AI iteration control.
29
+ * - 'standard': 1–2 AI iterations; suitable for routine coverage
30
+ * - 'deep': 2–3 AI iterations; suitable for complex multi-stakeholder topics
31
+ * - 'comprehensive': 3+ AI iterations; suitable for flagship investigative pieces
32
+ */
33
+ export type AnalysisDepth = 'standard' | 'deep' | 'comprehensive';
34
+ /**
35
+ * Editorial section identifiers required per article type.
36
+ * Each identifier maps to a named section that must appear in the generated HTML.
37
+ */
38
+ export type EditorialSection = 'executive-summary' | 'stakeholder-impact' | 'swot-analysis' | 'policy-dashboard' | 'policy-mindmap' | 'deep-analysis' | 'watch-points' | 'sources-methodology';
39
+ /**
40
+ * Profile describing the editorial requirements for a single article type.
41
+ */
42
+ export interface ArticleTypeProfile {
43
+ /** Human-readable label for this article type */
44
+ label: string;
45
+ /** SWOT analysis depth requirement */
46
+ swot: SwotDepth;
47
+ /** Whether a Chart.js policy dashboard section is required */
48
+ dashboard: boolean;
49
+ /** Minimum number of charts to include when dashboard is required */
50
+ minCharts: number;
51
+ /** Whether a CSS mindmap section is required */
52
+ mindmap: boolean;
53
+ /** Minimum number of stakeholder perspectives to include */
54
+ minStakeholders: number;
55
+ /** Number of AI analysis iterations required to meet quality standards */
56
+ aiIterations: number;
57
+ /** Minimum word count for the generated article */
58
+ minWordCount: number;
59
+ /** Default analysis depth for workflow_dispatch input */
60
+ defaultAnalysisDepth: AnalysisDepth;
61
+ /** Ordered list of required editorial sections */
62
+ requiredSections: EditorialSection[];
63
+ /** Quality gate thresholds that must be met before PR creation */
64
+ qualityThresholds: {
65
+ /** Minimum quality score (0.0–1.0) matching article-quality-enhancer.ts scale */
66
+ minQualityScore: number;
67
+ /** Minimum number of policy domains detected */
68
+ minPolicyDomains: number;
69
+ /** Whether stakeholder diversity check is required */
70
+ requireStakeholderDiversity: boolean;
71
+ };
72
+ }
73
+ /**
74
+ * Constrained union of all valid editorial profile keys.
75
+ * Covers the canonical ArticleType union plus 'evening-analysis' which is
76
+ * workflow-specific but not a routable article type.
77
+ */
78
+ export type EditorialProfileKey = ArticleType | 'evening-analysis';
79
+ /**
80
+ * Editorial profiles for all 11 article types supported by the news generation pipeline.
81
+ *
82
+ * Profiles are ordered by analysis complexity from most to least intensive.
83
+ */
84
+ export declare const ARTICLE_TYPE_PROFILES: Readonly<Record<EditorialProfileKey, ArticleTypeProfile>>;
85
+ /**
86
+ * Get the profile for an article type.
87
+ *
88
+ * @param articleType - The article type identifier (accepts arbitrary strings from external workflow inputs; unrecognized types fall back to 'breaking')
89
+ * @returns The editorial profile, or the 'breaking' profile as a safe fallback
90
+ */
91
+ export declare function getArticleTypeProfile(articleType: string): ArticleTypeProfile;
92
+ /**
93
+ * Resolve the effective AI iteration count based on the requested depth and profile.
94
+ *
95
+ * @param articleType - The article type identifier
96
+ * @param requestedDepth - The analysis depth requested via workflow_dispatch input
97
+ * @returns Number of AI analysis iterations to perform
98
+ */
99
+ export declare function resolveAiIterations(articleType: string, requestedDepth: AnalysisDepth): number;
100
+ /**
101
+ * Check whether a given analysis depth string is a valid AnalysisDepth value.
102
+ *
103
+ * @param depth - The string to validate
104
+ * @returns true if valid, false otherwise
105
+ */
106
+ export declare function isValidAnalysisDepth(depth: unknown): depth is AnalysisDepth;
107
+ /**
108
+ * Minimum quality thresholds shared across all article types as a floor.
109
+ * Individual profiles are expected to meet or exceed these values, though
110
+ * no runtime validation currently enforces this constraint.
111
+ */
112
+ export declare const GLOBAL_QUALITY_FLOOR: {
113
+ readonly minWordCount: 400;
114
+ readonly minQualityScore: 0.4;
115
+ readonly minPolicyDomains: 1;
116
+ };
117
+ /**
118
+ * Editorial framework version for cache-busting and compatibility tracking.
119
+ */
120
+ export declare const EDITORIAL_FRAMEWORK_VERSION = "1.0.0";
121
+ //# sourceMappingURL=editorial-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorial-framework.d.ts","sourceRoot":"","sources":["../../scripts/editorial-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,qBAAqB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,oBAAoB,EAAE,aAAa,CAAC;IACpC,kDAAkD;IAClD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,kEAAkE;IAClE,iBAAiB,EAAE;QACjB,iFAAiF;QACjF,eAAe,EAAE,MAAM,CAAC;QACxB,gDAAgD;QAChD,gBAAgB,EAAE,MAAM,CAAC;QACzB,sDAAsD;QACtD,2BAA2B,EAAE,OAAO,CAAC;KACtC,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,kBAAkB,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CA8RlF,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAQ7E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,aAAa,GAC5B,MAAM,CAkBR;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAE3E;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC"}