UNPKG

@opd/gbt2260

Version:

latest Chinese administrative divisions

153 lines (123 loc) 4.44 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.constructor.js"); require("core-js/modules/es.array.sort.js"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _division = _interopRequireDefault(require("./division")); class GBT2260 { constructor(_revision, data) { (0, _defineProperty2.default)(this, "revision", void 0); (0, _defineProperty2.default)(this, "data", void 0); (0, _defineProperty2.default)(this, "codes", void 0); (0, _defineProperty2.default)(this, "get", (code = '') => { code = code.toString(); if (code.length !== 6) { throw new Error('Invalid code'); } const name = this.data[code]; if (!name) { throw new Error('Invalid code'); } const revision = this.revision; const division = new _division.default(code, name, revision); if (/0{4}$/.test(code)) { return division; } const provinceCode = code.substr(0, 2) + '0000'; const provinceName = this.data[provinceCode]; division.province = new _division.default(provinceCode, provinceName, revision); if (/0{2}$/.test(code)) { return division; } const prefectureCode = code.substr(0, 4) + '00'; const prefectureName = this.data[prefectureCode]; if (prefectureName) { division.prefecture = new _division.default(prefectureCode, prefectureName, revision); } return division; }); (0, _defineProperty2.default)(this, "provinces", () => { const rv = []; let name; this.codes.forEach(k => { if (/0{4}$/.test(k)) { name = this.data[k]; rv.push(new _division.default(k, name, this.revision)); } }); return rv; }); (0, _defineProperty2.default)(this, "prefectures", (code = '', skip = true) => { code = code.toString(); if (!/0{4}$/.test(code)) { throw new Error('Invalid province code'); } let name = this.data[code]; if (!name) { throw new Error('Invalid province code'); } const province = new _division.default(code, name, this.revision); const pattern = new RegExp('^' + code.substr(0, 2) + '\\d{2}00$'); const rv = []; let division; this.codes.forEach(k => { if (pattern.test(k) && k !== code) { name = this.data[k]; division = new _division.default(k, name, this.revision); division.province = province; rv.push(division); } }); // istanbul ignore else if (!rv.length && skip) { const countyPattern = new RegExp('^' + code.substr(0, 2) + '\\d{4}$'); const temp = []; this.codes.forEach(k => { if (countyPattern.test(k) && k !== code) { name = this.data[k]; division = new _division.default(k, name, this.revision); division.province = province; temp.push(division); } }); return temp; } return rv; }); (0, _defineProperty2.default)(this, "counties", (code = '') => { code = code.toString(); if (!/[1-9]0{2,3}$/.test(code)) { throw new Error('Invalid prefecture code'); } let name = this.data[code]; if (!name) { throw new Error('Invalid prefecture code'); } const prefecture = new _division.default(code, name, this.revision); const provinceCode = code.substr(0, 2) + '0000'; name = this.data[provinceCode]; const province = new _division.default(provinceCode, name, this.revision); const pattern = new RegExp('^' + code.substr(0, 4)); const rv = []; let division; this.codes.forEach(k => { if (pattern.test(k) && k !== code) { name = this.data[k]; division = new _division.default(k, name, this.revision); division.province = province; division.prefecture = prefecture; rv.push(division); } }); return rv; }); this.revision = _revision; this.data = data; this.codes = Object.keys(this.data).sort(); } } exports.default = GBT2260;