@zodash/bankcard
Version:
chinese bank card parser, generator and validator, inspired by bankcardinfo
61 lines (60 loc) • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataLoader = void 0;
/* eslint-disable-next-line */
const banksData = require('../../data/banks.json');
/* eslint-disable-next-line */
const bankTypesData = require('../../data/bank-type.json');
class DataLoader {
constructor() {
this.data = {
loaded: false,
banksDataMap: new Map(),
bankTypesDataMap: new Map(),
banksRegExpMap: new Map(),
banksRegExpMaybeMap: new Map(),
};
}
get banksDataMap() {
return this.data.banksDataMap;
}
get bankTypesDataMap() {
return this.data.bankTypesDataMap;
}
get banksRegExpMap() {
return this.data.banksRegExpMap;
}
get banksRegExpMaybeMap() {
return this.data.banksRegExpMaybeMap;
}
shouldLoad() {
return !this.data.loaded;
}
async load() {
if (this.data.loaded) {
return;
}
this.data.loaded = true;
const { banksDataMap, bankTypesDataMap, banksRegExpMap, banksRegExpMaybeMap, } = this.data;
banksData.forEach((bd) => {
banksDataMap.set(bd.code, bd);
bd.patterns.forEach((pattern) => {
const code_type = bd.code + '#' + pattern.type;
const fullRegExp = new RegExp(pattern.regex);
const maybeRegExp = new RegExp(pattern.regex.replace(/\\d\{\d+\}\$/, ''));
banksRegExpMap.set(fullRegExp, code_type);
banksRegExpMaybeMap.set(maybeRegExp, code_type);
});
});
bankTypesData.forEach((bd) => {
bankTypesDataMap.set(bd.code, bd);
});
}
async lazyLoad() {
if (this.shouldLoad()) {
await this.load();
}
}
}
exports.DataLoader = DataLoader;
exports.default = new DataLoader();