UNPKG

@zodash/bankcard

Version:

chinese bank card parser, generator and validator, inspired by bankcardinfo

61 lines (60 loc) 1.9 kB
"use strict"; 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();