feat(lib-core): biblioteca atomica @pulse-libs/core v1.0.0-beta.1
Esta commit conteudo a estrutura atomica completa:
- types: Result<T,E>, AsyncState<T>, Paginated<T>, SortConfig<T>
- utils: date, str, num, cn, debounce, throttle, storage, arr, obj
- validators: Zod schemas — email, password, uuid, url, phone, CPF/CNPJ, sanitizedStr, safeParse
- hooks: useToggle, useAsync, useDebounce, useLocalStorage, useMedia, useInterval, useOnClickOutside, useClipboard, useFetch
- components: Button, Input, Alert, Card, Spinner (atomic design pattern)
- build: tsup v8 ESM+CJS + DTS + sourcemaps — 0 erros
- tests: 57 testes 100% usuarios
- docker: multi-stage Dockerfile (node 20-alpine)
- config: vitest, tsup, tsconfig strict, .npmignore
Filosofia atomica:/utils ← /types ← /validators ← /hooks ← /components
Build: npm run build | Test: npm test | Publish: npm publish
🤖 Generated with Pulse (openclaw + nova-self-improver)
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
// src/validators/index.ts
|
||||
import { z } from "zod";
|
||||
var emailSchema = z.string().trim().toLowerCase().email("Email inv\xE1lido").transform((v) => v);
|
||||
var passwordSchema = z.string().min(8, "M\xEDnimo 8 caracteres").regex(/[A-Z]/, "Pelo menos 1 letra mai\xFAscula").regex(/[a-z]/, "Pelo menos 1 letra min\xFAscula").regex(/[0-9]/, "Pelo menos 1 n\xFAmero");
|
||||
var passwordConfirmSchema = z.object({
|
||||
password: passwordSchema,
|
||||
confirm: z.string()
|
||||
}).refine(({ password, confirm }) => password === confirm, {
|
||||
message: "Senhas n\xE3o coincidem",
|
||||
path: ["confirm"]
|
||||
});
|
||||
var uuidSchema = z.string().uuid("UUID inv\xE1lido");
|
||||
var urlSchema = z.string().url("URL inv\xE1lida").or(z.literal("")).transform((v) => v === "" ? void 0 : v);
|
||||
var phoneSchema = z.string().regex(/^(\+?55)?\s?\(?\d{2}\)?\s?\d{4,5}-?\d{4}$/, "Telefone inv\xE1lido \u2014 use (xx) xxxxx-xxxx");
|
||||
var documentoSchema = z.string().transform((v) => v.replace(/\D/g, "")).refine((v) => v.length === 11 || v.length === 14, {
|
||||
message: "CPF (11 d\xEDgitos) ou CNPJ (14 d\xEDgitos)"
|
||||
});
|
||||
function required(schema, msg = "Campo obrigat\xF3rio") {
|
||||
return schema.refine((v) => !!v && String(v).trim().length > 0, { message: msg });
|
||||
}
|
||||
var sanitizedStr = z.string().transform((v) => v.replace(/<[^>]*>/g, "").trim()).pipe(z.string().min(1));
|
||||
function safeParse(schema, data) {
|
||||
const result = schema.safeParse(data);
|
||||
return result.success ? { success: true, data: result.data } : { success: false, errors: result.error };
|
||||
}
|
||||
|
||||
export {
|
||||
emailSchema,
|
||||
passwordSchema,
|
||||
passwordConfirmSchema,
|
||||
uuidSchema,
|
||||
urlSchema,
|
||||
phoneSchema,
|
||||
documentoSchema,
|
||||
required,
|
||||
sanitizedStr,
|
||||
safeParse
|
||||
};
|
||||
//# sourceMappingURL=chunk-BDJP3A46.mjs.map
|
||||
Reference in New Issue
Block a user