euparliamentmonitor 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +1005 -0
- package/SECURITY.md +151 -0
- package/package.json +131 -0
- package/scripts/constants/committee-indicator-map.d.ts +199 -0
- package/scripts/constants/committee-indicator-map.d.ts.map +1 -0
- package/scripts/constants/committee-indicator-map.js +1224 -0
- package/scripts/constants/committee-indicator-map.js.map +1 -0
- package/scripts/constants/config.d.ts +38 -0
- package/scripts/constants/config.d.ts.map +1 -0
- package/scripts/constants/config.js +66 -0
- package/scripts/constants/config.js.map +1 -0
- package/scripts/constants/language-articles.d.ts +84 -0
- package/scripts/constants/language-articles.d.ts.map +1 -0
- package/scripts/constants/language-articles.js +6771 -0
- package/scripts/constants/language-articles.js.map +1 -0
- package/scripts/constants/language-core.d.ts +38 -0
- package/scripts/constants/language-core.d.ts.map +1 -0
- package/scripts/constants/language-core.js +90 -0
- package/scripts/constants/language-core.js.map +1 -0
- package/scripts/constants/language-ui.d.ts +82 -0
- package/scripts/constants/language-ui.d.ts.map +1 -0
- package/scripts/constants/language-ui.js +889 -0
- package/scripts/constants/language-ui.js.map +1 -0
- package/scripts/constants/languages.d.ts +14 -0
- package/scripts/constants/languages.d.ts.map +1 -0
- package/scripts/constants/languages.js +15 -0
- package/scripts/constants/languages.js.map +1 -0
- package/scripts/generators/analysis-builders.d.ts +266 -0
- package/scripts/generators/analysis-builders.d.ts.map +1 -0
- package/scripts/generators/analysis-builders.js +2903 -0
- package/scripts/generators/analysis-builders.js.map +1 -0
- package/scripts/generators/breaking-content.d.ts +45 -0
- package/scripts/generators/breaking-content.d.ts.map +1 -0
- package/scripts/generators/breaking-content.js +530 -0
- package/scripts/generators/breaking-content.js.map +1 -0
- package/scripts/generators/committee-helpers.d.ts +54 -0
- package/scripts/generators/committee-helpers.d.ts.map +1 -0
- package/scripts/generators/committee-helpers.js +154 -0
- package/scripts/generators/committee-helpers.js.map +1 -0
- package/scripts/generators/dashboard-content.d.ts +95 -0
- package/scripts/generators/dashboard-content.d.ts.map +1 -0
- package/scripts/generators/dashboard-content.js +630 -0
- package/scripts/generators/dashboard-content.js.map +1 -0
- package/scripts/generators/deep-analysis-content.d.ts +23 -0
- package/scripts/generators/deep-analysis-content.d.ts.map +1 -0
- package/scripts/generators/deep-analysis-content.js +831 -0
- package/scripts/generators/deep-analysis-content.js.map +1 -0
- package/scripts/generators/mindmap-content.d.ts +55 -0
- package/scripts/generators/mindmap-content.d.ts.map +1 -0
- package/scripts/generators/mindmap-content.js +512 -0
- package/scripts/generators/mindmap-content.js.map +1 -0
- package/scripts/generators/motions-content.d.ts +50 -0
- package/scripts/generators/motions-content.d.ts.map +1 -0
- package/scripts/generators/motions-content.js +391 -0
- package/scripts/generators/motions-content.js.map +1 -0
- package/scripts/generators/news-enhanced.d.ts +14 -0
- package/scripts/generators/news-enhanced.d.ts.map +1 -0
- package/scripts/generators/news-enhanced.js +169 -0
- package/scripts/generators/news-enhanced.js.map +1 -0
- package/scripts/generators/news-indexes.d.ts +31 -0
- package/scripts/generators/news-indexes.d.ts.map +1 -0
- package/scripts/generators/news-indexes.js +410 -0
- package/scripts/generators/news-indexes.js.map +1 -0
- package/scripts/generators/pipeline/fetch-stage.d.ts +352 -0
- package/scripts/generators/pipeline/fetch-stage.d.ts.map +1 -0
- package/scripts/generators/pipeline/fetch-stage.js +1522 -0
- package/scripts/generators/pipeline/fetch-stage.js.map +1 -0
- package/scripts/generators/pipeline/generate-stage.d.ts +43 -0
- package/scripts/generators/pipeline/generate-stage.d.ts.map +1 -0
- package/scripts/generators/pipeline/generate-stage.js +204 -0
- package/scripts/generators/pipeline/generate-stage.js.map +1 -0
- package/scripts/generators/pipeline/output-stage.d.ts +48 -0
- package/scripts/generators/pipeline/output-stage.d.ts.map +1 -0
- package/scripts/generators/pipeline/output-stage.js +145 -0
- package/scripts/generators/pipeline/output-stage.js.map +1 -0
- package/scripts/generators/pipeline/transform-stage.d.ts +57 -0
- package/scripts/generators/pipeline/transform-stage.d.ts.map +1 -0
- package/scripts/generators/pipeline/transform-stage.js +111 -0
- package/scripts/generators/pipeline/transform-stage.js.map +1 -0
- package/scripts/generators/propositions-content.d.ts +29 -0
- package/scripts/generators/propositions-content.d.ts.map +1 -0
- package/scripts/generators/propositions-content.js +90 -0
- package/scripts/generators/propositions-content.js.map +1 -0
- package/scripts/generators/sankey-content.d.ts +45 -0
- package/scripts/generators/sankey-content.d.ts.map +1 -0
- package/scripts/generators/sankey-content.js +227 -0
- package/scripts/generators/sankey-content.js.map +1 -0
- package/scripts/generators/sitemap.d.ts +66 -0
- package/scripts/generators/sitemap.d.ts.map +1 -0
- package/scripts/generators/sitemap.js +562 -0
- package/scripts/generators/sitemap.js.map +1 -0
- package/scripts/generators/strategies/article-strategy.d.ts +146 -0
- package/scripts/generators/strategies/article-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/article-strategy.js +4 -0
- package/scripts/generators/strategies/article-strategy.js.map +1 -0
- package/scripts/generators/strategies/breaking-news-strategy.d.ts +64 -0
- package/scripts/generators/strategies/breaking-news-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/breaking-news-strategy.js +246 -0
- package/scripts/generators/strategies/breaking-news-strategy.js.map +1 -0
- package/scripts/generators/strategies/committee-reports-strategy.d.ts +93 -0
- package/scripts/generators/strategies/committee-reports-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/committee-reports-strategy.js +447 -0
- package/scripts/generators/strategies/committee-reports-strategy.js.map +1 -0
- package/scripts/generators/strategies/month-ahead-strategy.d.ts +60 -0
- package/scripts/generators/strategies/month-ahead-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/month-ahead-strategy.js +175 -0
- package/scripts/generators/strategies/month-ahead-strategy.js.map +1 -0
- package/scripts/generators/strategies/monthly-review-strategy.d.ts +66 -0
- package/scripts/generators/strategies/monthly-review-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/monthly-review-strategy.js +204 -0
- package/scripts/generators/strategies/monthly-review-strategy.js.map +1 -0
- package/scripts/generators/strategies/motions-strategy.d.ts +61 -0
- package/scripts/generators/strategies/motions-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/motions-strategy.js +215 -0
- package/scripts/generators/strategies/motions-strategy.js.map +1 -0
- package/scripts/generators/strategies/propositions-strategy.d.ts +60 -0
- package/scripts/generators/strategies/propositions-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/propositions-strategy.js +257 -0
- package/scripts/generators/strategies/propositions-strategy.js.map +1 -0
- package/scripts/generators/strategies/week-ahead-strategy.d.ts +57 -0
- package/scripts/generators/strategies/week-ahead-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/week-ahead-strategy.js +178 -0
- package/scripts/generators/strategies/week-ahead-strategy.js.map +1 -0
- package/scripts/generators/strategies/weekly-review-strategy.d.ts +63 -0
- package/scripts/generators/strategies/weekly-review-strategy.d.ts.map +1 -0
- package/scripts/generators/strategies/weekly-review-strategy.js +211 -0
- package/scripts/generators/strategies/weekly-review-strategy.js.map +1 -0
- package/scripts/generators/swot-content.d.ts +42 -0
- package/scripts/generators/swot-content.d.ts.map +1 -0
- package/scripts/generators/swot-content.js +366 -0
- package/scripts/generators/swot-content.js.map +1 -0
- package/scripts/generators/week-ahead-content.d.ts +103 -0
- package/scripts/generators/week-ahead-content.d.ts.map +1 -0
- package/scripts/generators/week-ahead-content.js +610 -0
- package/scripts/generators/week-ahead-content.js.map +1 -0
- package/scripts/index.d.ts +40 -0
- package/scripts/index.d.ts.map +1 -0
- package/scripts/index.js +53 -0
- package/scripts/index.js.map +1 -0
- package/scripts/mcp/ep-mcp-client.d.ts +471 -0
- package/scripts/mcp/ep-mcp-client.d.ts.map +1 -0
- package/scripts/mcp/ep-mcp-client.js +734 -0
- package/scripts/mcp/ep-mcp-client.js.map +1 -0
- package/scripts/mcp/mcp-connection.d.ts +264 -0
- package/scripts/mcp/mcp-connection.d.ts.map +1 -0
- package/scripts/mcp/mcp-connection.js +790 -0
- package/scripts/mcp/mcp-connection.js.map +1 -0
- package/scripts/mcp/mcp-health.d.ts +75 -0
- package/scripts/mcp/mcp-health.d.ts.map +1 -0
- package/scripts/mcp/mcp-health.js +78 -0
- package/scripts/mcp/mcp-health.js.map +1 -0
- package/scripts/mcp/mcp-retry.d.ts +94 -0
- package/scripts/mcp/mcp-retry.d.ts.map +1 -0
- package/scripts/mcp/mcp-retry.js +127 -0
- package/scripts/mcp/mcp-retry.js.map +1 -0
- package/scripts/mcp/wb-mcp-client.d.ts +38 -0
- package/scripts/mcp/wb-mcp-client.d.ts.map +1 -0
- package/scripts/mcp/wb-mcp-client.js +112 -0
- package/scripts/mcp/wb-mcp-client.js.map +1 -0
- package/scripts/templates/article-template.d.ts +9 -0
- package/scripts/templates/article-template.d.ts.map +1 -0
- package/scripts/templates/article-template.js +378 -0
- package/scripts/templates/article-template.js.map +1 -0
- package/scripts/templates/section-builders.d.ts +28 -0
- package/scripts/templates/section-builders.d.ts.map +1 -0
- package/scripts/templates/section-builders.js +142 -0
- package/scripts/templates/section-builders.js.map +1 -0
- package/scripts/types/analysis.d.ts +115 -0
- package/scripts/types/analysis.d.ts.map +1 -0
- package/scripts/types/analysis.js +4 -0
- package/scripts/types/analysis.js.map +1 -0
- package/scripts/types/common.d.ts +584 -0
- package/scripts/types/common.d.ts.map +1 -0
- package/scripts/types/common.js +96 -0
- package/scripts/types/common.js.map +1 -0
- package/scripts/types/generation.d.ts +104 -0
- package/scripts/types/generation.d.ts.map +1 -0
- package/scripts/types/generation.js +4 -0
- package/scripts/types/generation.js.map +1 -0
- package/scripts/types/index.d.ts +24 -0
- package/scripts/types/index.d.ts.map +1 -0
- package/scripts/types/index.js +16 -0
- package/scripts/types/index.js.map +1 -0
- package/scripts/types/intelligence.d.ts +129 -0
- package/scripts/types/intelligence.d.ts.map +1 -0
- package/scripts/types/intelligence.js +4 -0
- package/scripts/types/intelligence.js.map +1 -0
- package/scripts/types/mcp.d.ts +418 -0
- package/scripts/types/mcp.d.ts.map +1 -0
- package/scripts/types/mcp.js +4 -0
- package/scripts/types/mcp.js.map +1 -0
- package/scripts/types/parliament.d.ts +388 -0
- package/scripts/types/parliament.d.ts.map +1 -0
- package/scripts/types/parliament.js +4 -0
- package/scripts/types/parliament.js.map +1 -0
- package/scripts/types/quality.d.ts +114 -0
- package/scripts/types/quality.d.ts.map +1 -0
- package/scripts/types/quality.js +4 -0
- package/scripts/types/quality.js.map +1 -0
- package/scripts/types/stakeholder.d.ts +88 -0
- package/scripts/types/stakeholder.d.ts.map +1 -0
- package/scripts/types/stakeholder.js +16 -0
- package/scripts/types/stakeholder.js.map +1 -0
- package/scripts/types/visualization.d.ts +708 -0
- package/scripts/types/visualization.d.ts.map +1 -0
- package/scripts/types/visualization.js +4 -0
- package/scripts/types/visualization.js.map +1 -0
- package/scripts/types/world-bank.d.ts +85 -0
- package/scripts/types/world-bank.d.ts.map +1 -0
- package/scripts/types/world-bank.js +4 -0
- package/scripts/types/world-bank.js.map +1 -0
- package/scripts/utils/article-category.d.ts +18 -0
- package/scripts/utils/article-category.d.ts.map +1 -0
- package/scripts/utils/article-category.js +49 -0
- package/scripts/utils/article-category.js.map +1 -0
- package/scripts/utils/article-quality-scorer.d.ts +87 -0
- package/scripts/utils/article-quality-scorer.d.ts.map +1 -0
- package/scripts/utils/article-quality-scorer.js +1048 -0
- package/scripts/utils/article-quality-scorer.js.map +1 -0
- package/scripts/utils/content-metadata.d.ts +34 -0
- package/scripts/utils/content-metadata.d.ts.map +1 -0
- package/scripts/utils/content-metadata.js +249 -0
- package/scripts/utils/content-metadata.js.map +1 -0
- package/scripts/utils/content-validator.d.ts +94 -0
- package/scripts/utils/content-validator.d.ts.map +1 -0
- package/scripts/utils/content-validator.js +489 -0
- package/scripts/utils/content-validator.js.map +1 -0
- package/scripts/utils/copy-test-reports.d.ts +9 -0
- package/scripts/utils/copy-test-reports.d.ts.map +1 -0
- package/scripts/utils/copy-test-reports.js +508 -0
- package/scripts/utils/copy-test-reports.js.map +1 -0
- package/scripts/utils/file-utils.d.ts +144 -0
- package/scripts/utils/file-utils.d.ts.map +1 -0
- package/scripts/utils/file-utils.js +374 -0
- package/scripts/utils/file-utils.js.map +1 -0
- package/scripts/utils/fix-articles.d.ts +27 -0
- package/scripts/utils/fix-articles.d.ts.map +1 -0
- package/scripts/utils/fix-articles.js +510 -0
- package/scripts/utils/fix-articles.js.map +1 -0
- package/scripts/utils/generate-docs-index.d.ts +8 -0
- package/scripts/utils/generate-docs-index.d.ts.map +1 -0
- package/scripts/utils/generate-docs-index.js +275 -0
- package/scripts/utils/generate-docs-index.js.map +1 -0
- package/scripts/utils/html-sanitize.d.ts +18 -0
- package/scripts/utils/html-sanitize.d.ts.map +1 -0
- package/scripts/utils/html-sanitize.js +57 -0
- package/scripts/utils/html-sanitize.js.map +1 -0
- package/scripts/utils/intelligence-analysis.d.ts +173 -0
- package/scripts/utils/intelligence-analysis.d.ts.map +1 -0
- package/scripts/utils/intelligence-analysis.js +936 -0
- package/scripts/utils/intelligence-analysis.js.map +1 -0
- package/scripts/utils/intelligence-index.d.ts +126 -0
- package/scripts/utils/intelligence-index.d.ts.map +1 -0
- package/scripts/utils/intelligence-index.js +731 -0
- package/scripts/utils/intelligence-index.js.map +1 -0
- package/scripts/utils/metadata-utils.d.ts +14 -0
- package/scripts/utils/metadata-utils.d.ts.map +1 -0
- package/scripts/utils/metadata-utils.js +18 -0
- package/scripts/utils/metadata-utils.js.map +1 -0
- package/scripts/utils/news-metadata.d.ts +47 -0
- package/scripts/utils/news-metadata.d.ts.map +1 -0
- package/scripts/utils/news-metadata.js +259 -0
- package/scripts/utils/news-metadata.js.map +1 -0
- package/scripts/utils/validate-articles.d.ts +2 -0
- package/scripts/utils/validate-articles.d.ts.map +1 -0
- package/scripts/utils/validate-articles.js +284 -0
- package/scripts/utils/validate-articles.js.map +1 -0
- package/scripts/utils/validate-ep-api.d.ts +51 -0
- package/scripts/utils/validate-ep-api.d.ts.map +1 -0
- package/scripts/utils/validate-ep-api.js +160 -0
- package/scripts/utils/validate-ep-api.js.map +1 -0
- package/scripts/utils/world-bank-data.d.ts +84 -0
- package/scripts/utils/world-bank-data.d.ts.map +1 -0
- package/scripts/utils/world-bank-data.js +311 -0
- package/scripts/utils/world-bank-data.js.map +1 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-FileCopyrightText: 2024-2026 Hack23 AB
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
/**
|
|
5
|
+
* @module Utils/GenerateDocsIndex
|
|
6
|
+
* @description Creates an index.html page in the docs/ directory that links to all
|
|
7
|
+
* generated documentation and test reports.
|
|
8
|
+
*/
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import { join, resolve } from 'path';
|
|
11
|
+
import { pathToFileURL } from 'url';
|
|
12
|
+
import { PROJECT_ROOT } from '../constants/config.js';
|
|
13
|
+
const DOCS_DIR = join(PROJECT_ROOT, 'docs');
|
|
14
|
+
/**
|
|
15
|
+
* Generate the documentation index HTML
|
|
16
|
+
*
|
|
17
|
+
* @returns HTML content for the documentation index
|
|
18
|
+
*/
|
|
19
|
+
export function generateIndexHTML() {
|
|
20
|
+
const currentDate = new Date().toISOString().split('T')[0] ?? '';
|
|
21
|
+
return `<!DOCTYPE html>
|
|
22
|
+
<html lang="en">
|
|
23
|
+
<head>
|
|
24
|
+
<meta charset="UTF-8">
|
|
25
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
26
|
+
<meta name="description" content="EU Parliament Monitor - Technical Documentation">
|
|
27
|
+
<title>EU Parliament Monitor - Documentation</title>
|
|
28
|
+
<style>
|
|
29
|
+
* {
|
|
30
|
+
margin: 0;
|
|
31
|
+
padding: 0;
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
body {
|
|
36
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
|
37
|
+
line-height: 1.6;
|
|
38
|
+
color: #333;
|
|
39
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
40
|
+
min-height: 100vh;
|
|
41
|
+
padding: 2rem;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.container {
|
|
45
|
+
max-width: 1200px;
|
|
46
|
+
margin: 0 auto;
|
|
47
|
+
background: white;
|
|
48
|
+
border-radius: 12px;
|
|
49
|
+
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
header {
|
|
54
|
+
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
|
|
55
|
+
color: white;
|
|
56
|
+
padding: 3rem 2rem;
|
|
57
|
+
text-align: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
h1 {
|
|
61
|
+
font-size: 2.5rem;
|
|
62
|
+
margin-bottom: 0.5rem;
|
|
63
|
+
font-weight: 700;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.subtitle {
|
|
67
|
+
font-size: 1.2rem;
|
|
68
|
+
opacity: 0.9;
|
|
69
|
+
margin-bottom: 1rem;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.last-updated {
|
|
73
|
+
font-size: 0.9rem;
|
|
74
|
+
opacity: 0.8;
|
|
75
|
+
margin-top: 1rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main {
|
|
79
|
+
padding: 3rem 2rem;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.intro {
|
|
83
|
+
font-size: 1.1rem;
|
|
84
|
+
color: #555;
|
|
85
|
+
margin-bottom: 2rem;
|
|
86
|
+
line-height: 1.8;
|
|
87
|
+
text-align: center;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.docs-grid {
|
|
91
|
+
display: grid;
|
|
92
|
+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
93
|
+
gap: 1.5rem;
|
|
94
|
+
margin-top: 2rem;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.doc-card {
|
|
98
|
+
background: #f8f9fa;
|
|
99
|
+
border: 2px solid #e9ecef;
|
|
100
|
+
border-radius: 8px;
|
|
101
|
+
padding: 1.5rem;
|
|
102
|
+
transition: all 0.3s ease;
|
|
103
|
+
text-decoration: none;
|
|
104
|
+
color: inherit;
|
|
105
|
+
display: block;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.doc-card:hover {
|
|
109
|
+
transform: translateY(-4px);
|
|
110
|
+
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
|
111
|
+
border-color: #667eea;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.doc-card h2 {
|
|
115
|
+
color: #1e3c72;
|
|
116
|
+
font-size: 1.4rem;
|
|
117
|
+
margin-bottom: 0.5rem;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.doc-card .icon {
|
|
121
|
+
font-size: 2rem;
|
|
122
|
+
margin-bottom: 0.5rem;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.doc-card p {
|
|
126
|
+
color: #666;
|
|
127
|
+
font-size: 0.95rem;
|
|
128
|
+
line-height: 1.5;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.badge {
|
|
132
|
+
display: inline-block;
|
|
133
|
+
background: #667eea;
|
|
134
|
+
color: white;
|
|
135
|
+
padding: 0.25rem 0.75rem;
|
|
136
|
+
border-radius: 12px;
|
|
137
|
+
font-size: 0.75rem;
|
|
138
|
+
font-weight: 600;
|
|
139
|
+
margin-top: 0.5rem;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
footer {
|
|
143
|
+
background: #f8f9fa;
|
|
144
|
+
padding: 2rem;
|
|
145
|
+
text-align: center;
|
|
146
|
+
color: #666;
|
|
147
|
+
border-top: 1px solid #e9ecef;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
footer a {
|
|
151
|
+
color: #667eea;
|
|
152
|
+
text-decoration: none;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
footer a:hover {
|
|
156
|
+
text-decoration: underline;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@media (max-width: 768px) {
|
|
160
|
+
body {
|
|
161
|
+
padding: 1rem;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
h1 {
|
|
165
|
+
font-size: 2rem;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.docs-grid {
|
|
169
|
+
grid-template-columns: 1fr;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
</style>
|
|
173
|
+
</head>
|
|
174
|
+
<body>
|
|
175
|
+
<div class="container">
|
|
176
|
+
<header>
|
|
177
|
+
<h1>📚 EU Parliament Monitor</h1>
|
|
178
|
+
<div class="subtitle">Technical Documentation & Reports</div>
|
|
179
|
+
<div class="last-updated">Last Updated: ${currentDate}</div>
|
|
180
|
+
</header>
|
|
181
|
+
|
|
182
|
+
<main>
|
|
183
|
+
<div class="intro">
|
|
184
|
+
This documentation hub provides comprehensive technical information,
|
|
185
|
+
test reports, and API documentation for the EU Parliament Monitor project.
|
|
186
|
+
</div>
|
|
187
|
+
|
|
188
|
+
<div class="docs-grid">
|
|
189
|
+
<a href="api/index.html" class="doc-card">
|
|
190
|
+
<div class="icon">📖</div>
|
|
191
|
+
<h2>API Documentation</h2>
|
|
192
|
+
<p>Complete JSDoc-generated API documentation for all modules, functions, and classes.</p>
|
|
193
|
+
<span class="badge">JSDoc</span>
|
|
194
|
+
</a>
|
|
195
|
+
|
|
196
|
+
<a href="coverage/index.html" class="doc-card">
|
|
197
|
+
<div class="icon">📊</div>
|
|
198
|
+
<h2>Code Coverage</h2>
|
|
199
|
+
<p>Interactive coverage report showing test coverage metrics for the entire codebase.</p>
|
|
200
|
+
<span class="badge">Vitest</span>
|
|
201
|
+
</a>
|
|
202
|
+
|
|
203
|
+
<a href="test-results/index.html" class="doc-card">
|
|
204
|
+
<div class="icon">✅</div>
|
|
205
|
+
<h2>Test Results Dashboard</h2>
|
|
206
|
+
<p>Comprehensive test dashboard with Vitest HTML results, JUnit XML, and JSON reports.</p>
|
|
207
|
+
<span class="badge">Vitest</span>
|
|
208
|
+
</a>
|
|
209
|
+
|
|
210
|
+
<a href="playwright-report/index.html" class="doc-card">
|
|
211
|
+
<div class="icon">🎭</div>
|
|
212
|
+
<h2>E2E Test Report</h2>
|
|
213
|
+
<p>End-to-end test results from Playwright covering user workflows and accessibility.</p>
|
|
214
|
+
<span class="badge">Playwright</span>
|
|
215
|
+
</a>
|
|
216
|
+
|
|
217
|
+
<a href="test-results/eslint-report.html" class="doc-card">
|
|
218
|
+
<div class="icon">🔍</div>
|
|
219
|
+
<h2>ESLint Report</h2>
|
|
220
|
+
<p>Static analysis and code quality report showing linting results and style compliance.</p>
|
|
221
|
+
<span class="badge">ESLint</span>
|
|
222
|
+
</a>
|
|
223
|
+
|
|
224
|
+
<a href="../README.md" class="doc-card">
|
|
225
|
+
<div class="icon">📄</div>
|
|
226
|
+
<h2>README</h2>
|
|
227
|
+
<p>Project overview, installation instructions, usage guide, and contribution guidelines.</p>
|
|
228
|
+
<span class="badge">Markdown</span>
|
|
229
|
+
</a>
|
|
230
|
+
|
|
231
|
+
<a href="../SECURITY_ARCHITECTURE.md" class="doc-card">
|
|
232
|
+
<div class="icon">🔒</div>
|
|
233
|
+
<h2>Security Architecture</h2>
|
|
234
|
+
<p>Comprehensive security documentation including threat model and compliance mapping.</p>
|
|
235
|
+
<span class="badge">ISMS</span>
|
|
236
|
+
</a>
|
|
237
|
+
</div>
|
|
238
|
+
</main>
|
|
239
|
+
|
|
240
|
+
<footer>
|
|
241
|
+
<p>
|
|
242
|
+
<strong>EU Parliament Monitor</strong> -
|
|
243
|
+
European Parliament Intelligence Platform<br>
|
|
244
|
+
<a href="https://github.com/Hack23/euparliamentmonitor" target="_blank" rel="noopener noreferrer">
|
|
245
|
+
View on GitHub
|
|
246
|
+
</a>
|
|
247
|
+
</p>
|
|
248
|
+
</footer>
|
|
249
|
+
</div>
|
|
250
|
+
</body>
|
|
251
|
+
</html>`;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Main execution function
|
|
255
|
+
*/
|
|
256
|
+
async function main() {
|
|
257
|
+
console.log('📚 Generating documentation index...');
|
|
258
|
+
try {
|
|
259
|
+
await fs.mkdir(DOCS_DIR, { recursive: true });
|
|
260
|
+
const indexHTML = generateIndexHTML();
|
|
261
|
+
const indexPath = join(DOCS_DIR, 'index.html');
|
|
262
|
+
await fs.writeFile(indexPath, indexHTML, 'utf8');
|
|
263
|
+
console.log(`✅ Documentation index generated: ${indexPath}`);
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
267
|
+
console.error('❌ Error generating documentation index:', message);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Only run main when executed directly (not when imported)
|
|
272
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(resolve(process.argv[1])).href) {
|
|
273
|
+
main();
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=generate-docs-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-docs-index.js","sourceRoot":"","sources":["../../src/utils/generate-docs-index.ts"],"names":[],"mappings":";AAEA,8CAA8C;AAC9C,sCAAsC;AAEtC;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDA8JuC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwEnD,CAAC;AACT,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module Utils/HtmlSanitize
|
|
3
|
+
* @description Shared HTML sanitization helpers used across the generation,
|
|
4
|
+
* validation, and quality-scoring pipelines.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Remove all `<script>…</script>` blocks from an HTML string, replacing each
|
|
8
|
+
* with a single space.
|
|
9
|
+
*
|
|
10
|
+
* Uses iterative index-based scanning instead of a single-pass regex so that
|
|
11
|
+
* CodeQL does not flag the pattern as an insecure HTML tag filter
|
|
12
|
+
* (`js/bad-tag-filter`).
|
|
13
|
+
*
|
|
14
|
+
* @param html - HTML string to strip
|
|
15
|
+
* @returns The HTML with script blocks replaced by spaces
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripScriptBlocks(html: string): string;
|
|
18
|
+
//# sourceMappingURL=html-sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/html-sanitize.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsCtD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2024-2026 Hack23 AB
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* @module Utils/HtmlSanitize
|
|
5
|
+
* @description Shared HTML sanitization helpers used across the generation,
|
|
6
|
+
* validation, and quality-scoring pipelines.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Remove all `<script>…</script>` blocks from an HTML string, replacing each
|
|
10
|
+
* with a single space.
|
|
11
|
+
*
|
|
12
|
+
* Uses iterative index-based scanning instead of a single-pass regex so that
|
|
13
|
+
* CodeQL does not flag the pattern as an insecure HTML tag filter
|
|
14
|
+
* (`js/bad-tag-filter`).
|
|
15
|
+
*
|
|
16
|
+
* @param html - HTML string to strip
|
|
17
|
+
* @returns The HTML with script blocks replaced by spaces
|
|
18
|
+
*/
|
|
19
|
+
export function stripScriptBlocks(html) {
|
|
20
|
+
const OPEN = '<script';
|
|
21
|
+
const CLOSE = '</script';
|
|
22
|
+
let result = '';
|
|
23
|
+
let pos = 0;
|
|
24
|
+
const lower = html.toLowerCase();
|
|
25
|
+
while (pos < html.length) {
|
|
26
|
+
const openIdx = lower.indexOf(OPEN, pos);
|
|
27
|
+
if (openIdx < 0) {
|
|
28
|
+
result += html.slice(pos);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
// Copy everything before the opening <script
|
|
32
|
+
result += html.slice(pos, openIdx);
|
|
33
|
+
// Find the end of the opening tag
|
|
34
|
+
const openEnd = html.indexOf('>', openIdx);
|
|
35
|
+
if (openEnd < 0) {
|
|
36
|
+
// Malformed — no closing `>`, keep rest as-is
|
|
37
|
+
result += html.slice(openIdx);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
// Find the closing </script...> tag
|
|
41
|
+
const closeIdx = lower.indexOf(CLOSE, openEnd + 1);
|
|
42
|
+
if (closeIdx < 0) {
|
|
43
|
+
// No closing tag — drop the rest
|
|
44
|
+
result += ' ';
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
const closeEnd = html.indexOf('>', closeIdx);
|
|
48
|
+
if (closeEnd < 0) {
|
|
49
|
+
result += ' ';
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
result += ' ';
|
|
53
|
+
pos = closeEnd + 1;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=html-sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-sanitize.js","sourceRoot":"","sources":["../../src/utils/html-sanitize.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sCAAsC;AAEtC;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC;IACzB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,6CAA6C;QAC7C,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,8CAA8C;YAC9C,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM;QACR,CAAC;QACD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,iCAAiC;YACjC,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,CAAC;QACd,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { VotingAnomalyIntelligence, CoalitionIntelligence, MEPInfluenceScore, LegislativeVelocity, StakeholderPerspective, StakeholderOutcomeMatrix, AnalysisStakeholderType, VotingRecord, VotingPattern, VotingIntensity, CoalitionShift, PolarizationIndex, VotingTrend, CoalitionStabilityReport, LegislativeVelocityReport, LegislativeDocument } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse and score a voting anomaly from raw MCP data.
|
|
4
|
+
* Returns null for null, undefined, non-object, or inputs missing a valid
|
|
5
|
+
* anomaly identifier.
|
|
6
|
+
*
|
|
7
|
+
* @param rawAnomaly - Raw MCP anomaly data (unknown shape)
|
|
8
|
+
* @returns Structured VotingAnomalyIntelligence or null if input is invalid
|
|
9
|
+
*/
|
|
10
|
+
export declare function scoreVotingAnomaly(rawAnomaly: unknown): VotingAnomalyIntelligence | null;
|
|
11
|
+
/**
|
|
12
|
+
* Analyse a coalition's cohesion from raw MCP coalition data.
|
|
13
|
+
* Returns null for null, undefined, non-object, or inputs missing a valid
|
|
14
|
+
* coalition identifier.
|
|
15
|
+
*
|
|
16
|
+
* @param rawCoalition - Raw MCP coalition data (unknown shape)
|
|
17
|
+
* @returns Structured CoalitionIntelligence or null if input is invalid
|
|
18
|
+
*/
|
|
19
|
+
export declare function analyzeCoalitionCohesion(rawCoalition: unknown): CoalitionIntelligence | null;
|
|
20
|
+
/**
|
|
21
|
+
* Extract and score MEP influence from raw MCP influence data.
|
|
22
|
+
* Returns null for null, undefined, non-object, or inputs missing both a
|
|
23
|
+
* valid MEP identifier and display name.
|
|
24
|
+
*
|
|
25
|
+
* @param rawInfluence - Raw MCP MEP influence data (unknown shape)
|
|
26
|
+
* @returns Structured MEPInfluenceScore or null if input is invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function scoreMEPInfluence(rawInfluence: unknown): MEPInfluenceScore | null;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate legislative velocity from raw MCP procedure data.
|
|
31
|
+
* Returns null for null, undefined, non-object, or inputs missing a valid
|
|
32
|
+
* procedure identifier or title.
|
|
33
|
+
*
|
|
34
|
+
* @param rawProcedure - Raw MCP procedure data (unknown shape)
|
|
35
|
+
* @returns Structured LegislativeVelocity or null if input is invalid
|
|
36
|
+
*/
|
|
37
|
+
export declare function calculateLegislativeVelocity(rawProcedure: unknown): LegislativeVelocity | null;
|
|
38
|
+
/**
|
|
39
|
+
* Sort items by significance level descending, with numeric score as
|
|
40
|
+
* tie-breaker. Items with higher significance or scores appear first.
|
|
41
|
+
* The original array is not mutated.
|
|
42
|
+
*
|
|
43
|
+
* @param items - Array of items with optional significance and score fields
|
|
44
|
+
* @returns New sorted array ordered by significance then score
|
|
45
|
+
*/
|
|
46
|
+
export declare function rankBySignificance<T extends {
|
|
47
|
+
significance?: string | undefined;
|
|
48
|
+
overallScore?: number | undefined;
|
|
49
|
+
cohesionScore?: number | undefined;
|
|
50
|
+
}>(items: T[]): T[];
|
|
51
|
+
/**
|
|
52
|
+
* Build an HTML section element for displaying intelligence items as a list.
|
|
53
|
+
* All title, className, and item strings are HTML-escaped to prevent XSS.
|
|
54
|
+
* Returns an empty string when the items array is empty.
|
|
55
|
+
*
|
|
56
|
+
* @param title - Section heading text (will be HTML-escaped)
|
|
57
|
+
* @param items - Array of text items to display as list entries (will be HTML-escaped)
|
|
58
|
+
* @param className - CSS class name for the section element (will be HTML-escaped)
|
|
59
|
+
* @returns HTML string for the intelligence section, or empty string if no items
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildIntelligenceSection(title: string, items: string[], className: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Build a default set of stakeholder perspectives for a parliamentary action.
|
|
64
|
+
* Each perspective is seeded with a reasoning string and evidence items derived
|
|
65
|
+
* from the provided topic and impact scores. All six stakeholder groups receive
|
|
66
|
+
* a perspective entry.
|
|
67
|
+
*
|
|
68
|
+
* @param topic - Short description of the parliamentary action (e.g. vote title)
|
|
69
|
+
* @param scores - Optional per-stakeholder importance scores (0-1); defaults to 0.5
|
|
70
|
+
* @returns Array of six StakeholderPerspective objects, one per stakeholder group
|
|
71
|
+
*/
|
|
72
|
+
export declare function buildDefaultStakeholderPerspectives(topic: string, scores?: Partial<Record<AnalysisStakeholderType, number>>): StakeholderPerspective[];
|
|
73
|
+
/**
|
|
74
|
+
* Score stakeholder influence from raw MCP data.
|
|
75
|
+
* Returns null for null, undefined, non-object, or missing stakeholder type.
|
|
76
|
+
*
|
|
77
|
+
* @param rawData - Raw stakeholder influence data (unknown shape)
|
|
78
|
+
* @returns Structured StakeholderPerspective or null if input is invalid
|
|
79
|
+
*/
|
|
80
|
+
export declare function scoreStakeholderInfluence(rawData: unknown): StakeholderPerspective | null;
|
|
81
|
+
/**
|
|
82
|
+
* Build a StakeholderOutcomeMatrix row for a single parliamentary action.
|
|
83
|
+
* Derives outcomes from per-stakeholder scores: score > 0.6 → winner,
|
|
84
|
+
* score < 0.4 → loser, otherwise neutral.
|
|
85
|
+
*
|
|
86
|
+
* @param action - The parliamentary action being assessed
|
|
87
|
+
* @param scores - Per-stakeholder importance scores (0-1); defaults to 0.5
|
|
88
|
+
* @param confidence - Confidence level for the outcome assessments
|
|
89
|
+
* @returns A StakeholderOutcomeMatrix row
|
|
90
|
+
*/
|
|
91
|
+
export declare function buildStakeholderOutcomeMatrix(action: string, scores?: Partial<Record<AnalysisStakeholderType, number>>, confidence?: StakeholderOutcomeMatrix['confidence']): StakeholderOutcomeMatrix;
|
|
92
|
+
/**
|
|
93
|
+
* Map an array of StakeholderPerspective objects to a simple influence ranking.
|
|
94
|
+
* Returns stakeholder types sorted by severity (high → medium → low), then by
|
|
95
|
+
* impact direction (negative before positive, as negative impacts require more
|
|
96
|
+
* political attention).
|
|
97
|
+
*
|
|
98
|
+
* @param perspectives - Array of stakeholder perspectives to rank
|
|
99
|
+
* @returns Stakeholder types sorted by influence priority
|
|
100
|
+
*/
|
|
101
|
+
export declare function rankStakeholdersByInfluence(perspectives: readonly StakeholderPerspective[]): AnalysisStakeholderType[];
|
|
102
|
+
/**
|
|
103
|
+
* Compute voting intensity metrics from a set of voting records.
|
|
104
|
+
* Analyses the distribution of for/against/abstain votes to determine
|
|
105
|
+
* unanimity, polarization, and margin characteristics.
|
|
106
|
+
*
|
|
107
|
+
* @param records - Voting records to analyse
|
|
108
|
+
* @returns VotingIntensity metrics, or null if the records array is empty or contains no
|
|
109
|
+
* valid vote counts (for example, when all records have a total vote count of 0)
|
|
110
|
+
*/
|
|
111
|
+
export declare function computeVotingIntensity(records: readonly VotingRecord[]): VotingIntensity | null;
|
|
112
|
+
/**
|
|
113
|
+
* Detect coalition shifts by comparing current cohesion patterns against
|
|
114
|
+
* a baseline. Stability threshold is ±5%; severity tiers are >5% (medium),
|
|
115
|
+
* >10% (high), and >20% (critical).
|
|
116
|
+
*
|
|
117
|
+
* @param currentPatterns - Current period voting patterns
|
|
118
|
+
* @param baselinePatterns - Previous period patterns (or estimated baseline)
|
|
119
|
+
* @returns Array of detected coalition shifts, sorted by significance
|
|
120
|
+
*/
|
|
121
|
+
export declare function detectCoalitionShifts(currentPatterns: readonly VotingPattern[], baselinePatterns: readonly VotingPattern[]): CoalitionShift[];
|
|
122
|
+
/**
|
|
123
|
+
* Compute a polarization index for a parliamentary period based on
|
|
124
|
+
* voting pattern cohesion data. Uses a Laakso-Taagepera–inspired
|
|
125
|
+
* "effective number of blocs" calculation alongside cohesion analysis.
|
|
126
|
+
*
|
|
127
|
+
* @param patterns - Voting patterns for the period
|
|
128
|
+
* @returns PolarizationIndex assessment, or null if patterns are empty
|
|
129
|
+
*/
|
|
130
|
+
export declare function computePolarizationIndex(patterns: readonly VotingPattern[]): PolarizationIndex | null;
|
|
131
|
+
/**
|
|
132
|
+
* Detect voting trends across multiple voting records by analysing
|
|
133
|
+
* margin distribution, polarization patterns, and result consistency.
|
|
134
|
+
* Records are sorted by date (ascending) before analysis to ensure
|
|
135
|
+
* chronological trend detection. Returns an array of detected trends
|
|
136
|
+
* sorted by confidence.
|
|
137
|
+
*
|
|
138
|
+
* @param records - Voting records to analyse across sessions
|
|
139
|
+
* @returns Array of detected VotingTrend objects (empty if fewer than 2 valid records)
|
|
140
|
+
*/
|
|
141
|
+
export declare function detectVotingTrends(records: readonly VotingRecord[]): VotingTrend[];
|
|
142
|
+
/**
|
|
143
|
+
* Compute cross-session coalition stability by analysing average cohesion
|
|
144
|
+
* across a set of voting patterns. Groups with high cohesion are reported
|
|
145
|
+
* as stable; those with low cohesion are flagged.
|
|
146
|
+
*
|
|
147
|
+
* @param patterns - Voting patterns from multiple sessions
|
|
148
|
+
* @returns CoalitionStabilityReport (empty report if no patterns)
|
|
149
|
+
*/
|
|
150
|
+
export declare function computeCrossSessionCoalitionStability(patterns: readonly VotingPattern[]): CoalitionStabilityReport;
|
|
151
|
+
/**
|
|
152
|
+
* Rank MEP influence scores filtered by topic relevance.
|
|
153
|
+
* Matches scores whose mepName, mepId, or rank contains the topic substring
|
|
154
|
+
* (case-insensitive). Returns the filtered list sorted by overallScore
|
|
155
|
+
* descending. If topic is empty or no matches found, returns all scores
|
|
156
|
+
* sorted by overallScore.
|
|
157
|
+
*
|
|
158
|
+
* @param scores - MEP influence scores to rank
|
|
159
|
+
* @param topic - Topic keyword to filter by; if null/undefined/empty, all
|
|
160
|
+
* scores are returned sorted by overallScore
|
|
161
|
+
* @returns Sorted array of matching MEPInfluenceScore entries
|
|
162
|
+
*/
|
|
163
|
+
export declare function rankMEPInfluenceByTopic(scores: readonly MEPInfluenceScore[], topic: string | null | undefined): MEPInfluenceScore[];
|
|
164
|
+
/**
|
|
165
|
+
* Build a legislative velocity report with stage-by-stage breakdown from
|
|
166
|
+
* a set of legislative documents. Analyses document status distribution
|
|
167
|
+
* and identifies potential bottlenecks.
|
|
168
|
+
*
|
|
169
|
+
* @param docs - Legislative documents to analyse
|
|
170
|
+
* @returns LegislativeVelocityReport summary
|
|
171
|
+
*/
|
|
172
|
+
export declare function buildLegislativeVelocityReport(docs: readonly LegislativeDocument[]): LegislativeVelocityReport;
|
|
173
|
+
//# sourceMappingURL=intelligence-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence-analysis.d.ts","sourceRoot":"","sources":["../../src/utils/intelligence-analysis.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AA8G3B;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,yBAAyB,GAAG,IAAI,CAcxF;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,OAAO,GAAG,qBAAqB,GAAG,IAAI,CAa5F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAejF;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAe9F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS;IACR,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,EACD,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CASjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,GACxD,sBAAsB,EAAE,CAiB1B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAuBzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAM,EAC7D,UAAU,GAAE,wBAAwB,CAAC,YAAY,CAAY,GAC5D,wBAAwB,CAU1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,SAAS,sBAAsB,EAAE,GAC9C,uBAAuB,EAAE,CAwB3B;AAID;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,eAAe,GAAG,IAAI,CAiD/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,SAAS,aAAa,EAAE,EACzC,gBAAgB,EAAE,SAAS,aAAa,EAAE,GACzC,cAAc,EAAE,CAwClB;AAiDD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,aAAa,EAAE,GACjC,iBAAiB,GAAG,IAAI,CAgB1B;AAiJD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,WAAW,EAAE,CA+ClF;AAED;;;;;;;GAOG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,SAAS,aAAa,EAAE,GACjC,wBAAwB,CA4D1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,iBAAiB,EAAE,CA6BrB;AAyDD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS,mBAAmB,EAAE,GACnC,yBAAyB,CAuC3B"}
|