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

Orckestra / orc-scripts / 105819

03 Sep 2025 07:01PM UTC coverage: 32.156%. First build
105819

Pull #1271

Azure Pipelines

Jocelyn
Add a script to extract Timezones from CLDR XML file definition

Story: #84550
Pull Request #1271: 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 51 new or added lines in 1 file covered. (0.0%)

275 of 870 relevant lines covered (31.61%)

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
console.log(process.argv);
×
9

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

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

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

NEW
25
downloadUrl();
×
26

27
function extractTimeZones(timeZones) {
NEW
28
        const result = {
×
29
                IANA: {},
30
                WindowsZone: {},
31
        };
32

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

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

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

NEW
43
                if (!result.IANA[key]) {
×
NEW
44
                        result.IANA[key] = [];
×
45
                }
46

NEW
47
                const types = type.split(" ");
×
48

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

NEW
54
                        if (!result.WindowsZone[t]) {
×
NEW
55
                                result.WindowsZone[t] = [];
×
56
                        }
57

NEW
58
                        if (!result.WindowsZone[t].includes(key)) {
×
NEW
59
                                result.WindowsZone[t].push(key);
×
60
                        }
61
                }
62
        }
63

NEW
64
        return result;
×
65
}
66

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

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

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

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

NEW
92
                                fs.writeFile(outputFile, JSON.stringify(result, null, 2), function (err) {
×
NEW
93
                                        if (err) {
×
NEW
94
                                                return console.error(err);
×
95
                                        }
NEW
96
                                        console.log(`File '${outputFile}' has been created`);
×
97
                                });
98
                        });
99
                })
100
                .on("error", err => {
NEW
101
                        console.log("Error: " + err.message);
×
102
                });
103
}
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