123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import minimist from 'minimist'
- import path from 'path'
- import fs from 'fs'
- import { version, generate, compress } from 'libphonenumber-metadata-generator'
- // https://ru.stackoverflow.com/questions/1281148/referenceerror-dirname-is-not-defined
- import { fileURLToPath } from 'url'
- import { dirname } from 'path'
- const __filename = fileURLToPath(import.meta.url)
- const __dirname = dirname(__filename)
- // const REGION_CODE_FOR_NON_GEO_ENTITY = '001'
- const input = fs.readFileSync(path.join(__dirname, process.argv[2]), 'utf8')
- const output_file = process.argv[3]
- const command_line_arguments = minimist(process.argv.slice(4))
- // Included countries
- let included_countries
- if (command_line_arguments.countries) {
- included_countries = command_line_arguments.countries.split(',')
- console.log('Included countries:', included_countries)
- included_countries = new Set(included_countries)
- }
- // Include all regular expressions
- let extended = false
- if (command_line_arguments.extended) {
- console.log('Include extra validation regular expressions')
- extended = true
- }
- // Included phone number types
- let included_phone_number_types
- if (command_line_arguments.types) {
- included_phone_number_types = command_line_arguments.types.split(',')
- console.log('Included phone number types:', included_phone_number_types)
- included_phone_number_types = new Set(included_phone_number_types)
- }
- // Generate and compress metadata
- generate(input, version, included_countries, extended, included_phone_number_types).then((output) => {
- // Write uncompressed metadata into a file for easier debugging
- if (command_line_arguments.debug) {
- console.log('Output uncompressed JSON for debugging')
- fs.writeFileSync(path.join(__dirname, '../metadata.json'), JSON.stringify(output, undefined, 3))
- }
- // Compress the generated metadata
- fs.writeFileSync(path.join(__dirname, output_file), JSON.stringify(compress(output)))
- // Output mobile phone number type examples
- if (command_line_arguments.examples === 'mobile') {
- var examples = Object.keys(output.countries).reduce(function(out, country_code) {
- // if (country_code === REGION_CODE_FOR_NON_GEO_ENTITY) {
- // return out
- // }
- var mobile = output.countries[country_code].examples.mobile
- var fixed_line = output.countries[country_code].examples.fixed_line
- if (mobile) {
- out[country_code] = mobile
- }
- // "TA" country doesn't have any mobile phone number example
- else if (fixed_line) {
- console.warn(`Country ${country_code} doesn't have a mobile phone number example. Substituting with a fixed line phone number example.`)
- out[country_code] = fixed_line
- } else {
- console.error(`Country ${country_code} doesn't have neither a mobile phone number example nor a fixed line phone number example.`)
- // `async` errors aren't being caught at the top level in Node.js
- process.exit(1)
- }
- return out
- }, {})
- fs.writeFileSync(
- path.join(__dirname, '../examples.mobile.json'),
- JSON.stringify(examples)
- )
- }
- })
|