kontonummer
Version:
A validator for swedish banking numbers
160 lines • 8.71 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _Kontonummer_bankName, _Kontonummer_sortingCode, _Kontonummer_accountNumber, _Kontonummer_type, _Kontonummer_comment, _Kontonummer_valid;
Object.defineProperty(exports, "__esModule", { value: true });
exports.valid = exports.parse = void 0;
const banks_js_1 = __importDefault(require("./banks.js"));
const errors_js_1 = require("./errors.js");
const validate_js_1 = __importStar(require("./validate.js"));
const format_js_1 = __importDefault(require("./format.js"));
class Kontonummer {
get bankName() { return __classPrivateFieldGet(this, _Kontonummer_bankName, "f"); }
get sortingCode() { return __classPrivateFieldGet(this, _Kontonummer_sortingCode, "f"); }
get accountNumber() { return __classPrivateFieldGet(this, _Kontonummer_accountNumber, "f"); }
get type() { return __classPrivateFieldGet(this, _Kontonummer_type, "f"); }
get comment() { return __classPrivateFieldGet(this, _Kontonummer_comment, "f"); }
get valid() { return __classPrivateFieldGet(this, _Kontonummer_valid, "f"); }
constructor(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, optionsArg) {
_Kontonummer_bankName.set(this, void 0);
_Kontonummer_sortingCode.set(this, void 0);
_Kontonummer_accountNumber.set(this, void 0);
_Kontonummer_type.set(this, void 0);
_Kontonummer_comment.set(this, void 0);
_Kontonummer_valid.set(this, void 0); // only relevant in `lax` mode
let accountNumber;
let options = {
mode: 'strict',
};
// parse params
// sortingCode
sortingCodeWithOrWithoutAccountNumber = `${sortingCodeWithOrWithoutAccountNumber}`.replace(/[^\d]/g, '');
// Swedbank 8xxx-x have 5 digits
const sortingCode = sortingCodeWithOrWithoutAccountNumber.substring(0, sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
// accountNumber
if (typeof accountOrOptions === 'object') {
options = accountOrOptions;
accountNumber = sortingCodeWithOrWithoutAccountNumber.substring(sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
}
else if (typeof accountOrOptions === 'string' || typeof accountOrOptions === 'number') {
accountNumber = `${accountOrOptions}`.replace(/[^\d]/g, '');
}
else {
accountNumber = sortingCodeWithOrWithoutAccountNumber.substring(sortingCodeWithOrWithoutAccountNumber.startsWith('8') ? 5 : 4);
}
// optionsArg
if (typeof optionsArg === 'object') {
options = optionsArg;
}
// validate arguments
if (sortingCode.length < 4 || (sortingCode.length > 4 ? !(0, validate_js_1.mod10)(sortingCode) : false)) {
throw new errors_js_1.KontonummerError('Invalid sorting code');
}
if (accountNumber.length < 2) {
throw new errors_js_1.KontonummerError('Invalid account number');
}
const bank = Kontonummer.getSortingCodeInfo(sortingCode);
const valid = (0, validate_js_1.default)(bank.type, bank.comment, sortingCode, accountNumber);
if (!valid && options.mode === 'strict')
throw new errors_js_1.KontonummerError('Invalid account number');
if (!valid && bank.type === 1 && options.mode === 'semi')
throw new errors_js_1.KontonummerError('Invalid account number');
__classPrivateFieldSet(this, _Kontonummer_bankName, bank.bankName, "f");
__classPrivateFieldSet(this, _Kontonummer_type, bank.type, "f");
__classPrivateFieldSet(this, _Kontonummer_comment, bank.comment, "f");
__classPrivateFieldSet(this, _Kontonummer_sortingCode, sortingCode, "f");
__classPrivateFieldSet(this, _Kontonummer_accountNumber, accountNumber, "f");
__classPrivateFieldSet(this, _Kontonummer_valid, valid, "f");
}
format(format) {
return (0, format_js_1.default)(this.sortingCode, this.accountNumber, Kontonummer.getSortingCodeInfo(this.sortingCode), format);
}
static parse(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, options) {
if (typeof accountOrOptions === 'string' || typeof accountOrOptions === 'number')
return new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountOrOptions, options);
else
return new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountOrOptions);
}
static valid(sortingCodeWithOrWithoutAccountNumber, accountNumber) {
if (accountNumber && (typeof accountNumber !== 'string' || typeof accountNumber !== 'number'))
throw new errors_js_1.KontonummerError('Kontonummer.valid() does not accept an options argument');
try {
if (accountNumber)
new Kontonummer(sortingCodeWithOrWithoutAccountNumber, accountNumber); // eslint-disable-line no-new
else
new Kontonummer(sortingCodeWithOrWithoutAccountNumber); // eslint-disable-line no-new
return true;
}
catch {
return false;
}
}
static getSortingCodeInfo(sortingCode) {
const bank = (0, banks_js_1.default)(sortingCode);
if (typeof bank === 'undefined')
throw new errors_js_1.KontonummerError(`No Bank found with sorting code ${sortingCode}`);
return bank;
}
toJSON() {
return {
bankName: this.bankName,
sortingCode: this.sortingCode,
accountNumber: this.accountNumber,
type: this.type,
comment: this.comment,
valid: this.valid,
};
}
[(_Kontonummer_bankName = new WeakMap(), _Kontonummer_sortingCode = new WeakMap(), _Kontonummer_accountNumber = new WeakMap(), _Kontonummer_type = new WeakMap(), _Kontonummer_comment = new WeakMap(), _Kontonummer_valid = new WeakMap(), Symbol.for('nodejs.util.inspect.custom'))]() {
return this.toJSON();
}
}
exports.default = Kontonummer;
exports.parse = Kontonummer.parse.bind(Kontonummer);
exports.valid = Kontonummer.valid.bind(Kontonummer);
//# sourceMappingURL=index.js.map