riksdagsmonitor 0.8.62 β 0.8.65
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 +366 -972
- package/SECURITY.md +57 -4
- package/dist/lib/cia/csv-utils.d.ts.map +1 -1
- package/dist/lib/cia/csv-utils.js +15 -34
- package/dist/lib/cia/csv-utils.js.map +1 -1
- package/dist/lib/cia/dashboard-init.d.ts +1 -1
- package/dist/lib/cia/dashboard-init.d.ts.map +1 -1
- package/dist/lib/cia/dashboard-init.js +7 -6
- package/dist/lib/cia/dashboard-init.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 +6 -4
- package/dist/lib/shared/register-globals.js.map +1 -1
- package/package.json +7 -6
package/SECURITY.md
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
<
|
|
13
|
+
<img src="https://img.shields.io/badge/Owner-CEO-0A66C2?style=for-the-badge" alt="Owner"/>
|
|
14
|
+
<img src="https://img.shields.io/badge/Version-1.0-555?style=for-the-badge" alt="Version"/>
|
|
15
|
+
<img src="https://img.shields.io/badge/Effective-2026--02--20-success?style=for-the-badge" alt="Effective Date"/>
|
|
16
|
+
<img src="https://img.shields.io/badge/Review-Quarterly-orange?style=for-the-badge" alt="Review Cycle"/>
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
**π Document Owner:** CEO | **π Version:** 1.0 | **π
Last Updated:** 2026-02-20 (UTC)
|
|
@@ -198,3 +198,56 @@ If you discover a vulnerability in our IMF integration (e.g., cache integrity by
|
|
|
198
198
|
**Egress hosts** (allow-list): `www.imf.org` (Datamapper REST Β· WEO/FM), `sdmxcentral.imf.org` (SDMX 3.0 REST Β· IFS/BOP/DOTS/GFS/PCPS/ER/MFS_IR/MFS_PR). Both HTTPS-only, anonymous, public β no credentials required.
|
|
199
199
|
|
|
200
200
|
**Canonical rule.** Every economic claim in a Riksdagsmonitor article cites an IMF dataflow first; World Bank citations are reserved for governance, environment and social residue (the classes IMF does not publish). SCB is the Swedish-specific ground truth layer. See `ECONOMIC_DATA_CONTRACT.md` v2.1 for the banned-phrase list and vintage discipline (>6 mo β annotation).
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## π Hack23 Ecosystem
|
|
205
|
+
|
|
206
|
+
<table>
|
|
207
|
+
<tr>
|
|
208
|
+
<th width="33%">π Platforms</th>
|
|
209
|
+
<th width="33%">π¦ Open-Source Projects</th>
|
|
210
|
+
<th width="33%">π‘οΈ Governance & Standards</th>
|
|
211
|
+
</tr>
|
|
212
|
+
<tr>
|
|
213
|
+
<td valign="top">
|
|
214
|
+
π³οΈ <a href="https://riksdagsmonitor.com">Riksdagsmonitor</a> β Swedish Parliament intelligence<br>
|
|
215
|
+
πͺπΊ <a href="https://www.euparliamentmonitor.com">EU Parliament Monitor</a> β European coverage<br>
|
|
216
|
+
π΅οΈ <a href="https://www.hack23.com/cia">Citizen Intelligence Agency</a> β political-data engine<br>
|
|
217
|
+
π <a href="https://www.hack23.com">Hack23 AB</a> β corporate site<br>
|
|
218
|
+
π° <a href="https://hack23.com/blog.html">Hack23 Blog</a> β engineering & policy<br>
|
|
219
|
+
πΌ <a href="https://www.linkedin.com/company/hack23/">Hack23 on LinkedIn</a>
|
|
220
|
+
</td>
|
|
221
|
+
<td valign="top">
|
|
222
|
+
π³οΈ <a href="https://github.com/Hack23/riksdagsmonitor">Hack23/riksdagsmonitor</a><br>
|
|
223
|
+
π΅οΈ <a href="https://github.com/Hack23/cia">Hack23/cia</a><br>
|
|
224
|
+
πͺπΊ <a href="https://github.com/Hack23/euparliamentmonitor">Hack23/euparliamentmonitor</a><br>
|
|
225
|
+
π <a href="https://github.com/Hack23/european-parliament-mcp">Hack23/european-parliament-mcp</a><br>
|
|
226
|
+
β
<a href="https://github.com/Hack23/cia-compliance-manager">Hack23/cia-compliance-manager</a><br>
|
|
227
|
+
π₯ <a href="https://github.com/Hack23/black-trigram">Hack23/black-trigram</a><br>
|
|
228
|
+
π <a href="https://github.com/Hack23/homepage">Hack23/homepage</a>
|
|
229
|
+
</td>
|
|
230
|
+
<td valign="top">
|
|
231
|
+
π‘οΈ <a href="https://github.com/Hack23/ISMS-PUBLIC">Hack23 ISMS-PUBLIC</a> β public ISMS<br>
|
|
232
|
+
π <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/Information_Security_Policy.md">Information Security Policy</a><br>
|
|
233
|
+
π€ <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/AI_Policy.md">AI Policy</a><br>
|
|
234
|
+
π§ͺ <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md">Secure Development Policy</a><br>
|
|
235
|
+
π― <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/Threat_Modeling.md">Threat Modeling Policy</a><br>
|
|
236
|
+
β οΈ <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/Vulnerability_Management.md">Vulnerability Management</a><br>
|
|
237
|
+
π·οΈ <a href="https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md">Classification Framework</a>
|
|
238
|
+
</td>
|
|
239
|
+
</tr>
|
|
240
|
+
</table>
|
|
241
|
+
|
|
242
|
+
<p align="center">
|
|
243
|
+
<a href="https://www.bestpractices.dev/projects/12069"><img src="https://www.bestpractices.dev/projects/12069/badge" alt="OpenSSF Best Practices"/></a>
|
|
244
|
+
<a href="https://scorecard.dev/viewer/?uri=github.com/Hack23/riksdagsmonitor"><img src="https://api.securityscorecards.dev/projects/github.com/Hack23/riksdagsmonitor/badge" alt="OpenSSF Scorecard"/></a>
|
|
245
|
+
<a href="https://github.com/Hack23/ISMS-PUBLIC"><img src="https://img.shields.io/badge/ISO_27001-2022-blue?style=flat-square&logo=iso&logoColor=white" alt="ISO 27001:2022"/></a>
|
|
246
|
+
<a href="https://github.com/Hack23/ISMS-PUBLIC"><img src="https://img.shields.io/badge/NIST_CSF-2.0-green?style=flat-square&logo=nist&logoColor=white" alt="NIST CSF 2.0"/></a>
|
|
247
|
+
<a href="https://github.com/Hack23/ISMS-PUBLIC"><img src="https://img.shields.io/badge/CIS_Controls-v8.1-orange?style=flat-square&logo=cisecurity&logoColor=white" alt="CIS Controls v8.1"/></a>
|
|
248
|
+
<a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square" alt="Apache 2.0"/></a>
|
|
249
|
+
</p>
|
|
250
|
+
|
|
251
|
+
<p align="center"><em>π³οΈ Empower citizens Β· π Strengthen democratic accountability Β· π΅οΈ Illuminate the political process</em></p>
|
|
252
|
+
|
|
253
|
+
<p align="center"><sub>Β© 2008β2026 <a href="https://www.hack23.com">Hack23 AB</a> (Org.nr 559534-7807) Β· Maintainer: <a href="https://www.linkedin.com/in/jamessorling/">James Pether SΓΆrling, CISSP CISM</a></sub></p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv-utils.d.ts","sourceRoot":"","sources":["../../../src/browser/cia/csv-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"csv-utils.d.ts","sourceRoot":"","sources":["../../../src/browser/cia/csv-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG,CACpB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEvB;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBlD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,OAAO,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAG3E"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* @license Apache-2.0
|
|
15
15
|
* @since 2026
|
|
16
16
|
*/
|
|
17
|
+
import Papa from 'papaparse';
|
|
17
18
|
/**
|
|
18
19
|
* Parse CSV text into an array of header-keyed rows with auto-typed values.
|
|
19
20
|
*
|
|
@@ -25,42 +26,22 @@
|
|
|
25
26
|
* @returns Parsed rows (empty array if header-only or empty)
|
|
26
27
|
*/
|
|
27
28
|
export function parseCSV(csvText) {
|
|
28
|
-
const
|
|
29
|
-
if (
|
|
29
|
+
const trimmed = csvText.trim();
|
|
30
|
+
if (!trimmed || !trimmed.includes('\n'))
|
|
30
31
|
return [];
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const ch = line[j];
|
|
43
|
-
if (ch === '"') {
|
|
44
|
-
inQuotes = !inQuotes;
|
|
45
|
-
}
|
|
46
|
-
else if (ch === ',' && !inQuotes) {
|
|
47
|
-
values.push(current.trim());
|
|
48
|
-
current = '';
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
current += ch;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
values.push(current.trim());
|
|
55
|
-
const row = {};
|
|
56
|
-
headers.forEach((h, idx) => {
|
|
57
|
-
const val = values[idx] || '';
|
|
58
|
-
const num = Number(val);
|
|
59
|
-
row[h] = val !== '' && !isNaN(num) ? num : val;
|
|
60
|
-
});
|
|
61
|
-
rows.push(row);
|
|
32
|
+
const parsed = Papa.parse(trimmed, {
|
|
33
|
+
header: true,
|
|
34
|
+
dynamicTyping: true,
|
|
35
|
+
skipEmptyLines: true,
|
|
36
|
+
transformHeader: header => header.trim().replace(/^"|"$/g, ''),
|
|
37
|
+
});
|
|
38
|
+
if (parsed.errors.length > 0) {
|
|
39
|
+
const errorSummary = parsed.errors
|
|
40
|
+
.map(error => `${error.code} at row ${error.row ?? 'unknown'}: ${error.message}`)
|
|
41
|
+
.join('; ');
|
|
42
|
+
throw new Error(`CSV parse error: ${errorSummary}`);
|
|
62
43
|
}
|
|
63
|
-
return
|
|
44
|
+
return parsed.data.filter(row => Object.values(row).some(value => value !== null && value !== undefined && value !== ''));
|
|
64
45
|
}
|
|
65
46
|
/**
|
|
66
47
|
* Join a base URL with a relative path using exactly one slash between them.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv-utils.js","sourceRoot":"","sources":["../../../src/browser/cia/csv-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"csv-utils.js","sourceRoot":"","sources":["../../../src/browser/cia/csv-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @marketing First-load experience quality β dashboard initialization speed and reliability determine first-impression quality for new users. Time to Interactive (< 3s target) is critical for conversion from landing page visitor to engaged user. Loading state UX affects bounce rate.
|
|
24
24
|
* */
|
|
25
|
-
export
|
|
25
|
+
export declare function startDashboard(): void;
|
|
26
26
|
//# sourceMappingURL=dashboard-init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-init.d.ts","sourceRoot":"","sources":["../../../src/browser/cia/dashboard-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;KAuBK"}
|
|
1
|
+
{"version":3,"file":"dashboard-init.d.ts","sourceRoot":"","sources":["../../../src/browser/cia/dashboard-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;KAuBK;AAwFL,wBAAgB,cAAc,IAAI,IAAI,CAMrC"}
|
|
@@ -98,11 +98,12 @@ async function initDashboard() {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
|
|
102
|
-
if (document.readyState === 'loading') {
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
|
|
101
|
+
export function startDashboard() {
|
|
102
|
+
if (document.readyState === 'loading') {
|
|
103
|
+
document.addEventListener('DOMContentLoaded', () => void initDashboard());
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
void initDashboard();
|
|
107
|
+
}
|
|
107
108
|
}
|
|
108
109
|
//# sourceMappingURL=dashboard-init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-init.js","sourceRoot":"","sources":["../../../src/browser/cia/dashboard-init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dashboard-init.js","sourceRoot":"","sources":["../../../src/browser/cia/dashboard-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-globals.d.ts","sourceRoot":"","sources":["../../../src/browser/shared/register-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
1
|
+
{"version":3,"file":"register-globals.d.ts","sourceRoot":"","sources":["../../../src/browser/shared/register-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}
|
|
@@ -13,10 +13,12 @@
|
|
|
13
13
|
import { Chart } from 'chart.js/auto';
|
|
14
14
|
import * as d3 from 'd3';
|
|
15
15
|
import Papa from 'papaparse';
|
|
16
|
-
|
|
17
|
-
globalThis.Chart
|
|
18
|
-
globalThis.
|
|
19
|
-
globalThis.
|
|
16
|
+
export function registerBrowserGlobals() {
|
|
17
|
+
// Expose on globalThis so dashboard modules can access via (globalThis as any).Chart / .d3 / .Papa
|
|
18
|
+
globalThis.Chart = Chart;
|
|
19
|
+
globalThis.d3 = d3;
|
|
20
|
+
globalThis.Papa = Papa;
|
|
21
|
+
}
|
|
20
22
|
// Optional Chart.js plugins must be imported explicitly by applications that
|
|
21
23
|
// need them. Do not dynamically import `chartjs-plugin-annotation` here:
|
|
22
24
|
// bundlers such as Vite/Rollup/Webpack will still try to resolve the module
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-globals.js","sourceRoot":"","sources":["../../../src/browser/shared/register-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,mGAAmG;
|
|
1
|
+
{"version":3,"file":"register-globals.js","sourceRoot":"","sources":["../../../src/browser/shared/register-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,sBAAsB;IACpC,mGAAmG;IAClG,UAAsC,CAAC,KAAK,GAAG,KAAK,CAAC;IACrD,UAAsC,CAAC,EAAE,GAAG,EAAE,CAAC;IAC/C,UAAsC,CAAC,IAAI,GAAG,IAAI,CAAC;AACtD,CAAC;AAED,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,wEAAwE"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "riksdagsmonitor",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.65",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Swedish Parliament (Riksdag) intelligence platform β TypeScript utilities for political data visualization, dashboards, and open data analysis with Chart.js and D3.js",
|
|
6
6
|
"main": "dist/lib/shared/index.js",
|
|
7
7
|
"module": "dist/lib/shared/index.js",
|
|
8
8
|
"types": "dist/lib/shared/index.d.ts",
|
|
9
9
|
"sideEffects": [
|
|
10
|
-
"./dist/lib/shared/register-globals.js"
|
|
10
|
+
"./dist/lib/shared/register-globals.js",
|
|
11
|
+
"./src/browser/cia-entry.ts"
|
|
11
12
|
],
|
|
12
13
|
"exports": {
|
|
13
14
|
".": {
|
|
@@ -50,7 +51,7 @@
|
|
|
50
51
|
"dev": "vite",
|
|
51
52
|
"predev": "npx tsx scripts/copy-vendor-mermaid.ts --quiet",
|
|
52
53
|
"copy-vendor": "npx tsx scripts/copy-vendor-mermaid.ts",
|
|
53
|
-
"prebuild": "npx tsx scripts/copy-vendor-mermaid.ts --quiet && npx tsx scripts/aggregate-analysis.ts --all --quiet && npx tsx scripts/render-articles.ts --all --lang en,sv --quiet && npx tsx scripts/generate-news-indexes/index.ts && npx tsx scripts/extract-news-metadata.ts && npx tsx scripts/generate-sitemap-html.ts && npx tsx scripts/generate-political-intelligence.ts && npx tsx scripts/generate-rss.ts && npx tsx scripts/generate-sitemap.ts",
|
|
54
|
+
"prebuild": "npx tsx scripts/copy-vendor-mermaid.ts --quiet && npx tsx scripts/aggregate-analysis.ts --all --quiet && npx tsx scripts/render-articles.ts --all --lang en,sv --quiet && npx tsx scripts/generate-news-indexes/index.ts && npx tsx scripts/extract-news-metadata.ts && npx tsx scripts/generate-sitemap-html.ts && npx tsx scripts/generate-political-intelligence.ts && npx tsx scripts/generate-rss.ts && npx tsx scripts/generate-sitemap.ts && npx tsx scripts/normalize-static-html-chrome.ts && npx tsx scripts/backfill-translated-chrome.ts",
|
|
54
55
|
"build": "vite build",
|
|
55
56
|
"build:lib": "tsc -p tsconfig.lib.json && tsc -p tsconfig.npm-scripts.json",
|
|
56
57
|
"postbuild": "cp rss.xml dist/rss.xml && cp sitemap.xml dist/sitemap.xml && cp -r cia-data dist/cia-data",
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
"aggregate-analysis": "npx tsx scripts/aggregate-analysis.ts --all",
|
|
78
79
|
"render-articles": "npx tsx scripts/render-articles.ts --all --lang en,sv",
|
|
79
80
|
"generate-news-indexes": "node scripts/generate-news-indexes.ts",
|
|
80
|
-
"generate-sitemap": "
|
|
81
|
+
"generate-sitemap": "tsx scripts/generate-sitemap.ts",
|
|
81
82
|
"generate-sitemap-html": "npx tsx scripts/generate-sitemap-html.ts",
|
|
82
83
|
"generate-political-intelligence": "npx tsx scripts/generate-political-intelligence.ts",
|
|
83
84
|
"generate-rss": "npx tsx scripts/generate-rss.ts",
|
|
@@ -92,7 +93,7 @@
|
|
|
92
93
|
"test:e2ereportmerge": "echo 'Cypress report merge placeholder - mochawesome-merge if multi-spec reports exist'",
|
|
93
94
|
"test:e2ereporthtmlall": "echo 'Cypress HTML report generation placeholder - mochawesome-report-generator'",
|
|
94
95
|
"build:test-reports": "mkdir -p docs/test-results docs/cypress docs/coverage && ([ -d builds/coverage ] && [ -n \"$(ls -A builds/coverage 2>/dev/null)\" ] && cp -r builds/coverage/* docs/coverage/ || echo 'No coverage directory to copy') && ([ -d builds/test-results ] && [ -n \"$(ls -A builds/test-results 2>/dev/null)\" ] && cp -r builds/test-results/* docs/test-results/ || echo 'No test-results directory to copy') && ([ -d builds/cypress ] && [ -n \"$(ls -A builds/cypress 2>/dev/null)\" ] && cp -r builds/cypress/* docs/cypress/ || echo 'No cypress directory to copy') && echo 'Test reports copied to docs/'",
|
|
95
|
-
"docs:sitemap": "
|
|
96
|
+
"docs:sitemap": "tsx scripts/generate-sitemap.ts",
|
|
96
97
|
"serve": "python3 -m http.server 8080",
|
|
97
98
|
"linkcheck": "linkinator http://localhost:8080/ --recurse",
|
|
98
99
|
"prepublishOnly": "npm run lint && npm run build:lib && npm test",
|
|
@@ -200,7 +201,7 @@
|
|
|
200
201
|
"typedoc": "0.28.19",
|
|
201
202
|
"typedoc-plugin-mdn-links": "5.1.1",
|
|
202
203
|
"typescript": "6.0.3",
|
|
203
|
-
"typescript-eslint": "8.59.
|
|
204
|
+
"typescript-eslint": "8.59.1",
|
|
204
205
|
"unified": "^11.0.5",
|
|
205
206
|
"vite": "8.0.10",
|
|
206
207
|
"vite-plugin-sri-gen": "1.4.1",
|