@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,544 @@
1
+ import { c as CatalogCode, f as DefaultParamDelimiters, l as ErrorCatalog, m as ErrorParamDelimiters, s as CatalogDescriptor, t as ErrorParams } from "./error-params-CR2parjT.cjs";
2
+ //#region src/functions/escape-reg-exp.d.ts
3
+ /**
4
+ * Escapa os caracteres especiais de expressões regulares em uma string, para
5
+ * que ela possa ser usada como texto literal dentro de um `RegExp`.
6
+ *
7
+ * Cada caractere especial (`. * + ? ^ $ { } ( ) | [ ] \`) é precedido por uma
8
+ * barra invertida. Caracteres comuns permanecem inalterados.
9
+ *
10
+ * Útil por exemplo, para montar uma expressão regular a partir de
11
+ * delimitadores informados pelo usuário (como os de placeholders), sem que
12
+ * símbolos como `[` ou `{` sejam interpretados como parte da sintaxe.
13
+ *
14
+ * @param value - String a ser escapada.
15
+ * @returns A string com os caracteres especiais escapados.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * escapeRegExp("{id}"); // "\\{id\\}"
20
+ * escapeRegExp("[nome]"); // "\\[nome\\]"
21
+ * escapeRegExp("a.b*c"); // "a\\.b\\*c"
22
+ * escapeRegExp("texto livre"); // "texto livre"
23
+ *
24
+ * const regex = new RegExp(escapeRegExp("(x)"), "g");
25
+ * "valor (x) aqui".replace(regex, "1"); // "valor 1 aqui"
26
+ * ```
27
+ */
28
+ declare function escapeRegExp(value: string): string;
29
+ //#endregion
30
+ //#region src/base-error.d.ts
31
+ /**
32
+ * Opções aceitas pelo construtor de {@link BaseError}.
33
+ *
34
+ * Estende `ErrorOptions` (que fornece `cause`) e acrescenta:
35
+ * - `delimiters`: delimitadores dos placeholders da mensagem sempre opcional;
36
+ * - `params`: valores dos placeholders **exigido apenas** quando a mensagem
37
+ * do código possui placeholders (ver {@link ErrorParams}). Se a mensagem não
38
+ * tiver placeholders a propriedade `params` não existe no tipo.
39
+ *
40
+ * @template Catalog - Catálogo de erros ao qual o código pertence. Por padrão,
41
+ * `ErrorCatalog`.
42
+ * @template Code - Código do erro dentro do catálogo. Por padrão, todos os
43
+ * códigos do catálogo.
44
+ * @template Delimiters - Tipo dos delimitadores dos placeholders. Por padrão,
45
+ * {@link DefaultParamDelimiters}.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * // Mensagem sem placeholders: apenas `cause` e `delimiters` são aceitos
50
+ * type A = BaseErrorOptions<typeof ERROR_CODES, "INVALID_TOKEN">;
51
+ * // ErrorOptions & { delimiters?: DefaultParamDelimiters }
52
+ *
53
+ * // Mensagem com placeholders: `params` é obrigatório
54
+ * type B = BaseErrorOptions<typeof ERROR_CODES, "USER_NOT_FOUND">;
55
+ * // ErrorOptions & { params: Readonly<{ id: ErrorParamValue }>; delimiters?: ... }
56
+ * ```
57
+ */
58
+ type BaseErrorOptions<Catalog extends ErrorCatalog = ErrorCatalog, Code extends CatalogCode<Catalog> = CatalogCode<Catalog>, Delimiters extends ErrorParamDelimiters = DefaultParamDelimiters> = [ErrorParams<Catalog, Code, Delimiters>] extends [never] ? ErrorOptions & {
59
+ delimiters?: Delimiters;
60
+ } : ErrorOptions & {
61
+ params: ErrorParams<Catalog, Code, Delimiters>;
62
+ delimiters?: Delimiters;
63
+ };
64
+ /**
65
+ * Deriva em tempo de compilação a lista de argumentos de opções do
66
+ * construtor de {@link BaseError}.
67
+ *
68
+ * - Se a mensagem **não** tiver placeholders `options` é opcional.
69
+ * - Se tiver placeholders `options` é obrigatório (pois deve conter `params`).
70
+ *
71
+ * É pensado para ser usado como tipo de parâmetro rest (`...args`).
72
+ *
73
+ * @template Catalog - Catálogo de erros ao qual o código pertence. Por padrão,
74
+ * `ErrorCatalog`.
75
+ * @template Code - Código do erro dentro do catálogo. Por padrão, todos os
76
+ * códigos do catálogo.
77
+ * @template Delimiters - Tipo dos delimitadores dos placeholders. Por padrão,
78
+ * {@link DefaultParamDelimiters}.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * type A = BaseErrorOptionsArgs<typeof ERROR_CODES, "INVALID_TOKEN">;
83
+ * // [options?: BaseErrorOptions<...>]
84
+ *
85
+ * type B = BaseErrorOptionsArgs<typeof ERROR_CODES, "USER_NOT_FOUND">;
86
+ * // [options: BaseErrorOptions<...>]
87
+ * ```
88
+ */
89
+ type BaseErrorOptionsArgs<Catalog extends ErrorCatalog = ErrorCatalog, Code extends CatalogCode<Catalog> = CatalogCode<Catalog>, Delimiters extends ErrorParamDelimiters = DefaultParamDelimiters> = [ErrorParams<Catalog, Code, Delimiters>] extends [never] ? [options?: BaseErrorOptions<Catalog, Code, Delimiters>] : [options: BaseErrorOptions<Catalog, Code, Delimiters>];
90
+ /**
91
+ * Classe base abstrata para erros tipados a partir de um catálogo de erros.
92
+ *
93
+ * Cada erro é criado a partir de um descritor do catálogo (código e mensagem).
94
+ * A mensagem é interpolada com os `params` informados e o tipo dos `params` é
95
+ * derivado dos placeholders da mensagem, de modo que o compilador exige
96
+ * exatamente os parâmetros necessários.
97
+ *
98
+ * O construtor é `protected`: a classe não pode ser instanciada diretamente e
99
+ * deve ser estendida por classes que escolhem o descritor e repassam as
100
+ * opções.
101
+ *
102
+ * Além de `message`, `cause`, `stack` e `name` herdados de `Error`, a
103
+ * instância expõe:
104
+ * - `code`: o código do erro, com tipo literal;
105
+ * - `params`: os parâmetros usados na interpolação (ou `undefined`);
106
+ * - {@link BaseError.serialize} e {@link BaseError.toJSON} para serialização;
107
+ * - uma marca interna ({@link BASE_ERROR_BRAND}) que permite reconhecer o
108
+ * erro com {@link isBaseError} mesmo com múltiplas cópias do pacote.
109
+ *
110
+ * O `name` do erro é o nome da classe concreta (`new.target.name`) e o
111
+ * protótipo é ajustado explicitamente para que `instanceof` funcione em
112
+ * subclasses mesmo em alvos de compilação antigos.
113
+ *
114
+ * @template Catalog - Catálogo de erros ao qual o código pertence. Por padrão,
115
+ * `ErrorCatalog`.
116
+ * @template Code - Código do erro dentro do catálogo. Por padrão, todos os
117
+ * códigos do catálogo.
118
+ * @template Delimiters - Tipo dos delimitadores dos placeholders. Por padrão,
119
+ * {@link DefaultParamDelimiters}.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * const TEST_ERROR_CODES = defineErrorCatalog({
124
+ * USER_NOT_FOUND: "Usuário {id} não encontrado",
125
+ * INVALID_TOKEN: "Token inválido",
126
+ * });
127
+ *
128
+ * type TestErrorCodes = typeof TEST_ERROR_CODES;
129
+ *
130
+ * class UserNotFoundError extends BaseError<TestErrorCodes, "USER_NOT_FOUND"> {
131
+ * public constructor(id: number, options?: ErrorOptions) {
132
+ * super(TEST_ERROR_CODES.USER_NOT_FOUND, { params: { id }, ...options });
133
+ * }
134
+ * }
135
+ *
136
+ * class InvalidTokenError extends BaseError<TestErrorCodes, "INVALID_TOKEN"> {
137
+ * public constructor(options?: ErrorOptions) {
138
+ * super(TEST_ERROR_CODES.INVALID_TOKEN, options);
139
+ * }
140
+ * }
141
+ *
142
+ * const erro = new UserNotFoundError(42);
143
+ * erro.message; // "Usuário 42 não encontrado"
144
+ * erro.code; // "USER_NOT_FOUND"
145
+ * erro.params; // { id: 42 }
146
+ * erro.name; // "UserNotFoundError"
147
+ *
148
+ * BaseError.is(erro); // true
149
+ * JSON.stringify(erro); // usa toJSON(), sem stack trace
150
+ * erro.serialize(true); // inclui o stack trace
151
+ * ```
152
+ */
153
+ declare abstract class BaseError<Catalog extends ErrorCatalog = ErrorCatalog, Code extends CatalogCode<Catalog> = CatalogCode<Catalog>, Delimiters extends ErrorParamDelimiters = DefaultParamDelimiters> extends Error {
154
+ /** Código do erro conforme o catálogo (ex.: `"USER_NOT_FOUND"`). */
155
+ readonly code: Code;
156
+ /**
157
+ * Parâmetros usados para interpolar a mensagem. É `undefined` quando a
158
+ * mensagem não possui placeholders (ou quando nenhum `params` foi informado).
159
+ */
160
+ readonly params?: ErrorParams<Catalog, Code, Delimiters>;
161
+ /**
162
+ * Cria um erro a partir de um descritor do catálogo.
163
+ *
164
+ * A mensagem do descritor é interpolada com `options.params` usando os
165
+ * delimitadores de `options.delimiters` (por padrão,
166
+ * {@link DEFAULT_PARAM_DELIMITERS}). Os delimitadores são usados apenas na
167
+ * interpolação e não são armazenados na instância. O objeto `options`
168
+ * também é repassado ao construtor de `Error`, que utiliza `cause`.
169
+ *
170
+ * É `protected` então só pode ser chamado por subclasses.
171
+ *
172
+ * @param descriptor - Descritor do erro no catálogo com `code` e `message`.
173
+ * @param args - Opções do erro ({@link BaseErrorOptions}). São obrigatórias
174
+ * se a mensagem tiver placeholders (por conter `params`) e opcionais caso
175
+ * contrário.
176
+ * @throws {InvalidParamDelimitersError} Se algum dos delimitadores for uma
177
+ * string vazia (lançado durante a interpolação).
178
+ */
179
+ protected constructor(descriptor: CatalogDescriptor<Catalog, Code>, ...args: BaseErrorOptionsArgs<Catalog, Code, Delimiters>);
180
+ /**
181
+ * Marca interna que identifica a instância como um `BaseError`.
182
+ *
183
+ * Sempre retorna `true` e é lida por {@link isBaseError}. Por ser um
184
+ * getter definido no protótipo, não é uma propriedade própria da instância
185
+ * e portanto, não aparece em serializações nem em `Object.keys`.
186
+ */
187
+ get [BASE_ERROR_BRAND](): boolean;
188
+ /**
189
+ * Serializa o erro para um objeto simples apropriado para `JSON.stringify`,
190
+ * logs ou transmissão. Veja {@link serializeBaseError} para os detalhes do
191
+ * formato retornado.
192
+ *
193
+ * @param includeStack - Se `true` inclui o stack trace no resultado (e na
194
+ * serialização de causas e parâmetros). Por padrão, `false`.
195
+ * @returns Representação serializável do erro.
196
+ */
197
+ serialize(includeStack?: boolean): Readonly<{
198
+ cause?: unknown;
199
+ code: string;
200
+ message: string;
201
+ name: string;
202
+ params?: Readonly<Record<string, unknown>>;
203
+ stack?: string;
204
+ }>;
205
+ /**
206
+ * Chamado automaticamente por `JSON.stringify`. Equivale a
207
+ * {@link BaseError.serialize} sem stack trace.
208
+ *
209
+ * @returns Representação serializável do erro sem stack trace.
210
+ */
211
+ toJSON(): Readonly<{
212
+ cause?: unknown;
213
+ code: string;
214
+ message: string;
215
+ name: string;
216
+ params?: Readonly<Record<string, unknown>>;
217
+ stack?: string;
218
+ }>;
219
+ /**
220
+ * Verifica se um valor é uma instância de `BaseError` (type guard).
221
+ *
222
+ * Atalho para {@link isBaseError}: usa a marca interna em vez de
223
+ * `instanceof` funcionando mesmo com múltiplas cópias do pacote.
224
+ *
225
+ * @param error - Valor a ser verificado.
226
+ * @returns `true` se `error` for um `BaseError`; caso contrário, `false`.
227
+ */
228
+ static is(error: unknown): error is BaseError;
229
+ /**
230
+ * Serializa de forma segura qualquer valor usado como causa de um erro.
231
+ *
232
+ * Atalho para {@link serializeCauseError}: trata erros, datas, arrays,
233
+ * objetos, funções, `bigint`, `symbol` e referências circulares.
234
+ *
235
+ * @param cause - Valor a ser serializado.
236
+ * @param includeStack - Se `true` inclui o stack trace ao serializar
237
+ * erros. Por padrão, `false`.
238
+ * @returns Representação serializável do valor.
239
+ */
240
+ static serializeCauseError(cause: unknown, includeStack?: boolean): unknown;
241
+ }
242
+ //#endregion
243
+ //#region src/functions/is-base-error.d.ts
244
+ /**
245
+ * Símbolo usado como marca ("brand") para identificar instâncias de
246
+ * `BaseError` em tempo de execução.
247
+ *
248
+ * É criado com `Symbol.for` que consulta o registro global de símbolos. Assim
249
+ * mesmo que o pacote seja carregado mais de uma vez (ex.: versões duplicadas
250
+ * em `node_modules` ou diferentes bundles), todas as cópias compartilham o
251
+ * mesmo símbolo e {@link isBaseError} continua reconhecendo os erros, algo que
252
+ * `instanceof` sozinho não garante.
253
+ */
254
+ declare const BASE_ERROR_BRAND: unique symbol;
255
+ /**
256
+ * Verifica se um valor é uma instância de `BaseError` funcionando como um
257
+ * type guard.
258
+ *
259
+ * A checagem exige que o valor seja uma instância de `Error` e que possua a
260
+ * propriedade marcada por {@link BASE_ERROR_BRAND} com o valor `true`. Por
261
+ * usar a marca em vez de `instanceof BaseError`, o resultado é confiável
262
+ * mesmo quando há múltiplas cópias do pacote carregadas na mesma aplicação.
263
+ *
264
+ * @param value - Valor a ser verificado.
265
+ * @returns `true` se `value` for um `BaseError` (e nesse caso o TypeScript
266
+ * restringe o tipo para `BaseError`); caso contrário `false`.
267
+ *
268
+ * @example
269
+ * ```ts
270
+ * try {
271
+ * await execute();
272
+ * } catch (error) {
273
+ * if (isBaseError(error)) {
274
+ * console.log(error.code); // `error` é tipado como BaseError
275
+ * } else {
276
+ * throw error;
277
+ * }
278
+ * }
279
+ *
280
+ * isBaseError(new Error("comum")); // false
281
+ * isBaseError("texto"); // false
282
+ * isBaseError(null); // false
283
+ * ```
284
+ */
285
+ declare function isBaseError(value: unknown): value is BaseError;
286
+ //#endregion
287
+ //#region src/functions/serialize-cause-error.d.ts
288
+ /**
289
+ * Texto que substitui uma referência circular durante a serialização.
290
+ *
291
+ * É retornado no lugar de um objeto que já está sendo serializado mais acima
292
+ * na mesma cadeia evitando recursão infinita.
293
+ */
294
+ declare const CIRCULAR_MARKER = "[Circular]";
295
+ /**
296
+ * Conjunto de referências em processo de serialização usado para detectar
297
+ * ciclos.
298
+ *
299
+ * Por ser um `WeakSet` não impede que os objetos sejam coletados pelo
300
+ * garbage collector.
301
+ */
302
+ type SeenReferences = WeakSet<object>;
303
+ /**
304
+ * Serializa de forma segura, o valor de uma `cause` (causa) de erro para uma
305
+ * estrutura simples e apropriada para `JSON.stringify`, logs ou transmissão.
306
+ *
307
+ * A conversão depende do tipo do valor:
308
+ * - `string`, `number`, `boolean` e `undefined`: retornados sem alteração;
309
+ * - `null`: retorna `null`;
310
+ * - `bigint` e `symbol`: convertidos para texto com `toString()`
311
+ * (ex.: `10n` vira `"10"`);
312
+ * - função: vira o texto `"[Function: nome]"` ou `"[Function: anonymous]"`
313
+ * se não tiver nome;
314
+ * - `BaseError`: delegado a {@link serializeBaseError};
315
+ * - `Error` nativo: delegado a {@link serializeNativeError};
316
+ * - `Date`: convertida para string ISO 8601 ou `"Invalid Date"` se a data
317
+ * for inválida;
318
+ * - array: cada item é serializado recursivamente;
319
+ * - objeto comum: cada propriedade própria enumerável de chave `string` é
320
+ * serializada recursivamente, resultando em um novo objeto simples.
321
+ *
322
+ * **Referências circulares:** apenas as referências da cadeia atual (os
323
+ * "ancestrais" do valor sendo serializado) são rastreadas. Quando um objeto
324
+ * aparece dentro de si mesmo o ponto de repetição é substituído por
325
+ * {@link CIRCULAR_MARKER}. Como cada objeto é removido do conjunto ao terminar
326
+ * de ser serializado, um mesmo objeto referenciado em dois lugares distintos
327
+ * (sem ciclo) é serializado por completo nas duas ocorrências e não marcado
328
+ * como circular.
329
+ *
330
+ * **Limitações:** protótipos e métodos de objetos comuns são descartados e
331
+ * propriedades com chave `symbol` são ignoradas. Instâncias como `Map` e
332
+ * `Set`, que não possuem propriedades próprias enumeráveis resultam em `{}`.
333
+ *
334
+ * @param cause - Valor a ser serializado normalmente a propriedade `cause`
335
+ * de um erro, mas pode ser qualquer valor.
336
+ * @param includeStack - Se `true`, inclui o stack trace ao serializar erros
337
+ * (`BaseError` e `Error` nativo), repassando a opção aos respectivos
338
+ * serializadores. Por padrão, `false`.
339
+ * @param seen - Conjunto de referências em processo de serialização usado
340
+ * internamente na recursão para detectar ciclos. Em geral não deve ser
341
+ * informado; por padrão, um novo `WeakSet` vazio.
342
+ * @returns Representação serializável do valor cujo formato depende do tipo
343
+ * recebido (ver lista acima).
344
+ *
345
+ * @example
346
+ * ```ts
347
+ * serializeCauseError("falha"); // "falha"
348
+ * serializeCauseError(10n); // "10"
349
+ * serializeCauseError(Symbol("x")); // "Symbol(x)"
350
+ * serializeCauseError(function foo() {}); // "[Function: foo]"
351
+ * serializeCauseError(new Date("2026-01-01T00:00:00Z"));
352
+ * // "2026-01-01T00:00:00.000Z"
353
+ * serializeCauseError(new Date("inválida")); // "Invalid Date"
354
+ *
355
+ * // Estruturas aninhadas
356
+ * serializeCauseError({ ids: [1, 2n], origin: null });
357
+ * // { ids: [1, "2"], origin: null }
358
+ *
359
+ * // Referência circular
360
+ * const a: Record<string, unknown> = { name: "a" };
361
+ * a.self = a;
362
+ * serializeCauseError(a);
363
+ * // { name: "a", self: "[Circular]" }
364
+ *
365
+ * // Mesmo objeto em dois lugares (sem ciclo): serializado nas duas vezes
366
+ * const shared = { x: 1 };
367
+ * serializeCauseError({ a: shared, b: shared });
368
+ * // { a: { x: 1 }, b: { x: 1 } }
369
+ *
370
+ * // Erros, com stack trace opcional
371
+ * serializeCauseError(new Error("falhou"), true);
372
+ * ```
373
+ */
374
+ declare function serializeCauseError(cause: unknown, includeStack?: boolean, seen?: SeenReferences): unknown;
375
+ //#endregion
376
+ //#region src/functions/serialize-base-error.d.ts
377
+ /**
378
+ * Representação serializável de um `BaseError` composta apenas por valores
379
+ * simples e apropriada para `JSON.stringify`, logs ou transmissão.
380
+ *
381
+ * As propriedades `cause`, `params` e `stack` são opcionais e só aparecem
382
+ * quando o erro as possui (ou no caso de `stack` quando solicitado).
383
+ */
384
+ type SerializedBaseError = Readonly<{
385
+ /** Causa do erro já serializada com {@link serializeCauseError}. */
386
+ cause?: unknown;
387
+ /** Código do erro conforme o catálogo (ex.: `"USER_NOT_FOUND"`). */
388
+ code: string;
389
+ /** Mensagem do erro já com os placeholders interpolados. */
390
+ message: string;
391
+ /** Nome da classe do erro (ex.: `"BaseError"`). */
392
+ name: string;
393
+ /** Parâmetros usados para interpolar a mensagem já serializados. */
394
+ params?: Readonly<Record<string, unknown>>;
395
+ /** Stack trace do erro presente apenas se `includeStack` for `true`. */
396
+ stack?: string;
397
+ }>;
398
+ /**
399
+ * Serializa um `BaseError` para um objeto simples ({@link SerializedBaseError})
400
+ * apropriado para `JSON.stringify`, logs ou transmissão.
401
+ *
402
+ * O resultado sempre contém `code`, `message` e `name`. As demais
403
+ * propriedades são incluídas apenas quando aplicável:
404
+ * - `cause`: se o erro tiver causa (`error.cause !== undefined`) serializada
405
+ * com {@link serializeCauseError};
406
+ * - `params`: se o erro tiver parâmetros (`error.params !== undefined`)
407
+ * também serializados com {@link serializeCauseError};
408
+ * - `stack`: somente se `includeStack` for `true`.
409
+ *
410
+ * **Referências circulares:** o erro é registrado em `seen` durante a
411
+ * serialização e removido ao final (mesmo se ocorrer uma exceção). Assim se
412
+ * alguma `cause` ou `params` apontar de volta para este mesmo erro, o ponto
413
+ * de repetição é substituído por `"[Circular]"` em vez de causar recursão
414
+ * infinita. Por ser removido ao terminar, o mesmo erro pode aparecer em
415
+ * lugares distintos (sem ciclo) e ser serializado por completo em cada um.
416
+ *
417
+ * @param error - `BaseError` a ser serializado.
418
+ * @param includeStack - Se `true` inclui o stack trace no resultado e o
419
+ * repassa à serialização da causa e dos parâmetros. Por padrão, `false`.
420
+ * @param seen - Conjunto de referências em processo de serialização usado
421
+ * internamente na recursão para detectar ciclos. Em geral não deve ser
422
+ * informado; por padrão, um novo `WeakSet` vazio.
423
+ * @returns Objeto serializável que representa o erro.
424
+ *
425
+ * @example
426
+ * ```ts
427
+ * const error = new BaseError(ERROR_CODES.USER_NOT_FOUND, { id: 42 });
428
+ *
429
+ * serializeBaseError(error);
430
+ * // {
431
+ * // code: "USER_NOT_FOUND",
432
+ * // message: "Usuário 42 não encontrado",
433
+ * // name: "BaseError",
434
+ * // params: { id: 42 },
435
+ * // }
436
+ *
437
+ * // Com stack trace
438
+ * serializeBaseError(erro, true);
439
+ * // { ..., stack: "BaseError: Usuário 42 não encontrado\n at ..." }
440
+ *
441
+ * // Com causa
442
+ * const withCause = new BaseError(ERROR_CODES.INVALID_TOKEN, undefined, {
443
+ * cause: new Error("expirado"),
444
+ * });
445
+ * serializeBaseError(withCause);
446
+ * // { cause: { ... }, code: "INVALID_TOKEN", message: "Token inválido", name: "BaseError" }
447
+ * ```
448
+ */
449
+ declare function serializeBaseError(error: BaseError, includeStack?: boolean, seen?: SeenReferences): SerializedBaseError;
450
+ //#endregion
451
+ //#region src/functions/serialize-native-error.d.ts
452
+ /**
453
+ * Representação serializável de um `Error` nativo (ou de uma subclasse que
454
+ * não seja `BaseError`), composta apenas por valores simples e apropriada para
455
+ * `JSON.stringify`, logs ou transmissão.
456
+ *
457
+ * As propriedades `cause`, `errors` e `stack` são opcionais e só aparecem
458
+ * quando o erro as possui (ou no caso de `stack` quando solicitado).
459
+ */
460
+ type SerializedNativeError = Readonly<{
461
+ /** Causa do erro já serializada com {@link serializeCauseError}. */
462
+ cause?: unknown;
463
+ /**
464
+ * Lista de erros agregados já serializados. Presente em erros como
465
+ * `AggregateError` que expõem uma propriedade `errors` do tipo array.
466
+ */
467
+ errors?: readonly unknown[];
468
+ /** Mensagem do erro. */
469
+ message: string;
470
+ /** Nome do erro (ex.: `"Error"`, `"TypeError"`, `"AggregateError"`). */
471
+ name: string;
472
+ /** Stack trace do erro presente apenas se `includeStack` for `true`. */
473
+ stack?: string;
474
+ }>;
475
+ /**
476
+ * Serializa um `Error` nativo para um objeto simples
477
+ * ({@link SerializedNativeError}) apropriado para `JSON.stringify`, logs ou
478
+ * transmissão.
479
+ *
480
+ * O resultado sempre contém `message` e `name`. As demais propriedades são
481
+ * incluídas apenas quando aplicável:
482
+ * - `cause`: se o erro tiver causa (`error.cause !== undefined`) serializada
483
+ * com {@link serializeCauseError};
484
+ * - `errors`: se o erro tiver uma propriedade `errors` que seja um array
485
+ * (como em `AggregateError`) com cada item serializado com
486
+ * {@link serializeCauseError};
487
+ * - `stack`: somente se `includeStack` for `true`.
488
+ *
489
+ * **Referências circulares:** o erro é registrado em `seen` durante a
490
+ * serialização e removido ao final (mesmo se ocorrer uma exceção). Assim se
491
+ * `cause` ou algum item de `errors` apontar de volta para este mesmo erro, o
492
+ * ponto de repetição é substituído por `"[Circular]"` em vez de causar
493
+ * recursão infinita. Por ser removido ao terminar, o mesmo erro pode aparecer
494
+ * em lugares distintos (sem ciclo) e ser serializado por completo em cada um.
495
+ *
496
+ * **Limitações:** apenas `message`, `name`, `cause`, `errors` e `stack` são
497
+ * copiados. Propriedades adicionais definidas em subclasses (ex.: `code` ou
498
+ * `status`) não são incluídas.
499
+ *
500
+ * @param error - `Error` a ser serializado.
501
+ * @param includeStack - Se `true` inclui o stack trace no resultado e o
502
+ * repassa à serialização da causa e dos erros agregados. Por padrão, `false`.
503
+ * @param seen - Conjunto de referências em processo de serialização usado
504
+ * internamente na recursão para detectar ciclos. Em geral não deve ser
505
+ * informado; por padrão, um novo `WeakSet` vazio.
506
+ * @returns Objeto serializável que representa o erro.
507
+ *
508
+ * @example
509
+ * ```ts
510
+ * serializeNativeError(new TypeError("valor inválido"));
511
+ * // { message: "valor inválido", name: "TypeError" }
512
+ *
513
+ * // Com stack trace
514
+ * serializeNativeError(new Error("falhou"), true);
515
+ * // { message: "falhou", name: "Error", stack: "Error: falhou\n at ..." }
516
+ *
517
+ * // Com causa
518
+ * serializeNativeError(new Error("falhou", { cause: "timeout" }));
519
+ * // { cause: "timeout", message: "falhou", name: "Error" }
520
+ *
521
+ * // Com erros agregados
522
+ * serializeNativeError(
523
+ * new AggregateError([new Error("a"), new Error("b")], "vários erros"),
524
+ * );
525
+ * // {
526
+ * // errors: [
527
+ * // { message: "a", name: "Error" },
528
+ * // { message: "b", name: "Error" },
529
+ * // ],
530
+ * // message: "vários erros",
531
+ * // name: "AggregateError",
532
+ * // }
533
+ *
534
+ * // Referência circular
535
+ * const error = new Error("ciclo");
536
+ * error.cause = error;
537
+ * serializeNativeError(error);
538
+ * // { cause: "[Circular]", message: "ciclo", name: "Error" }
539
+ * ```
540
+ */
541
+ declare function serializeNativeError(error: Error, includeStack?: boolean, seen?: SeenReferences): SerializedNativeError;
542
+ //#endregion
543
+ export { CIRCULAR_MARKER as a, BASE_ERROR_BRAND as c, BaseErrorOptions as d, BaseErrorOptionsArgs as f, serializeBaseError as i, isBaseError as l, serializeNativeError as n, SeenReferences as o, escapeRegExp as p, SerializedBaseError as r, serializeCauseError as s, SerializedNativeError as t, BaseError as u };
544
+ //# sourceMappingURL=index-BzFCOXvr.d.cts.map