@lacussoft/cpf-fmt
Version:
Utility function to format CPF (Brazilian ID document).
74 lines (68 loc) • 9.32 kB
JavaScript
/**
* LacusSoft :: cpf-fmt v1.2.2
*
* @author [object Object].
* @license MIT - 2020-2025
*/
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvbWVyZ2Utb3B0aW9ucy50cyIsIi4uL3NyYy9jcGYtZm10LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJnZURlZXAgZnJvbSAnZGVlcG1lcmdlJztcblxudHlwZSBEZWVwUGFydGlhbDxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW1BdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0dWFsQ3BmRm9ybWF0dGluZ09wdGlvbnM8RVIgPSB1bmtub3duPiB7XG4gIGRlbGltaXRlcnM6IHtcbiAgICBkYXNoOiBzdHJpbmc7XG4gICAgZG90OiBzdHJpbmc7XG4gIH07XG4gIGVzY2FwZTogYm9vbGVhbjtcbiAgaGlkZGVuOiBib29sZWFuO1xuICBoaWRkZW5LZXk6IHN0cmluZztcbiAgaGlkZGVuUmFuZ2U6IHtcbiAgICBlbmQ6IG51bWJlcjtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9O1xuICBvbkZhaWw6ICh2YWx1ZTogc3RyaW5nLCBlcnJvcjogRXJyb3IpID0+IEVSO1xufVxuXG5leHBvcnQgdHlwZSBDcGZGb3JtYXR0aW5nT3B0aW9ucyA9IERlZXBQYXJ0aWFsPEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zID0ge1xuICBkZWxpbWl0ZXJzOiB7XG4gICAgZG90OiAnLicsXG4gICAgZGFzaDogJy0nLFxuICB9LFxuICBoaWRkZW5SYW5nZToge1xuICAgIHN0YXJ0OiAzLFxuICAgIGVuZDogMTAsXG4gIH0sXG4gIG9uRmFpbDogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgaGlkZGVuS2V5OiAnKicsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGVzY2FwZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIE1lcmdlIGN1c3RvbSBvcHRpb25zIHRvIHRoZSBkZWZhdWx0IG9uZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDcGZGb3JtYXR0aW5nT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdE9wdGlvbnMsIGN1c3RvbU9wdGlvbnMpIGFzIEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zO1xuXG4gIGlmIChvcHRpb25zLmhpZGRlbikge1xuICAgIGlmIChcbiAgICAgIGlzTmFOKG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQpIHx8XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0IDwgMCB8fFxuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA+IDEwXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5zdGFydFwiIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMC4nKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc05hTihvcHRpb25zLmhpZGRlblJhbmdlLmVuZCkgfHxcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kIDwgMCB8fFxuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPiAxMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIFwiaGlkZGVuUmFuZ2UuZW5kXCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHtcbiAgICAgIGNvbnN0IGF1eCA9IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA9IGF1eDtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMub25GYWlsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG9wdGlvbiBcIm9uRmFpbFwiIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXJnZU9wdGlvbnM7XG4iLCJpbXBvcnQgeyBlc2NhcGUgYXMgZXNjYXBlSFRNTCB9IGZyb20gJ2h0bWwtZXNjYXBlcic7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5cbmltcG9ydCBtZXJnZU9wdGlvbnMgZnJvbSAnLi9tZXJnZS1vcHRpb25zJztcbmltcG9ydCB0eXBlIHsgQ3BmRm9ybWF0dGluZ09wdGlvbnMgfSBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgZ2l2ZW4gQ1BGIGNoYXIgc2VxdWVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNwZkZtdChjcGZTdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IENwZkZvcm1hdHRpbmdPcHRpb25zKSB7XG4gIGNvbnN0IENQRl9MRU5HVEggPSAxMTtcbiAgY29uc3QgY3BmQXJyYXkgPSBudW1Pbmx5KGNwZlN0cmluZykuc3BsaXQoJycpO1xuICBjb25zdCBjdXN0b21PcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmIChjcGZBcnJheS5sZW5ndGggIT09IENQRl9MRU5HVEgpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwiJHtjcGZTdHJpbmd9XCIgZG9lcyBub3QgY29udGFpbiAke0NQRl9MRU5HVEh9IGRpZ2l0cy5gKTtcblxuICAgIHJldHVybiBjdXN0b21PcHRpb25zLm9uRmFpbChjcGZTdHJpbmcsIGVycm9yKSBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoY3VzdG9tT3B0aW9ucy5oaWRkZW4pIHtcbiAgICBmb3IgKGxldCBpID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDsgaSA8PSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLmVuZDsgaSsrKSB7XG4gICAgICBjcGZBcnJheVtpXSA9IGN1c3RvbU9wdGlvbnMuaGlkZGVuS2V5O1xuICAgIH1cbiAgfVxuXG4gIGNwZkFycmF5LnNwbGljZSg5LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZGFzaCk7XG4gIGNwZkFycmF5LnNwbGljZSg2LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZG90KTtcbiAgY3BmQXJyYXkuc3BsaWNlKDMsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kb3QpO1xuICBjb25zdCBjcGZQcmV0dHkgPSBjcGZBcnJheS5qb2luKCcnKTtcblxuICBpZiAoY3VzdG9tT3B0aW9ucy5lc2NhcGUpIHtcbiAgICByZXR1cm4gZXNjYXBlSFRNTChjcGZQcmV0dHkpO1xuICB9XG5cbiAgcmV0dXJuIGNwZlByZXR0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3BmRm10O1xuIl0sIm5hbWVzIjpbImVzY2FwZUhUTUwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUF1QkEsTUFBTSxjQUE2QyxHQUFBO0FBQUEsRUFDakQsVUFBWSxFQUFBO0FBQUEsSUFDVixHQUFLLEVBQUEsR0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBO0FBQUEsR0FDUjtBQUFBLEVBQ0EsV0FBYSxFQUFBO0FBQUEsSUFDWCxLQUFPLEVBQUEsQ0FBQTtBQUFBLElBQ1AsR0FBSyxFQUFBO0FBQUEsR0FDUDtBQUFBLEVBQ0EsTUFBQSxFQUFRLENBQUMsS0FBVSxLQUFBLEtBQUE7QUFBQSxFQUNuQixTQUFXLEVBQUEsR0FBQTtBQUFBLEVBQ1gsTUFBUSxFQUFBLEtBQUE7QUFBQSxFQUNSLE1BQVEsRUFBQTtBQUNWLENBQUE7QUFLQSxTQUFTLFlBQUEsQ0FBYSxhQUFzQyxHQUFBLEVBQUksRUFBQTtBQUM5RCxFQUFNLE1BQUEsT0FBQSxHQUFVLFNBQVUsQ0FBQSxjQUFBLEVBQWdCLGFBQWEsQ0FBQTtB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