@opd/gbt2260
Version:
latest Chinese administrative divisions
153 lines (123 loc) • 4.44 kB
JavaScript
"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;