riksdagsmonitor 0.8.21 → 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 +54 -22
- 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 -495
- 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 -41
- package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
- package/dist/scripts/pre-article-analysis.js +0 -591
- 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,299 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env npx tsx
|
|
2
|
-
/**
|
|
3
|
-
* @module Validation/SchemaValidation
|
|
4
|
-
* @category Validation
|
|
5
|
-
*
|
|
6
|
-
* @title CIA Schema Validator - Data Quality Assurance Engine
|
|
7
|
-
*
|
|
8
|
-
* @description
|
|
9
|
-
* **INTELLIGENCE OPERATIVE PERSPECTIVE**
|
|
10
|
-
*
|
|
11
|
-
* This module serves as the critical data validation gate in the political intelligence platform,
|
|
12
|
-
* ensuring all CIA platform exports conform to their expected JSON schemas. Operating at the
|
|
13
|
-
* intersection of data integrity and threat detection, the schema validator prevents corrupted,
|
|
14
|
-
* tampered, or malformed data from reaching the analytical intelligence pipeline.
|
|
15
|
-
*
|
|
16
|
-
* **OPERATIONAL ARCHITECTURE:**
|
|
17
|
-
* The validator employs Ajv 2019 specification with strict error reporting to validate:
|
|
18
|
-
* - Parliamentary voting records (voteringar) - integrity critical for vote analysis
|
|
19
|
-
* - Member records (ledamöter) - baseline data for behavioral analysis
|
|
20
|
-
* - Document metadata (dokument) - chain of custody for legislative documents
|
|
21
|
-
* - Committee records (betänkanden) - organizational structure validation
|
|
22
|
-
* - Government documents (regering) - executive branch intelligence
|
|
23
|
-
*
|
|
24
|
-
* **INTELLIGENCE APPLICATIONS:**
|
|
25
|
-
* 1. Anomaly Detection: Schema violations trigger investigation protocols - may indicate
|
|
26
|
-
* data tampering, system compromise, or source reliability degradation
|
|
27
|
-
* 2. Data Provenance: Schema conformance provides baseline assurance for data authenticity
|
|
28
|
-
* 3. Pipeline Integrity: Early validation prevents corrupted data from polluting analytical
|
|
29
|
-
* downstream (news generation, dashboard updates, trend analysis)
|
|
30
|
-
* 4. Incident Response: Failed validations log detailed error chains for forensic analysis
|
|
31
|
-
*
|
|
32
|
-
* **SECURITY & COMPLIANCE:**
|
|
33
|
-
* - JSON Schema validation prevents injection attacks on structured data
|
|
34
|
-
* - Verbose error reporting supports compliance auditing (ISO 27001, GDPR)
|
|
35
|
-
* - Type validation ensures downstream code security (no unexpected object shapes)
|
|
36
|
-
* - Automatic schema updates detect when CIA platform structure evolves
|
|
37
|
-
*
|
|
38
|
-
* **OPERATIONAL NOTES:**
|
|
39
|
-
* - Runs pre-build as quality gate in CI/CD pipeline
|
|
40
|
-
* - Provides detailed error messages for debugging data integration issues
|
|
41
|
-
* - Supports both single-file and batch validation modes
|
|
42
|
-
* - Exit code 1 blocks deployment if critical data is corrupted
|
|
43
|
-
*
|
|
44
|
-
* @usage
|
|
45
|
-
* ```
|
|
46
|
-
* npm run validate-schemas # Validate all exports
|
|
47
|
-
* node scripts/validate-against-cia-schemas.js produktnavn # Validate one export
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @performance
|
|
51
|
-
* - Validation latency: ~50ms per export file
|
|
52
|
-
* - Memory usage: ~10MB for schema compilation (reusable)
|
|
53
|
-
* - Recommended: Run on file change events during development
|
|
54
|
-
*
|
|
55
|
-
* @intelligence Risk Assessment Matrix
|
|
56
|
-
* - Critical: Schema violations in vote records (affects coalition analysis)
|
|
57
|
-
* - High: Member record corruption (impacts behavioral tracking)
|
|
58
|
-
* - Medium: Document metadata errors (non-breaking for some analysis)
|
|
59
|
-
* - Low: Minor field validation failures (caught downstream)
|
|
60
|
-
*
|
|
61
|
-
* @osint Data Source Verification
|
|
62
|
-
* - Validates export consistency against published CIA schema specifications
|
|
63
|
-
* - Detects when CIA platform introduces breaking changes
|
|
64
|
-
* - Enables early detection of data quality issues at source
|
|
65
|
-
*
|
|
66
|
-
* @risk Schema Drift Detection
|
|
67
|
-
* - Monitors for unauthorized schema modifications in CIA exports
|
|
68
|
-
* - Prevents data corruption from propagating through intelligence pipeline
|
|
69
|
-
* - Supports incident response for suspected data integrity breaches
|
|
70
|
-
*
|
|
71
|
-
* @gdpr Data Integrity Assurance
|
|
72
|
-
* - Ensures member personal data conforms to expected format
|
|
73
|
-
* - Validates data retention classifications are preserved
|
|
74
|
-
* - Supports audit trail for data processing compliance
|
|
75
|
-
*
|
|
76
|
-
* @security Input Validation Hardening
|
|
77
|
-
* - Prevents malformed JSON from reaching processing logic
|
|
78
|
-
* - Detects XSS/injection attempts in document fields
|
|
79
|
-
* - Validates schema constraints (string lengths, numeric ranges)
|
|
80
|
-
*
|
|
81
|
-
* @author Hack23 AB (Intelligence & Open Government Initiative)
|
|
82
|
-
* @license Apache-2.0
|
|
83
|
-
* @version 2.0.0
|
|
84
|
-
* @since 2024-06-01
|
|
85
|
-
* @see https://github.com/Hack23/cia (CIA Platform Repository)
|
|
86
|
-
* @see schemas/cia/ (JSON Schema Definitions)
|
|
87
|
-
* @see Issue #89 (Data Quality Enhancement Phase)
|
|
88
|
-
*/
|
|
89
|
-
import fs from 'node:fs/promises';
|
|
90
|
-
import path from 'node:path';
|
|
91
|
-
import { fileURLToPath } from 'node:url';
|
|
92
|
-
import Ajv2019 from 'ajv/dist/2019.js';
|
|
93
|
-
import addFormats from 'ajv-formats';
|
|
94
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
95
|
-
const __dirname = path.dirname(__filename);
|
|
96
|
-
class CIASchemaValidator {
|
|
97
|
-
schemasDir;
|
|
98
|
-
dataDir;
|
|
99
|
-
ajv;
|
|
100
|
-
results;
|
|
101
|
-
constructor() {
|
|
102
|
-
this.schemasDir = path.join(__dirname, '..', 'schemas', 'cia');
|
|
103
|
-
this.dataDir = path.join(__dirname, '..', 'data', 'cia-exports', 'current');
|
|
104
|
-
const Ajv = Ajv2019.default || Ajv2019;
|
|
105
|
-
this.ajv = new Ajv({
|
|
106
|
-
allErrors: true,
|
|
107
|
-
verbose: true,
|
|
108
|
-
strict: false // Allow additional properties not in schema
|
|
109
|
-
});
|
|
110
|
-
addFormats(this.ajv);
|
|
111
|
-
this.results = [];
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Load a CIA schema by product name
|
|
115
|
-
*/
|
|
116
|
-
async loadCIASchema(productName) {
|
|
117
|
-
const schemaPath = path.join(this.schemasDir, `${productName}.schema.json`);
|
|
118
|
-
try {
|
|
119
|
-
const schemaContent = await fs.readFile(schemaPath, 'utf8');
|
|
120
|
-
return JSON.parse(schemaContent);
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
if (error.code === 'ENOENT') {
|
|
124
|
-
throw new Error(`Schema not found: ${productName}.schema.json (run npm run sync-schemas first)`, { cause: error });
|
|
125
|
-
}
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Validate a single export against its schema
|
|
131
|
-
*/
|
|
132
|
-
async validateExport(productName, data) {
|
|
133
|
-
console.log(`🔍 Validating: ${productName}...`);
|
|
134
|
-
try {
|
|
135
|
-
// Load schema
|
|
136
|
-
const schema = await this.loadCIASchema(productName);
|
|
137
|
-
// Compile schema
|
|
138
|
-
const validate = this.ajv.compile(schema);
|
|
139
|
-
// Validate data
|
|
140
|
-
const valid = validate(data);
|
|
141
|
-
if (!valid) {
|
|
142
|
-
const errors = validate.errors ?? [];
|
|
143
|
-
console.log(` ❌ Validation failed for ${productName}`);
|
|
144
|
-
console.log(` Errors (${errors.length}):`);
|
|
145
|
-
// Show first 5 errors
|
|
146
|
-
const displayErrors = errors.slice(0, 5);
|
|
147
|
-
for (const error of displayErrors) {
|
|
148
|
-
console.log(` - ${error.instancePath || '/'}: ${error.message}`);
|
|
149
|
-
if (error.params && Object.keys(error.params).length > 0) {
|
|
150
|
-
console.log(` Params: ${JSON.stringify(error.params)}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (errors.length > 5) {
|
|
154
|
-
console.log(` ... and ${errors.length - 5} more errors`);
|
|
155
|
-
}
|
|
156
|
-
this.results.push({
|
|
157
|
-
product: productName,
|
|
158
|
-
valid: false,
|
|
159
|
-
errorCount: errors.length,
|
|
160
|
-
errors: errors
|
|
161
|
-
});
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
console.log(` ✅ Valid: ${productName}`);
|
|
165
|
-
this.results.push({
|
|
166
|
-
product: productName,
|
|
167
|
-
valid: true,
|
|
168
|
-
errorCount: 0
|
|
169
|
-
});
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
console.log(` ❌ Error: ${productName} - ${error.message}`);
|
|
174
|
-
this.results.push({
|
|
175
|
-
product: productName,
|
|
176
|
-
valid: false,
|
|
177
|
-
error: error.message
|
|
178
|
-
});
|
|
179
|
-
return false;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Validate all CIA exports in the data directory
|
|
184
|
-
*/
|
|
185
|
-
async validateAllExports() {
|
|
186
|
-
console.log('🔍 CIA Data Validation');
|
|
187
|
-
console.log('='.repeat(50));
|
|
188
|
-
console.log(`📁 Data directory: ${this.dataDir}`);
|
|
189
|
-
console.log('');
|
|
190
|
-
// Check if data directory exists
|
|
191
|
-
try {
|
|
192
|
-
await fs.access(this.dataDir);
|
|
193
|
-
}
|
|
194
|
-
catch (_error) {
|
|
195
|
-
console.log('⚠️ No data directory found - skipping validation');
|
|
196
|
-
console.log(' Data will be validated when exports are available');
|
|
197
|
-
return 0;
|
|
198
|
-
}
|
|
199
|
-
// Get all JSON files in data directory
|
|
200
|
-
let exportFiles;
|
|
201
|
-
try {
|
|
202
|
-
const files = await fs.readdir(this.dataDir);
|
|
203
|
-
exportFiles = files.filter((f) => f.endsWith('.json'));
|
|
204
|
-
}
|
|
205
|
-
catch (_error) {
|
|
206
|
-
console.log('⚠️ Could not read data directory - skipping validation');
|
|
207
|
-
return 0;
|
|
208
|
-
}
|
|
209
|
-
if (exportFiles.length === 0) {
|
|
210
|
-
console.log('ℹ️ No export files found - nothing to validate');
|
|
211
|
-
console.log(' Data will be validated when exports are available');
|
|
212
|
-
return 0;
|
|
213
|
-
}
|
|
214
|
-
console.log(`📊 Found ${exportFiles.length} export file(s)`);
|
|
215
|
-
console.log('');
|
|
216
|
-
// Validate each export
|
|
217
|
-
for (const exportFile of exportFiles) {
|
|
218
|
-
const productName = exportFile.replace('.json', '');
|
|
219
|
-
const dataPath = path.join(this.dataDir, exportFile);
|
|
220
|
-
try {
|
|
221
|
-
const dataContent = await fs.readFile(dataPath, 'utf8');
|
|
222
|
-
const data = JSON.parse(dataContent);
|
|
223
|
-
await this.validateExport(productName, data);
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
console.log(` ❌ Error reading ${exportFile}: ${error.message}`);
|
|
227
|
-
this.results.push({
|
|
228
|
-
product: productName,
|
|
229
|
-
valid: false,
|
|
230
|
-
error: error.message
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// Save validation report
|
|
235
|
-
await this.saveReport();
|
|
236
|
-
// Print summary
|
|
237
|
-
this.printSummary();
|
|
238
|
-
// Return exit code (0 if all valid, 1 if any failed)
|
|
239
|
-
const failedCount = this.results.filter((r) => !r.valid).length;
|
|
240
|
-
return failedCount === 0 ? 0 : 1;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Save validation report
|
|
244
|
-
*/
|
|
245
|
-
async saveReport() {
|
|
246
|
-
const report = {
|
|
247
|
-
timestamp: new Date().toISOString(),
|
|
248
|
-
totalValidated: this.results.length,
|
|
249
|
-
validCount: this.results.filter((r) => r.valid).length,
|
|
250
|
-
invalidCount: this.results.filter((r) => !r.valid).length,
|
|
251
|
-
results: this.results
|
|
252
|
-
};
|
|
253
|
-
const reportPath = path.join(__dirname, '..', 'validation-report.json');
|
|
254
|
-
await fs.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf8');
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Print validation summary
|
|
258
|
-
*/
|
|
259
|
-
printSummary() {
|
|
260
|
-
console.log('');
|
|
261
|
-
console.log('='.repeat(50));
|
|
262
|
-
console.log('📊 Validation Summary');
|
|
263
|
-
console.log('='.repeat(50));
|
|
264
|
-
const validCount = this.results.filter((r) => r.valid).length;
|
|
265
|
-
const invalidCount = this.results.filter((r) => !r.valid).length;
|
|
266
|
-
console.log(`✅ Valid: ${validCount}/${this.results.length}`);
|
|
267
|
-
console.log(`❌ Invalid: ${invalidCount}/${this.results.length}`);
|
|
268
|
-
if (invalidCount > 0) {
|
|
269
|
-
console.log('');
|
|
270
|
-
console.log('⚠️ Failed validations:');
|
|
271
|
-
const failed = this.results.filter((r) => !r.valid);
|
|
272
|
-
for (const result of failed) {
|
|
273
|
-
const errorInfo = result.errorCount ? `${result.errorCount} errors` : result.error ?? 'unknown error';
|
|
274
|
-
console.log(` - ${result.product}: ${errorInfo}`);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
console.log('');
|
|
278
|
-
console.log('📄 Full report saved to: validation-report.json');
|
|
279
|
-
console.log('='.repeat(50));
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// Main execution
|
|
283
|
-
async function main() {
|
|
284
|
-
try {
|
|
285
|
-
const validator = new CIASchemaValidator();
|
|
286
|
-
const exitCode = await validator.validateAllExports();
|
|
287
|
-
process.exit(exitCode);
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
console.error('💥 Fatal error:', error);
|
|
291
|
-
process.exit(1);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
// Run if called directly
|
|
295
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
296
|
-
main();
|
|
297
|
-
}
|
|
298
|
-
export default CIASchemaValidator;
|
|
299
|
-
//# sourceMappingURL=validate-against-cia-schemas.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-against-cia-schemas.js","sourceRoot":"","sources":["../../scripts/validate-against-cia-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module Validation/CrossReferenceTracking
|
|
3
|
-
* @description Source verification engine enforcing multi-source journalism standards.
|
|
4
|
-
* Bounded context: Quality Assurance
|
|
5
|
-
*
|
|
6
|
-
* @author Hack23 AB
|
|
7
|
-
* @license Apache-2.0
|
|
8
|
-
*/
|
|
9
|
-
import type { ArticleBatchItem, BatchValidationResult, CISummary, CrossRefValidationResult, RequiredToolsMap } from './types/validation.js';
|
|
10
|
-
/**
|
|
11
|
-
* Required MCP tools per article type.
|
|
12
|
-
*/
|
|
13
|
-
export declare const REQUIRED_TOOLS_PER_TYPE: RequiredToolsMap;
|
|
14
|
-
/** Minimum number of distinct data sources required per article */
|
|
15
|
-
export declare const MINIMUM_SOURCES = 3;
|
|
16
|
-
/**
|
|
17
|
-
* Extract cross-reference types from article content.
|
|
18
|
-
*
|
|
19
|
-
* @param content - Article HTML or text content
|
|
20
|
-
* @returns Array of detected cross-reference category names
|
|
21
|
-
*/
|
|
22
|
-
export declare function extractCrossReferences(content: string | null | undefined): string[];
|
|
23
|
-
/**
|
|
24
|
-
* Validate cross-references for a single article.
|
|
25
|
-
*
|
|
26
|
-
* @param articleType - Type of article
|
|
27
|
-
* @param articleContent - Article HTML or text content
|
|
28
|
-
* @param mcpCalls - Array of MCP calls made during generation
|
|
29
|
-
* @returns Validation result with pass/fail and score
|
|
30
|
-
*/
|
|
31
|
-
export declare function validateCrossReferences(articleType: string, articleContent: string, mcpCalls?: ReadonlyArray<{
|
|
32
|
-
readonly tool: string;
|
|
33
|
-
}>): CrossRefValidationResult;
|
|
34
|
-
/**
|
|
35
|
-
* Validate multiple articles at once.
|
|
36
|
-
*
|
|
37
|
-
* @param articles - Array of article objects with type, content, mcpCalls
|
|
38
|
-
* @returns Aggregated validation results
|
|
39
|
-
*/
|
|
40
|
-
export declare function validateArticleBatch(articles: ReadonlyArray<ArticleBatchItem> | null | undefined): BatchValidationResult;
|
|
41
|
-
/**
|
|
42
|
-
* Generate a Markdown validation report.
|
|
43
|
-
*/
|
|
44
|
-
export declare function generateValidationReport(validation: CrossRefValidationResult): string;
|
|
45
|
-
/**
|
|
46
|
-
* Export CI-friendly summary from batch results.
|
|
47
|
-
*/
|
|
48
|
-
export declare function exportCISummary(batchResults: BatchValidationResult): CISummary;
|
|
49
|
-
//# sourceMappingURL=validate-cross-references.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-cross-references.d.ts","sourceRoot":"","sources":["../../scripts/validate-cross-references.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAqC5B,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAuBnF;AAmBD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,GAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAM,GACtD,wBAAwB,CAmC1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3D,qBAAqB,CAevB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,wBAAwB,GAAG,MAAM,CA0BrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAU9E"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module Validation/CrossReferenceTracking
|
|
3
|
-
* @description Source verification engine enforcing multi-source journalism standards.
|
|
4
|
-
* Bounded context: Quality Assurance
|
|
5
|
-
*
|
|
6
|
-
* @author Hack23 AB
|
|
7
|
-
* @license Apache-2.0
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Required MCP tools per article type.
|
|
11
|
-
*/
|
|
12
|
-
export const REQUIRED_TOOLS_PER_TYPE = {
|
|
13
|
-
'week-ahead': [
|
|
14
|
-
'get_calendar_events',
|
|
15
|
-
'search_dokument',
|
|
16
|
-
'get_fragor',
|
|
17
|
-
'get_interpellationer',
|
|
18
|
-
],
|
|
19
|
-
'committee-reports': [
|
|
20
|
-
'get_betankanden',
|
|
21
|
-
'search_voteringar',
|
|
22
|
-
'search_anforanden',
|
|
23
|
-
'get_propositioner',
|
|
24
|
-
],
|
|
25
|
-
propositions: [
|
|
26
|
-
'get_propositioner',
|
|
27
|
-
'search_dokument_fulltext',
|
|
28
|
-
'analyze_g0v_by_department',
|
|
29
|
-
'search_anforanden',
|
|
30
|
-
],
|
|
31
|
-
motions: [
|
|
32
|
-
'get_motioner',
|
|
33
|
-
'search_dokument_fulltext',
|
|
34
|
-
'analyze_g0v_by_department',
|
|
35
|
-
'search_anforanden',
|
|
36
|
-
],
|
|
37
|
-
'month-ahead': [
|
|
38
|
-
'get_calendar_events',
|
|
39
|
-
'get_betankanden',
|
|
40
|
-
'get_propositioner',
|
|
41
|
-
'get_motioner',
|
|
42
|
-
],
|
|
43
|
-
breaking: [
|
|
44
|
-
'search_voteringar',
|
|
45
|
-
'get_voting_group',
|
|
46
|
-
'search_anforanden',
|
|
47
|
-
'search_ledamoter',
|
|
48
|
-
],
|
|
49
|
-
};
|
|
50
|
-
/** Minimum number of distinct data sources required per article */
|
|
51
|
-
export const MINIMUM_SOURCES = 3;
|
|
52
|
-
/**
|
|
53
|
-
* Extract cross-reference types from article content.
|
|
54
|
-
*
|
|
55
|
-
* @param content - Article HTML or text content
|
|
56
|
-
* @returns Array of detected cross-reference category names
|
|
57
|
-
*/
|
|
58
|
-
export function extractCrossReferences(content) {
|
|
59
|
-
if (!content)
|
|
60
|
-
return [];
|
|
61
|
-
const references = [];
|
|
62
|
-
const contentLower = content.toLowerCase();
|
|
63
|
-
const patterns = {
|
|
64
|
-
calendar: /calendar|event|schedule|meeting/gi,
|
|
65
|
-
documents: /dokument|document|bill|proposition|motion|betänkande/gi,
|
|
66
|
-
votes: /vote|votering|röst|ballot/gi,
|
|
67
|
-
speeches: /speech|anförande|debate|tal/gi,
|
|
68
|
-
members: /ledamot|\bmp\b|member|representative/gi,
|
|
69
|
-
committees: /committee|utskott|commission/gi,
|
|
70
|
-
questions: /question|fråga|interpellation/gi,
|
|
71
|
-
};
|
|
72
|
-
for (const [type, pattern] of Object.entries(patterns)) {
|
|
73
|
-
if (pattern.test(contentLower)) {
|
|
74
|
-
references.push(type);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return references;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Calculate quality score for cross-referencing (0–1).
|
|
81
|
-
*/
|
|
82
|
-
function calculateScore(allRequired, minSources, hasReferences, extraCount) {
|
|
83
|
-
let score = 0;
|
|
84
|
-
if (allRequired)
|
|
85
|
-
score += 0.4;
|
|
86
|
-
if (minSources)
|
|
87
|
-
score += 0.3;
|
|
88
|
-
if (hasReferences)
|
|
89
|
-
score += 0.2;
|
|
90
|
-
score += Math.min(extraCount * 0.05, 0.1);
|
|
91
|
-
return Math.min(score, 1.0);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Validate cross-references for a single article.
|
|
95
|
-
*
|
|
96
|
-
* @param articleType - Type of article
|
|
97
|
-
* @param articleContent - Article HTML or text content
|
|
98
|
-
* @param mcpCalls - Array of MCP calls made during generation
|
|
99
|
-
* @returns Validation result with pass/fail and score
|
|
100
|
-
*/
|
|
101
|
-
export function validateCrossReferences(articleType, articleContent, mcpCalls = []) {
|
|
102
|
-
const requiredTools = REQUIRED_TOOLS_PER_TYPE[articleType] ?? [];
|
|
103
|
-
const usedTools = mcpCalls.map((call) => call.tool);
|
|
104
|
-
const missingTools = requiredTools.filter((tool) => !usedTools.includes(tool));
|
|
105
|
-
const extraTools = usedTools.filter((tool) => !requiredTools.includes(tool));
|
|
106
|
-
const crossReferencesInText = extractCrossReferences(articleContent);
|
|
107
|
-
const uniqueTools = [...new Set(usedTools.filter(Boolean))];
|
|
108
|
-
const hasMinimumSources = uniqueTools.length >= MINIMUM_SOURCES;
|
|
109
|
-
const allRequiredToolsUsed = missingTools.length === 0;
|
|
110
|
-
const hasCrossReferencesInText = crossReferencesInText.length >= MINIMUM_SOURCES;
|
|
111
|
-
const passed = allRequiredToolsUsed && hasMinimumSources && hasCrossReferencesInText;
|
|
112
|
-
return {
|
|
113
|
-
articleType,
|
|
114
|
-
requiredTools: [...requiredTools],
|
|
115
|
-
usedTools,
|
|
116
|
-
missingTools,
|
|
117
|
-
extraTools,
|
|
118
|
-
crossReferencesInText,
|
|
119
|
-
sourceCount: usedTools.length,
|
|
120
|
-
hasMinimumSources,
|
|
121
|
-
allRequiredToolsUsed,
|
|
122
|
-
hasCrossReferencesInText,
|
|
123
|
-
passed,
|
|
124
|
-
score: calculateScore(allRequiredToolsUsed, hasMinimumSources, hasCrossReferencesInText, extraTools.length),
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Validate multiple articles at once.
|
|
129
|
-
*
|
|
130
|
-
* @param articles - Array of article objects with type, content, mcpCalls
|
|
131
|
-
* @returns Aggregated validation results
|
|
132
|
-
*/
|
|
133
|
-
export function validateArticleBatch(articles) {
|
|
134
|
-
const results = (articles ?? []).map((article) => validateCrossReferences(article.type, article.content, article.mcpCalls));
|
|
135
|
-
if (results.length === 0) {
|
|
136
|
-
return { total: 0, passed: 0, failed: 0, avgScore: 0, passRate: 0, details: [] };
|
|
137
|
-
}
|
|
138
|
-
const total = results.length;
|
|
139
|
-
const passed = results.filter((r) => r.passed).length;
|
|
140
|
-
const failed = total - passed;
|
|
141
|
-
const avgScore = results.reduce((sum, r) => sum + r.score, 0) / total;
|
|
142
|
-
return { total, passed, failed, avgScore, passRate: passed / total, details: results };
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Generate a Markdown validation report.
|
|
146
|
-
*/
|
|
147
|
-
export function generateValidationReport(validation) {
|
|
148
|
-
const { articleType, usedTools, missingTools, crossReferencesInText, passed, score } = validation;
|
|
149
|
-
let report = `## Cross-Reference Validation Report\n\n`;
|
|
150
|
-
report += `**Article Type**: ${articleType}\n`;
|
|
151
|
-
report += `**Status**: ${passed ? '✅ PASSED' : '❌ FAILED'}\n`;
|
|
152
|
-
report += `**Score**: ${(score * 100).toFixed(0)}%\n\n`;
|
|
153
|
-
report += `### MCP Tools Used (${usedTools.length})\n`;
|
|
154
|
-
for (const tool of usedTools) {
|
|
155
|
-
report += `- ✅ ${tool}\n`;
|
|
156
|
-
}
|
|
157
|
-
if (missingTools.length > 0) {
|
|
158
|
-
report += `\n### Missing Required Tools (${missingTools.length})\n`;
|
|
159
|
-
for (const tool of missingTools) {
|
|
160
|
-
report += `- ❌ ${tool}\n`;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
report += `\n### Cross-References in Text (${crossReferencesInText.length})\n`;
|
|
164
|
-
for (const ref of crossReferencesInText) {
|
|
165
|
-
report += `- ${ref}\n`;
|
|
166
|
-
}
|
|
167
|
-
return report;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Export CI-friendly summary from batch results.
|
|
171
|
-
*/
|
|
172
|
-
export function exportCISummary(batchResults) {
|
|
173
|
-
return {
|
|
174
|
-
status: batchResults.passRate === 1 ? 'success' : 'failure',
|
|
175
|
-
total: batchResults.total,
|
|
176
|
-
passed: batchResults.passed,
|
|
177
|
-
failed: batchResults.failed,
|
|
178
|
-
passRate: `${(batchResults.passRate * 100).toFixed(1)}%`,
|
|
179
|
-
avgScore: `${(batchResults.avgScore * 100).toFixed(1)}%`,
|
|
180
|
-
timestamp: new Date().toISOString(),
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=validate-cross-references.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-cross-references.js","sourceRoot":"","sources":["../../scripts/validate-cross-references.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,68 +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
|
-
/** Languages owned by content generation workflows */
|
|
14
|
-
export declare const CONTENT_LANGS: readonly ["en", "sv"];
|
|
15
|
-
/** Languages owned by the translation workflow */
|
|
16
|
-
export declare const TRANSLATION_LANGS: readonly ["da", "no", "fi", "de", "fr", "es", "nl", "ar", "he", "ja", "ko", "zh"];
|
|
17
|
-
/** Workflow category for file ownership validation */
|
|
18
|
-
export type WorkflowCategory = 'content' | 'translation';
|
|
19
|
-
/** Result of a file ownership validation check */
|
|
20
|
-
export interface ValidationResult {
|
|
21
|
-
/** Whether all pending files (staged + unstaged + untracked) pass ownership validation */
|
|
22
|
-
passed: boolean;
|
|
23
|
-
/** Files that violate the ownership contract */
|
|
24
|
-
violations: string[];
|
|
25
|
-
/** Total pending news HTML files checked */
|
|
26
|
-
checkedCount: number;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Extract the language code from a news article filename.
|
|
30
|
-
* Expected pattern: `news/YYYY-MM-DD-slug-{lang}.html`
|
|
31
|
-
*
|
|
32
|
-
* @param filepath - The file path to extract the language from
|
|
33
|
-
* @returns The two-letter language code, or null if no match
|
|
34
|
-
*/
|
|
35
|
-
export declare function extractLangFromPath(filepath: string): string | null;
|
|
36
|
-
/**
|
|
37
|
-
* Check whether a file belongs to the given workflow category.
|
|
38
|
-
*
|
|
39
|
-
* @param filepath - The file path to check
|
|
40
|
-
* @param category - The workflow category ('content' or 'translation')
|
|
41
|
-
* @returns true if the file is allowed for the given category
|
|
42
|
-
*/
|
|
43
|
-
export declare function isFileOwnedByCategory(filepath: string, category: WorkflowCategory): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Validate that all pending files (staged + unstaged + untracked working-tree changes)
|
|
46
|
-
* conform to the file-ownership contract for the given workflow category.
|
|
47
|
-
*
|
|
48
|
-
* Checks the union of:
|
|
49
|
-
* - `git diff --cached --name-only` (staged)
|
|
50
|
-
* - `git diff --name-only` (unstaged modifications)
|
|
51
|
-
* - `git ls-files --others --exclude-standard` (untracked new files)
|
|
52
|
-
*
|
|
53
|
-
* This ensures violations are caught regardless of whether `git add` has been run.
|
|
54
|
-
*
|
|
55
|
-
* @param category - The workflow category ('content' or 'translation')
|
|
56
|
-
* @returns Validation result with pass/fail status and any violations
|
|
57
|
-
*/
|
|
58
|
-
export declare function validatePendingFileOwnership(category: WorkflowCategory): ValidationResult;
|
|
59
|
-
/**
|
|
60
|
-
* Validate a list of file paths against the ownership contract.
|
|
61
|
-
* This is the pure-logic core, usable without git.
|
|
62
|
-
*
|
|
63
|
-
* @param files - Array of file paths to validate
|
|
64
|
-
* @param category - The workflow category ('content' or 'translation')
|
|
65
|
-
* @returns Validation result with pass/fail status and any violations
|
|
66
|
-
*/
|
|
67
|
-
export declare function validateFileList(files: string[], category: WorkflowCategory): ValidationResult;
|
|
68
|
-
//# sourceMappingURL=validate-file-ownership.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-file-ownership.d.ts","sourceRoot":"","sources":["../../scripts/validate-file-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,sDAAsD;AACtD,eAAO,MAAM,aAAa,uBAAwB,CAAC;AAEnD,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,mFAEpB,CAAC;AAEX,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAEzD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAgBT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CA8BlB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CAclB"}
|