diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..91e4d97 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js index 2a3e522..c7b177d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,13 +3,9 @@ module.exports = { commonjs: true, node: true, }, - extends: ['@parcellab/eslint-config/base'], + extends: ['@parcellab/eslint-config/base', 'prettier'], rules: { - 'comma-dangle': ['error', 'always-multiline'], 'prefer-const': 'error', - 'quote-props': ['error', 'consistent-as-needed'], - 'quotes': ['error', 'single'], - 'semi': ['error', 'always'], 'unicorn/prefer-module': 'off', }, }; diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 55681a9..a6e6569 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,5 +21,6 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: npm ci + - run: npm run format:check - run: npm run build --if-present - run: npm test diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..0f528ff --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +node_modules +package-lock.json + +# Generated/large data files: keep existing formatting to avoid noisy diffs. +country/**/*.json +regionNames/**/*.json +regions/**/*.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..9955296 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,15 @@ +{ + "singleQuote": true, + "semi": true, + "trailingComma": "all", + "quoteProps": "consistent", + "printWidth": 100, + "overrides": [ + { + "files": ["*.yml", "*.yaml"], + "options": { + "singleQuote": false + } + } + ] +} diff --git a/DATA_REQUIREMENTS.md b/DATA_REQUIREMENTS.md index 0e5f18f..37b4cc3 100644 --- a/DATA_REQUIREMENTS.md +++ b/DATA_REQUIREMENTS.md @@ -1,18 +1,23 @@ # Country Data Requirements + Guide for adding a new country to the static Region Identifier dataset. Each supported country needs three JSON files plus a small code change. ## 1) Country config – `country/ISO3.json` + - Keys: - `zipCodeFormat`: `"numeric"` or `"alpha"`. - `zipCodeLength`: integer, required for numeric formats to pad/compare values (USA=5, AUS=4, DEU=5, etc.). Omit for alpha formats (CAN/GBR/NLD). - Example: + ```json { "zipCodeFormat": "numeric", "zipCodeLength": 5 } ``` ## 2) Region names – `regionNames/ISO3.json` + - Plain object mapping ISO 3166-2 region codes (same codes used in `regions/*.json`) to display names in English. - Example (`regionNames/AUS.json`): + ```json { "AU-NSW": "New South Wales", @@ -21,11 +26,15 @@ Guide for adding a new country to the static Region Identifier dataset. Each sup ``` ## 3) Region mappings – `regions/ISO3.json` + Array of objects that map postal codes to ISO 3166-2 region codes. Formats already used in the repo: + - **Numeric intervals** (inclusive): objects with `low`, `high`, `region`. Values can be numbers or numeric strings if leading zeros matter. Example (`regions/AUS.json`): + ```json { "region": "AU-NSW", "low": 1000, "high": 1999 } ``` + - **Explicit codes**: objects with `low`, `region`, no `high`. Every postal code (or prefix) must be listed. Use strings to preserve zeros. Examples: - Belgium lists every 4-digit code (`regions/BEL.json`). - Spain lists 5-digit codes as strings (`regions/ESP.json`). @@ -34,20 +43,24 @@ Array of objects that map postal codes to ISO 3166-2 region codes. Formats alrea - **Discrete lists**: objects with `region` and `list` (array of codes). Numeric countries store numbers; matching uses `zipCodeLength` to pad leading zeros before comparison. Examples: USA (`list` of 5-digit numbers), RUS (per-region lists). Additional format notes: + - Files can mix formats if needed. Order matters because the lookup stops at the first match. - Intervals and lists are treated as inclusive ranges; for alpha codes only exact equality is used. - Keep codes as strings when leading zeros are significant. ## 4) Code wiring + - Add the ISO3 code to `availableCountries` in `lib/region.js`; otherwise the static data is ignored and Google is used. - If the country needs custom postal-code normalization, extend `validateZipCode` (see existing cases for GBR, CAN, NLD, MEX). ## 5) Testing + - Add test cases to `test/tests.js` under `countriesPostalCodes`: include the country ISO/name, a representative zip, expected region code, and set `usingGoogle: false`. - Run `npm test` to execute the Node.js test runner. - Optional: verify pretty-name lookups via `getNameFromCountryAndRegion` using the `regionNames` file. ## 6) Data quality checklist + - Region codes must be valid ISO 3166-2 for the country. - `regionNames` should be English and cover every region code present in `regions/ISO3.json`. - Postal-code coverage should include territories and edge prefixes (e.g., US territories, Canadian northern prefixes). diff --git a/README.md b/README.md index ad81de4..69d4b2f 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,14 @@ Utility module that provides an easy way to identify the region of the country depending on the postal code, brings a set of determined regions for some of the countries and if it doesn't find a match uses google geolocation API to get the region. -*Relevant links:* -* https://en.wikipedia.org/wiki/ISO_3166-2 — codes used for all the regions can be found here -* https://en.wikipedia.org/wiki/Category:Postal_codes_by_country - explanations of postal code structure per country -* https://download.geonames.org/export/zip/ - all the Geoname files for download (see below) +_Relevant links:_ + +- https://en.wikipedia.org/wiki/ISO_3166-2 — codes used for all the regions can be found here +- https://en.wikipedia.org/wiki/Category:Postal_codes_by_country - explanations of postal code structure per country +- https://download.geonames.org/export/zip/ - all the Geoname files for download (see below) #### Predefined Regions + - AUS - AUT - BRA @@ -39,22 +41,27 @@ Utility module that provides an easy way to identify the region of the country d - USA ## Test + ```sh $ npm test ``` ### License + This module was built using adapted information from http://download.geonames.org/ that's registered under the **CC BY 3.0** as well as this module. Link to more information about **CC BY 3.0** http://creativecommons.org/licenses/by/3.0/. ## Usage #### Basic: + ```javascript const { RegionIdentifier } = requrie('regionIdentifier'); const identifier = new RegionIdentifier(''); ``` + #### Get region: + ```javascript //Using country name identifier.get('Deutschland', '6578') diff --git a/lib/region.js b/lib/region.js index ce94442..3173c62 100644 --- a/lib/region.js +++ b/lib/region.js @@ -172,19 +172,13 @@ function getRegionByZipCodeOnStaticFiles(countryIso, zip) { (regionMapping.list.includes(parseInt(zip)) || (countryConfig.zipCodeFormat === 'numeric' ? regionMapping.list.some((l) => - zip.startsWith( - String(l).padStart(countryConfig.zipCodeLength, '0'), - ), + zip.startsWith(String(l).padStart(countryConfig.zipCodeLength, '0')), ) : false)) ) { return regionMapping.region; - } else if (!regionMapping.high && zip === regionMapping.low) - return regionMapping.region; - else if ( - parseInt(zip) >= regionMapping.low && - parseInt(zip) <= regionMapping.high - ) + } else if (!regionMapping.high && zip === regionMapping.low) return regionMapping.region; + else if (parseInt(zip) >= regionMapping.low && parseInt(zip) <= regionMapping.high) return regionMapping.region; } } @@ -293,34 +287,30 @@ class RegionIdentifier { let response; try { - response = await axios.get( - googleLink.replace('####', encodeURIComponent(param)), - ); + response = await axios.get(googleLink.replace('####', encodeURIComponent(param))); } catch (err) { throw new GoogleMapsAPIError('Google Maps API request failed: ' + JSON.stringify(err)); } - if (!response?.data) { - return null; - } + if (!response?.data) { + return null; + } - if (response.data?.results?.length <= 0) { - return null; - } + if (response.data?.results?.length <= 0) { + return null; + } - // find country inside of the nested array - const region = response.data.results[0].address_components.find((component) => { - const typeFound = component.types.find( - (type) => type === 'administrative_area_level_1', - ); - return typeFound && typeFound.length > 0; - }); + // find country inside of the nested array + const region = response.data.results[0].address_components.find((component) => { + const typeFound = component.types.find((type) => type === 'administrative_area_level_1'); + return typeFound && typeFound.length > 0; + }); - if (!region) { - throw new GoogleMapsAPIError('NOT FOUND'); - } + if (!region) { + throw new GoogleMapsAPIError('NOT FOUND'); + } - return `${countryIso.alpha2}-${cleanAndCatchFaultyRegionName(region)}`; + return `${countryIso.alpha2}-${cleanAndCatchFaultyRegionName(region)}`; } } diff --git a/package-lock.json b/package-lock.json index 40ca9fe..a1fce1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,10 @@ }, "devDependencies": { "@parcellab/eslint-config": "^0.5.5", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-promise": "^7.3.0" + "eslint-plugin-promise": "^7.3.0", + "prettier": "^3.9.4" }, "engines": { "node": ">=24.0.0" @@ -1724,7 +1726,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -3925,12 +3926,11 @@ } }, "node_modules/prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.4.tgz", + "integrity": "sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index d57a907..b9f3c06 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "homepage": "https://github.com/parcelLab/regionIdentifier", "scripts": { "test": "node --test test/tests.js", - "lint": "eslint ." + "lint": "eslint .", + "format": "prettier --write .", + "format:check": "prettier --check ." }, "engines": { "node": ">=24.0.0" @@ -30,8 +32,10 @@ }, "devDependencies": { "@parcellab/eslint-config": "^0.5.5", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-promise": "^7.3.0" + "eslint-plugin-promise": "^7.3.0", + "prettier": "^3.9.4" }, "overrides": { "eslint-plugin-unicorn": "47.0.0", diff --git a/test/resolve.js b/test/resolve.js index a5c4c90..6993b3e 100644 --- a/test/resolve.js +++ b/test/resolve.js @@ -18,7 +18,7 @@ identifier .catch((err) => { console.error(err); - if(err instanceof GoogleMapsAPIError) { + if (err instanceof GoogleMapsAPIError) { console.error('Google Maps API error'); } }); diff --git a/test/tests.js b/test/tests.js index 457288f..310a7a9 100644 --- a/test/tests.js +++ b/test/tests.js @@ -6,439 +6,548 @@ const RegionIdentifier = require('../lib/region'); const identifier = new RegionIdentifier(''); const countriesPostalCodes = { - 'Austria': [{ - name: 'AUT', - zip: '1999', - result: 'AT-9', - usingGoogle: false, - }, { - name: 'Austria', - usingGoogle: false, - zip: '1999', - result: 'AT-9', - }], - 'Deutschland': [{ - name: 'DEU', - zip: '6578', - result: 'DE-TH', - usingGoogle: false, - }], - 'Belgium': [{ - name: 'BEL', - zip: '1701', - result: 'BE-VLG', - usingGoogle: false, - }], - 'Switzerland': [{ - name: 'CHE', - zip: '2333', - result: 'CH-BE', - usingGoogle: false, - }, { - name: 'CHE', - zip: '9488', - result: 'CH-SG', - usingGoogle: false, - }], - 'Spain': [{ - name: 'ESP', - zip: '04004', - result: 'ES-AN', - usingGoogle: false, - }], - 'France': [{ - name: 'FRA', - zip: '25090', - result: 'FR-I', - usingGoogle: false, - }, { - name: 'FRA', - zip: '92440', - result: 'FR-J', - usingGoogle: false, - }, { - name: 'FRA', - zip: '75116', - result: 'FR-J', - usingGoogle: false, - }, { - name: 'FRA', - zip: '51000', - result: 'FR-G', - usingGoogle: false, - }, { - name: 'FRA', - zip: '51100', - result: 'FR-G', - usingGoogle: false, - }, { - name: 'FRA', - zip: '75020', - result: 'FR-J', - usingGoogle: false, - }, { - name: 'FR', - zip: '25090', - result: 'FR-I', - usingGoogle: false, - }, { - name: 'FR', - zip: '87200', - result: 'FR-L', - usingGoogle: false, - }, { - name: 'FR', - zip: '87200 CEDEX 1', - result: 'FR-L', - usingGoogle: false, - }, { - name: 'FR', - zip: '61100', - result: 'FR-P', - usingGoogle: false, - }, { - name: 'FR', - zip: '81000', - result: 'FR-N', - usingGoogle: false, - }], - 'United Kingdom': [{ - name: 'GBR', - zip: 'PA13 4PS', - result: 'GB-SCT', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'EC2N 1AR', - result: 'GB-ENG', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'FY83QN', - result: 'GB-ENG', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'CF466RT', - result: 'GB-WLS', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'AL10 9BL', - result: 'GB-ENG', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'm14 5pq', - result: 'GB-ENG', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'Po10 8Eg', - result: 'GB-ENG', - usingGoogle: false, - }, { - name: 'GBR', - zip: 'L5 3QN', - result: 'GB-ENG', - usingGoogle: false, - }], - 'Italy': [{ - name: 'ITA', - zip: '67033', - result: 'IT-65', - usingGoogle: false, - }, { - name: 'ITA', - zip: '41121', - result: 'IT-45', - usingGoogle: false, - }], - 'India': [{ - name: 'IND', - zip: '110001', - result: 'IN-DL', - usingGoogle: false, - }], - 'Ireland': [{ - name: 'IRL', - zip: 'D02 X285', - result: 'IE-L', - usingGoogle: false, - }], - 'Romania': [{ - name: 'ROU', - zip: '010011', - result: 'RO-B', - usingGoogle: false, - }], - 'Hungary': [{ - name: 'HUN', - zip: '1011', - result: 'HU-BU', - usingGoogle: false, - }], - 'Japan': [{ - name: 'JPN', - zip: '100-0001', - result: 'JP-13', - usingGoogle: false, - }, { - name: 'JPN', - zip: '530-0001', - result: 'JP-27', - usingGoogle: false, - }], - 'Brazil': [{ - name: 'BRA', - zip: '69900-000', - result: 'BR-AC', - usingGoogle: false, - }], - 'South Korea': [{ - name: 'KOR', - zip: '01000', - result: 'KR-11', - usingGoogle: false, - }], - 'Lithuania': [{ - name: 'LTU', - zip: '62001', - result: 'LT-03', - usingGoogle: false, - }], - 'Luxembourg': [{ - name: 'LUX', - zip: 'L-4795', - result: 'LU-CA', - usingGoogle: false, - }], - 'Portugal': [{ - name: 'PRT', - zip: '3020-740', - result: 'PT-01', - usingGoogle: false, - }], - 'Slovakia': [{ - name: 'SVK', - zip: '049 01', - result: 'SK-BC', - usingGoogle: false, - }], - 'Turkey': [{ - name: 'TUR', - zip: '01010', - result: 'TR-01', - usingGoogle: false, - }], - 'Netherlands': [{ - name: 'NLD', - zip: '3541', - result: 'NL-UT', - usingGoogle: false, - }, { - name: 'NLD', - zip: '6869 VC', - result: 'NL-GE', - usingGoogle: false, - }, { - name: 'NLD', - zip: '2294 HC', - result: 'NL-ZH', - usingGoogle: false, - }, { - name: 'NLD', - zip: '2294HC', - result: 'NL-ZH', - usingGoogle: false, - }], - 'Canada': [{ - name: 'CAN', - zip: 'X1A 0E2', - result: 'CA-NT', - usingGoogle: false, - }, { - name: 'CAN', - zip: 'X1A 0E2', - result: 'CA-NT', - usingGoogle: false, - }, { - name: 'CAN', - zip: 'X1A0E2', - result: 'CA-NT', - usingGoogle: false, - }, { - name: 'CAN', - zip: 'G1P 2J1', - result: 'CA-QC', - usingGoogle: false, - }, { - name: 'CAN', - zip: 'S0J 0G0', - result: 'CA-SK', - usingGoogle: false, - }], - 'Mexico': [{ - name: 'MEX', - zip: '06000', - result: 'MX-CMX', - usingGoogle: false, - }], - 'Serbia': [{ - name: 'SRB', - zip: '11000', - result: 'RS-00', - usingGoogle: false, - }, { - name: 'SRB', - zip: '11320', - result: 'RS-10', - usingGoogle: false, - }, { - name: 'SRB', - zip: '18230', - result: 'RS-15', - usingGoogle: false, - }, { - name: 'SRB', - zip: '24430', - result: 'RS-03', - usingGoogle: false, - }, { - name: 'SRB', - zip: '21000', - result: 'RS-VO', - usingGoogle: false, - }, { - name: 'SRB', - zip: '38000', - result: 'RS-KM', - usingGoogle: false, - }], - 'United States': [{ - name: 'USA', - zip: '972022239', - result: 'US-OR', - usingGoogle: false, - }, { - name: 'USA', - zip: '06103', - result: 'US-CT', - usingGoogle: false, - }, { - name: 'USA', - zip: '00646', - result: 'US-PR', - usingGoogle: false, - }, { - name: 'USA', - zip: '96799', - result: 'US-AS', - usingGoogle: false, - }, { - name: 'USA', - zip: '96921', - result: 'US-GU', - usingGoogle: false, - }, { - name: 'USA', - zip: '96951', - result: 'US-MP', - usingGoogle: false, - }, { - name: 'USA', - zip: '00831', - result: 'US-VI', - usingGoogle: false, - }, { - name: 'USA', - zip: '10038', - result: 'US-NY', - usingGoogle: false, - }], - 'Qatar': [{ - name: 'QAT', - zip: '06000', - result: null, - usingGoogle: false, - }], - 'Sweden': [{ - name: 'SWE', - zip: '11337', - result: 'SE-AB', - usingGoogle: false, - },{ - name: 'SWE', - zip: '95435', - result: 'SE-BD', - usingGoogle: false, - },{ - name: 'SWE', - zip: '23531', - result: 'SE-M', - usingGoogle: false, - },{ - name: 'SWE', - zip: '10000', - result: 'SE-AB', - usingGoogle: false, - },{ - name: 'SWE', - zip: '99999', - result: 'SE-BD', - usingGoogle: false, - },{ - name: 'SWE', - zip: '81999', - result: 'SE-C', - usingGoogle: false, - }], - 'Finland': [{ - name: 'FIN', - zip: '00940', - result: 'FI-18', - usingGoogle: false, - },{ - name: 'FIN', - zip: '70840', - result: 'FI-15', - usingGoogle: false, - },{ - name: 'FIN', - zip: '96900', - result: 'FI-10', - usingGoogle: false, - },{ - name: 'FIN', - zip: '00100', - result: 'FI-18', - usingGoogle: false, - },{ - name: 'FIN', - zip: '99990', - result: 'FI-10', - usingGoogle: false, - },{ - name: 'FIN', - zip: '20200', - result: 'FI-19', - usingGoogle: false, - },{ - name: 'FIN', - zip: '22100', - result: 'FI-01', - usingGoogle: false, - },{ - name: 'AUS', - zip: '0841', - result: 'AU-NT', - usingGoogle: false, - },{ - name: 'AUS', - zip: '2111', - result: 'AU-NSW', - usingGoogle: false, - }], + 'Austria': [ + { + name: 'AUT', + zip: '1999', + result: 'AT-9', + usingGoogle: false, + }, + { + name: 'Austria', + usingGoogle: false, + zip: '1999', + result: 'AT-9', + }, + ], + 'Deutschland': [ + { + name: 'DEU', + zip: '6578', + result: 'DE-TH', + usingGoogle: false, + }, + ], + 'Belgium': [ + { + name: 'BEL', + zip: '1701', + result: 'BE-VLG', + usingGoogle: false, + }, + ], + 'Switzerland': [ + { + name: 'CHE', + zip: '2333', + result: 'CH-BE', + usingGoogle: false, + }, + { + name: 'CHE', + zip: '9488', + result: 'CH-SG', + usingGoogle: false, + }, + ], + 'Spain': [ + { + name: 'ESP', + zip: '04004', + result: 'ES-AN', + usingGoogle: false, + }, + ], + 'France': [ + { + name: 'FRA', + zip: '25090', + result: 'FR-I', + usingGoogle: false, + }, + { + name: 'FRA', + zip: '92440', + result: 'FR-J', + usingGoogle: false, + }, + { + name: 'FRA', + zip: '75116', + result: 'FR-J', + usingGoogle: false, + }, + { + name: 'FRA', + zip: '51000', + result: 'FR-G', + usingGoogle: false, + }, + { + name: 'FRA', + zip: '51100', + result: 'FR-G', + usingGoogle: false, + }, + { + name: 'FRA', + zip: '75020', + result: 'FR-J', + usingGoogle: false, + }, + { + name: 'FR', + zip: '25090', + result: 'FR-I', + usingGoogle: false, + }, + { + name: 'FR', + zip: '87200', + result: 'FR-L', + usingGoogle: false, + }, + { + name: 'FR', + zip: '87200 CEDEX 1', + result: 'FR-L', + usingGoogle: false, + }, + { + name: 'FR', + zip: '61100', + result: 'FR-P', + usingGoogle: false, + }, + { + name: 'FR', + zip: '81000', + result: 'FR-N', + usingGoogle: false, + }, + ], + 'United Kingdom': [ + { + name: 'GBR', + zip: 'PA13 4PS', + result: 'GB-SCT', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'EC2N 1AR', + result: 'GB-ENG', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'FY83QN', + result: 'GB-ENG', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'CF466RT', + result: 'GB-WLS', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'AL10 9BL', + result: 'GB-ENG', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'm14 5pq', + result: 'GB-ENG', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'Po10 8Eg', + result: 'GB-ENG', + usingGoogle: false, + }, + { + name: 'GBR', + zip: 'L5 3QN', + result: 'GB-ENG', + usingGoogle: false, + }, + ], + 'Italy': [ + { + name: 'ITA', + zip: '67033', + result: 'IT-65', + usingGoogle: false, + }, + { + name: 'ITA', + zip: '41121', + result: 'IT-45', + usingGoogle: false, + }, + ], + 'India': [ + { + name: 'IND', + zip: '110001', + result: 'IN-DL', + usingGoogle: false, + }, + ], + 'Ireland': [ + { + name: 'IRL', + zip: 'D02 X285', + result: 'IE-L', + usingGoogle: false, + }, + ], + 'Romania': [ + { + name: 'ROU', + zip: '010011', + result: 'RO-B', + usingGoogle: false, + }, + ], + 'Hungary': [ + { + name: 'HUN', + zip: '1011', + result: 'HU-BU', + usingGoogle: false, + }, + ], + 'Japan': [ + { + name: 'JPN', + zip: '100-0001', + result: 'JP-13', + usingGoogle: false, + }, + { + name: 'JPN', + zip: '530-0001', + result: 'JP-27', + usingGoogle: false, + }, + ], + 'Brazil': [ + { + name: 'BRA', + zip: '69900-000', + result: 'BR-AC', + usingGoogle: false, + }, + ], + 'South Korea': [ + { + name: 'KOR', + zip: '01000', + result: 'KR-11', + usingGoogle: false, + }, + ], + 'Lithuania': [ + { + name: 'LTU', + zip: '62001', + result: 'LT-03', + usingGoogle: false, + }, + ], + 'Luxembourg': [ + { + name: 'LUX', + zip: 'L-4795', + result: 'LU-CA', + usingGoogle: false, + }, + ], + 'Portugal': [ + { + name: 'PRT', + zip: '3020-740', + result: 'PT-01', + usingGoogle: false, + }, + ], + 'Slovakia': [ + { + name: 'SVK', + zip: '049 01', + result: 'SK-BC', + usingGoogle: false, + }, + ], + 'Turkey': [ + { + name: 'TUR', + zip: '01010', + result: 'TR-01', + usingGoogle: false, + }, + ], + 'Netherlands': [ + { + name: 'NLD', + zip: '3541', + result: 'NL-UT', + usingGoogle: false, + }, + { + name: 'NLD', + zip: '6869 VC', + result: 'NL-GE', + usingGoogle: false, + }, + { + name: 'NLD', + zip: '2294 HC', + result: 'NL-ZH', + usingGoogle: false, + }, + { + name: 'NLD', + zip: '2294HC', + result: 'NL-ZH', + usingGoogle: false, + }, + ], + 'Canada': [ + { + name: 'CAN', + zip: 'X1A 0E2', + result: 'CA-NT', + usingGoogle: false, + }, + { + name: 'CAN', + zip: 'X1A 0E2', + result: 'CA-NT', + usingGoogle: false, + }, + { + name: 'CAN', + zip: 'X1A0E2', + result: 'CA-NT', + usingGoogle: false, + }, + { + name: 'CAN', + zip: 'G1P 2J1', + result: 'CA-QC', + usingGoogle: false, + }, + { + name: 'CAN', + zip: 'S0J 0G0', + result: 'CA-SK', + usingGoogle: false, + }, + ], + 'Mexico': [ + { + name: 'MEX', + zip: '06000', + result: 'MX-CMX', + usingGoogle: false, + }, + ], + 'Serbia': [ + { + name: 'SRB', + zip: '11000', + result: 'RS-00', + usingGoogle: false, + }, + { + name: 'SRB', + zip: '11320', + result: 'RS-10', + usingGoogle: false, + }, + { + name: 'SRB', + zip: '18230', + result: 'RS-15', + usingGoogle: false, + }, + { + name: 'SRB', + zip: '24430', + result: 'RS-03', + usingGoogle: false, + }, + { + name: 'SRB', + zip: '21000', + result: 'RS-VO', + usingGoogle: false, + }, + { + name: 'SRB', + zip: '38000', + result: 'RS-KM', + usingGoogle: false, + }, + ], + 'United States': [ + { + name: 'USA', + zip: '972022239', + result: 'US-OR', + usingGoogle: false, + }, + { + name: 'USA', + zip: '06103', + result: 'US-CT', + usingGoogle: false, + }, + { + name: 'USA', + zip: '00646', + result: 'US-PR', + usingGoogle: false, + }, + { + name: 'USA', + zip: '96799', + result: 'US-AS', + usingGoogle: false, + }, + { + name: 'USA', + zip: '96921', + result: 'US-GU', + usingGoogle: false, + }, + { + name: 'USA', + zip: '96951', + result: 'US-MP', + usingGoogle: false, + }, + { + name: 'USA', + zip: '00831', + result: 'US-VI', + usingGoogle: false, + }, + { + name: 'USA', + zip: '10038', + result: 'US-NY', + usingGoogle: false, + }, + ], + 'Qatar': [ + { + name: 'QAT', + zip: '06000', + result: null, + usingGoogle: false, + }, + ], + 'Sweden': [ + { + name: 'SWE', + zip: '11337', + result: 'SE-AB', + usingGoogle: false, + }, + { + name: 'SWE', + zip: '95435', + result: 'SE-BD', + usingGoogle: false, + }, + { + name: 'SWE', + zip: '23531', + result: 'SE-M', + usingGoogle: false, + }, + { + name: 'SWE', + zip: '10000', + result: 'SE-AB', + usingGoogle: false, + }, + { + name: 'SWE', + zip: '99999', + result: 'SE-BD', + usingGoogle: false, + }, + { + name: 'SWE', + zip: '81999', + result: 'SE-C', + usingGoogle: false, + }, + ], + 'Finland': [ + { + name: 'FIN', + zip: '00940', + result: 'FI-18', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '70840', + result: 'FI-15', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '96900', + result: 'FI-10', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '00100', + result: 'FI-18', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '99990', + result: 'FI-10', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '20200', + result: 'FI-19', + usingGoogle: false, + }, + { + name: 'FIN', + zip: '22100', + result: 'FI-01', + usingGoogle: false, + }, + { + name: 'AUS', + zip: '0841', + result: 'AU-NT', + usingGoogle: false, + }, + { + name: 'AUS', + zip: '2111', + result: 'AU-NSW', + usingGoogle: false, + }, + ], }; describe('REGION IDENTIFIER', () => { diff --git a/update/usa.js b/update/usa.js index c6d9785..467c255 100644 --- a/update/usa.js +++ b/update/usa.js @@ -37,4 +37,7 @@ for (const code of codes) { fs.unlinkSync(path.join(__dirname, `${code}.zip`)); } -fs.writeFileSync(path.join(__dirname, '..', 'regions', 'USA.json'), JSON.stringify(result, null, 2)); +fs.writeFileSync( + path.join(__dirname, '..', 'regions', 'USA.json'), + JSON.stringify(result, null, 2), +);