riksdagsmonitor 0.8.23 → 0.8.24
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.
- package/README.md +53 -1
- package/dist/lib/dashboards/party-dashboard.js +2 -1
- package/dist/lib/dashboards/party-dashboard.js.map +1 -1
- package/dist/lib/dashboards/risk-dashboard.js +2 -1
- package/dist/lib/dashboards/risk-dashboard.js.map +1 -1
- package/dist/lib/shared/index.d.ts +0 -1
- package/dist/lib/shared/index.d.ts.map +1 -1
- package/dist/lib/shared/index.js +3 -1
- package/dist/lib/shared/index.js.map +1 -1
- package/dist/lib/shared/register-globals.d.ts +1 -1
- package/dist/lib/shared/register-globals.d.ts.map +1 -1
- package/dist/lib/shared/register-globals.js +7 -1
- package/dist/lib/shared/register-globals.js.map +1 -1
- package/package.json +53 -21
- package/dist/scripts/analysis-reader.d.ts +0 -241
- package/dist/scripts/analysis-reader.d.ts.map +0 -1
- package/dist/scripts/analysis-reader.js +0 -531
- package/dist/scripts/analysis-reader.js.map +0 -1
- package/dist/scripts/article-quality-enhancer.d.ts +0 -148
- package/dist/scripts/article-quality-enhancer.d.ts.map +0 -1
- package/dist/scripts/article-quality-enhancer.js +0 -430
- package/dist/scripts/article-quality-enhancer.js.map +0 -1
- package/dist/scripts/article-template/constants.d.ts +0 -104
- package/dist/scripts/article-template/constants.d.ts.map +0 -1
- package/dist/scripts/article-template/constants.js +0 -225
- package/dist/scripts/article-template/constants.js.map +0 -1
- package/dist/scripts/article-template/helpers.d.ts +0 -83
- package/dist/scripts/article-template/helpers.d.ts.map +0 -1
- package/dist/scripts/article-template/helpers.js +0 -236
- package/dist/scripts/article-template/helpers.js.map +0 -1
- package/dist/scripts/article-template/index.d.ts +0 -39
- package/dist/scripts/article-template/index.d.ts.map +0 -1
- package/dist/scripts/article-template/index.js +0 -37
- package/dist/scripts/article-template/index.js.map +0 -1
- package/dist/scripts/article-template/registry.d.ts +0 -64
- package/dist/scripts/article-template/registry.d.ts.map +0 -1
- package/dist/scripts/article-template/registry.js +0 -405
- package/dist/scripts/article-template/registry.js.map +0 -1
- package/dist/scripts/article-template/template.d.ts +0 -18
- package/dist/scripts/article-template/template.d.ts.map +0 -1
- package/dist/scripts/article-template/template.js +0 -359
- package/dist/scripts/article-template/template.js.map +0 -1
- package/dist/scripts/article-template/types.d.ts +0 -90
- package/dist/scripts/article-template/types.d.ts.map +0 -1
- package/dist/scripts/article-template/types.js +0 -96
- package/dist/scripts/article-template/types.js.map +0 -1
- package/dist/scripts/article-template.d.ts +0 -18
- package/dist/scripts/article-template.d.ts.map +0 -1
- package/dist/scripts/article-template.js +0 -18
- package/dist/scripts/article-template.js.map +0 -1
- package/dist/scripts/catalog-downloaded-data.d.ts +0 -66
- package/dist/scripts/catalog-downloaded-data.d.ts.map +0 -1
- package/dist/scripts/catalog-downloaded-data.js +0 -239
- package/dist/scripts/catalog-downloaded-data.js.map +0 -1
- package/dist/scripts/check-cia-schema-updates.d.ts +0 -186
- package/dist/scripts/check-cia-schema-updates.d.ts.map +0 -1
- package/dist/scripts/check-cia-schema-updates.js +0 -363
- package/dist/scripts/check-cia-schema-updates.js.map +0 -1
- package/dist/scripts/data-transformers/calendar.d.ts +0 -16
- package/dist/scripts/data-transformers/calendar.d.ts.map +0 -1
- package/dist/scripts/data-transformers/calendar.js +0 -137
- package/dist/scripts/data-transformers/calendar.js.map +0 -1
- package/dist/scripts/data-transformers/constants/committee-names.d.ts +0 -15
- package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/committee-names.js +0 -30
- package/dist/scripts/data-transformers/constants/committee-names.js.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +0 -11
- package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels-part1.js +0 -900
- package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +0 -11
- package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels-part2.js +0 -900
- package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels.d.ts +0 -13
- package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/content-labels.js +0 -18
- package/dist/scripts/data-transformers/constants/content-labels.js.map +0 -1
- package/dist/scripts/data-transformers/constants/index.d.ts +0 -15
- package/dist/scripts/data-transformers/constants/index.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/index.js +0 -15
- package/dist/scripts/data-transformers/constants/index.js.map +0 -1
- package/dist/scripts/data-transformers/constants/locale-map.d.ts +0 -13
- package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants/locale-map.js +0 -17
- package/dist/scripts/data-transformers/constants/locale-map.js.map +0 -1
- package/dist/scripts/data-transformers/constants.d.ts +0 -14
- package/dist/scripts/data-transformers/constants.d.ts.map +0 -1
- package/dist/scripts/data-transformers/constants.js +0 -14
- package/dist/scripts/data-transformers/constants.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +0 -64
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +0 -805
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +0 -50
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +0 -310
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/committee.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/committee.js +0 -247
- package/dist/scripts/data-transformers/content-generators/committee.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +0 -124
- package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/dashboard-section.js +0 -564
- package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +0 -82
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +0 -321
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/generic.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/generic.js +0 -295
- package/dist/scripts/data-transformers/content-generators/generic.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/index.d.ts +0 -84
- package/dist/scripts/data-transformers/content-generators/index.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/index.js +0 -47
- package/dist/scripts/data-transformers/content-generators/index.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/interpellations.js +0 -124
- package/dist/scripts/data-transformers/content-generators/interpellations.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +0 -137
- package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/mindmap-section.js +0 -286
- package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +0 -17
- package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/month-ahead.js +0 -212
- package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +0 -17
- package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/monthly-review.js +0 -173
- package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/motions.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/motions.js +0 -158
- package/dist/scripts/data-transformers/content-generators/motions.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +0 -62
- package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/newsworthiness.js +0 -254
- package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/propositions.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/propositions.js +0 -263
- package/dist/scripts/data-transformers/content-generators/propositions.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +0 -92
- package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/sankey-section.js +0 -257
- package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/shared.d.ts +0 -139
- package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/shared.js +0 -935
- package/dist/scripts/data-transformers/content-generators/shared.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +0 -50
- package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/swot-section.js +0 -177
- package/dist/scripts/data-transformers/content-generators/swot-section.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +0 -12
- package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/week-ahead.js +0 -332
- package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators.d.ts +0 -15
- package/dist/scripts/data-transformers/content-generators.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators.js +0 -14
- package/dist/scripts/data-transformers/content-generators.js.map +0 -1
- package/dist/scripts/data-transformers/document-analysis.d.ts +0 -58
- package/dist/scripts/data-transformers/document-analysis.d.ts.map +0 -1
- package/dist/scripts/data-transformers/document-analysis.js +0 -396
- package/dist/scripts/data-transformers/document-analysis.js.map +0 -1
- package/dist/scripts/data-transformers/helpers.d.ts +0 -144
- package/dist/scripts/data-transformers/helpers.d.ts.map +0 -1
- package/dist/scripts/data-transformers/helpers.js +0 -408
- package/dist/scripts/data-transformers/helpers.js.map +0 -1
- package/dist/scripts/data-transformers/index.d.ts +0 -45
- package/dist/scripts/data-transformers/index.d.ts.map +0 -1
- package/dist/scripts/data-transformers/index.js +0 -66
- package/dist/scripts/data-transformers/index.js.map +0 -1
- package/dist/scripts/data-transformers/metadata.d.ts +0 -42
- package/dist/scripts/data-transformers/metadata.d.ts.map +0 -1
- package/dist/scripts/data-transformers/metadata.js +0 -385
- package/dist/scripts/data-transformers/metadata.js.map +0 -1
- package/dist/scripts/data-transformers/policy-analysis.d.ts +0 -105
- package/dist/scripts/data-transformers/policy-analysis.d.ts.map +0 -1
- package/dist/scripts/data-transformers/policy-analysis.js +0 -686
- package/dist/scripts/data-transformers/policy-analysis.js.map +0 -1
- package/dist/scripts/data-transformers/risk-analysis.d.ts +0 -104
- package/dist/scripts/data-transformers/risk-analysis.d.ts.map +0 -1
- package/dist/scripts/data-transformers/risk-analysis.js +0 -279
- package/dist/scripts/data-transformers/risk-analysis.js.map +0 -1
- package/dist/scripts/data-transformers/types.d.ts +0 -260
- package/dist/scripts/data-transformers/types.d.ts.map +0 -1
- package/dist/scripts/data-transformers/types.js +0 -11
- package/dist/scripts/data-transformers/types.js.map +0 -1
- package/dist/scripts/data-transformers.d.ts +0 -23
- package/dist/scripts/data-transformers.d.ts.map +0 -1
- package/dist/scripts/data-transformers.js +0 -35
- package/dist/scripts/data-transformers.js.map +0 -1
- package/dist/scripts/deep-inspection/index.d.ts +0 -55
- package/dist/scripts/deep-inspection/index.d.ts.map +0 -1
- package/dist/scripts/deep-inspection/index.js +0 -66
- package/dist/scripts/deep-inspection/index.js.map +0 -1
- package/dist/scripts/detect-swedish-leakage.d.ts +0 -69
- package/dist/scripts/detect-swedish-leakage.d.ts.map +0 -1
- package/dist/scripts/detect-swedish-leakage.js +0 -417
- package/dist/scripts/detect-swedish-leakage.js.map +0 -1
- package/dist/scripts/editorial-framework.d.ts +0 -121
- package/dist/scripts/editorial-framework.d.ts.map +0 -1
- package/dist/scripts/editorial-framework.js +0 -364
- package/dist/scripts/editorial-framework.js.map +0 -1
- package/dist/scripts/editorial-pillars.d.ts +0 -43
- package/dist/scripts/editorial-pillars.d.ts.map +0 -1
- package/dist/scripts/editorial-pillars.js +0 -215
- package/dist/scripts/editorial-pillars.js.map +0 -1
- package/dist/scripts/extract-news-metadata.d.ts +0 -12
- package/dist/scripts/extract-news-metadata.d.ts.map +0 -1
- package/dist/scripts/extract-news-metadata.js +0 -107
- package/dist/scripts/extract-news-metadata.js.map +0 -1
- package/dist/scripts/extract-vocabulary.d.ts +0 -15
- package/dist/scripts/extract-vocabulary.d.ts.map +0 -1
- package/dist/scripts/extract-vocabulary.js +0 -255
- package/dist/scripts/extract-vocabulary.js.map +0 -1
- package/dist/scripts/fix-article-navigation.d.ts +0 -37
- package/dist/scripts/fix-article-navigation.d.ts.map +0 -1
- package/dist/scripts/fix-article-navigation.js +0 -198
- package/dist/scripts/fix-article-navigation.js.map +0 -1
- package/dist/scripts/fix-keywords-localization.d.ts +0 -18
- package/dist/scripts/fix-keywords-localization.d.ts.map +0 -1
- package/dist/scripts/fix-keywords-localization.js +0 -270
- package/dist/scripts/fix-keywords-localization.js.map +0 -1
- package/dist/scripts/fix-old-articles-branding.d.ts +0 -17
- package/dist/scripts/fix-old-articles-branding.d.ts.map +0 -1
- package/dist/scripts/fix-old-articles-branding.js +0 -229
- package/dist/scripts/fix-old-articles-branding.js.map +0 -1
- package/dist/scripts/generate-news-backport.d.ts +0 -16
- package/dist/scripts/generate-news-backport.d.ts.map +0 -1
- package/dist/scripts/generate-news-backport.js +0 -379
- package/dist/scripts/generate-news-backport.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +0 -141
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +0 -546
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +0 -59
- package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/analysis-cache.js +0 -116
- package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +0 -58
- package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/analysis-labels.js +0 -144
- package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/config.d.ts +0 -58
- package/dist/scripts/generate-news-enhanced/config.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/config.js +0 -286
- package/dist/scripts/generate-news-enhanced/config.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/generators.d.ts +0 -119
- package/dist/scripts/generate-news-enhanced/generators.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/generators.js +0 -2131
- package/dist/scripts/generate-news-enhanced/generators.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/helpers.d.ts +0 -122
- package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/helpers.js +0 -468
- package/dist/scripts/generate-news-enhanced/helpers.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/index.d.ts +0 -19
- package/dist/scripts/generate-news-enhanced/index.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/index.js +0 -221
- package/dist/scripts/generate-news-enhanced/index.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +0 -46
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js +0 -1227
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +0 -1
- package/dist/scripts/generate-news-enhanced/types.d.ts +0 -34
- package/dist/scripts/generate-news-enhanced/types.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced/types.js +0 -9
- package/dist/scripts/generate-news-enhanced/types.js.map +0 -1
- package/dist/scripts/generate-news-enhanced.d.ts +0 -25
- package/dist/scripts/generate-news-enhanced.d.ts.map +0 -1
- package/dist/scripts/generate-news-enhanced.js +0 -37
- package/dist/scripts/generate-news-enhanced.js.map +0 -1
- package/dist/scripts/generate-news-indexes/constants.d.ts +0 -20
- package/dist/scripts/generate-news-indexes/constants.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes/constants.js +0 -308
- package/dist/scripts/generate-news-indexes/constants.js.map +0 -1
- package/dist/scripts/generate-news-indexes/helpers.d.ts +0 -73
- package/dist/scripts/generate-news-indexes/helpers.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes/helpers.js +0 -352
- package/dist/scripts/generate-news-indexes/helpers.js.map +0 -1
- package/dist/scripts/generate-news-indexes/index.d.ts +0 -20
- package/dist/scripts/generate-news-indexes/index.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes/index.js +0 -75
- package/dist/scripts/generate-news-indexes/index.js.map +0 -1
- package/dist/scripts/generate-news-indexes/template.d.ts +0 -25
- package/dist/scripts/generate-news-indexes/template.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes/template.js +0 -644
- package/dist/scripts/generate-news-indexes/template.js.map +0 -1
- package/dist/scripts/generate-news-indexes/types.d.ts +0 -96
- package/dist/scripts/generate-news-indexes/types.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes/types.js +0 -9
- package/dist/scripts/generate-news-indexes/types.js.map +0 -1
- package/dist/scripts/generate-news-indexes.d.ts +0 -20
- package/dist/scripts/generate-news-indexes.d.ts.map +0 -1
- package/dist/scripts/generate-news-indexes.js +0 -19
- package/dist/scripts/generate-news-indexes.js.map +0 -1
- package/dist/scripts/generate-rss.d.ts +0 -48
- package/dist/scripts/generate-rss.d.ts.map +0 -1
- package/dist/scripts/generate-rss.js +0 -299
- package/dist/scripts/generate-rss.js.map +0 -1
- package/dist/scripts/generate-sitemap-html.d.ts +0 -79
- package/dist/scripts/generate-sitemap-html.d.ts.map +0 -1
- package/dist/scripts/generate-sitemap-html.js +0 -878
- package/dist/scripts/generate-sitemap-html.js.map +0 -1
- package/dist/scripts/generate-sitemap.d.ts +0 -23
- package/dist/scripts/generate-sitemap.d.ts.map +0 -1
- package/dist/scripts/generate-sitemap.js +0 -476
- package/dist/scripts/generate-sitemap.js.map +0 -1
- package/dist/scripts/generate-types-from-cia-schemas.d.ts +0 -176
- package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +0 -1
- package/dist/scripts/generate-types-from-cia-schemas.js +0 -318
- package/dist/scripts/generate-types-from-cia-schemas.js.map +0 -1
- package/dist/scripts/government-role-validator.d.ts +0 -65
- package/dist/scripts/government-role-validator.d.ts.map +0 -1
- package/dist/scripts/government-role-validator.js +0 -217
- package/dist/scripts/government-role-validator.js.map +0 -1
- package/dist/scripts/html-utils.d.ts +0 -17
- package/dist/scripts/html-utils.d.ts.map +0 -1
- package/dist/scripts/html-utils.js +0 -29
- package/dist/scripts/html-utils.js.map +0 -1
- package/dist/scripts/load-cia-stats.d.ts +0 -89
- package/dist/scripts/load-cia-stats.d.ts.map +0 -1
- package/dist/scripts/load-cia-stats.js +0 -400
- package/dist/scripts/load-cia-stats.js.map +0 -1
- package/dist/scripts/mcp-client/client.d.ts +0 -73
- package/dist/scripts/mcp-client/client.d.ts.map +0 -1
- package/dist/scripts/mcp-client/client.js +0 -526
- package/dist/scripts/mcp-client/client.js.map +0 -1
- package/dist/scripts/mcp-client/document-types.d.ts +0 -23
- package/dist/scripts/mcp-client/document-types.d.ts.map +0 -1
- package/dist/scripts/mcp-client/document-types.js +0 -62
- package/dist/scripts/mcp-client/document-types.js.map +0 -1
- package/dist/scripts/mcp-client/index.d.ts +0 -34
- package/dist/scripts/mcp-client/index.d.ts.map +0 -1
- package/dist/scripts/mcp-client/index.js +0 -67
- package/dist/scripts/mcp-client/index.js.map +0 -1
- package/dist/scripts/mcp-client/transport.d.ts +0 -32
- package/dist/scripts/mcp-client/transport.d.ts.map +0 -1
- package/dist/scripts/mcp-client/transport.js +0 -102
- package/dist/scripts/mcp-client/transport.js.map +0 -1
- package/dist/scripts/mcp-client.d.ts +0 -18
- package/dist/scripts/mcp-client.d.ts.map +0 -1
- package/dist/scripts/mcp-client.js +0 -18
- package/dist/scripts/mcp-client.js.map +0 -1
- package/dist/scripts/mcp-query-cli.d.ts +0 -25
- package/dist/scripts/mcp-query-cli.d.ts.map +0 -1
- package/dist/scripts/mcp-query-cli.js +0 -66
- package/dist/scripts/mcp-query-cli.js.map +0 -1
- package/dist/scripts/news-types/breaking-news.d.ts +0 -178
- package/dist/scripts/news-types/breaking-news.d.ts.map +0 -1
- package/dist/scripts/news-types/breaking-news.js +0 -432
- package/dist/scripts/news-types/breaking-news.js.map +0 -1
- package/dist/scripts/news-types/committee-reports.d.ts +0 -212
- package/dist/scripts/news-types/committee-reports.d.ts.map +0 -1
- package/dist/scripts/news-types/committee-reports.js +0 -404
- package/dist/scripts/news-types/committee-reports.js.map +0 -1
- package/dist/scripts/news-types/month-ahead.d.ts +0 -71
- package/dist/scripts/news-types/month-ahead.d.ts.map +0 -1
- package/dist/scripts/news-types/month-ahead.js +0 -392
- package/dist/scripts/news-types/month-ahead.js.map +0 -1
- package/dist/scripts/news-types/monthly-review.d.ts +0 -61
- package/dist/scripts/news-types/monthly-review.d.ts.map +0 -1
- package/dist/scripts/news-types/monthly-review.js +0 -417
- package/dist/scripts/news-types/monthly-review.js.map +0 -1
- package/dist/scripts/news-types/motions.d.ts +0 -214
- package/dist/scripts/news-types/motions.d.ts.map +0 -1
- package/dist/scripts/news-types/motions.js +0 -447
- package/dist/scripts/news-types/motions.js.map +0 -1
- package/dist/scripts/news-types/propositions.d.ts +0 -204
- package/dist/scripts/news-types/propositions.d.ts.map +0 -1
- package/dist/scripts/news-types/propositions.js +0 -401
- package/dist/scripts/news-types/propositions.js.map +0 -1
- package/dist/scripts/news-types/week-ahead.d.ts +0 -231
- package/dist/scripts/news-types/week-ahead.d.ts.map +0 -1
- package/dist/scripts/news-types/week-ahead.js +0 -441
- package/dist/scripts/news-types/week-ahead.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/analysis.d.ts +0 -47
- package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/analysis.js +0 -276
- package/dist/scripts/news-types/weekly-review/analysis.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/data-loader.d.ts +0 -51
- package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/data-loader.js +0 -298
- package/dist/scripts/news-types/weekly-review/data-loader.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/generator.d.ts +0 -18
- package/dist/scripts/news-types/weekly-review/generator.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/generator.js +0 -284
- package/dist/scripts/news-types/weekly-review/generator.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/index.d.ts +0 -20
- package/dist/scripts/news-types/weekly-review/index.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/index.js +0 -23
- package/dist/scripts/news-types/weekly-review/index.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/types.d.ts +0 -72
- package/dist/scripts/news-types/weekly-review/types.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/types.js +0 -20
- package/dist/scripts/news-types/weekly-review/types.js.map +0 -1
- package/dist/scripts/news-types/weekly-review/validation.d.ts +0 -10
- package/dist/scripts/news-types/weekly-review/validation.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review/validation.js +0 -95
- package/dist/scripts/news-types/weekly-review/validation.js.map +0 -1
- package/dist/scripts/news-types/weekly-review.d.ts +0 -15
- package/dist/scripts/news-types/weekly-review.d.ts.map +0 -1
- package/dist/scripts/news-types/weekly-review.js +0 -14
- package/dist/scripts/news-types/weekly-review.js.map +0 -1
- package/dist/scripts/party-variants.d.ts +0 -23
- package/dist/scripts/party-variants.d.ts.map +0 -1
- package/dist/scripts/party-variants.js +0 -50
- package/dist/scripts/party-variants.js.map +0 -1
- package/dist/scripts/pipeline/index.d.ts +0 -19
- package/dist/scripts/pipeline/index.d.ts.map +0 -1
- package/dist/scripts/pipeline/index.js +0 -17
- package/dist/scripts/pipeline/index.js.map +0 -1
- package/dist/scripts/pipeline/orchestrator.d.ts +0 -56
- package/dist/scripts/pipeline/orchestrator.d.ts.map +0 -1
- package/dist/scripts/pipeline/orchestrator.js +0 -147
- package/dist/scripts/pipeline/orchestrator.js.map +0 -1
- package/dist/scripts/pipeline/types.d.ts +0 -117
- package/dist/scripts/pipeline/types.d.ts.map +0 -1
- package/dist/scripts/pipeline/types.js +0 -13
- package/dist/scripts/pipeline/types.js.map +0 -1
- package/dist/scripts/pipeline/validation.d.ts +0 -66
- package/dist/scripts/pipeline/validation.d.ts.map +0 -1
- package/dist/scripts/pipeline/validation.js +0 -129
- package/dist/scripts/pipeline/validation.js.map +0 -1
- package/dist/scripts/populate-analysis-data.d.ts +0 -41
- package/dist/scripts/populate-analysis-data.d.ts.map +0 -1
- package/dist/scripts/populate-analysis-data.js +0 -255
- package/dist/scripts/populate-analysis-data.js.map +0 -1
- package/dist/scripts/pre-article-analysis/data-downloader.d.ts +0 -80
- package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis/data-downloader.js +0 -230
- package/dist/scripts/pre-article-analysis/data-downloader.js.map +0 -1
- package/dist/scripts/pre-article-analysis/data-persistence.d.ts +0 -141
- package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis/data-persistence.js +0 -345
- package/dist/scripts/pre-article-analysis/data-persistence.js.map +0 -1
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +0 -158
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis/markdown-serializer.js +0 -648
- package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +0 -1
- package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +0 -58
- package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis/pdf-converter.js +0 -142
- package/dist/scripts/pre-article-analysis/pdf-converter.js.map +0 -1
- package/dist/scripts/pre-article-analysis.d.ts +0 -42
- package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis.js +0 -642
- package/dist/scripts/pre-article-analysis.js.map +0 -1
- package/dist/scripts/scb-client.d.ts +0 -104
- package/dist/scripts/scb-client.d.ts.map +0 -1
- package/dist/scripts/scb-client.js +0 -286
- package/dist/scripts/scb-client.js.map +0 -1
- package/dist/scripts/scb-context.d.ts +0 -88
- package/dist/scripts/scb-context.d.ts.map +0 -1
- package/dist/scripts/scb-context.js +0 -307
- package/dist/scripts/scb-context.js.map +0 -1
- package/dist/scripts/shared/version.d.ts +0 -9
- package/dist/scripts/shared/version.d.ts.map +0 -1
- package/dist/scripts/shared/version.js +0 -28
- package/dist/scripts/shared/version.js.map +0 -1
- package/dist/scripts/statistical-claims-detector.d.ts +0 -119
- package/dist/scripts/statistical-claims-detector.d.ts.map +0 -1
- package/dist/scripts/statistical-claims-detector.js +0 -391
- package/dist/scripts/statistical-claims-detector.js.map +0 -1
- package/dist/scripts/sync-cia-schemas.d.ts +0 -52
- package/dist/scripts/sync-cia-schemas.d.ts.map +0 -1
- package/dist/scripts/sync-cia-schemas.js +0 -195
- package/dist/scripts/sync-cia-schemas.js.map +0 -1
- package/dist/scripts/translation-dictionary.d.ts +0 -45
- package/dist/scripts/translation-dictionary.d.ts.map +0 -1
- package/dist/scripts/translation-dictionary.js +0 -3642
- package/dist/scripts/translation-dictionary.js.map +0 -1
- package/dist/scripts/types/article.d.ts +0 -392
- package/dist/scripts/types/article.d.ts.map +0 -1
- package/dist/scripts/types/article.js +0 -6
- package/dist/scripts/types/article.js.map +0 -1
- package/dist/scripts/types/content.d.ts +0 -167
- package/dist/scripts/types/content.d.ts.map +0 -1
- package/dist/scripts/types/content.js +0 -6
- package/dist/scripts/types/content.js.map +0 -1
- package/dist/scripts/types/editorial.d.ts +0 -17
- package/dist/scripts/types/editorial.d.ts.map +0 -1
- package/dist/scripts/types/editorial.js +0 -6
- package/dist/scripts/types/editorial.js.map +0 -1
- package/dist/scripts/types/language.d.ts +0 -7
- package/dist/scripts/types/language.d.ts.map +0 -1
- package/dist/scripts/types/language.js +0 -6
- package/dist/scripts/types/language.js.map +0 -1
- package/dist/scripts/types/mcp.d.ts +0 -117
- package/dist/scripts/types/mcp.d.ts.map +0 -1
- package/dist/scripts/types/mcp.js +0 -6
- package/dist/scripts/types/mcp.js.map +0 -1
- package/dist/scripts/types/party.d.ts +0 -9
- package/dist/scripts/types/party.d.ts.map +0 -1
- package/dist/scripts/types/party.js +0 -6
- package/dist/scripts/types/party.js.map +0 -1
- package/dist/scripts/types/validation.d.ts +0 -136
- package/dist/scripts/types/validation.d.ts.map +0 -1
- package/dist/scripts/types/validation.js +0 -6
- package/dist/scripts/types/validation.js.map +0 -1
- package/dist/scripts/types/workflow.d.ts +0 -78
- package/dist/scripts/types/workflow.d.ts.map +0 -1
- package/dist/scripts/types/workflow.js +0 -6
- package/dist/scripts/types/workflow.js.map +0 -1
- package/dist/scripts/update-stats-from-cia.d.ts +0 -44
- package/dist/scripts/update-stats-from-cia.d.ts.map +0 -1
- package/dist/scripts/update-stats-from-cia.js +0 -310
- package/dist/scripts/update-stats-from-cia.js.map +0 -1
- package/dist/scripts/validate-against-cia-schemas.d.ts +0 -126
- package/dist/scripts/validate-against-cia-schemas.d.ts.map +0 -1
- package/dist/scripts/validate-against-cia-schemas.js +0 -299
- package/dist/scripts/validate-against-cia-schemas.js.map +0 -1
- package/dist/scripts/validate-cross-references.d.ts +0 -49
- package/dist/scripts/validate-cross-references.d.ts.map +0 -1
- package/dist/scripts/validate-cross-references.js +0 -183
- package/dist/scripts/validate-cross-references.js.map +0 -1
- package/dist/scripts/validate-file-ownership.d.ts +0 -68
- package/dist/scripts/validate-file-ownership.d.ts.map +0 -1
- package/dist/scripts/validate-file-ownership.js +0 -135
- package/dist/scripts/validate-file-ownership.js.map +0 -1
- package/dist/scripts/validate-news-translations.d.ts +0 -27
- package/dist/scripts/validate-news-translations.d.ts.map +0 -1
- package/dist/scripts/validate-news-translations.js +0 -258
- package/dist/scripts/validate-news-translations.js.map +0 -1
- package/dist/scripts/validate-translations.d.ts +0 -162
- package/dist/scripts/validate-translations.d.ts.map +0 -1
- package/dist/scripts/validate-translations.js +0 -378
- package/dist/scripts/validate-translations.js.map +0 -1
- package/dist/scripts/workflow-state-coordinator.d.ts +0 -354
- package/dist/scripts/workflow-state-coordinator.d.ts.map +0 -1
- package/dist/scripts/workflow-state-coordinator.js +0 -876
- package/dist/scripts/workflow-state-coordinator.js.map +0 -1
- package/dist/scripts/world-bank-client.d.ts +0 -122
- package/dist/scripts/world-bank-client.d.ts.map +0 -1
- package/dist/scripts/world-bank-client.js +0 -192
- package/dist/scripts/world-bank-client.js.map +0 -1
- package/dist/scripts/world-bank-context.d.ts +0 -88
- package/dist/scripts/world-bank-context.d.ts.map +0 -1
- package/dist/scripts/world-bank-context.js +0 -331
- package/dist/scripts/world-bank-context.js.map +0 -1
|
@@ -1,417 +0,0 @@
|
|
|
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 (&#xE4; → ä) so that
|
|
204
|
-
// the subsequent hex/numeric patterns can match them in a single pass.
|
|
205
|
-
text = text.replace(/&(#\w+;)/g, '&$1');
|
|
206
|
-
text = text
|
|
207
|
-
.replace(/</g, '<')
|
|
208
|
-
.replace(/>/g, '>')
|
|
209
|
-
.replace(/"/g, '"')
|
|
210
|
-
.replace(/�*39;|&#[xX]0*27;/g, "'")
|
|
211
|
-
.replace(/ /g, ' ')
|
|
212
|
-
// Swedish characters (HTML named and numeric entities, case-insensitive hex)
|
|
213
|
-
.replace(/ä|ä|&#[xX]0*[eE]4;/g, 'ä')
|
|
214
|
-
.replace(/Ä|Ä|&#[xX]0*[cC]4;/g, 'Ä')
|
|
215
|
-
.replace(/ö|ö|&#[xX]0*[fF]6;/g, 'ö')
|
|
216
|
-
.replace(/Ö|Ö|&#[xX]0*[dD]6;/g, 'Ö')
|
|
217
|
-
.replace(/å|å|&#[xX]0*[eE]5;/g, 'å')
|
|
218
|
-
.replace(/Å|Å|&#[xX]0*[cC]5;/g, 'Å')
|
|
219
|
-
// Common quote and dash entities (case-insensitive hex, optional leading zeros)
|
|
220
|
-
.replace(/–|–|&#[xX]0*2013;/g, '-')
|
|
221
|
-
.replace(/—|—|&#[xX]0*2014;/g, '-')
|
|
222
|
-
.replace(/“|”|“|”|&#[xX]0*201[Cc];|&#[xX]0*201[Dd];/g, '"')
|
|
223
|
-
.replace(/‘|’|‘|’|&#[xX]0*2018;|&#[xX]0*2019;|'/g, "'")
|
|
224
|
-
.replace(/&/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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect-swedish-leakage.js","sourceRoot":"","sources":["../../scripts/detect-swedish-leakage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,121 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|