UNPKG

@lacussoft/cpf-fmt

Version:
70 lines (65 loc) 9.52 kB
'use strict'; var htmlEscaper = require('html-escaper'); var numOnly = require('num-only'); var mergeDeep = require('deepmerge'); const defaultOptions = { delimiters: { dot: ".", dash: "-" }, hiddenRange: { start: 3, end: 10 }, onFail: (value) => value, hiddenKey: "*", hidden: false, escape: false }; function mergeOptions(customOptions = {}) { const options = mergeDeep( defaultOptions, customOptions ); if (options.hidden) { if (isNaN(options.hiddenRange.start) || options.hiddenRange.start < 0 || options.hiddenRange.start > 10) { throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 10.'); } if (isNaN(options.hiddenRange.end) || options.hiddenRange.end < 0 || options.hiddenRange.end > 10) { throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 10.'); } if (options.hiddenRange.start > options.hiddenRange.end) { const aux = options.hiddenRange.start; options.hiddenRange.start = options.hiddenRange.end; options.hiddenRange.end = aux; } } if (typeof options.onFail !== "function") { throw new TypeError('The option "onFail" must be a callback function.'); } return options; } function cpfFmt(cpfString, options) { const CPF_LENGTH = 11; const cpfArray = numOnly(cpfString).split(""); const customOptions = mergeOptions(options); if (cpfArray.length !== CPF_LENGTH) { const error = new Error(`Parameter "${cpfString}" does not contain ${CPF_LENGTH} digits.`); return customOptions.onFail(cpfString, error); } if (customOptions.hidden) { for (let i = customOptions.hiddenRange.start; i <= customOptions.hiddenRange.end; i++) { cpfArray[i] = customOptions.hiddenKey; } } cpfArray.splice(9, 0, customOptions.delimiters.dash); cpfArray.splice(6, 0, customOptions.delimiters.dot); cpfArray.splice(3, 0, customOptions.delimiters.dot); const cpfPretty = cpfArray.join(""); if (customOptions.escape) { return htmlEscaper.escape(cpfPretty); } return cpfPretty; } module.exports = cpfFmt; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvbWVyZ2Utb3B0aW9ucy50cyIsIi4uL3NyYy9jcGYtZm10LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJnZURlZXAgZnJvbSAnZGVlcG1lcmdlJztcblxudHlwZSBEZWVwUGFydGlhbDxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW1BdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0dWFsQ3BmRm9ybWF0dGluZ09wdGlvbnM8T25FcnJGYWxsYmFjaz4ge1xuICBkZWxpbWl0ZXJzOiB7XG4gICAgZGFzaDogc3RyaW5nO1xuICAgIGRvdDogc3RyaW5nO1xuICB9O1xuICBlc2NhcGU6IGJvb2xlYW47XG4gIGhpZGRlbjogYm9vbGVhbjtcbiAgaGlkZGVuS2V5OiBzdHJpbmc7XG4gIGhpZGRlblJhbmdlOiB7XG4gICAgZW5kOiBudW1iZXI7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgfTtcbiAgb25GYWlsOiAodmFsdWU6IHN0cmluZywgZXJyb3I6IEVycm9yKSA9PiBPbkVyckZhbGxiYWNrO1xufVxuXG5leHBvcnQgdHlwZSBDcGZGb3JtYXR0aW5nT3B0aW9uczxPbkVyckZhbGxiYWNrPiA9IERlZXBQYXJ0aWFsPFxuICBBY3R1YWxDcGZGb3JtYXR0aW5nT3B0aW9uczxPbkVyckZhbGxiYWNrPlxuPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zPHN0cmluZz4gPSB7XG4gIGRlbGltaXRlcnM6IHtcbiAgICBkb3Q6ICcuJyxcbiAgICBkYXNoOiAnLScsXG4gIH0sXG4gIGhpZGRlblJhbmdlOiB7XG4gICAgc3RhcnQ6IDMsXG4gICAgZW5kOiAxMCxcbiAgfSxcbiAgb25GYWlsOiAodmFsdWUpID0+IHZhbHVlLFxuICBoaWRkZW5LZXk6ICcqJyxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgZXNjYXBlOiBmYWxzZSxcbn07XG5cbi8qKlxuICogTWVyZ2UgY3VzdG9tIG9wdGlvbnMgdG8gdGhlIGRlZmF1bHQgb25lcy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zPE9uRXJyRmFsbGJhY2s+KFxuICBjdXN0b21PcHRpb25zOiBDcGZGb3JtYXR0aW5nT3B0aW9uczxPbkVyckZhbGxiYWNrPiA9IHt9LFxuKTogQWN0dWFsQ3BmRm9ybWF0dGluZ09wdGlvbnM8T25FcnJGYWxsYmFjaz4ge1xuICBjb25zdCBvcHRpb25zID0gbWVyZ2VEZWVwKFxuICAgIGRlZmF1bHRPcHRpb25zLFxuICAgIGN1c3RvbU9wdGlvbnMsXG4gICkgYXMgQWN0dWFsQ3BmRm9ybWF0dGluZ09wdGlvbnM8T25FcnJGYWxsYmFjaz47XG5cbiAgaWYgKG9wdGlvbnMuaGlkZGVuKSB7XG4gICAgaWYgKFxuICAgICAgaXNOYU4ob3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCkgfHxcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPCAwIHx8XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gMTBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBcImhpZGRlblJhbmdlLnN0YXJ0XCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwLicpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzTmFOKG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kKSB8fFxuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPCAwIHx8XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA+IDEwXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5lbmRcIiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAuJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPiBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCkge1xuICAgICAgY29uc3QgYXV4ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDtcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPSBvcHRpb25zLmhpZGRlblJhbmdlLmVuZDtcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kID0gYXV4O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5vbkZhaWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgb3B0aW9uIFwib25GYWlsXCIgbXVzdCBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlT3B0aW9ucztcbiIsImltcG9ydCB7IGVzY2FwZSBhcyBlc2NhcGVIVE1MIH0gZnJvbSAnaHRtbC1lc2NhcGVyJztcbmltcG9ydCBudW1Pbmx5IGZyb20gJ251bS1vbmx5JztcblxuaW1wb3J0IG1lcmdlT3B0aW9ucyBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBDcGZGb3JtYXR0aW5nT3B0aW9ucyB9IGZyb20gJy4vbWVyZ2Utb3B0aW9ucyc7XG5cbi8qKlxuICogRm9ybWF0IGEgZ2l2ZW4gQ1BGIGNoYXIgc2VxdWVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNwZkZtdDxPbkVyckZhbGxiYWNrID0gc3RyaW5nPihcbiAgY3BmU3RyaW5nOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBDcGZGb3JtYXR0aW5nT3B0aW9uczxPbkVyckZhbGxiYWNrPixcbik6IHN0cmluZyB7XG4gIGNvbnN0IENQRl9MRU5HVEggPSAxMTtcbiAgY29uc3QgY3BmQXJyYXkgPSBudW1Pbmx5KGNwZlN0cmluZykuc3BsaXQoJycpO1xuICBjb25zdCBjdXN0b21PcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmIChjcGZBcnJheS5sZW5ndGggIT09IENQRl9MRU5HVEgpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwiJHtjcGZTdHJpbmd9XCIgZG9lcyBub3QgY29udGFpbiAke0NQRl9MRU5HVEh9IGRpZ2l0cy5gKTtcblxuICAgIHJldHVybiBjdXN0b21PcHRpb25zLm9uRmFpbChjcGZTdHJpbmcsIGVycm9yKSBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoY3VzdG9tT3B0aW9ucy5oaWRkZW4pIHtcbiAgICBmb3IgKGxldCBpID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDsgaSA8PSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLmVuZDsgaSsrKSB7XG4gICAgICBjcGZBcnJheVtpXSA9IGN1c3RvbU9wdGlvbnMuaGlkZGVuS2V5O1xuICAgIH1cbiAgfVxuXG4gIGNwZkFycmF5LnNwbGljZSg5LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZGFzaCk7XG4gIGNwZkFycmF5LnNwbGljZSg2LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZG90KTtcbiAgY3BmQXJyYXkuc3BsaWNlKDMsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kb3QpO1xuICBjb25zdCBjcGZQcmV0dHkgPSBjcGZBcnJheS5qb2luKCcnKTtcblxuICBpZiAoY3VzdG9tT3B0aW9ucy5lc2NhcGUpIHtcbiAgICByZXR1cm4gZXNjYXBlSFRNTChjcGZQcmV0dHkpO1xuICB9XG5cbiAgcmV0dXJuIGNwZlByZXR0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3BmRm10O1xuIl0sIm5hbWVzIjpbImVzY2FwZUhUTUwiXSwibWFwcGluZ3MiOiI7Ozs7OztBQXlCQSxNQUFNLGNBQXFELEdBQUE7QUFBQSxFQUN6RCxVQUFZLEVBQUE7QUFBQSxJQUNWLEdBQUssRUFBQSxHQUFBO0FBQUEsSUFDTCxJQUFNLEVBQUE7QUFBQSxHQUNSO0FBQUEsRUFDQSxXQUFhLEVBQUE7QUFBQSxJQUNYLEtBQU8sRUFBQSxDQUFBO0FBQUEsSUFDUCxHQUFLLEVBQUE7QUFBQSxHQUNQO0FBQUEsRUFD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