• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Orckestra / orc-scripts / 105844

04 Sep 2025 08:38PM UTC coverage: 32.18% (-1.8%) from 33.968%
105844

push

Azure Pipelines

web-flow
Merge pull request #1271 from Orckestra/features/84550-ExtractTimezonesFromCLDR

Add a script to extract Timezones from CLDR XML file definition

153 of 461 branches covered (33.19%)

Branch coverage included in aggregate %.

0 of 50 new or added lines in 1 file covered. (0.0%)

275 of 869 relevant lines covered (31.65%)

3.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/scripts/generateWindowsZone.js
NEW
1
const fs = require("fs");
×
NEW
2
const https = require("https");
×
NEW
3
const jsdom = require("jsdom");
×
4

NEW
5
let outputFile = "";
×
NEW
6
let windowsZonesUrl = "";
×
7

NEW
8
if (process.argv.includes("--outputFile")) {
×
NEW
9
        outputFile = process.argv[process.argv.indexOf("--outputFile") + 1];
×
10
}
11

NEW
12
if (!outputFile) {
×
NEW
13
        throw new Error("Missing --outputFile 'file' argument.");
×
14
}
15

NEW
16
if (process.argv.includes("--windowsZonesUrl")) {
×
NEW
17
        windowsZonesUrl = process.argv[process.argv.indexOf("--windowsZonesUrl") + 1];
×
18
} else {
NEW
19
        windowsZonesUrl =
×
20
                "https://raw.githubusercontent.com/unicode-org/cldr/refs/heads/main/common/supplemental/windowsZones.xml";
21
}
22

NEW
23
downloadUrl();
×
24

25
function extractTimeZones(timeZones) {
NEW
26
        const result = {
×
27
                ianaToWindows: {},
28
                windowsToIana: {},
29
        };
30

NEW
31
        const dom = new jsdom.JSDOM(timeZones);
×
NEW
32
        const parser = new dom.window.DOMParser();
×
33

NEW
34
        const xmlDoc = parser.parseFromString(timeZones, "application/xml");
×
NEW
35
        const mapZones = xmlDoc.getElementsByTagName("mapZone");
×
36

NEW
37
        for (let zone of mapZones) {
×
NEW
38
                const key = zone.getAttribute("other");
×
NEW
39
                const type = zone.getAttribute("type");
×
40

NEW
41
                if (!result.windowsToIana[key]) {
×
NEW
42
                        result.windowsToIana[key] = [];
×
43
                }
44

NEW
45
                const types = type.split(" ");
×
46

NEW
47
                for (let t of types) {
×
NEW
48
                        if (!result.windowsToIana[key].includes(t)) {
×
NEW
49
                                result.windowsToIana[key].push(t);
×
50
                        }
51

NEW
52
                        if (!result.ianaToWindows[t]) {
×
NEW
53
                                result.ianaToWindows[t] = [];
×
54
                        }
55

NEW
56
                        if (!result.ianaToWindows[t].includes(key)) {
×
NEW
57
                                result.ianaToWindows[t].push(key);
×
58
                        }
59
                }
60
        }
61

NEW
62
        return result;
×
63
}
64

65
function downloadUrl() {
NEW
66
        https
×
67
                .get(windowsZonesUrl, {}, resp => {
NEW
68
                        let data = "";
×
NEW
69
                        let error = "";
×
70

NEW
71
                        if (resp.statusCode !== 200) {
×
NEW
72
                                error = new Error(`Request Failed. Status Code: ${resp.statusCode}`);
×
73
                        }
NEW
74
                        if (error) {
×
NEW
75
                                console.error(error.message);
×
76
                                // Consume response data to free up memory
NEW
77
                                resp.resume();
×
NEW
78
                                return;
×
79
                        }
80

81
                        // A chunk of data has been received.
NEW
82
                        resp.on("data", chunk => {
×
NEW
83
                                data += chunk;
×
84
                        });
85

86
                        // The whole response has been received. Print out the result.
NEW
87
                        resp.on("end", () => {
×
NEW
88
                                const result = extractTimeZones(data);
×
89

NEW
90
                                fs.writeFile(outputFile, JSON.stringify(result, null, 2), function (err) {
×
NEW
91
                                        if (err) {
×
NEW
92
                                                return console.error(err);
×
93
                                        }
NEW
94
                                        console.log(`File '${outputFile}' has been created`);
×
95
                                });
96
                        });
97
                })
98
                .on("error", err => {
NEW
99
                        console.log("Error: " + err.message);
×
100
                });
101
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc