@pedrohb/errors 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,510 @@
1
+ import { EitherUnwrapError, InvalidErrorCode, InvalidParamDelimitersError } from "./errors/index.mjs";
2
+ import { a as Trim, c as CatalogCode, d as DEFAULT_PARAM_DELIMITERS, f as DefaultParamDelimiters, i as ExtractPlaceholders, l as ErrorCatalog, m as ErrorParamDelimiters, n as ErrorParamValue, o as Whitespace, p as createParamPlaceholder, r as ParamsFromMessage, s as CatalogDescriptor, t as ErrorParams, u as ErrorDescriptor } from "./error-params-CR2parjT.mjs";
3
+ import { a as CIRCULAR_MARKER, c as BASE_ERROR_BRAND, d as BaseErrorOptions, f as BaseErrorOptionsArgs, i as serializeBaseError, l as isBaseError, n as serializeNativeError, o as SeenReferences, p as escapeRegExp, r as SerializedBaseError, s as serializeCauseError, t as SerializedNativeError, u as BaseError } from "./index-B4tdSdCF.mjs";
4
+ import { AlphaNumeric, Digit, InvalidCodeMessage, IsUpperSnakeCase, Segment, Tail, UpperLetter, ValidateErrorDefinitions } from "./types/index.mjs";
5
+ //#region src/define-error-catalog.d.ts
6
+ /**
7
+ * Cria um catálogo de erros imutável a partir de um objeto que associa cada
8
+ * código de erro à sua mensagem.
9
+ *
10
+ * Para cada entrada de `definitions` gera um {@link ErrorDescriptor} com
11
+ * `code` e `message` congelado com `Object.freeze`. O próprio catálogo
12
+ * retornado também é congelado, de modo que nem o catálogo nem seus
13
+ * descritores podem ser alterados depois de criados.
14
+ *
15
+ * A validação ocorre em duas camadas:
16
+ * - em tempo de compilação via {@link ValidateErrorDefinitions}: códigos fora
17
+ * de UPPER_SNAKE_CASE geram um erro de tipo com uma mensagem explicativa;
18
+ * - em tempo de execução via {@link isUpperSnakeCase}: códigos inválidos
19
+ * lançam {@link InvalidErrorCode}, o que protege contra definições que
20
+ * escapem da checagem de tipos (ex.: objetos tipados como `any` ou
21
+ * `Record<string, string>`).
22
+ *
23
+ * O parâmetro de tipo `T` é declarado como `const`, o que preserva os tipos
24
+ * literais dos códigos e das mensagens sem a necessidade de `as const` na
25
+ * chamada.
26
+ *
27
+ * @template Codes - Objeto que mapeia códigos de erro para suas mensagens.
28
+ * @param definitions - Definições do catálogo: chaves são os códigos em
29
+ * UPPER_SNAKE_CASE.
30
+ * @returns Catálogo de erros somente leitura com um descritor para cada
31
+ * código informado.
32
+ * @throws {InvalidErrorCode} Se algum código não estiver em UPPER_SNAKE_CASE.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const TEST_ERROR_CODES = defineErrorCatalog({
37
+ * USER_NOT_FOUND: "Usuário {id} não encontrado",
38
+ * INVALID_TOKEN: "Token inválido",
39
+ * });
40
+ *
41
+ * TEST_ERROR_CODES.USER_NOT_FOUND.code; // "USER_NOT_FOUND"
42
+ * TEST_ERROR_CODES.USER_NOT_FOUND.message; // "Usuário {id} não encontrado"
43
+ *
44
+ * // Erro de compilação (e de execução): código fora de UPPER_SNAKE_CASE
45
+ * defineErrorCatalog({
46
+ * userNotFound: "Usuário não encontrado",
47
+ * });
48
+ * // Lança InvalidErrorCode
49
+ * ```
50
+ */
51
+ export declare function defineErrorCatalog<const Codes extends Record<string, string>>(definitions: ValidateErrorDefinitions<Codes>): ErrorCatalog<Codes>;
52
+ //#endregion
53
+ //#region src/either.d.ts
54
+ /**
55
+ * Representa o resultado de uma operação que pode ter sucesso (`Ok`) ou
56
+ * falhar (`Err`), tornando o erro parte explícita do tipo de retorno em vez
57
+ * de depender de exceções.
58
+ *
59
+ * Um `Either<O, E>` é sempre uma instância de {@link Ok} que carrega um
60
+ * valor de sucesso do tipo `O`, ou de {@link Err} que carrega um valor de
61
+ * erro do tipo `E`. Use {@link ok} e {@link err} para criá-los.
62
+ *
63
+ * Os métodos {@link Either.map}, {@link Either.mapErr}, {@link Either.flatMap}
64
+ * e {@link Either.orElse} retornam um novo `Either` e não alteram o original.
65
+ * Para tratar os dois casos use {@link Either.match}, ou os type guards
66
+ * {@link Either.isOk} e {@link Either.isErr}.
67
+ *
68
+ * @template O - Tipo do valor de sucesso.
69
+ * @template E - Tipo do valor de erro.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * function toDivide(a: number, b: number): Either<number, string> {
74
+ * return b === 0 ? err("Divisão por zero") : ok(a / b);
75
+ * }
76
+ *
77
+ * const message = toDivide(10, 2)
78
+ * .map((resultado) => resultado * 3)
79
+ * .match({
80
+ * onOk: (valor) => `Resultado: ${valor}`,
81
+ * onErr: (erro) => `Falha: ${erro}`,
82
+ * });
83
+ * // "Resultado: 15"
84
+ * ```
85
+ */
86
+ export declare abstract class Either<O, E> {
87
+ /** Discriminante da variante: `"Ok"` para sucesso e `"Err"` para erro. */
88
+ abstract readonly tag: "Ok" | "Err";
89
+ /**
90
+ * Retorna o valor de sucesso.
91
+ *
92
+ * @returns O valor contido em `Ok`.
93
+ * @throws {EitherUnwrapError} Se for um `Err`. A `cause` do erro é o valor
94
+ * de erro contido.
95
+ */
96
+ abstract unwrap(): O;
97
+ /**
98
+ * Retorna o valor de erro.
99
+ *
100
+ * @returns O valor contido em `Err`.
101
+ * @throws {EitherUnwrapError} Se for um `Ok`. A `cause` do erro é o valor
102
+ * de sucesso contido.
103
+ */
104
+ abstract unwrapErr(): E;
105
+ /**
106
+ * Verifica se é um `Ok` funcionando como type guard.
107
+ *
108
+ * @returns `true` se for `Ok` (restringindo o tipo para {@link Ok});
109
+ * caso contrário, `false`.
110
+ */
111
+ abstract isOk(): this is Ok<O, E>;
112
+ /**
113
+ * Verifica se é um `Err` funcionando como type guard.
114
+ *
115
+ * @returns `true` se for `Err` (restringindo o tipo para {@link Err});
116
+ * caso contrário, `false`.
117
+ */
118
+ abstract isErr(): this is Err<O, E>;
119
+ /**
120
+ * Transforma o valor de sucesso mantendo o erro intacto.
121
+ *
122
+ * Se for `Ok` aplica `fn` ao valor e retorna um novo `Ok` com o resultado.
123
+ * Se for `Err` `fn` não é chamada e um novo `Err` com o mesmo erro é
124
+ * retornado. Exceções lançadas por `fn` não são capturadas.
125
+ *
126
+ * @template O2 - Tipo do novo valor de sucesso.
127
+ * @param fn - Função que converte o valor de sucesso.
128
+ * @returns Um `Either` com o valor transformado ou o erro original.
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * ok<number, string>(2).map((n) => n * 2).unwrap(); // 4
133
+ * err<number, string>("falhou").map((n) => n * 2).unwrapErr(); // "falhou"
134
+ * ```
135
+ */
136
+ map<O2>(fn: (value: O) => O2): Either<O2, E>;
137
+ /**
138
+ * Transforma o valor de erro mantendo o sucesso intacto.
139
+ *
140
+ * Se for `Err` aplica `fn` ao erro e retorna um novo `Err` com o resultado.
141
+ * Se for `Ok` `fn` não é chamada e um novo `Ok` com o mesmo valor é
142
+ * retornado. Exceções lançadas por `fn` não são capturadas.
143
+ *
144
+ * @template E2 - Tipo do novo valor de erro.
145
+ * @param fn - Função que converte o valor de erro.
146
+ * @returns Um `Either` com o erro transformado ou o valor original.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * err<number, string>("falhou").mapErr((e) => e.length).unwrapErr(); // 7
151
+ * ok<number, string>(1).mapErr((e) => e.length).unwrap(); // 1
152
+ * ```
153
+ */
154
+ mapErr<E2>(fn: (value: E) => E2): Either<O, E2>;
155
+ /**
156
+ * Encadeia uma operação que também retorna um `Either` usada quando o
157
+ * próximo passo também pode falhar.
158
+ *
159
+ * Se for `Ok`, retorna diretamente o `Either` produzido por `fn` (sem
160
+ * aninhamento). Se for `Err` `fn` não é chamada e o erro é propagado.
161
+ * O tipo de erro resultante é a união `E | E2`. Exceções lançadas por `fn`
162
+ * não são capturadas.
163
+ *
164
+ * @template O2 - Tipo do valor de sucesso retornado por `fn`.
165
+ * @template E2 - Tipo do valor de erro retornado por `fn`.
166
+ * @param fn - Função que recebe o valor de sucesso e retorna um `Either`.
167
+ * @returns O `Either` retornado por `fn`, ou o erro original.
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * const forNumber = (s: string): Either<number, string> => {
172
+ * const n = Number(s);
173
+ * return Number.isNaN(n) ? err("Não é número") : ok(n);
174
+ * };
175
+ *
176
+ * ok<string, string>("42").flatMap(forNumber).unwrap(); // 42
177
+ * ok<string, string>("abc").flatMap(forNumber).unwrapErr(); // "Não é número"
178
+ * ```
179
+ */
180
+ flatMap<O2, E2>(fn: (value: O) => Either<O2, E2>): Either<O2, E | E2>;
181
+ /**
182
+ * Tenta se recuperar de um erro encadeando uma operação alternativa que
183
+ * também retorna um `Either`. É o oposto de {@link Either.flatMap}.
184
+ *
185
+ * Se for `Err` retorna diretamente o `Either` produzido por `fn`. Se for
186
+ * `Ok` `fn` não é chamada e o valor é mantido. O tipo de sucesso
187
+ * resultante é a união `O | O2`. Exceções lançadas por `fn` não são
188
+ * capturadas.
189
+ *
190
+ * @template O2 - Tipo do valor de sucesso retornado por `fn`.
191
+ * @template E2 - Tipo do valor de erro retornado por `fn`.
192
+ * @param fn - Função que recebe o valor de erro e retorna um `Either`.
193
+ * @returns O `Either` retornado por `fn`, ou o valor de sucesso original.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * err<number, string>("falhou").orElse(() => ok(0)).unwrap(); // 0
198
+ * ok<number, string>(5).orElse(() => ok(0)).unwrap(); // 5
199
+ * ```
200
+ */
201
+ orElse<O2, E2>(fn: (value: E) => Either<O2, E2>): Either<O | O2, E2>;
202
+ /**
203
+ * Trata os dois casos e produz um único valor chamando o handler da
204
+ * variante correspondente.
205
+ *
206
+ * @template R - Tipo do valor retornado pelos handlers.
207
+ * @param handlers - Objeto com `onOk` chamado com o valor de sucesso e
208
+ * `onErr` chamado com o valor de erro.
209
+ * @returns O resultado do handler chamado.
210
+ *
211
+ * @example
212
+ * ```ts
213
+ * const texto = resultado.match({
214
+ * onOk: (valor) => `Sucesso: ${valor}`,
215
+ * onErr: (erro) => `Erro: ${erro}`,
216
+ * });
217
+ * ```
218
+ */
219
+ match<R>(handlers: Readonly<{
220
+ onOk(value: O): R;
221
+ onErr(value: E): R;
222
+ }>): R;
223
+ }
224
+ /**
225
+ * Variante de sucesso de {@link Either} que carrega um valor do tipo `O`.
226
+ *
227
+ * O construtor é `protected`; para criar uma instância use {@link Ok.create}
228
+ * ou a função {@link ok}.
229
+ *
230
+ * @template O - Tipo do valor de sucesso. Por padrão, `never`.
231
+ * @template E - Tipo do valor de erro usado apenas para compatibilidade com
232
+ * {@link Either}. Por padrão, `never`.
233
+ */
234
+ export declare class Ok<O = never, E = never> extends Either<O, E> {
235
+ /** Discriminante da variante sempre `"Ok"`. */
236
+ readonly tag: "Ok";
237
+ /** Valor de sucesso armazenado. */
238
+ private readonly value;
239
+ /**
240
+ * @param value - Valor de sucesso a ser armazenado.
241
+ */
242
+ protected constructor(value: O);
243
+ /**
244
+ * Retorna o valor de sucesso armazenado.
245
+ *
246
+ * @returns O valor contido.
247
+ */
248
+ unwrap(): O;
249
+ /**
250
+ * Sempre lança um erro pois um `Ok` não possui valor de erro.
251
+ *
252
+ * @throws {EitherUnwrapError} Sempre. A `cause` é o valor de sucesso contido.
253
+ */
254
+ unwrapErr(): E;
255
+ /** @returns Sempre `true`. */
256
+ isOk(): this is Ok<O, E>;
257
+ /** @returns Sempre `false`. */
258
+ isErr(): this is Err<O, E>;
259
+ /**
260
+ * Cria um `Ok` com o valor informado.
261
+ *
262
+ * @template O - Tipo do valor de sucesso. Por padrão, `never`.
263
+ * @template E - Tipo do valor de erro. Por padrão, `never`.
264
+ * @param value - Valor de sucesso.
265
+ * @returns Uma nova instância de `Ok`.
266
+ */
267
+ static create<O = never, E = never>(value: O): Ok<O, E>;
268
+ }
269
+ /**
270
+ * Variante de erro de {@link Either} que carrega um valor do tipo `E`.
271
+ *
272
+ * O construtor é `protected`; para criar uma instância use {@link Err.create}
273
+ * ou a função {@link err}.
274
+ *
275
+ * @template O - Tipo do valor de sucesso usado apenas para compatibilidade
276
+ * com {@link Either}. Por padrão, `never`.
277
+ * @template E - Tipo do valor de erro. Por padrão, `never`.
278
+ */
279
+ export declare class Err<O = never, E = never> extends Either<O, E> {
280
+ /** Discriminante da variante sempre `"Err"`. */
281
+ readonly tag: "Err";
282
+ /** Valor de erro armazenado. */
283
+ private readonly value;
284
+ /**
285
+ * @param value - Valor de erro a ser armazenado.
286
+ */
287
+ protected constructor(value: E);
288
+ /**
289
+ * Sempre lança um erro pois um `Err` não possui valor de sucesso.
290
+ *
291
+ * @throws {EitherUnwrapError} Sempre. A `cause` é o valor de erro contido.
292
+ */
293
+ unwrap(): O;
294
+ /**
295
+ * Retorna o valor de erro armazenado.
296
+ *
297
+ * @returns O valor contido.
298
+ */
299
+ unwrapErr(): E;
300
+ /** @returns Sempre `false`. */
301
+ isOk(): this is Ok<O, E>;
302
+ /** @returns Sempre `true`. */
303
+ isErr(): this is Err<O, E>;
304
+ /**
305
+ * Cria um `Err` com o valor informado.
306
+ *
307
+ * @template O - Tipo do valor de sucesso. Por padrão, `never`.
308
+ * @template E - Tipo do valor de erro. Por padrão, `never`.
309
+ * @param value - Valor de erro.
310
+ * @returns Uma nova instância de `Err`.
311
+ */
312
+ static create<O = never, E = never>(value: E): Err<O, E>;
313
+ }
314
+ /**
315
+ * Cria um {@link Either} de sucesso (`Ok`) com o valor informado.
316
+ *
317
+ * O retorno é tipado como `Either<O, E>` e não como `Ok` para que possa ser
318
+ * usado onde se espera qualquer variante. Como `E` não pode ser inferido a
319
+ * partir do argumento, informe-o explicitamente quando necessário.
320
+ *
321
+ * @template O - Tipo do valor de sucesso. Por padrão, `never`.
322
+ * @template E - Tipo do valor de erro. Por padrão, `never`.
323
+ * @param value - Valor de sucesso.
324
+ * @returns Um `Either` que é um `Ok` contendo `value`.
325
+ *
326
+ * @example
327
+ * ```ts
328
+ * const result = ok<number, string>(42);
329
+ * result.isOk(); // true
330
+ * result.unwrap(); // 42
331
+ * ```
332
+ */
333
+ export declare function ok<O = never, E = never>(value: O): Either<O, E>;
334
+ /**
335
+ * Cria um {@link Either} de erro (`Err`) com o valor informado.
336
+ *
337
+ * O retorno é tipado como `Either<O, E>` e não como `Err` para que possa ser
338
+ * usado onde se espera qualquer variante. Como `O` não pode ser inferido a
339
+ * partir do argumento, informe-o explicitamente quando necessário.
340
+ *
341
+ * @template O - Tipo do valor de sucesso. Por padrão, `never`.
342
+ * @template E - Tipo do valor de erro. Por padrão, `never`.
343
+ * @param value - Valor de erro.
344
+ * @returns Um `Either` que é um `Err` contendo `value`.
345
+ *
346
+ * @example
347
+ * ```ts
348
+ * const result = err<number, string>("Algo deu errado");
349
+ * result.isErr(); // true
350
+ * result.unwrapErr(); // "Algo deu errado"
351
+ * ```
352
+ */
353
+ export declare function err<O = never, E = never>(value: E): Either<O, E>;
354
+ //#endregion
355
+ //#region src/interpolate-error-message.d.ts
356
+ /**
357
+ * Deriva, em tempo de compilação a lista de argumentos extras exigida para
358
+ * interpolar uma mensagem de erro.
359
+ *
360
+ * - Se a mensagem **não** tiver placeholders o resultado é uma tupla vazia
361
+ * (`[]`), ou seja, nenhum argumento adicional deve ser passado.
362
+ * - Se tiver placeholders o resultado é uma tupla com um único argumento
363
+ * obrigatório, `params` do tipo {@link ParamsFromMessage}.
364
+ *
365
+ * É pensado para ser usado como tipo de parâmetro rest (`...args`) de modo
366
+ * que o objeto de parâmetros seja exigido apenas quando necessário.
367
+ *
368
+ * @template Message - Mensagem a ser analisada.
369
+ * @template Delimiters - Objeto com os delimitadores `open` e `close` do
370
+ * placeholder. Por padrão, {@link DefaultParamDelimiters}.
371
+ *
372
+ * @example
373
+ * ```ts
374
+ * type A = ErrorMessageArgs<"Usuário {id} não encontrado">;
375
+ * // [params: Readonly<{ id: ErrorParamValue }>]
376
+ *
377
+ * type B = ErrorMessageArgs<"Token inválido">;
378
+ * // []
379
+ *
380
+ * type C = ErrorMessageArgs<
381
+ * "Rota [route] não encontrada",
382
+ * { readonly open: "["; readonly close: "]" }
383
+ * >;
384
+ * // [params: Readonly<{ route: ErrorParamValue }>]
385
+ * ```
386
+ */
387
+ export type ErrorMessageArgs<Message extends string, Delimiters extends ErrorParamDelimiters = DefaultParamDelimiters> = [ParamsFromMessage<Message, Delimiters>] extends [never] ? [] : [params: ParamsFromMessage<Message, Delimiters>];
388
+ /**
389
+ * Interpola os parâmetros informados na mensagem de um descritor de erro
390
+ * substituindo cada placeholder pelo valor correspondente.
391
+ *
392
+ * Os placeholders são localizados com {@link createParamPlaceholder} a partir
393
+ * dos delimitadores informados. O nome de cada placeholder é aparado
394
+ * (`{ id }` equivale a `{id}`) e o valor é convertido para texto com `String`.
395
+ *
396
+ * O placeholder é mantido exatamente como está na mensagem (sem substituição)
397
+ * quando:
398
+ * - o nome é vazio (ex.: `{}` ou `{ }`);
399
+ * - o nome não existe como propriedade própria de `params`.
400
+ *
401
+ * O objeto de parâmetros é exigido ou omitido conforme a mensagem via
402
+ * {@link ErrorMessageArgs}: mensagens sem placeholders não aceitam `params` e
403
+ * mensagens com placeholders exigem todos eles.
404
+ *
405
+ * @template Descriptor - Tipo do descritor de erro cuja `message` define os
406
+ * parâmetros exigidos.
407
+ * @template Delimiters - Tipo dos delimitadores dos placeholders. Por padrão,
408
+ * {@link DefaultParamDelimiters}.
409
+ * @param descriptor - Descritor de erro cuja mensagem será interpolada.
410
+ * @param delimiters - Delimitadores `open` e `close` dos placeholders.
411
+ * @param args - Objeto `params` com os valores dos placeholders exigido
412
+ * apenas se a mensagem tiver placeholders.
413
+ * @returns A mensagem com os placeholders substituídos.
414
+ * @throws {InvalidParamDelimitersError} Se `open` ou `close` for uma string
415
+ * vazia (lançado por {@link createParamPlaceholder}).
416
+ *
417
+ * @example
418
+ * ```ts
419
+ * const keys = { open: "{", close: "}" } as const;
420
+ *
421
+ * const USER_NOT_FOUND = {
422
+ * code: "USER_NOT_FOUND",
423
+ * message: "Usuário {id} não encontrado em {table}",
424
+ * } as const satisfies ErrorDescriptor;
425
+ *
426
+ * interpolateErrorMessage(USER_NOT_FOUND, keys, {
427
+ * id: 42,
428
+ * table: "users",
429
+ * });
430
+ * // "Usuário 42 não encontrado em users"
431
+ *
432
+ * const INVALID_TOKEN = {
433
+ * code: "INVALID_TOKEN",
434
+ * message: "Token inválido",
435
+ * } as const satisfies ErrorDescriptor;
436
+ *
437
+ * interpolateErrorMessage(INVALID_TOKEN, keys);
438
+ * // "Token inválido" (sem params)
439
+ *
440
+ * // Delimitadores personalizados
441
+ * const ROUTE_NOT_FOUND = {
442
+ * code: "ROUTE_NOT_FOUND",
443
+ * message: "Rota [route] não encontrada",
444
+ * } as const satisfies ErrorDescriptor;
445
+ *
446
+ * interpolateErrorMessage(
447
+ * ROUTE_NOT_FOUND,
448
+ * { open: "[", close: "]" } as const,
449
+ * { route: "/home" },
450
+ * );
451
+ * // "Rota /home não encontrada"
452
+ * ```
453
+ */
454
+ export declare function interpolateErrorMessage<Descriptor extends ErrorDescriptor, Delimiters extends ErrorParamDelimiters = DefaultParamDelimiters>(descriptor: Descriptor, delimiters: Delimiters, ...args: ErrorMessageArgs<Descriptor["message"], Delimiters>): string;
455
+ //#endregion
456
+ //#region src/upper-snake-case.d.ts
457
+ /**
458
+ * Expressão regular que valida códigos em UPPER_SNAKE_CASE em tempo de
459
+ * execução.
460
+ *
461
+ * Regras (espelham o tipo {@link IsUpperSnakeCase}):
462
+ * - deve começar com uma letra maiúscula (`A-Z`);
463
+ * - pode conter letras maiúsculas, dígitos e `_`;
464
+ * - `_` só pode aparecer entre caracteres alfanuméricos, ou seja, não pode
465
+ * estar no início nem no fim e não pode ser repetido em sequência.
466
+ */
467
+ export declare const UPPER_SNAKE_CASE: RegExp;
468
+ /**
469
+ * Verifica em tempo de execução, se uma string está em UPPER_SNAKE_CASE.
470
+ *
471
+ * É o equivalente em runtime do tipo {@link IsUpperSnakeCase}, usando a
472
+ * expressão regular {@link UPPER_SNAKE_CASE}.
473
+ *
474
+ * @param value - String a ser verificada.
475
+ * @returns `true` se `value` estiver em UPPER_SNAKE_CASE; caso contrário,
476
+ * `false`.
477
+ *
478
+ * @example
479
+ * ```ts
480
+ * isUpperSnakeCase("USER_NOT_FOUND"); // true
481
+ * isUpperSnakeCase("ERROR_404"); // true
482
+ * isUpperSnakeCase("userNotFound"); // false
483
+ * isUpperSnakeCase("_USER"); // false
484
+ * isUpperSnakeCase("USER__NOT"); // false
485
+ * isUpperSnakeCase("1ERROR"); // false
486
+ * ```
487
+ */
488
+ export declare function isUpperSnakeCase(value: string): boolean;
489
+ /**
490
+ * Monta a mensagem de erro exibida quando um código não está em
491
+ * UPPER_SNAKE_CASE.
492
+ *
493
+ * O retorno é tipado como {@link InvalidCodeMessage}, de modo que o texto em
494
+ * runtime corresponde exatamente ao tipo literal usado na validação em tempo
495
+ * de compilação.
496
+ *
497
+ * @template Code - Tipo literal do código inválido.
498
+ * @param code - Código de erro inválido a ser incluído na mensagem.
499
+ * @returns Mensagem descrevendo o código inválido e o formato esperado.
500
+ *
501
+ * @example
502
+ * ```ts
503
+ * invalidCodeMessage("userNotFound");
504
+ * // 'Código de erro inválido "userNotFound". Os códigos de erro devem usar UPPER_SNAKE_CASE.'
505
+ * ```
506
+ */
507
+ export declare function invalidCodeMessage<Code extends string>(code: Code): InvalidCodeMessage<Code>;
508
+ //#endregion
509
+ export { AlphaNumeric, BASE_ERROR_BRAND, BaseError, BaseErrorOptions, BaseErrorOptionsArgs, CIRCULAR_MARKER, CatalogCode, CatalogDescriptor, DEFAULT_PARAM_DELIMITERS, DefaultParamDelimiters, Digit, EitherUnwrapError, ErrorCatalog, ErrorDescriptor, ErrorParamDelimiters, ErrorParamValue, ErrorParams, ExtractPlaceholders, InvalidCodeMessage, InvalidErrorCode, InvalidParamDelimitersError, IsUpperSnakeCase, ParamsFromMessage, SeenReferences, Segment, SerializedBaseError, SerializedNativeError, Tail, Trim, UpperLetter, ValidateErrorDefinitions, Whitespace, createParamPlaceholder, escapeRegExp, isBaseError, serializeBaseError, serializeCauseError, serializeNativeError };
510
+ //# sourceMappingURL=index.d.mts.map