# libphonenumber-metadata-generator

Generates metadata for [`libphonenumber-js`](https://gitlab.com/catamphetamine/libphonenumber-js).

## Install

```
npm install libphonenumber-metadata-generator --save-dev
```

## Use

Add metadata generation script to **your project's** `package.json`. Example:

```js
{
  "scripts": {
    "generate-libphonenumber-metadata": "libphonenumber-metadata-generator metadata.custom.json --countries RU,DE --extended"
  }
}
```

And then run it like `npm run generate-libphonenumber-metadata`.

The arguments are:

* The first argument is the output metadata file path.

* `--countries` argument is a comma-separated list of the countries included (if `--countries` is omitted then all countries are included).

* `--extended` argument may be passed to include all regular expressions for precise phone number validation and getting phone number type, which will enlarge the resulting metadata size approximately twice.

* `--types ...` argument may be passed instead of `--extended` to generate metadata that _only_ supports the selected phone number types (a comma-separated list, e.g. `--types mobile,fixed_line`). [See the list of all possible phone number types](https://gitlab.com/catamphetamine/libphonenumber-metadata-generator/-/blob/master/source/generate.js#L6-17). Other phone number types will still be parseable, but they won't be recognized as being "valid" (`.isValid()` will return `false`), and also their "type" won't be detected (`.getType()` will return `undefined`).

## Versioning

Metadata generated by `libphonenumber-metadata-generator` has a numeric `version`: this is for backwards compatibility, because metadata file format could change in some future.

## API

### `download(url: string): string`

Downloads a file from a URL and returns its contents.

### `generate(xml: string, version: number, includedCountries: string[]?, extended: boolean?, includedPhoneNumberTypes: string[]?): object`

Parses metadata XML and returns a JSON object.

### `compress(metadata: object): object`

Compresses metadata JSON object: replaces objects with arrays.

### `version: number`

Provides the current version of metadata format.