Files
pulse-libs/projetos/@pulse-libs/core/dist/chunk-RL4ANBQD.mjs.map
T
pulse-agent bbdb68a6de 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)
2026-05-19 21:43:03 -03:00

1 line
9.5 KiB
Plaintext

{"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["/**\n * @pulse-libs/utils — Funções puras, zero dependências\n * Usáveis em React, Vue, Node, browser\n */\n\n// ── Date ────────────────────────────────────────────────────\nexport const date = {\n now: (): string => new Date().toISOString(),\n format: (d: Date | string | number, fmt = 'YYYY-MM-DD HH:mm'): string => {\n const date = typeof d === 'number' ? new Date(d) : new Date(d);\n const map: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n DD: String(date.getDate()).padStart(2, '0'),\n HH: String(date.getHours()).padStart(2, '0'),\n mm: String(date.getMinutes()).padStart(2, '0'),\n ss: String(date.getSeconds()).padStart(2, '0'),\n };\n return fmt.replace(/YYYY|MM|DD|HH|mm|ss/g, m => map[m]);\n },\n isToday: (d: Date | string): boolean => {\n const date = new Date(d);\n const today = new Date();\n return date.toDateString() === today.toDateString();\n },\n daysBetween: (a: Date, b: Date): number =>\n Math.ceil((b.getTime() - a.getTime()) / 86_400_000),\n};\n\n// ── String ──────────────────────────────────────────────────\nexport const str = {\n capitalize: (s: string): string => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(),\n truncate: (s: string, max: number, suffix = '…'): string =>\n s.length <= max ? s : s.slice(0, max).trimEnd() + suffix,\n camelCase: (s: string): string => s.replace(/[-_\\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : ''),\n kebabCase: (s: string): string => s.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(),\n slugify: (s: string): string => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''),\n removeAccents: (s: string): string => s.normalize('NFD').replace(/[\\u0300-\\u036f]/g, ''),\n maskEmail: (email: string): string => {\n const [user, domain] = email.split('@');\n return user.length <= 2 ? `${user[0]}*@${domain}` : `${user[0]}${'*'.repeat(user.length - 2)}${user.at(-1)!}@${domain}`;\n },\n};\n\n// ── Number ──────────────────────────────────────────────────\nexport const num = {\n clamp: (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max),\n rand: (min: number, max: number): number => Math.floor(Math.random() * (max - min + 1)) + min,\n format: (n: number): string => n.toLocaleString('pt-BR'),\n percent: (part: number, total: number, decimals = 1): number => {\n if (total === 0) return 0;\n return parseFloat(((part / total) * 100).toFixed(decimals));\n },\n};\n\n// ── Classnames / CN ─────────────────────────────────────────\ntype ClassValue = string | boolean | null | undefined | Array<ClassValue>;\nconst CLEAN_CLASSES_REGEX = /\\s+/g;\n\nexport function cn(...inputs: ClassValue[]): string {\n return inputs\n .flat(2)\n .filter(Boolean)\n .join(' ')\n .replace(CLEAN_CLASSES_REGEX, ' ')\n .trim();\n}\n\n// ── Debounce / Throttle ─────────────────────────────────────\nexport function debounce<T extends (...args: Parameters<T>) => void>(\n fn: T, ms: number\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), ms); };\n}\n\nexport function throttle<T extends (...args: Parameters<T>) => void>(\n fn: T, ms: number\n): (...args: Parameters<T>) => void {\n let last = 0;\n return (...args: Parameters<T>) => {\n const now = Date.now();\n if (now - last >= ms) { last = now; fn(...args); }\n };\n}\n\n// ── Storage ─────────────────────────────────────────────────\nexport const storage = {\n get: <T>(key: string, fallback: T): T => {\n try { const v = typeof localStorage !== 'undefined' ? localStorage.getItem(key) : null; return v ? JSON.parse(v) : fallback; } catch { return fallback; }\n },\n set: <T>(key: string, value: T): void => { localStorage.setItem(key, JSON.stringify(value)); },\n remove: (key: string): void => { try { localStorage.removeItem(key); } catch { /* SSR guard */ } },\n clear: (prefix?: string): void => {\n if (prefix) Object.keys(localStorage).filter(k => k.startsWith(prefix)).forEach(k => localStorage.removeItem(k));\n else localStorage.clear();\n },\n};\n\n// ── Array / Object Utils ────────────────────────────────────\nexport const arr = {\n unique: <T>(items: T[], key?: keyof T): T[] => {\n if (!key) return [...new Set(items)];\n return items.filter((v, i, a) => a.findIndex(item => (item as any)[key] === (v as any)[key]) === i);\n },\n chunk: <T>(items: T[], size: number): T[][] => {\n return Array.from({ length: Math.ceil(items.length / size) }, (_, i) => items.slice(i * size, i * size + size));\n },\n shuffle: <T>(items: T[]): T[] => [...items].sort(() => Math.random() - 0.5),\n};\n\nexport const obj = {\n pick: <T extends object, K extends keyof T>(o: T, keys: K[]): Pick<T, K> => keys.reduce((r, k) => { if (k in o) (r as any)[k] = (o as any)[k]; return r; }, {} as Pick<T, K>),\n omit: <T extends object, K extends keyof T>(o: T, keys: K[]): Omit<T, K> => Object.fromEntries(Object.entries(o).filter(([k]) => !(keys as string[]).includes(k))) as Omit<T, K>,\n isEmpty:(o: object | null | undefined): boolean => o == null || Object.keys(o).length === 0,\n};\n"],"mappings":"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","names":["date"]}