39 lines
1.6 KiB
JavaScript
39 lines
1.6 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.zNumeroInteiro = exports.zNumeroPositivo = exports.zNumero = void 0;
|
|
const zod_1 = __importDefault(require("zod"));
|
|
const zPreprocessarNumero = (p) => {
|
|
if (typeof p === "number")
|
|
return p;
|
|
if (typeof p !== "string")
|
|
return p;
|
|
let p2 = p;
|
|
if (p2.includes(",")) {
|
|
// ponto de milhar → remove; vírgula decimal → troca por ponto
|
|
p2 = p2.replace(/\./g, "").replace(",", ".");
|
|
}
|
|
// remove tudo que não seja dígito ou ponto decimal
|
|
p2 = p2.replace(/[^0-9.]/g, "");
|
|
if (p2 == "")
|
|
return null;
|
|
return Number(p2);
|
|
};
|
|
/**
|
|
* Schema numérico que aceita strings legadas e normaliza para `number`.
|
|
*
|
|
* O campo **é** um número. O `preprocess` resolve compatibilidade com dados
|
|
* antigos onde o frontend enviava strings formatadas (BR ou monetária).
|
|
*
|
|
* Formatos de entrada aceitos:
|
|
* - `10` → number direto
|
|
* - `10.1` → ponto decimal
|
|
* - `10,1` → vírgula decimal (BR)
|
|
* - `1.000,1` → milhar com ponto + vírgula decimal (BR)
|
|
* - `R$ 10,01` → prefixo monetário legado
|
|
*/
|
|
exports.zNumero = zod_1.default.preprocess(zPreprocessarNumero, zod_1.default.number());
|
|
exports.zNumeroPositivo = zod_1.default.preprocess(zPreprocessarNumero, zod_1.default.number().positive());
|
|
exports.zNumeroInteiro = zod_1.default.preprocess(zPreprocessarNumero, zod_1.default.number().int());
|