baseui
Version:
A React Component library implementing the Base design language
71 lines (64 loc) • 2.2 kB
JavaScript
;
/*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
/* eslint-env node */
const fs = require('fs');
const path = require('path');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
// Download tzdata and collect a list of timezones. Baseui previously used a library
// to do this, but it grew stale and unmaintained. This approach is straightforward
// enough to update whenever necessary, but future improvements could include building
// this data set before baseui is published so that the data is always fresh.
async function main() {
try {
const tmpDir = path.join(__dirname, 'tmp');
try {
await fs.promises.mkdir(tmpDir);
// $FlowFixMe - flow is not aware of recursive option
await fs.promises.rmdir(tmpDir, {
recursive: true
});
await fs.promises.mkdir(tmpDir);
} catch (e) {}
const src = `https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz`;
await exec(`curl -L ${src} | gzip -dc | tar -xf - --directory ${tmpDir}`);
const zoneTabPath = path.join(tmpDir, 'zone.tab');
const content = await fs.promises.readFile(zoneTabPath, 'utf-8');
const lines = content.split('\n');
const zones = [];
for (const line of lines) {
if (line[0] === '#') {
continue;
}
const parts = line.split(/\s+/);
if (parts.length >= 3) {
zones.push(parts[2]);
}
}
const file = [];
file.push(`/*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
`);
file.push('export const zones = [');
for (const zone of zones) {
file.push(` '${zone}',`);
}
file.push('];\n');
const tzdataPath = path.join(__dirname, 'tzdata.ts');
await fs.promises.writeFile(tzdataPath, file.join('\n'));
// $FlowFixMe - flow is not aware of recursive option
await fs.promises.rmdir(tmpDir, {
recursive: true
});
} catch (error) {
console.error(error);
}
}
main();