diff --git a/src/modules/cards/domain/value-objects/URL.ts b/src/modules/cards/domain/value-objects/URL.ts index f188c6f9..2307012b 100644 --- a/src/modules/cards/domain/value-objects/URL.ts +++ b/src/modules/cards/domain/value-objects/URL.ts @@ -1,5 +1,12 @@ import { ValueObject } from '../../../../shared/domain/ValueObject'; -import { Result } from '../../../../shared/core/Result'; +import { Result, ok, err } from '../../../../shared/core/Result'; + +export class InvalidURLError extends Error { + constructor(message: string) { + super(message); + this.name = 'InvalidURLError'; + } +} interface URLProps { value: string; @@ -14,17 +21,19 @@ export class URL extends ValueObject { super(props); } - public static create(url: string): Result { + public static create(url: string): Result { if (!url || url.trim().length === 0) { - return Result.fail('URL cannot be empty'); + return err(new InvalidURLError('URL cannot be empty')); } + const trimmedUrl = url.trim(); + try { - // Validate URL format - new globalThis.URL(url); - return Result.ok(new URL({ value: url.trim() })); + // Validate URL format using the global URL constructor + new globalThis.URL(trimmedUrl); + return ok(new URL({ value: trimmedUrl })); } catch (error) { - return Result.fail('Invalid URL format'); + return err(new InvalidURLError('Invalid URL format')); } }