diff options
| author | Murilo Ijanc <[email protected]> | 2026-07-27 20:31:55 -0300 |
|---|---|---|
| committer | Murilo Ijanc <[email protected]> | 2026-07-27 20:31:55 -0300 |
| commit | 4ebb31f26efed74f8fcb049fe27ddf7cf5388a08 (patch) | |
| tree | f21190d570ea0e33f730f96c89288b0b2c6656a9 /src/errors.ts | |
| parent | 986a16c34049187a6c1f39f38bfa59e327093494 (diff) | |
| download | typescript-4ebb31f26efed74f8fcb049fe27ddf7cf5388a08.tar.gz | |
A CEP that fails is rarely a random number: it is someone who knows the
city and guessed the digits, and the classic guess is the -000 that 957
municipalities never received. The API now answers the 404 with the
municipality that band belongs to, which is enough to tell the user
"Areal/RJ, but not that number" instead of a bare failure.
It stays an error. Faixa hangs off CEPNotFound rather than becoming a
result, cep_ini/cep_fim are documented as the CEPs that exist there and
not as a range to iterate, and an absent or unreadable block yields
undefined so that context can never cost the caller the clean not-found
it was already getting.
Diffstat (limited to 'src/errors.ts')
| -rw-r--r-- | src/errors.ts | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/errors.ts b/src/errors.ts index 4e5dbb2..1a1e267 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -20,6 +20,8 @@ * @module */ +import type { Faixa } from "./models.js"; + /** * Base of every error this library throws. Catch it to handle any failure. * @@ -52,15 +54,29 @@ export class InvalidCEP extends CepisError { * * Never thrown by {@link Client.lookupMany}, which reports a missing CEP as * `null` at its position instead. + * + * `faixa` says which municipality the CEP *would* belong to, when the number + * falls inside a band some municipality owns. It is context for the failure and + * nothing more — this is still a 404, and the CEP still does not exist. */ export class CEPNotFound extends CepisError { /** The 8-digit CEP that was looked up. */ readonly cep: string; + /** + * The municipality the CEP would have belonged to, or `undefined` when it + * falls in a band no municipality owns. + * + * Read {@link Faixa} before using it: `cep_ini`/`cep_fim` are the CEPs that + * exist there, the range between them is sparse, and none of it makes the + * looked-up CEP valid. + */ + readonly faixa?: Faixa; - constructor(message: string, cep: string, options?: ErrorOptions) { + constructor(message: string, cep: string, faixa?: Faixa, options?: ErrorOptions) { super(message, options); this.name = "CEPNotFound"; this.cep = cep; + this.faixa = faixa; } } |