UNPKG

ltz-validate-cnj

Version:

Validador da numeração CNJ escrito em JavaScript com suporte para navegadores, pegar e usar.

649 lines (526 loc) 22.7 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ValidateCNJ = {})); })(this, (function (exports) { 'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) { Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } } function _extendableBuiltin(cls) { function ExtendableBuiltin() { cls.apply(this, arguments); } ExtendableBuiltin.prototype = Object.create(cls.prototype, { constructor: { value: cls, enumerable: false, writable: true, configurable: true } }); if (Object.setPrototypeOf) { Object.setPrototypeOf(ExtendableBuiltin, cls); } else { ExtendableBuiltin.__proto__ = cls; } return ExtendableBuiltin; } var ExtendableError = function (_extendableBuiltin2) { _inherits(ExtendableError, _extendableBuiltin2); function ExtendableError() { var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; _classCallCheck(this, ExtendableError); // extending Error is weird and does not propagate `message` var _this = _possibleConstructorReturn(this, (ExtendableError.__proto__ || Object.getPrototypeOf(ExtendableError)).call(this, message)); Object.defineProperty(_this, 'message', { configurable: true, enumerable: false, value: message, writable: true }); Object.defineProperty(_this, 'name', { configurable: true, enumerable: false, value: _this.constructor.name, writable: true }); if (Error.hasOwnProperty('captureStackTrace')) { Error.captureStackTrace(_this, _this.constructor); return _possibleConstructorReturn(_this); } Object.defineProperty(_this, 'stack', { configurable: true, enumerable: false, value: new Error(message).stack, writable: true }); return _this; } return ExtendableError; }(_extendableBuiltin(Error)); var ValidateCNJException = /*@__PURE__*/(function (ExtendableError) { function ValidateCNJException () { ExtendableError.apply(this, arguments); }if ( ExtendableError ) ValidateCNJException.__proto__ = ExtendableError; ValidateCNJException.prototype = Object.create( ExtendableError && ExtendableError.prototype ); ValidateCNJException.prototype.constructor = ValidateCNJException; return ValidateCNJException; }(ExtendableError)); var CHARCODE_0 = '0'.charCodeAt(0); var CHARCODE_0_MULTIPLIER = 10; var CHARCODE_0_OFFSET = CHARCODE_0; var CHARCODE_A = 'A'.charCodeAt(0); var CHARCODE_A_MULTIPLIER = 100; var CHARCODE_A_OFFSET = CHARCODE_A - 10; var BUFFER_INITIAL_VALUE = 0; var MODULATOR_97 = 97; var FORMAT = /^[0-9A-Z]{1,}$/; function mod97(value) { var length = value.length; var buffer = BUFFER_INITIAL_VALUE; for (var i = 0; i < length; ++i) { var charCode = value.charCodeAt(i); var multiplier = (void 0); var offset = (void 0); if (charCode >= CHARCODE_A) { multiplier = CHARCODE_A_MULTIPLIER; offset = CHARCODE_A_OFFSET; } else { multiplier = CHARCODE_0_MULTIPLIER; offset = CHARCODE_0_OFFSET; } buffer *= multiplier; buffer -= offset; buffer += charCode; buffer %= MODULATOR_97; } return buffer; } function stringifyInput(rawValue) { if (rawValue === null || rawValue === undefined) { throw new Error('Expecting \'rawValue\' of type \'string\', found: \'' + rawValue + '\''); } if (typeof rawValue !== 'string') { throw new Error('Expecting \'rawValue\' of type \'string\', found: \'' + (typeof rawValue) + '\''); } return rawValue; } var iso7064 = { /** * Check requirements. * Returns result of modulo 97 applied to the String input rawValue. * * Requirements: * - rawValue must be not `Null` * - rawValue must be of type `String` * - rawValue must respect format `^[0-9A-Z]{1,}$` * * @param {*} rawValue */ compute: function (rawValue) { var value = stringifyInput(rawValue); if (!value.match(FORMAT)) { throw new Error('Invalid data format; expecting: \'' + FORMAT + '\', found: \'' + value + '\''); } return mod97(value); }, /** * Does NOT check requirements. * Returns result of modulo 97 applied to the String input rawValue. * * Requirements: * - rawValue must be not `Null` * - rawValue must be of type `String` * - rawValue must respect format `^[0-9A-Z]{1,}$` * * @param {*} rawValue */ computeWithoutCheck: function (rawValue) { return mod97(rawValue); } }; var iso7064_1 = iso7064; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var clone_1 = createCommonjsModule(function (module) { var clone = function () { /** * Clones (copies) an Object using deep copying. * * This function supports circular references by default, but if you are certain * there are no circular references in your object, you can save some CPU time * by calling clone(obj, false). * * Caution: if `circular` is false and `parent` contains circular references, * your program may enter an infinite loop and crash. * * @param `parent` - the object to be cloned * @param `circular` - set to true if the object to be cloned may contain * circular references. (optional - true by default) * @param `depth` - set to a number if the object is only to be cloned to * a particular depth. (optional - defaults to Infinity) * @param `prototype` - sets the prototype to be used when cloning an object. * (optional - defaults to parent prototype). */ function clone(parent, circular, depth, prototype) { if (_typeof(circular) === 'object') { depth = circular.depth; prototype = circular.prototype; circular.filter; circular = circular.circular; } // maintain two arrays for circular references, where corresponding parents // and children have the same index var allParents = []; var allChildren = []; var useBuffer = typeof Buffer != 'undefined'; if (typeof circular == 'undefined') { circular = true; } if (typeof depth == 'undefined') { depth = Infinity; } // recurse this function so we don't reset allParents and allChildren function _clone(parent, depth) { // cloning null always returns null if (parent === null) { return null; } if (depth == 0) { return parent; } var child; var proto; if (_typeof(parent) != 'object') { return parent; } if (clone.__isArray(parent)) { child = []; } else if (clone.__isRegExp(parent)) { child = new RegExp(parent.source, __getRegExpFlags(parent)); if (parent.lastIndex) { child.lastIndex = parent.lastIndex; } } else if (clone.__isDate(parent)) { child = new Date(parent.getTime()); } else if (useBuffer && Buffer.isBuffer(parent)) { if (Buffer.allocUnsafe) { // Node.js >= 4.5.0 child = Buffer.allocUnsafe(parent.length); } else { // Older Node.js versions child = new Buffer(parent.length); } parent.copy(child); return child; } else { if (typeof prototype == 'undefined') { proto = Object.getPrototypeOf(parent); child = Object.create(proto); } else { child = Object.create(prototype); proto = prototype; } } if (circular) { var index = allParents.indexOf(parent); if (index != -1) { return allChildren[index]; } allParents.push(parent); allChildren.push(child); } for (var i in parent) { var attrs; if (proto) { attrs = Object.getOwnPropertyDescriptor(proto, i); } if (attrs && attrs.set == null) { continue; } child[i] = _clone(parent[i], depth - 1); } return child; } return _clone(parent, depth); } /** * Simple flat clone using prototype, accepts only objects, usefull for property * override on FLAT configuration object (no nested props). * * USE WITH CAUTION! This may not behave as you wish if you do not know how this * works. */ clone.clonePrototype = function clonePrototype(parent) { if (parent === null) { return null; } var c = function c() {}; c.prototype = parent; return new c(); }; // private utility functions function __objToStr(o) { return Object.prototype.toString.call(o); } clone.__objToStr = __objToStr; function __isDate(o) { return _typeof(o) === 'object' && __objToStr(o) === '[object Date]'; } clone.__isDate = __isDate; function __isArray(o) { return _typeof(o) === 'object' && __objToStr(o) === '[object Array]'; } clone.__isArray = __isArray; function __isRegExp(o) { return _typeof(o) === 'object' && __objToStr(o) === '[object RegExp]'; } clone.__isRegExp = __isRegExp; function __getRegExpFlags(re) { var flags = ''; if (re.global) { flags += 'g'; } if (re.ignoreCase) { flags += 'i'; } if (re.multiline) { flags += 'm'; } return flags; } clone.__getRegExpFlags = __getRegExpFlags; return clone; }(); if (module.exports) { module.exports = clone; } }); var defaults = function defaults(options, _defaults) { options = options || {}; Object.keys(_defaults).forEach(function (key) { if (typeof options[key] === 'undefined') { options[key] = clone_1(_defaults[key]); } }); return options; }; var combining = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB], [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F], [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169], [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD], [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F], [0xE0100, 0xE01EF]]; var DEFAULTS = { nul: 0, control: 0 }; var config = function config(opts) { opts = defaults(opts || {}, DEFAULTS); return function wcwidth(str) { return wcswidth(str, opts); }; }; /* * The following functions define the column width of an ISO 10646 * character as follows: * - The null character (U+0000) has a column width of 0. * - Other C0/C1 control characters and DEL will lead to a return value * of -1. * - Non-spacing and enclosing combining characters (general category * code Mn or Me in the * Unicode database) have a column width of 0. * - SOFT HYPHEN (U+00AD) has a column width of 1. * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH * SPACE (U+200B) have a column width of 0. * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * - Spacing characters in the East Asian Wide (W) or East Asian * Full-width (F) category as * defined in Unicode Technical Report #11 have a column width of 2. * - All remaining characters (including all printable ISO 8859-1 and * WGL4 characters, Unicode control characters, etc.) have a column * width of 1. * This implementation assumes that characters are encoded in ISO 10646. */ function wcswidth(str, opts) { if (typeof str !== 'string') { return wcwidth(str, opts); } var s = 0; for (var i = 0; i < str.length; i++) { var n = wcwidth(str.charCodeAt(i), opts); if (n < 0) { return -1; } s += n; } return s; } function wcwidth(ucs, opts) { // test for 8-bit control characters if (ucs === 0) { return opts.nul; } if (ucs < 32 || ucs >= 0x7f && ucs < 0xa0) { return opts.control; } // binary search in table of non-spacing characters if (bisearch(ucs)) { return 0; } // if we arrive here, ucs is not a combining or C0/C1 control character return 1 + (ucs >= 0x1100 && (ucs <= 0x115f || // Hangul Jamo init. consonants ucs == 0x2329 || ucs == 0x232a || ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f || // CJK ... Yi ucs >= 0xac00 && ucs <= 0xd7a3 || // Hangul Syllables ucs >= 0xf900 && ucs <= 0xfaff || // CJK Compatibility Ideographs ucs >= 0xfe10 && ucs <= 0xfe19 || // Vertical forms ucs >= 0xfe30 && ucs <= 0xfe6f || // CJK Compatibility Forms ucs >= 0xff00 && ucs <= 0xff60 || // Fullwidth Forms ucs >= 0xffe0 && ucs <= 0xffe6 || ucs >= 0x20000 && ucs <= 0x2fffd || ucs >= 0x30000 && ucs <= 0x3fffd)); } function bisearch(ucs) { var min = 0; var max = combining.length - 1; var mid; if (ucs < combining[0][0] || ucs > combining[max][1]) { return false; } while (max >= min) { mid = Math.floor((min + max) / 2); if (ucs > combining[mid][1]) { min = mid + 1; }else if (ucs < combining[mid][0]) { max = mid - 1; }else { return true; } } return false; } // Generated by CoffeeScript 2.4.1 var _pad; _pad = function pad(text, length, options) { var escapecolor, invert, padlength, textnocolors; if (options == null) { options = {}; } invert = typeof text === 'number'; if (invert) { var _ref = [text, length]; length = _ref[0]; text = _ref[1]; } if (typeof options === 'string') { options = { "char": options }; } if (options["char"] == null) { options["char"] = ' '; } if (options.strip == null) { options.strip = false; } if (typeof text !== 'string') { text = text.toString(); } textnocolors = null; _pad = ''; if (options.colors) { escapecolor = /\x1B\[(?:[0-9]{1,2}(?:;[0-9]{1,2})?)?[m|K]/g; textnocolors = text.replace(escapecolor, ''); } padlength = options.fixed_width ? length - (textnocolors || text).length : length - config(options.wcwidth_options)(textnocolors || text); if (padlength < 0) { if (options.strip) { if (invert) { return text.substr(length * -1); } else { return text.substr(0, length); } } return text; } _pad += options["char"].repeat(padlength); if (invert) { return _pad + text; } else { return text + _pad; } }; var _pad$1 = _pad; var SIZES = [7, 2, 4, 1, 2, 4]; var NOT_NUMBERS = /[^0-9]/g; var validateCnj = function validateCnj() { var parameters = [], len = arguments.length; while ( len-- ) parameters[ len ] = arguments[ len ]; var args = parameters.map(function (v, i) { var r = v; if (typeof r === "number") { r = r.toString(); } if (r === null && i === 1) { return r; } if (typeof r !== "string") { throw new ValidateCNJException( "Could not validate the CNJ number, wrong parameter type" ); } if (!SIZES[i]) { throw new ValidateCNJException( "Could not validate the CNJ number, wrong parameters size" ); } return _pad$1(SIZES[i], r, "0"); }); var proc = args[0]; var dv = args[1]; var year = args[2]; var justice = args[3]; var number = args[4]; var court = args[5]; var firstStep = iso7064_1.compute(proc).toString(); var secondStep = iso7064_1 .compute(firstStep + year + justice + number) .toString(); var thirdStep = iso7064_1.compute(((secondStep + court) + "00")).toString(); var ndv = 98 - (thirdStep % 97); this.dv = _pad$1(2, ndv.toString(), "0"); if (dv !== null && dv !== this.dv) { throw new InvalidDigitCNJException( ("Checksum not correct - CNJ number is invalid. Expected is " + (this.dv) + ", received " + dv + "."), this.dv ); } this.proc = proc; this.year = year; this.justice = justice; this.number = number; this.court = court; }; var prototypeAccessors = { pieces: { configurable: true } }; validateCnj.generate = function generate (proc, ref, year) { var justice = ref.justice; var number = ref.number; var court = ref.court; return new validateCnj(proc, null, year, justice, number, court); }; prototypeAccessors.pieces.get = function () { return { proc: this.proc, year: this.year, justice: this.justice, number: this.number, court: this.court, }; }; validateCnj.format = function format (cnj) { try { return new validateCnj(cnj).mask(); } catch (cnj$1) { return cnj$1; } }; validateCnj.load = function load (cnj) { var numcnj = cnj.replace(NOT_NUMBERS, ""); var pos = 0; return new (Function.prototype.bind.apply( validateCnj, [ null ].concat( SIZES.map(function (i) { var substr = numcnj.substr(pos, i); pos += i; return substr; }) ) )); }; validateCnj.prototype.mask = function mask (mask) { if ( mask === void 0 ) mask = true; return !mask ? this.proc + this.dv + this.year + this.justice + this.number + this.court : [ this.proc, [this.dv, this.year, this.justice, this.number, this.court].join(".") ].join("-"); }; Object.defineProperties( validateCnj.prototype, prototypeAccessors ); var InvalidDigitCNJException = /*@__PURE__*/(function (ExtendableError) { function InvalidDigitCNJException(message, digit) { ExtendableError.call(this, message); this.digit = digit; } if ( ExtendableError ) InvalidDigitCNJException.__proto__ = ExtendableError; InvalidDigitCNJException.prototype = Object.create( ExtendableError && ExtendableError.prototype ); InvalidDigitCNJException.prototype.constructor = InvalidDigitCNJException; return InvalidDigitCNJException; }(ExtendableError)); exports.CNJDigitException = InvalidDigitCNJException; exports.Exception = ValidateCNJException; exports.validateCnj = validateCnj; Object.defineProperty(exports, '__esModule', { value: true }); }));