70 lines
2.7 KiB
JavaScript
70 lines
2.7 KiB
JavaScript
/**
|
|
* Utilitário de configuração do Dayjs focado em compatibilidade com SSR.
|
|
*
|
|
* PROBLEMA:
|
|
* A importação direta do `dayjs` e seus plugins frequentemente causa conflitos em ambientes
|
|
* de Renderização do Lado do Servidor (SSR), como Nuxt ou Next.js, devido a discrepâncias
|
|
* na resolução de módulos (ESM vs CJS) e instabilidades de importação.
|
|
*
|
|
* SOLUÇÃO:
|
|
* Este módulo utiliza o padrão de Injeção de Dependência. Ele expõe apenas tipagens e
|
|
* uma função de configuração (`defineDayjsBr`). A responsabilidade de importar as
|
|
* bibliotecas "vivas" é delegada à aplicação consumidora (o cliente da função).
|
|
*
|
|
* Isso permite que o bundler da aplicação principal (Vite, Webpack, etc.) gerencie as
|
|
* instâncias, garantindo consistência e evitando erros de "module not found" ou
|
|
* instâncias duplicadas/não inicializadas adequadamente.
|
|
*/
|
|
/**
|
|
* Inicializa e configura o Dayjs com o locale 'pt-br' e plugins essenciais.
|
|
*
|
|
* MODO DE USO:
|
|
* Importe os pacotes reais na sua aplicação e passe-os para esta função.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* // Em seu arquivo de configuração (ex: plugins/dayjs.ts):
|
|
* import dayjs from "dayjs"
|
|
* import duration from "dayjs/plugin/duration"
|
|
* import isSameOrAfter from "dayjs/plugin/isSameOrAfter"
|
|
* import isSameOrBefore from "dayjs/plugin/isSameOrBefore"
|
|
* import minMax from "dayjs/plugin/minMax"
|
|
* import relativeTime from "dayjs/plugin/relativeTime"
|
|
* import timezone from "dayjs/plugin/timezone"
|
|
* import utc from "dayjs/plugin/utc"
|
|
* import weekOfYear from "dayjs/plugin/weekOfYear"
|
|
* import { iniciarDayjsBr } from "p-comuns"
|
|
* import "dayjs/locale/pt-br" // Importante: importar o locale!
|
|
|
|
* export const dayjsbr = iniciarDayjsBr({
|
|
* dayjs,
|
|
* duration,
|
|
* isSameOrAfter,
|
|
* isSameOrBefore,
|
|
* minMax,
|
|
* relativeTime,
|
|
* timezone,
|
|
* utc,
|
|
* weekOfYear,
|
|
* })
|
|
* ```
|
|
*/
|
|
const iniciarDayjsBr = ({ dayjs, duration, isSameOrAfter, isSameOrBefore, minMax, relativeTime, timezone, utc, weekOfYear, }) => {
|
|
// Extensão da biblioteca com os plugins fornecidos
|
|
dayjs.extend(utc);
|
|
dayjs.extend(timezone);
|
|
dayjs.extend(weekOfYear);
|
|
dayjs.extend(isSameOrBefore);
|
|
dayjs.extend(isSameOrAfter);
|
|
dayjs.extend(minMax);
|
|
dayjs.extend(relativeTime);
|
|
dayjs.extend(duration);
|
|
// Definição do locale global
|
|
dayjs.locale("pt-br");
|
|
return dayjs;
|
|
};
|
|
/**
|
|
* @deprecated Use iniciarDayjsBr em vez de definirDayjsBr. O método defineDayjsBr está obsoleto e será removido em futuras versões.
|
|
*/
|
|
const defineDayjsBr = iniciarDayjsBr;
|
|
export { defineDayjsBr, iniciarDayjsBr };
|