riksdagsmonitor 0.8.23 → 0.8.26

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 (546) hide show
  1. package/README.md +53 -1
  2. package/dist/lib/dashboards/party-dashboard.js +2 -1
  3. package/dist/lib/dashboards/party-dashboard.js.map +1 -1
  4. package/dist/lib/dashboards/risk-dashboard.js +2 -1
  5. package/dist/lib/dashboards/risk-dashboard.js.map +1 -1
  6. package/dist/lib/shared/index.d.ts +0 -1
  7. package/dist/lib/shared/index.d.ts.map +1 -1
  8. package/dist/lib/shared/index.js +3 -1
  9. package/dist/lib/shared/index.js.map +1 -1
  10. package/dist/lib/shared/register-globals.d.ts +1 -1
  11. package/dist/lib/shared/register-globals.d.ts.map +1 -1
  12. package/dist/lib/shared/register-globals.js +7 -1
  13. package/dist/lib/shared/register-globals.js.map +1 -1
  14. package/package.json +54 -22
  15. package/dist/scripts/analysis-reader.d.ts +0 -241
  16. package/dist/scripts/analysis-reader.d.ts.map +0 -1
  17. package/dist/scripts/analysis-reader.js +0 -531
  18. package/dist/scripts/analysis-reader.js.map +0 -1
  19. package/dist/scripts/article-quality-enhancer.d.ts +0 -148
  20. package/dist/scripts/article-quality-enhancer.d.ts.map +0 -1
  21. package/dist/scripts/article-quality-enhancer.js +0 -430
  22. package/dist/scripts/article-quality-enhancer.js.map +0 -1
  23. package/dist/scripts/article-template/constants.d.ts +0 -104
  24. package/dist/scripts/article-template/constants.d.ts.map +0 -1
  25. package/dist/scripts/article-template/constants.js +0 -225
  26. package/dist/scripts/article-template/constants.js.map +0 -1
  27. package/dist/scripts/article-template/helpers.d.ts +0 -83
  28. package/dist/scripts/article-template/helpers.d.ts.map +0 -1
  29. package/dist/scripts/article-template/helpers.js +0 -236
  30. package/dist/scripts/article-template/helpers.js.map +0 -1
  31. package/dist/scripts/article-template/index.d.ts +0 -39
  32. package/dist/scripts/article-template/index.d.ts.map +0 -1
  33. package/dist/scripts/article-template/index.js +0 -37
  34. package/dist/scripts/article-template/index.js.map +0 -1
  35. package/dist/scripts/article-template/registry.d.ts +0 -64
  36. package/dist/scripts/article-template/registry.d.ts.map +0 -1
  37. package/dist/scripts/article-template/registry.js +0 -405
  38. package/dist/scripts/article-template/registry.js.map +0 -1
  39. package/dist/scripts/article-template/template.d.ts +0 -18
  40. package/dist/scripts/article-template/template.d.ts.map +0 -1
  41. package/dist/scripts/article-template/template.js +0 -359
  42. package/dist/scripts/article-template/template.js.map +0 -1
  43. package/dist/scripts/article-template/types.d.ts +0 -90
  44. package/dist/scripts/article-template/types.d.ts.map +0 -1
  45. package/dist/scripts/article-template/types.js +0 -96
  46. package/dist/scripts/article-template/types.js.map +0 -1
  47. package/dist/scripts/article-template.d.ts +0 -18
  48. package/dist/scripts/article-template.d.ts.map +0 -1
  49. package/dist/scripts/article-template.js +0 -18
  50. package/dist/scripts/article-template.js.map +0 -1
  51. package/dist/scripts/catalog-downloaded-data.d.ts +0 -66
  52. package/dist/scripts/catalog-downloaded-data.d.ts.map +0 -1
  53. package/dist/scripts/catalog-downloaded-data.js +0 -239
  54. package/dist/scripts/catalog-downloaded-data.js.map +0 -1
  55. package/dist/scripts/check-cia-schema-updates.d.ts +0 -186
  56. package/dist/scripts/check-cia-schema-updates.d.ts.map +0 -1
  57. package/dist/scripts/check-cia-schema-updates.js +0 -363
  58. package/dist/scripts/check-cia-schema-updates.js.map +0 -1
  59. package/dist/scripts/data-transformers/calendar.d.ts +0 -16
  60. package/dist/scripts/data-transformers/calendar.d.ts.map +0 -1
  61. package/dist/scripts/data-transformers/calendar.js +0 -137
  62. package/dist/scripts/data-transformers/calendar.js.map +0 -1
  63. package/dist/scripts/data-transformers/constants/committee-names.d.ts +0 -15
  64. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +0 -1
  65. package/dist/scripts/data-transformers/constants/committee-names.js +0 -30
  66. package/dist/scripts/data-transformers/constants/committee-names.js.map +0 -1
  67. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +0 -11
  68. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +0 -1
  69. package/dist/scripts/data-transformers/constants/content-labels-part1.js +0 -900
  70. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +0 -1
  71. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +0 -11
  72. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +0 -1
  73. package/dist/scripts/data-transformers/constants/content-labels-part2.js +0 -900
  74. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +0 -1
  75. package/dist/scripts/data-transformers/constants/content-labels.d.ts +0 -13
  76. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +0 -1
  77. package/dist/scripts/data-transformers/constants/content-labels.js +0 -18
  78. package/dist/scripts/data-transformers/constants/content-labels.js.map +0 -1
  79. package/dist/scripts/data-transformers/constants/index.d.ts +0 -15
  80. package/dist/scripts/data-transformers/constants/index.d.ts.map +0 -1
  81. package/dist/scripts/data-transformers/constants/index.js +0 -15
  82. package/dist/scripts/data-transformers/constants/index.js.map +0 -1
  83. package/dist/scripts/data-transformers/constants/locale-map.d.ts +0 -13
  84. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +0 -1
  85. package/dist/scripts/data-transformers/constants/locale-map.js +0 -17
  86. package/dist/scripts/data-transformers/constants/locale-map.js.map +0 -1
  87. package/dist/scripts/data-transformers/constants.d.ts +0 -14
  88. package/dist/scripts/data-transformers/constants.d.ts.map +0 -1
  89. package/dist/scripts/data-transformers/constants.js +0 -14
  90. package/dist/scripts/data-transformers/constants.js.map +0 -1
  91. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +0 -64
  92. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +0 -1
  93. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +0 -805
  94. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +0 -1
  95. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +0 -50
  96. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +0 -1
  97. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +0 -310
  98. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +0 -1
  99. package/dist/scripts/data-transformers/content-generators/committee.d.ts +0 -12
  100. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +0 -1
  101. package/dist/scripts/data-transformers/content-generators/committee.js +0 -247
  102. package/dist/scripts/data-transformers/content-generators/committee.js.map +0 -1
  103. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +0 -124
  104. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +0 -1
  105. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +0 -564
  106. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +0 -1
  107. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +0 -82
  108. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +0 -1
  109. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +0 -321
  110. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +0 -1
  111. package/dist/scripts/data-transformers/content-generators/generic.d.ts +0 -12
  112. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +0 -1
  113. package/dist/scripts/data-transformers/content-generators/generic.js +0 -295
  114. package/dist/scripts/data-transformers/content-generators/generic.js.map +0 -1
  115. package/dist/scripts/data-transformers/content-generators/index.d.ts +0 -84
  116. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +0 -1
  117. package/dist/scripts/data-transformers/content-generators/index.js +0 -47
  118. package/dist/scripts/data-transformers/content-generators/index.js.map +0 -1
  119. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +0 -12
  120. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +0 -1
  121. package/dist/scripts/data-transformers/content-generators/interpellations.js +0 -124
  122. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +0 -1
  123. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +0 -137
  124. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +0 -1
  125. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +0 -286
  126. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +0 -1
  127. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +0 -17
  128. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +0 -1
  129. package/dist/scripts/data-transformers/content-generators/month-ahead.js +0 -212
  130. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +0 -1
  131. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +0 -17
  132. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +0 -1
  133. package/dist/scripts/data-transformers/content-generators/monthly-review.js +0 -173
  134. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +0 -1
  135. package/dist/scripts/data-transformers/content-generators/motions.d.ts +0 -12
  136. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +0 -1
  137. package/dist/scripts/data-transformers/content-generators/motions.js +0 -158
  138. package/dist/scripts/data-transformers/content-generators/motions.js.map +0 -1
  139. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +0 -62
  140. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +0 -1
  141. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +0 -254
  142. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +0 -1
  143. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +0 -12
  144. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +0 -1
  145. package/dist/scripts/data-transformers/content-generators/propositions.js +0 -263
  146. package/dist/scripts/data-transformers/content-generators/propositions.js.map +0 -1
  147. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +0 -92
  148. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +0 -1
  149. package/dist/scripts/data-transformers/content-generators/sankey-section.js +0 -257
  150. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +0 -1
  151. package/dist/scripts/data-transformers/content-generators/shared.d.ts +0 -139
  152. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +0 -1
  153. package/dist/scripts/data-transformers/content-generators/shared.js +0 -935
  154. package/dist/scripts/data-transformers/content-generators/shared.js.map +0 -1
  155. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +0 -50
  156. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +0 -1
  157. package/dist/scripts/data-transformers/content-generators/swot-section.js +0 -177
  158. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +0 -1
  159. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +0 -12
  160. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +0 -1
  161. package/dist/scripts/data-transformers/content-generators/week-ahead.js +0 -332
  162. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +0 -1
  163. package/dist/scripts/data-transformers/content-generators.d.ts +0 -15
  164. package/dist/scripts/data-transformers/content-generators.d.ts.map +0 -1
  165. package/dist/scripts/data-transformers/content-generators.js +0 -14
  166. package/dist/scripts/data-transformers/content-generators.js.map +0 -1
  167. package/dist/scripts/data-transformers/document-analysis.d.ts +0 -58
  168. package/dist/scripts/data-transformers/document-analysis.d.ts.map +0 -1
  169. package/dist/scripts/data-transformers/document-analysis.js +0 -396
  170. package/dist/scripts/data-transformers/document-analysis.js.map +0 -1
  171. package/dist/scripts/data-transformers/helpers.d.ts +0 -144
  172. package/dist/scripts/data-transformers/helpers.d.ts.map +0 -1
  173. package/dist/scripts/data-transformers/helpers.js +0 -408
  174. package/dist/scripts/data-transformers/helpers.js.map +0 -1
  175. package/dist/scripts/data-transformers/index.d.ts +0 -45
  176. package/dist/scripts/data-transformers/index.d.ts.map +0 -1
  177. package/dist/scripts/data-transformers/index.js +0 -66
  178. package/dist/scripts/data-transformers/index.js.map +0 -1
  179. package/dist/scripts/data-transformers/metadata.d.ts +0 -42
  180. package/dist/scripts/data-transformers/metadata.d.ts.map +0 -1
  181. package/dist/scripts/data-transformers/metadata.js +0 -385
  182. package/dist/scripts/data-transformers/metadata.js.map +0 -1
  183. package/dist/scripts/data-transformers/policy-analysis.d.ts +0 -105
  184. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +0 -1
  185. package/dist/scripts/data-transformers/policy-analysis.js +0 -686
  186. package/dist/scripts/data-transformers/policy-analysis.js.map +0 -1
  187. package/dist/scripts/data-transformers/risk-analysis.d.ts +0 -104
  188. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +0 -1
  189. package/dist/scripts/data-transformers/risk-analysis.js +0 -279
  190. package/dist/scripts/data-transformers/risk-analysis.js.map +0 -1
  191. package/dist/scripts/data-transformers/types.d.ts +0 -260
  192. package/dist/scripts/data-transformers/types.d.ts.map +0 -1
  193. package/dist/scripts/data-transformers/types.js +0 -11
  194. package/dist/scripts/data-transformers/types.js.map +0 -1
  195. package/dist/scripts/data-transformers.d.ts +0 -23
  196. package/dist/scripts/data-transformers.d.ts.map +0 -1
  197. package/dist/scripts/data-transformers.js +0 -35
  198. package/dist/scripts/data-transformers.js.map +0 -1
  199. package/dist/scripts/deep-inspection/index.d.ts +0 -55
  200. package/dist/scripts/deep-inspection/index.d.ts.map +0 -1
  201. package/dist/scripts/deep-inspection/index.js +0 -66
  202. package/dist/scripts/deep-inspection/index.js.map +0 -1
  203. package/dist/scripts/detect-swedish-leakage.d.ts +0 -69
  204. package/dist/scripts/detect-swedish-leakage.d.ts.map +0 -1
  205. package/dist/scripts/detect-swedish-leakage.js +0 -417
  206. package/dist/scripts/detect-swedish-leakage.js.map +0 -1
  207. package/dist/scripts/editorial-framework.d.ts +0 -121
  208. package/dist/scripts/editorial-framework.d.ts.map +0 -1
  209. package/dist/scripts/editorial-framework.js +0 -364
  210. package/dist/scripts/editorial-framework.js.map +0 -1
  211. package/dist/scripts/editorial-pillars.d.ts +0 -43
  212. package/dist/scripts/editorial-pillars.d.ts.map +0 -1
  213. package/dist/scripts/editorial-pillars.js +0 -215
  214. package/dist/scripts/editorial-pillars.js.map +0 -1
  215. package/dist/scripts/extract-news-metadata.d.ts +0 -12
  216. package/dist/scripts/extract-news-metadata.d.ts.map +0 -1
  217. package/dist/scripts/extract-news-metadata.js +0 -107
  218. package/dist/scripts/extract-news-metadata.js.map +0 -1
  219. package/dist/scripts/extract-vocabulary.d.ts +0 -15
  220. package/dist/scripts/extract-vocabulary.d.ts.map +0 -1
  221. package/dist/scripts/extract-vocabulary.js +0 -255
  222. package/dist/scripts/extract-vocabulary.js.map +0 -1
  223. package/dist/scripts/fix-article-navigation.d.ts +0 -37
  224. package/dist/scripts/fix-article-navigation.d.ts.map +0 -1
  225. package/dist/scripts/fix-article-navigation.js +0 -198
  226. package/dist/scripts/fix-article-navigation.js.map +0 -1
  227. package/dist/scripts/fix-keywords-localization.d.ts +0 -18
  228. package/dist/scripts/fix-keywords-localization.d.ts.map +0 -1
  229. package/dist/scripts/fix-keywords-localization.js +0 -270
  230. package/dist/scripts/fix-keywords-localization.js.map +0 -1
  231. package/dist/scripts/fix-old-articles-branding.d.ts +0 -17
  232. package/dist/scripts/fix-old-articles-branding.d.ts.map +0 -1
  233. package/dist/scripts/fix-old-articles-branding.js +0 -229
  234. package/dist/scripts/fix-old-articles-branding.js.map +0 -1
  235. package/dist/scripts/generate-news-backport.d.ts +0 -16
  236. package/dist/scripts/generate-news-backport.d.ts.map +0 -1
  237. package/dist/scripts/generate-news-backport.js +0 -379
  238. package/dist/scripts/generate-news-backport.js.map +0 -1
  239. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +0 -141
  240. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +0 -1
  241. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +0 -546
  242. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +0 -1
  243. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +0 -59
  244. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +0 -1
  245. package/dist/scripts/generate-news-enhanced/analysis-cache.js +0 -116
  246. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +0 -1
  247. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +0 -58
  248. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +0 -1
  249. package/dist/scripts/generate-news-enhanced/analysis-labels.js +0 -144
  250. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +0 -1
  251. package/dist/scripts/generate-news-enhanced/config.d.ts +0 -58
  252. package/dist/scripts/generate-news-enhanced/config.d.ts.map +0 -1
  253. package/dist/scripts/generate-news-enhanced/config.js +0 -286
  254. package/dist/scripts/generate-news-enhanced/config.js.map +0 -1
  255. package/dist/scripts/generate-news-enhanced/generators.d.ts +0 -119
  256. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +0 -1
  257. package/dist/scripts/generate-news-enhanced/generators.js +0 -2131
  258. package/dist/scripts/generate-news-enhanced/generators.js.map +0 -1
  259. package/dist/scripts/generate-news-enhanced/helpers.d.ts +0 -122
  260. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +0 -1
  261. package/dist/scripts/generate-news-enhanced/helpers.js +0 -468
  262. package/dist/scripts/generate-news-enhanced/helpers.js.map +0 -1
  263. package/dist/scripts/generate-news-enhanced/index.d.ts +0 -19
  264. package/dist/scripts/generate-news-enhanced/index.d.ts.map +0 -1
  265. package/dist/scripts/generate-news-enhanced/index.js +0 -221
  266. package/dist/scripts/generate-news-enhanced/index.js.map +0 -1
  267. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +0 -46
  268. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +0 -1
  269. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +0 -1227
  270. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +0 -1
  271. package/dist/scripts/generate-news-enhanced/types.d.ts +0 -34
  272. package/dist/scripts/generate-news-enhanced/types.d.ts.map +0 -1
  273. package/dist/scripts/generate-news-enhanced/types.js +0 -9
  274. package/dist/scripts/generate-news-enhanced/types.js.map +0 -1
  275. package/dist/scripts/generate-news-enhanced.d.ts +0 -25
  276. package/dist/scripts/generate-news-enhanced.d.ts.map +0 -1
  277. package/dist/scripts/generate-news-enhanced.js +0 -37
  278. package/dist/scripts/generate-news-enhanced.js.map +0 -1
  279. package/dist/scripts/generate-news-indexes/constants.d.ts +0 -20
  280. package/dist/scripts/generate-news-indexes/constants.d.ts.map +0 -1
  281. package/dist/scripts/generate-news-indexes/constants.js +0 -308
  282. package/dist/scripts/generate-news-indexes/constants.js.map +0 -1
  283. package/dist/scripts/generate-news-indexes/helpers.d.ts +0 -73
  284. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +0 -1
  285. package/dist/scripts/generate-news-indexes/helpers.js +0 -352
  286. package/dist/scripts/generate-news-indexes/helpers.js.map +0 -1
  287. package/dist/scripts/generate-news-indexes/index.d.ts +0 -20
  288. package/dist/scripts/generate-news-indexes/index.d.ts.map +0 -1
  289. package/dist/scripts/generate-news-indexes/index.js +0 -75
  290. package/dist/scripts/generate-news-indexes/index.js.map +0 -1
  291. package/dist/scripts/generate-news-indexes/template.d.ts +0 -25
  292. package/dist/scripts/generate-news-indexes/template.d.ts.map +0 -1
  293. package/dist/scripts/generate-news-indexes/template.js +0 -644
  294. package/dist/scripts/generate-news-indexes/template.js.map +0 -1
  295. package/dist/scripts/generate-news-indexes/types.d.ts +0 -96
  296. package/dist/scripts/generate-news-indexes/types.d.ts.map +0 -1
  297. package/dist/scripts/generate-news-indexes/types.js +0 -9
  298. package/dist/scripts/generate-news-indexes/types.js.map +0 -1
  299. package/dist/scripts/generate-news-indexes.d.ts +0 -20
  300. package/dist/scripts/generate-news-indexes.d.ts.map +0 -1
  301. package/dist/scripts/generate-news-indexes.js +0 -19
  302. package/dist/scripts/generate-news-indexes.js.map +0 -1
  303. package/dist/scripts/generate-rss.d.ts +0 -48
  304. package/dist/scripts/generate-rss.d.ts.map +0 -1
  305. package/dist/scripts/generate-rss.js +0 -299
  306. package/dist/scripts/generate-rss.js.map +0 -1
  307. package/dist/scripts/generate-sitemap-html.d.ts +0 -79
  308. package/dist/scripts/generate-sitemap-html.d.ts.map +0 -1
  309. package/dist/scripts/generate-sitemap-html.js +0 -878
  310. package/dist/scripts/generate-sitemap-html.js.map +0 -1
  311. package/dist/scripts/generate-sitemap.d.ts +0 -23
  312. package/dist/scripts/generate-sitemap.d.ts.map +0 -1
  313. package/dist/scripts/generate-sitemap.js +0 -476
  314. package/dist/scripts/generate-sitemap.js.map +0 -1
  315. package/dist/scripts/generate-types-from-cia-schemas.d.ts +0 -176
  316. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +0 -1
  317. package/dist/scripts/generate-types-from-cia-schemas.js +0 -318
  318. package/dist/scripts/generate-types-from-cia-schemas.js.map +0 -1
  319. package/dist/scripts/government-role-validator.d.ts +0 -65
  320. package/dist/scripts/government-role-validator.d.ts.map +0 -1
  321. package/dist/scripts/government-role-validator.js +0 -217
  322. package/dist/scripts/government-role-validator.js.map +0 -1
  323. package/dist/scripts/html-utils.d.ts +0 -17
  324. package/dist/scripts/html-utils.d.ts.map +0 -1
  325. package/dist/scripts/html-utils.js +0 -29
  326. package/dist/scripts/html-utils.js.map +0 -1
  327. package/dist/scripts/load-cia-stats.d.ts +0 -89
  328. package/dist/scripts/load-cia-stats.d.ts.map +0 -1
  329. package/dist/scripts/load-cia-stats.js +0 -400
  330. package/dist/scripts/load-cia-stats.js.map +0 -1
  331. package/dist/scripts/mcp-client/client.d.ts +0 -73
  332. package/dist/scripts/mcp-client/client.d.ts.map +0 -1
  333. package/dist/scripts/mcp-client/client.js +0 -526
  334. package/dist/scripts/mcp-client/client.js.map +0 -1
  335. package/dist/scripts/mcp-client/document-types.d.ts +0 -23
  336. package/dist/scripts/mcp-client/document-types.d.ts.map +0 -1
  337. package/dist/scripts/mcp-client/document-types.js +0 -62
  338. package/dist/scripts/mcp-client/document-types.js.map +0 -1
  339. package/dist/scripts/mcp-client/index.d.ts +0 -34
  340. package/dist/scripts/mcp-client/index.d.ts.map +0 -1
  341. package/dist/scripts/mcp-client/index.js +0 -67
  342. package/dist/scripts/mcp-client/index.js.map +0 -1
  343. package/dist/scripts/mcp-client/transport.d.ts +0 -32
  344. package/dist/scripts/mcp-client/transport.d.ts.map +0 -1
  345. package/dist/scripts/mcp-client/transport.js +0 -102
  346. package/dist/scripts/mcp-client/transport.js.map +0 -1
  347. package/dist/scripts/mcp-client.d.ts +0 -18
  348. package/dist/scripts/mcp-client.d.ts.map +0 -1
  349. package/dist/scripts/mcp-client.js +0 -18
  350. package/dist/scripts/mcp-client.js.map +0 -1
  351. package/dist/scripts/mcp-query-cli.d.ts +0 -25
  352. package/dist/scripts/mcp-query-cli.d.ts.map +0 -1
  353. package/dist/scripts/mcp-query-cli.js +0 -66
  354. package/dist/scripts/mcp-query-cli.js.map +0 -1
  355. package/dist/scripts/news-types/breaking-news.d.ts +0 -178
  356. package/dist/scripts/news-types/breaking-news.d.ts.map +0 -1
  357. package/dist/scripts/news-types/breaking-news.js +0 -432
  358. package/dist/scripts/news-types/breaking-news.js.map +0 -1
  359. package/dist/scripts/news-types/committee-reports.d.ts +0 -212
  360. package/dist/scripts/news-types/committee-reports.d.ts.map +0 -1
  361. package/dist/scripts/news-types/committee-reports.js +0 -404
  362. package/dist/scripts/news-types/committee-reports.js.map +0 -1
  363. package/dist/scripts/news-types/month-ahead.d.ts +0 -71
  364. package/dist/scripts/news-types/month-ahead.d.ts.map +0 -1
  365. package/dist/scripts/news-types/month-ahead.js +0 -392
  366. package/dist/scripts/news-types/month-ahead.js.map +0 -1
  367. package/dist/scripts/news-types/monthly-review.d.ts +0 -61
  368. package/dist/scripts/news-types/monthly-review.d.ts.map +0 -1
  369. package/dist/scripts/news-types/monthly-review.js +0 -417
  370. package/dist/scripts/news-types/monthly-review.js.map +0 -1
  371. package/dist/scripts/news-types/motions.d.ts +0 -214
  372. package/dist/scripts/news-types/motions.d.ts.map +0 -1
  373. package/dist/scripts/news-types/motions.js +0 -447
  374. package/dist/scripts/news-types/motions.js.map +0 -1
  375. package/dist/scripts/news-types/propositions.d.ts +0 -204
  376. package/dist/scripts/news-types/propositions.d.ts.map +0 -1
  377. package/dist/scripts/news-types/propositions.js +0 -401
  378. package/dist/scripts/news-types/propositions.js.map +0 -1
  379. package/dist/scripts/news-types/week-ahead.d.ts +0 -231
  380. package/dist/scripts/news-types/week-ahead.d.ts.map +0 -1
  381. package/dist/scripts/news-types/week-ahead.js +0 -441
  382. package/dist/scripts/news-types/week-ahead.js.map +0 -1
  383. package/dist/scripts/news-types/weekly-review/analysis.d.ts +0 -47
  384. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +0 -1
  385. package/dist/scripts/news-types/weekly-review/analysis.js +0 -276
  386. package/dist/scripts/news-types/weekly-review/analysis.js.map +0 -1
  387. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +0 -51
  388. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +0 -1
  389. package/dist/scripts/news-types/weekly-review/data-loader.js +0 -298
  390. package/dist/scripts/news-types/weekly-review/data-loader.js.map +0 -1
  391. package/dist/scripts/news-types/weekly-review/generator.d.ts +0 -18
  392. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +0 -1
  393. package/dist/scripts/news-types/weekly-review/generator.js +0 -284
  394. package/dist/scripts/news-types/weekly-review/generator.js.map +0 -1
  395. package/dist/scripts/news-types/weekly-review/index.d.ts +0 -20
  396. package/dist/scripts/news-types/weekly-review/index.d.ts.map +0 -1
  397. package/dist/scripts/news-types/weekly-review/index.js +0 -23
  398. package/dist/scripts/news-types/weekly-review/index.js.map +0 -1
  399. package/dist/scripts/news-types/weekly-review/types.d.ts +0 -72
  400. package/dist/scripts/news-types/weekly-review/types.d.ts.map +0 -1
  401. package/dist/scripts/news-types/weekly-review/types.js +0 -20
  402. package/dist/scripts/news-types/weekly-review/types.js.map +0 -1
  403. package/dist/scripts/news-types/weekly-review/validation.d.ts +0 -10
  404. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +0 -1
  405. package/dist/scripts/news-types/weekly-review/validation.js +0 -95
  406. package/dist/scripts/news-types/weekly-review/validation.js.map +0 -1
  407. package/dist/scripts/news-types/weekly-review.d.ts +0 -15
  408. package/dist/scripts/news-types/weekly-review.d.ts.map +0 -1
  409. package/dist/scripts/news-types/weekly-review.js +0 -14
  410. package/dist/scripts/news-types/weekly-review.js.map +0 -1
  411. package/dist/scripts/party-variants.d.ts +0 -23
  412. package/dist/scripts/party-variants.d.ts.map +0 -1
  413. package/dist/scripts/party-variants.js +0 -50
  414. package/dist/scripts/party-variants.js.map +0 -1
  415. package/dist/scripts/pipeline/index.d.ts +0 -19
  416. package/dist/scripts/pipeline/index.d.ts.map +0 -1
  417. package/dist/scripts/pipeline/index.js +0 -17
  418. package/dist/scripts/pipeline/index.js.map +0 -1
  419. package/dist/scripts/pipeline/orchestrator.d.ts +0 -56
  420. package/dist/scripts/pipeline/orchestrator.d.ts.map +0 -1
  421. package/dist/scripts/pipeline/orchestrator.js +0 -147
  422. package/dist/scripts/pipeline/orchestrator.js.map +0 -1
  423. package/dist/scripts/pipeline/types.d.ts +0 -117
  424. package/dist/scripts/pipeline/types.d.ts.map +0 -1
  425. package/dist/scripts/pipeline/types.js +0 -13
  426. package/dist/scripts/pipeline/types.js.map +0 -1
  427. package/dist/scripts/pipeline/validation.d.ts +0 -66
  428. package/dist/scripts/pipeline/validation.d.ts.map +0 -1
  429. package/dist/scripts/pipeline/validation.js +0 -129
  430. package/dist/scripts/pipeline/validation.js.map +0 -1
  431. package/dist/scripts/populate-analysis-data.d.ts +0 -41
  432. package/dist/scripts/populate-analysis-data.d.ts.map +0 -1
  433. package/dist/scripts/populate-analysis-data.js +0 -255
  434. package/dist/scripts/populate-analysis-data.js.map +0 -1
  435. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +0 -80
  436. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +0 -1
  437. package/dist/scripts/pre-article-analysis/data-downloader.js +0 -230
  438. package/dist/scripts/pre-article-analysis/data-downloader.js.map +0 -1
  439. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +0 -141
  440. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +0 -1
  441. package/dist/scripts/pre-article-analysis/data-persistence.js +0 -345
  442. package/dist/scripts/pre-article-analysis/data-persistence.js.map +0 -1
  443. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +0 -158
  444. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +0 -1
  445. package/dist/scripts/pre-article-analysis/markdown-serializer.js +0 -648
  446. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +0 -1
  447. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +0 -58
  448. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +0 -1
  449. package/dist/scripts/pre-article-analysis/pdf-converter.js +0 -142
  450. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +0 -1
  451. package/dist/scripts/pre-article-analysis.d.ts +0 -42
  452. package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
  453. package/dist/scripts/pre-article-analysis.js +0 -642
  454. package/dist/scripts/pre-article-analysis.js.map +0 -1
  455. package/dist/scripts/scb-client.d.ts +0 -104
  456. package/dist/scripts/scb-client.d.ts.map +0 -1
  457. package/dist/scripts/scb-client.js +0 -286
  458. package/dist/scripts/scb-client.js.map +0 -1
  459. package/dist/scripts/scb-context.d.ts +0 -88
  460. package/dist/scripts/scb-context.d.ts.map +0 -1
  461. package/dist/scripts/scb-context.js +0 -307
  462. package/dist/scripts/scb-context.js.map +0 -1
  463. package/dist/scripts/shared/version.d.ts +0 -9
  464. package/dist/scripts/shared/version.d.ts.map +0 -1
  465. package/dist/scripts/shared/version.js +0 -28
  466. package/dist/scripts/shared/version.js.map +0 -1
  467. package/dist/scripts/statistical-claims-detector.d.ts +0 -119
  468. package/dist/scripts/statistical-claims-detector.d.ts.map +0 -1
  469. package/dist/scripts/statistical-claims-detector.js +0 -391
  470. package/dist/scripts/statistical-claims-detector.js.map +0 -1
  471. package/dist/scripts/sync-cia-schemas.d.ts +0 -52
  472. package/dist/scripts/sync-cia-schemas.d.ts.map +0 -1
  473. package/dist/scripts/sync-cia-schemas.js +0 -195
  474. package/dist/scripts/sync-cia-schemas.js.map +0 -1
  475. package/dist/scripts/translation-dictionary.d.ts +0 -45
  476. package/dist/scripts/translation-dictionary.d.ts.map +0 -1
  477. package/dist/scripts/translation-dictionary.js +0 -3642
  478. package/dist/scripts/translation-dictionary.js.map +0 -1
  479. package/dist/scripts/types/article.d.ts +0 -392
  480. package/dist/scripts/types/article.d.ts.map +0 -1
  481. package/dist/scripts/types/article.js +0 -6
  482. package/dist/scripts/types/article.js.map +0 -1
  483. package/dist/scripts/types/content.d.ts +0 -167
  484. package/dist/scripts/types/content.d.ts.map +0 -1
  485. package/dist/scripts/types/content.js +0 -6
  486. package/dist/scripts/types/content.js.map +0 -1
  487. package/dist/scripts/types/editorial.d.ts +0 -17
  488. package/dist/scripts/types/editorial.d.ts.map +0 -1
  489. package/dist/scripts/types/editorial.js +0 -6
  490. package/dist/scripts/types/editorial.js.map +0 -1
  491. package/dist/scripts/types/language.d.ts +0 -7
  492. package/dist/scripts/types/language.d.ts.map +0 -1
  493. package/dist/scripts/types/language.js +0 -6
  494. package/dist/scripts/types/language.js.map +0 -1
  495. package/dist/scripts/types/mcp.d.ts +0 -117
  496. package/dist/scripts/types/mcp.d.ts.map +0 -1
  497. package/dist/scripts/types/mcp.js +0 -6
  498. package/dist/scripts/types/mcp.js.map +0 -1
  499. package/dist/scripts/types/party.d.ts +0 -9
  500. package/dist/scripts/types/party.d.ts.map +0 -1
  501. package/dist/scripts/types/party.js +0 -6
  502. package/dist/scripts/types/party.js.map +0 -1
  503. package/dist/scripts/types/validation.d.ts +0 -136
  504. package/dist/scripts/types/validation.d.ts.map +0 -1
  505. package/dist/scripts/types/validation.js +0 -6
  506. package/dist/scripts/types/validation.js.map +0 -1
  507. package/dist/scripts/types/workflow.d.ts +0 -78
  508. package/dist/scripts/types/workflow.d.ts.map +0 -1
  509. package/dist/scripts/types/workflow.js +0 -6
  510. package/dist/scripts/types/workflow.js.map +0 -1
  511. package/dist/scripts/update-stats-from-cia.d.ts +0 -44
  512. package/dist/scripts/update-stats-from-cia.d.ts.map +0 -1
  513. package/dist/scripts/update-stats-from-cia.js +0 -310
  514. package/dist/scripts/update-stats-from-cia.js.map +0 -1
  515. package/dist/scripts/validate-against-cia-schemas.d.ts +0 -126
  516. package/dist/scripts/validate-against-cia-schemas.d.ts.map +0 -1
  517. package/dist/scripts/validate-against-cia-schemas.js +0 -299
  518. package/dist/scripts/validate-against-cia-schemas.js.map +0 -1
  519. package/dist/scripts/validate-cross-references.d.ts +0 -49
  520. package/dist/scripts/validate-cross-references.d.ts.map +0 -1
  521. package/dist/scripts/validate-cross-references.js +0 -183
  522. package/dist/scripts/validate-cross-references.js.map +0 -1
  523. package/dist/scripts/validate-file-ownership.d.ts +0 -68
  524. package/dist/scripts/validate-file-ownership.d.ts.map +0 -1
  525. package/dist/scripts/validate-file-ownership.js +0 -135
  526. package/dist/scripts/validate-file-ownership.js.map +0 -1
  527. package/dist/scripts/validate-news-translations.d.ts +0 -27
  528. package/dist/scripts/validate-news-translations.d.ts.map +0 -1
  529. package/dist/scripts/validate-news-translations.js +0 -258
  530. package/dist/scripts/validate-news-translations.js.map +0 -1
  531. package/dist/scripts/validate-translations.d.ts +0 -162
  532. package/dist/scripts/validate-translations.d.ts.map +0 -1
  533. package/dist/scripts/validate-translations.js +0 -378
  534. package/dist/scripts/validate-translations.js.map +0 -1
  535. package/dist/scripts/workflow-state-coordinator.d.ts +0 -354
  536. package/dist/scripts/workflow-state-coordinator.d.ts.map +0 -1
  537. package/dist/scripts/workflow-state-coordinator.js +0 -876
  538. package/dist/scripts/workflow-state-coordinator.js.map +0 -1
  539. package/dist/scripts/world-bank-client.d.ts +0 -122
  540. package/dist/scripts/world-bank-client.d.ts.map +0 -1
  541. package/dist/scripts/world-bank-client.js +0 -192
  542. package/dist/scripts/world-bank-client.js.map +0 -1
  543. package/dist/scripts/world-bank-context.d.ts +0 -88
  544. package/dist/scripts/world-bank-context.d.ts.map +0 -1
  545. package/dist/scripts/world-bank-context.js +0 -331
  546. package/dist/scripts/world-bank-context.js.map +0 -1
@@ -1,135 +0,0 @@
1
- /**
2
- * File Ownership Validator for News Workflow Conflict Prevention
3
- *
4
- * Enforces a strict file-ownership contract between content and translation workflows:
5
- * - Content workflows (news-committee-reports, news-propositions, etc.) own EN/SV files
6
- * - Translation workflow (news-translate) owns all other language files (DA/NO/FI/DE/FR/ES/NL/AR/HE/JA/KO/ZH)
7
- *
8
- * This prevents merge conflicts when concurrent workflows touch the same date's article files.
9
- *
10
- * @author Hack23 AB
11
- * @license Apache-2.0
12
- */
13
- import { execSync } from 'node:child_process';
14
- import { resolve } from 'node:path';
15
- import { fileURLToPath } from 'node:url';
16
- /** Languages owned by content generation workflows */
17
- export const CONTENT_LANGS = ['en', 'sv'];
18
- /** Languages owned by the translation workflow */
19
- export const TRANSLATION_LANGS = [
20
- 'da', 'no', 'fi', 'de', 'fr', 'es', 'nl', 'ar', 'he', 'ja', 'ko', 'zh',
21
- ];
22
- /**
23
- * Extract the language code from a news article filename.
24
- * Expected pattern: `news/YYYY-MM-DD-slug-{lang}.html`
25
- *
26
- * @param filepath - The file path to extract the language from
27
- * @returns The two-letter language code, or null if no match
28
- */
29
- export function extractLangFromPath(filepath) {
30
- const match = filepath.match(/-([a-z]{2})\.html$/);
31
- return match?.[1] ?? null;
32
- }
33
- /**
34
- * Check whether a file belongs to the given workflow category.
35
- *
36
- * @param filepath - The file path to check
37
- * @param category - The workflow category ('content' or 'translation')
38
- * @returns true if the file is allowed for the given category
39
- */
40
- export function isFileOwnedByCategory(filepath, category) {
41
- if (!filepath.startsWith('news/') || !filepath.endsWith('.html')) {
42
- // Non-news or non-HTML files are always allowed (metadata, indexes, etc.)
43
- return true;
44
- }
45
- const lang = extractLangFromPath(filepath);
46
- if (!lang) {
47
- // Files without a language suffix (e.g., news/index.html) are allowed for both
48
- return true;
49
- }
50
- const isContentLang = CONTENT_LANGS.includes(lang);
51
- const isTranslationLang = TRANSLATION_LANGS.includes(lang);
52
- return category === 'content' ? isContentLang : isTranslationLang;
53
- }
54
- /**
55
- * Validate that all pending files (staged + unstaged + untracked working-tree changes)
56
- * conform to the file-ownership contract for the given workflow category.
57
- *
58
- * Checks the union of:
59
- * - `git diff --cached --name-only` (staged)
60
- * - `git diff --name-only` (unstaged modifications)
61
- * - `git ls-files --others --exclude-standard` (untracked new files)
62
- *
63
- * This ensures violations are caught regardless of whether `git add` has been run.
64
- *
65
- * @param category - The workflow category ('content' or 'translation')
66
- * @returns Validation result with pass/fail status and any violations
67
- */
68
- export function validatePendingFileOwnership(category) {
69
- const stagedOutput = execSync('git diff --cached --name-only', {
70
- encoding: 'utf-8',
71
- }).trim();
72
- const unstagedOutput = execSync('git diff --name-only', {
73
- encoding: 'utf-8',
74
- }).trim();
75
- const untrackedOutput = execSync('git ls-files --others --exclude-standard', { encoding: 'utf-8' }).trim();
76
- const allFiles = new Set();
77
- if (stagedOutput) {
78
- for (const f of stagedOutput.split('\n'))
79
- if (f)
80
- allFiles.add(f);
81
- }
82
- if (unstagedOutput) {
83
- for (const f of unstagedOutput.split('\n'))
84
- if (f)
85
- allFiles.add(f);
86
- }
87
- if (untrackedOutput) {
88
- for (const f of untrackedOutput.split('\n'))
89
- if (f)
90
- allFiles.add(f);
91
- }
92
- if (allFiles.size === 0) {
93
- return { passed: true, violations: [], checkedCount: 0 };
94
- }
95
- return validateFileList([...allFiles], category);
96
- }
97
- /**
98
- * Validate a list of file paths against the ownership contract.
99
- * This is the pure-logic core, usable without git.
100
- *
101
- * @param files - Array of file paths to validate
102
- * @param category - The workflow category ('content' or 'translation')
103
- * @returns Validation result with pass/fail status and any violations
104
- */
105
- export function validateFileList(files, category) {
106
- const newsHtmlFiles = files.filter((f) => f.startsWith('news/') && f.endsWith('.html'));
107
- const violations = newsHtmlFiles.filter((f) => !isFileOwnedByCategory(f, category));
108
- return {
109
- passed: violations.length === 0,
110
- violations,
111
- checkedCount: newsHtmlFiles.length,
112
- };
113
- }
114
- /* istanbul ignore next -- CLI entry point */
115
- if (resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1] ?? '')) {
116
- const category = process.argv[2];
117
- if (!category || !['content', 'translation'].includes(category)) {
118
- console.error('Usage: npx tsx scripts/validate-file-ownership.ts <content|translation>\n' +
119
- ' Validates staged, unstaged, and untracked changes against the file-ownership contract.');
120
- process.exit(2);
121
- }
122
- const result = validatePendingFileOwnership(category);
123
- if (result.passed) {
124
- console.log(`✅ File ownership validation passed (${result.checkedCount} news files checked for '${category}' category)`);
125
- process.exit(0);
126
- }
127
- else {
128
- console.error(`❌ File ownership violation! The following files do not belong to the '${category}' workflow category:`);
129
- for (const v of result.violations) {
130
- console.error(` - ${v}`);
131
- }
132
- process.exit(1);
133
- }
134
- }
135
- //# sourceMappingURL=validate-file-ownership.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-file-ownership.js","sourceRoot":"","sources":["../../scripts/validate-file-ownership.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * @module Validation/TranslationQuality
3
- * @category Validation
4
- *
5
- * @title News Article Translation Completeness Validator
6
- *
7
- * @description
8
- * Validates that news articles published in non-Swedish languages are
9
- * fully translated, preventing partially-translated articles from publication.
10
- *
11
- * @author Hack23 AB (Multilingual Intelligence & Quality Assurance)
12
- * @license Apache-2.0
13
- * @version 2.0.0
14
- */
15
- /** BCP-47 validation error record */
16
- export interface BCP47Error {
17
- readonly field: string;
18
- readonly expected: string;
19
- readonly actual: string;
20
- }
21
- /**
22
- * Validate BCP-47 consistency within an article file.
23
- * Checks that `html[lang]`, `og:locale`, and JSON-LD `inLanguage` are
24
- * consistent with the expected values for the file's language suffix.
25
- */
26
- export declare function validateBCP47Consistency(filePath: string, fileLang: string): BCP47Error[];
27
- //# sourceMappingURL=validate-news-translations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-news-translations.d.ts","sourceRoot":"","sources":["../../scripts/validate-news-translations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAoEH,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAoBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CA2CzF"}
@@ -1,258 +0,0 @@
1
- /**
2
- * @module Validation/TranslationQuality
3
- * @category Validation
4
- *
5
- * @title News Article Translation Completeness Validator
6
- *
7
- * @description
8
- * Validates that news articles published in non-Swedish languages are
9
- * fully translated, preventing partially-translated articles from publication.
10
- *
11
- * @author Hack23 AB (Multilingual Intelligence & Quality Assurance)
12
- * @license Apache-2.0
13
- * @version 2.0.0
14
- */
15
- import { readFileSync, readdirSync, statSync } from 'fs';
16
- import { join, basename } from 'path';
17
- const colors = {
18
- reset: '\x1b[0m',
19
- green: '\x1b[32m',
20
- red: '\x1b[31m',
21
- yellow: '\x1b[33m',
22
- cyan: '\x1b[36m',
23
- bold: '\x1b[1m',
24
- };
25
- // Language codes to check (exclude Swedish)
26
- const NON_SWEDISH_LANGS = [
27
- 'en', 'da', 'no', 'fi', 'de', 'fr', 'es', 'nl', 'ar', 'he', 'ja', 'ko', 'zh',
28
- ];
29
- /**
30
- * Map from filename language suffix to the expected BCP-47 tag used in
31
- * `html[lang]`, `og:locale`, and JSON-LD `inLanguage`.
32
- *
33
- * Norwegian files use the filename suffix 'no' but must be advertised as 'nb'.
34
- */
35
- const BCP47_TAG = {
36
- en: 'en', sv: 'sv', da: 'da', no: 'nb', fi: 'fi',
37
- de: 'de', fr: 'fr', es: 'es', nl: 'nl',
38
- ar: 'ar', he: 'he', ja: 'ja', ko: 'ko', zh: 'zh',
39
- };
40
- const OG_LOCALE_EXPECTED = {
41
- en: 'en_US', sv: 'sv_SE', da: 'da_DK', no: 'nb_NO', fi: 'fi_FI',
42
- de: 'de_DE', fr: 'fr_FR', es: 'es_ES', nl: 'nl_NL',
43
- ar: 'ar_SA', he: 'he_IL', ja: 'ja_JP', ko: 'ko_KR', zh: 'zh_CN',
44
- };
45
- /**
46
- * Validate BCP-47 consistency within an article file.
47
- * Checks that `html[lang]`, `og:locale`, and JSON-LD `inLanguage` are
48
- * consistent with the expected values for the file's language suffix.
49
- */
50
- export function validateBCP47Consistency(filePath, fileLang) {
51
- const errors = [];
52
- const content = readFileSync(filePath, 'utf-8');
53
- const expectedTag = BCP47_TAG[fileLang] ?? fileLang;
54
- const expectedLocale = OG_LOCALE_EXPECTED[fileLang];
55
- // Check html lang attribute
56
- const htmlLangMatch = content.match(/<html\s[^>]*lang="([^"]+)"/);
57
- if (htmlLangMatch) {
58
- const actual = htmlLangMatch[1] ?? '';
59
- if (actual !== expectedTag) {
60
- errors.push({ field: 'html[lang]', expected: expectedTag, actual });
61
- }
62
- }
63
- // Check og:locale
64
- if (expectedLocale) {
65
- const ogMatch = content.match(/property="og:locale"\s+content="([^"]+)"/);
66
- if (ogMatch) {
67
- const actual = ogMatch[1] ?? '';
68
- if (actual !== expectedLocale) {
69
- errors.push({ field: 'og:locale', expected: expectedLocale, actual });
70
- }
71
- }
72
- }
73
- // Check JSON-LD inLanguage
74
- const inLangMatch = content.match(/"inLanguage":\s*"([^"]+)"/);
75
- if (inLangMatch) {
76
- const actual = inLangMatch[1] ?? '';
77
- if (actual !== expectedTag) {
78
- errors.push({ field: 'inLanguage', expected: expectedTag, actual });
79
- }
80
- }
81
- // Check dir="rtl" for RTL languages
82
- if (fileLang === 'ar' || fileLang === 'he') {
83
- if (!content.includes('dir="rtl"')) {
84
- errors.push({ field: 'dir', expected: 'rtl', actual: 'missing' });
85
- }
86
- }
87
- return errors;
88
- }
89
- // ---------------------------------------------------------------------------
90
- // Functions
91
- // ---------------------------------------------------------------------------
92
- /**
93
- * Check if a file contains untranslated Swedish content markers.
94
- */
95
- function checkFileForUntranslatedContent(filepath) {
96
- try {
97
- const content = readFileSync(filepath, 'utf-8');
98
- const markers = content.match(/data-translate="true"/g);
99
- if (!markers) {
100
- return { passed: true };
101
- }
102
- // Extract samples of untranslated content
103
- const samples = [];
104
- const sampleRegex = /<span data-translate="true"[^>]*>([^<]{0,80})/g;
105
- let match;
106
- let count = 0;
107
- while ((match = sampleRegex.exec(content)) !== null && count < 3) {
108
- const raw = match[1] ?? '';
109
- const text = raw.length >= 80 ? raw + '...' : raw;
110
- samples.push(text);
111
- count++;
112
- }
113
- return {
114
- passed: false,
115
- markerCount: markers.length,
116
- samples,
117
- };
118
- }
119
- catch (error) {
120
- return {
121
- error: error.message,
122
- };
123
- }
124
- }
125
- /**
126
- * Get all HTML files in a directory (recursive).
127
- */
128
- function getAllHtmlFiles(dir) {
129
- const files = [];
130
- try {
131
- const items = readdirSync(dir);
132
- for (const item of items) {
133
- const fullPath = join(dir, item);
134
- const stat = statSync(fullPath);
135
- if (stat.isDirectory()) {
136
- files.push(...getAllHtmlFiles(fullPath));
137
- }
138
- else if (item.endsWith('.html')) {
139
- files.push(fullPath);
140
- }
141
- }
142
- }
143
- catch (error) {
144
- console.error(`${colors.red}Error reading directory ${dir}: ${error.message}${colors.reset}`);
145
- }
146
- return files;
147
- }
148
- /**
149
- * Determine language code from filename.
150
- */
151
- function getLanguageCode(filename) {
152
- const match = filename.match(/-([a-z]{2})\.html$/);
153
- return match ? match[1] ?? null : null;
154
- }
155
- /**
156
- * Main validation function.
157
- */
158
- function validateNewsTranslations(directory = 'news') {
159
- console.log(`${colors.bold}${colors.cyan}===========================================`);
160
- console.log(`News Article Translation Validation`);
161
- console.log(`===========================================${colors.reset}\n`);
162
- console.log(`Checking directory: ${directory}\n`);
163
- const htmlFiles = getAllHtmlFiles(directory);
164
- const nonSwedishFiles = htmlFiles.filter((file) => {
165
- const lang = getLanguageCode(basename(file));
166
- return lang !== null && NON_SWEDISH_LANGS.includes(lang);
167
- });
168
- console.log(`Found ${nonSwedishFiles.length} non-Swedish article files to check\n`);
169
- let totalPassed = 0;
170
- let totalFailed = 0;
171
- let totalErrors = 0;
172
- let totalBCP47Errors = 0;
173
- const failedFiles = [];
174
- for (const filepath of nonSwedishFiles) {
175
- const filename = basename(filepath);
176
- const lang = getLanguageCode(filename);
177
- const result = checkFileForUntranslatedContent(filepath);
178
- // BCP-47 consistency check
179
- const bcp47Errors = lang ? validateBCP47Consistency(filepath, lang) : [];
180
- if (bcp47Errors.length > 0) {
181
- totalBCP47Errors += bcp47Errors.length;
182
- console.log(`${colors.yellow}⚠ BCP-47: ${filename}${colors.reset}`);
183
- for (const err of bcp47Errors) {
184
- console.log(` ${colors.yellow}${err.field}: expected "${err.expected}", got "${err.actual}"${colors.reset}`);
185
- }
186
- }
187
- if (result.error !== undefined) {
188
- console.log(`${colors.red}ERROR: ${filename}${colors.reset}`);
189
- console.log(` ${colors.red}${result.error}${colors.reset}\n`);
190
- totalErrors++;
191
- }
192
- else if (result.passed) {
193
- console.log(`${colors.green}✓ ${filename} (${(lang ?? '').toUpperCase()})${colors.reset}`);
194
- totalPassed++;
195
- }
196
- else {
197
- console.log(`${colors.red}✗ ${filename} (${(lang ?? '').toUpperCase()})${colors.reset}`);
198
- console.log(` ${colors.red}Found ${result.markerCount} untranslated marker(s)${colors.reset}`);
199
- if (result.samples.length > 0) {
200
- console.log(` ${colors.yellow}Samples:${colors.reset}`);
201
- result.samples.forEach((sample, i) => {
202
- console.log(` ${i + 1}. "${sample}"`);
203
- });
204
- }
205
- console.log('');
206
- failedFiles.push({
207
- filename,
208
- lang: lang ?? '',
209
- count: result.markerCount,
210
- samples: result.samples,
211
- });
212
- totalFailed++;
213
- }
214
- }
215
- // Summary
216
- console.log(`\n${colors.bold}${colors.cyan}===========================================`);
217
- console.log(`Summary`);
218
- console.log(`===========================================${colors.reset}\n`);
219
- console.log(`Total articles checked: ${nonSwedishFiles.length}`);
220
- console.log(`${colors.green}✓ Fully translated: ${totalPassed}${colors.reset}`);
221
- console.log(`${colors.red}✗ Contains untranslated content: ${totalFailed}${colors.reset}`);
222
- if (totalErrors > 0) {
223
- console.log(`${colors.red}✗ Errors: ${totalErrors}${colors.reset}`);
224
- }
225
- if (totalBCP47Errors > 0) {
226
- console.log(`${colors.red}✗ BCP-47 inconsistencies: ${totalBCP47Errors}${colors.reset}`);
227
- }
228
- if (totalFailed > 0 || totalBCP47Errors > 0) {
229
- console.log(`\n${colors.bold}${colors.red}❌ VALIDATION FAILED${colors.reset}`);
230
- if (failedFiles.length > 0) {
231
- console.log(`\nFiles needing translation:\n`);
232
- failedFiles.forEach(({ filename, count }) => {
233
- console.log(` ${colors.red}✗${colors.reset} ${filename} - ${count} markers`);
234
- });
235
- console.log(`\n${colors.yellow}Action Required:${colors.reset}`);
236
- console.log(`1. Open each file listed above`);
237
- console.log(`2. Find all <span data-translate="true" lang="sv">Swedish text</span> elements`);
238
- console.log(`3. Translate the Swedish text to the article's target language`);
239
- console.log(`4. Replace the span with plain translated text`);
240
- console.log(`5. Consult TRANSLATION_GUIDE.md for terminology\n`);
241
- }
242
- if (totalBCP47Errors > 0) {
243
- console.log(`\n${colors.yellow}BCP-47 Action Required:${colors.reset}`);
244
- console.log(`Ensure html[lang], og:locale, and inLanguage are consistent per article.`);
245
- console.log(`Norwegian articles must use lang="nb", og:locale="nb_NO", inLanguage="nb".\n`);
246
- }
247
- return 1;
248
- }
249
- else {
250
- console.log(`\n${colors.bold}${colors.green}✅ ALL ARTICLES FULLY TRANSLATED${colors.reset}\n`);
251
- return 0;
252
- }
253
- }
254
- // Run validation
255
- const directory = process.argv[2] || 'news';
256
- const exitCode = validateNewsTranslations(directory);
257
- process.exit(exitCode);
258
- //# sourceMappingURL=validate-news-translations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-news-translations.js","sourceRoot":"","sources":["../../scripts/validate-news-translations.ts"],"names":[],"mappings":"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"}
@@ -1,162 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * @module Validation/LanguageMetadata
4
- * @category Validation
5
- *
6
- * @title Homepage Language File Validator - SEO & Internationalization Gate
7
- *
8
- * @description
9
- * **INTELLIGENCE OPERATIVE PERSPECTIVE**
10
- *
11
- * This validator ensures the homepage and main content pages maintain proper
12
- * language metadata across all 14 supported language editions. While appearing
13
- * as a technical SEO task, language validation serves critical intelligence
14
- * functions: ensuring international readers can discover content in their
15
- * language, preventing search engine deindexing, and maintaining consistent
16
- * information architecture across the multilingual platform.
17
- *
18
- * **METADATA VALIDATION FRAMEWORK:**
19
- * The validator checks seven critical metadata elements for each language:
20
- *
21
- * 1. **HTML lang Attribute Correctness**
22
- * - Validates lang="xx" matches ISO 639-1 language codes
23
- * - Detects mismatches (e.g., Swedish content with lang="en")
24
- * - Critical for: Screen readers, search engines, browser font selection
25
- * Intelligence impact: Accessibility for visually-impaired international readers
26
- *
27
- * 2. **dir="rtl" for Right-to-Left Languages**
28
- * - Validates Arabic (AR) and Hebrew (HE) have dir="rtl" attribute
29
- * - Detects LTR incorrectly applied to RTL content
30
- * - Critical for: Text layout, number display, punctuation handling
31
- * Intelligence impact: Readability for Middle Eastern audience
32
- *
33
- * 3. **Title Tag Presence & Uniqueness**
34
- * - Ensures <title> tag exists and is language-appropriate
35
- * - Detects duplicate titles across language versions
36
- * - Critical for: Browser tab display, search engine indexing
37
- * Intelligence impact: Click-through rates from search results
38
- *
39
- * 4. **Meta Description Presence**
40
- * - Validates meta description tag for SEO preview
41
- * - Detects missing or placeholder descriptions
42
- * - Critical for: Google snippet display, CTR optimization
43
- * Intelligence impact: Search engine visibility for each language
44
- *
45
- * 5. **Canonical URL Correctness**
46
- * - Ensures canonical URL points to correct language version
47
- * - Detects broken or missing canonical tags
48
- * - Critical for: Preventing search engine penalization
49
- * Intelligence impact: Prevents duplicate content SEO issues
50
- *
51
- * 6. **Hreflang Tag Completeness**
52
- * - Validates presence of hreflang tags for all language versions
53
- * - Checks all target languages are represented
54
- * - Critical for: Search engine language targeting
55
- * Intelligence impact: Users find correct language version
56
- *
57
- * 7. **Open Graph Protocol for Social Media**
58
- * - Ensures og:locale matches language code
59
- * - Validates og:title and og:description presence
60
- * - Critical for: Social media preview appearance
61
- * Intelligence impact: Engagement rates when articles shared
62
- *
63
- * 8. **Schema.org Structured Data**
64
- * - Validates JSON-LD for news articles and organizations
65
- * - Ensures @language property matches content language
66
- * - Critical for: Rich snippets, knowledge graph integration
67
- * Intelligence impact: Enhanced search visibility and credibility
68
- *
69
- * **LANGUAGE CONFIGURATIONS (14 Total):**
70
- * - EN: English (Primary international language)
71
- * - SV: Swedish (Source/development language)
72
- * - DA: Danish (Nordic coverage)
73
- * - NO: Norwegian (Nordic coverage)
74
- * - FI: Finnish (Nordic coverage)
75
- * - DE: German (European coverage)
76
- * - FR: French (European coverage)
77
- * - ES: Spanish (European coverage)
78
- * - NL: Dutch (European coverage)
79
- * - AR: Arabic (Middle Eastern coverage, RTL)
80
- * - HE: Hebrew (Middle Eastern coverage, RTL)
81
- * - JA: Japanese (Asian coverage, special encoding)
82
- * - KO: Korean (Asian coverage, special encoding)
83
- * - ZH: Chinese Simplified (Asian coverage, special encoding)
84
- *
85
- * **VALIDATION ALGORITHM:**
86
- * 1. Load each language version HTML file
87
- * 2. Parse metadata fields (lang, dir, title, meta, canonical, etc.)
88
- * 3. Validate against language configuration rules
89
- * 4. Cross-validate hreflang consistency across all versions
90
- * 5. Report validation results with specific errors
91
- * 6. Exit code 0 if all valid, 1 if any failures
92
- *
93
- * **OPERATIONAL INTEGRATION:**
94
- * - Pre-deployment CI/CD validation (blocks bad metadata)
95
- * - Automated homepage generation pipeline
96
- * - Monthly SEO audit to detect drift
97
- * - Search console monitoring for indexing issues
98
- *
99
- * **SEARCH ENGINE OPTIMIZATION IMPACT:**
100
- * - Proper metadata prevents Google search penalties
101
- * - Hreflang tags direct users to correct language version
102
- * - Canonical tags prevent duplicate content issues
103
- * - Structured data improves SERP visibility
104
- *
105
- * **ACCESSIBILITY COMPLIANCE:**
106
- * - lang attribute critical for screen reader language detection
107
- * - dir="rtl" essential for RTL language navigation
108
- * - Meta descriptions describe page purpose for users
109
- * - Structured data supports assistive technology
110
- *
111
- * **KNOWN LIMITATIONS:**
112
- * - Does not validate hreflang URLs correctness (only counts tags)
113
- * - Does not verify that hreflang URLs actually exist or are reachable
114
- * - Does not check translation quality of meta descriptions
115
- * - Does not validate Open Graph image URLs
116
- *
117
- * **PERFORMANCE:**
118
- * - File read + parse: ~5ms per language
119
- * - Full validation: ~70ms total (14 languages)
120
- * - Memory usage: Minimal (streaming parser)
121
- *
122
- * **GDPR COMPLIANCE:**
123
- * - No personal data processing
124
- * - Meta description validation supports transparency
125
- * - Language targeting respects user preferences
126
- * - Cookie consent metadata validation (future enhancement)
127
- *
128
- * @osint International Audience Intelligence
129
- * - Metadata quality determines international discoverability
130
- * - Hreflang analysis shows language version coverage
131
- * - SEO metrics track international audience reach
132
- * - Social media metadata tracks sharing patterns by language
133
- *
134
- * @risk Search Visibility Assurance
135
- * - Prevents Google search penalization
136
- * - Ensures users find correct language version
137
- * - Detects metadata corruption from attacks
138
- * - Monitors for accidental deindexing
139
- *
140
- * @gdpr Language & Regional Preferences
141
- * - Respects user language preferences
142
- * - Supports accessibility for all languages
143
- * - Transparent content metadata for users
144
- * - Supports language-based data handling policies
145
- *
146
- * @security Metadata Integrity
147
- * - Validates metadata isn't corrupted
148
- * - Prevents injection of malicious metadata
149
- * - Ensures schema.org data authenticity
150
- * - Detects unauthorized metadata changes
151
- *
152
- * @author Hack23 AB (Multilingual Platform & SEO)
153
- * @license Apache-2.0
154
- * @version 2.0.0
155
- * @since 2024-07-20
156
- * @see https://schema.org/ (Structured Data Standard)
157
- * @see https://www.w3.org/International/ (W3C Internationalization)
158
- * @see tests/validate-translations.test.js (Test Suite)
159
- * @see Issue #98 (Hreflang Implementation)
160
- */
161
- export {};
162
- //# sourceMappingURL=validate-translations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-translations.d.ts","sourceRoot":"","sources":["../../scripts/validate-translations.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8JG"}