You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					81 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					81 lines
				
				3.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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)
							 | 
						||
| 
								 | 
							
										)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								})
							 |