{"version":3,"file":"string-validator.mjs","names":[],"sources":["../../../../../../../@warlock.js/seal/src/validators/string-validator.ts"],"sourcesContent":["import {\r\n  alphaOnlyMutator,\r\n  alphanumericOnlyMutator,\r\n  appendMutator,\r\n  base64DecodeMutator,\r\n  base64EncodeMutator,\r\n  camelCaseMutator,\r\n  capitalizeMutator,\r\n  htmlEscapeMutator,\r\n  kebabCaseMutator,\r\n  lowercaseMutator,\r\n  ltrimMutator,\r\n  maskMutator,\r\n  padEndMutator,\r\n  padStartMutator,\r\n  pascalCaseMutator,\r\n  prependMutator,\r\n  removeNumbersMutator,\r\n  removeSpecialCharactersMutator,\r\n  repeatMutator,\r\n  replaceAllMutator,\r\n  replaceMutator,\r\n  reverseMutator,\r\n  rtrimMutator,\r\n  safeHtmlMutator,\r\n  slugMutator,\r\n  snakeCaseMutator,\r\n  stringifyMutator,\r\n  titleCaseMutator,\r\n  trimMultipleWhitespaceMutator,\r\n  trimMutator,\r\n  truncateMutator,\r\n  unescapeHtmlMutator,\r\n  uppercaseMutator,\r\n  urlDecodeMutator,\r\n  urlEncodeMutator,\r\n} from \"../mutators\";\r\nimport {\r\n  alphaNumericRule,\r\n  alphaRule,\r\n  betweenLengthRule,\r\n  colorRule,\r\n  containsRule,\r\n  cuidRule,\r\n  darkColorRule,\r\n  emailRule,\r\n  endsWithRule,\r\n  hexColorRule,\r\n  hslColorRule,\r\n  ip4Rule,\r\n  ip6Rule,\r\n  ipRule,\r\n  isCreditCardRule,\r\n  isNumericRule,\r\n  lengthRule,\r\n  lightColorRule,\r\n  maxLengthRule,\r\n  maxWordsRule,\r\n  minLengthRule,\r\n  minWordsRule,\r\n  nanoidRule,\r\n  notContainsRule,\r\n  patternRule,\r\n  rgbColorRule,\r\n  rgbaColorRule,\r\n  startsWithRule,\r\n  stringRule,\r\n  strongPasswordRule,\r\n  ulidRule,\r\n  urlRule,\r\n  uuidRule,\r\n  withoutWhitespaceRule,\r\n  wordsRule,\r\n  type UUIDVersion,\r\n} from \"../rules\";\r\nimport { PrimitiveValidator } from \"./primitive-validator\";\r\nimport { applyNullable, getRuleOptions } from \"../standard-schema/json-schema\";\r\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\r\n\r\n/**\r\n * String validator class\r\n */\r\nexport class StringValidator extends PrimitiveValidator {\r\n  public constructor(errorMessage?: string) {\r\n    super();\r\n    this.addMutableRule(stringRule, errorMessage);\r\n  }\r\n\r\n  /**\r\n   * Check if value is a string type\r\n   */\r\n  public matchesType(value: any): boolean {\r\n    return typeof value === \"string\";\r\n  }\r\n\r\n  // ==================== Mutators ====================\r\n\r\n  /**\r\n   * Stringify the value if not a string\r\n   */\r\n  public toString() {\r\n    return this.addMutator(stringifyMutator);\r\n  }\r\n\r\n  /** Convert string to uppercase */\r\n  public uppercase() {\r\n    return this.addMutator(uppercaseMutator);\r\n  }\r\n\r\n  /** Convert string to lowercase */\r\n  public lowercase() {\r\n    return this.addMutator(lowercaseMutator);\r\n  }\r\n\r\n  /** Capitalize only the first letter of the string */\r\n  public capitalize() {\r\n    return this.addMutator(capitalizeMutator);\r\n  }\r\n\r\n  /** Capitalize the first letter of each word (Title Case) */\r\n  public titleCase() {\r\n    return this.addMutator(titleCaseMutator);\r\n  }\r\n\r\n  /** Convert to camelCase */\r\n  public camelCase() {\r\n    return this.addMutator(camelCaseMutator);\r\n  }\r\n\r\n  /** Convert to PascalCase */\r\n  public pascalCase() {\r\n    return this.addMutator(pascalCaseMutator);\r\n  }\r\n\r\n  /** Convert to snake_case */\r\n  public snakeCase() {\r\n    return this.addMutator(snakeCaseMutator);\r\n  }\r\n\r\n  /** Convert to kebab-case */\r\n  public kebabCase() {\r\n    return this.addMutator(kebabCaseMutator);\r\n  }\r\n\r\n  /**\r\n   * Trim the given needle from the string\r\n   * If no needle is provided, the default is a single space\r\n   */\r\n  public trim(needle?: string) {\r\n    return this.addMutator(trimMutator, { needle });\r\n  }\r\n\r\n  /** Trim from the left/start */\r\n  public ltrim(needle?: string) {\r\n    return this.addMutator(ltrimMutator, { needle });\r\n  }\r\n\r\n  /** Trim from the right/end */\r\n  public rtrim(needle?: string) {\r\n    return this.addMutator(rtrimMutator, { needle });\r\n  }\r\n\r\n  /** Trim multiple whitespace into single space */\r\n  public trimMultipleWhitespace() {\r\n    return this.addMutator(trimMultipleWhitespaceMutator);\r\n  }\r\n\r\n  /** Pad string from the start to reach target length */\r\n  public padStart(length: number, char = \" \") {\r\n    return this.addMutator(padStartMutator, { length, char });\r\n  }\r\n\r\n  /** Pad string from the end to reach target length */\r\n  public padEnd(length: number, char = \" \") {\r\n    return this.addMutator(padEndMutator, { length, char });\r\n  }\r\n\r\n  /** Remove HTML tags (safe HTML) */\r\n  public safeHtml() {\r\n    return this.addMutator(safeHtmlMutator);\r\n  }\r\n\r\n  /** HTML escape special characters */\r\n  public htmlEscape() {\r\n    return this.addMutator(htmlEscapeMutator);\r\n  }\r\n\r\n  /** Unescape HTML entities */\r\n  public unescapeHtml() {\r\n    return this.addMutator(unescapeHtmlMutator);\r\n  }\r\n\r\n  /**\r\n   * Remove special characters\r\n   * This will remove all characters that are not alphanumeric or whitespace\r\n   */\r\n  public removeSpecialCharacters() {\r\n    return this.addMutator(removeSpecialCharactersMutator);\r\n  }\r\n\r\n  /** Convert to only alphabetic characters */\r\n  public toAlpha() {\r\n    return this.addMutator(alphaOnlyMutator);\r\n  }\r\n\r\n  /** Convert to only alphanumeric characters */\r\n  public toAlphanumeric() {\r\n    return this.addMutator(alphanumericOnlyMutator);\r\n  }\r\n\r\n  /** Remove all numeric characters */\r\n  public removeNumbers() {\r\n    return this.addMutator(removeNumbersMutator);\r\n  }\r\n\r\n  /** URL decode */\r\n  public urlDecode() {\r\n    return this.addMutator(urlDecodeMutator);\r\n  }\r\n\r\n  /** URL encode */\r\n  public urlEncode() {\r\n    return this.addMutator(urlEncodeMutator);\r\n  }\r\n\r\n  /** Convert to URL-friendly slug */\r\n  public slug() {\r\n    return this.addMutator(slugMutator);\r\n  }\r\n\r\n  /** Base64 encode */\r\n  public base64Encode() {\r\n    return this.addMutator(base64EncodeMutator);\r\n  }\r\n\r\n  /** Base64 decode */\r\n  public base64Decode() {\r\n    return this.addMutator(base64DecodeMutator);\r\n  }\r\n\r\n  /** Replace substring or pattern */\r\n  public replace(search: string | RegExp, replace: string) {\r\n    return this.addMutator(replaceMutator, { search, replace });\r\n  }\r\n\r\n  /** Replace all occurrences of substring or pattern */\r\n  public replaceAll(search: string | RegExp, replace: string) {\r\n    return this.addMutator(replaceAllMutator, { search, replace });\r\n  }\r\n\r\n  /** Append/suffix text to the end */\r\n  public append(suffix: string) {\r\n    return this.addMutator(appendMutator, { suffix });\r\n  }\r\n\r\n  /** Prepend/prefix text to the beginning */\r\n  public prepend(prefix: string) {\r\n    return this.addMutator(prependMutator, { prefix });\r\n  }\r\n\r\n  /** Reverse the string */\r\n  public reverse() {\r\n    return this.addMutator(reverseMutator);\r\n  }\r\n\r\n  /** Truncate to a maximum length */\r\n  public truncate(maxLength: number, suffix = \"...\") {\r\n    return this.addMutator(truncateMutator, { maxLength, suffix });\r\n  }\r\n\r\n  /** Repeat string N times */\r\n  public repeat(count: number) {\r\n    return this.addMutator(repeatMutator, { count });\r\n  }\r\n\r\n  /** Mask part of string */\r\n  public mask(start: number, end?: number, char = \"*\") {\r\n    return this.addMutator(maskMutator, { start, end, char });\r\n  }\r\n\r\n  // ==================== Validation Rules ====================\r\n\r\n  /** Value must be a valid email */\r\n  public email(errorMessage?: string) {\r\n    return this.addRule(emailRule, errorMessage);\r\n  }\r\n\r\n  /** Value must be a valid URL */\r\n  public url(errorMessage?: string) {\r\n    return this.addRule(urlRule, errorMessage);\r\n  }\r\n\r\n  /** Value can not have whitespace */\r\n  public withoutWhitespace(errorMessage?: string) {\r\n    return this.addRule(withoutWhitespaceRule, errorMessage);\r\n  }\r\n\r\n  /** Value must match the given pattern */\r\n  public pattern(pattern: RegExp, errorMessage?: string) {\r\n    return this.addRule(patternRule, errorMessage, { pattern });\r\n  }\r\n\r\n  /**\r\n   * Value must be a strong password\r\n   * Requirements:\r\n   * - At least 8 characters\r\n   * - At least 1 uppercase letter\r\n   * - At least 1 lowercase letter\r\n   * - At least 1 number\r\n   * - At least 1 special character\r\n   */\r\n  public strongPassword(minLength?: number, errorMessage?: string) {\r\n    return this.addRule(strongPasswordRule, errorMessage, { minLength });\r\n  }\r\n\r\n  /** Value must be exactly the given number of words */\r\n  public words(words: number, errorMessage?: string) {\r\n    return this.addRule(wordsRule, errorMessage, { words });\r\n  }\r\n\r\n  /** Value must be at least the given number of words */\r\n  public minWords(words: number, errorMessage?: string) {\r\n    return this.addRule(minWordsRule, errorMessage, { minWords: words });\r\n  }\r\n\r\n  /** Value must be at most the given number of words */\r\n  public maxWords(words: number, errorMessage?: string) {\r\n    return this.addRule(maxWordsRule, errorMessage, { maxWords: words });\r\n  }\r\n\r\n  /** Value length must be greater than the given length */\r\n  public minLength(length: number, errorMessage?: string) {\r\n    return this.addRule(minLengthRule, errorMessage, { minLength: length });\r\n  }\r\n\r\n  /** @alias minLength */\r\n  public min(min: number, errorMessage?: string) {\r\n    return this.minLength(min, errorMessage);\r\n  }\r\n\r\n  /** Value length must be less than the given length */\r\n  public maxLength(length: number, errorMessage?: string) {\r\n    return this.addRule(maxLengthRule, errorMessage, { maxLength: length });\r\n  }\r\n\r\n  /** @alias maxLength */\r\n  public max(max: number, errorMessage?: string) {\r\n    return this.maxLength(max, errorMessage);\r\n  }\r\n\r\n  /** Value must be of the given length */\r\n  public length(length: number, errorMessage?: string) {\r\n    return this.addRule(lengthRule, errorMessage, { length });\r\n  }\r\n\r\n  /**\r\n   * String length must be between min and max (inclusive)\r\n   *\r\n   * @param min - Minimum length (inclusive)\r\n   * @param max - Maximum length (inclusive)\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * v.string().between(5, 10)  // Length: 5 to 10 characters\r\n   * v.string().lengthBetween(8, 20)  // Same using alias\r\n   * ```\r\n   *\r\n   * @category Validation Rule\r\n   */\r\n  public lengthBetween(min: number, max: number, errorMessage?: string) {\r\n    return this.addRule(betweenLengthRule, errorMessage, {\r\n      minLength: min,\r\n      maxLength: max,\r\n    });\r\n  }\r\n\r\n  /** Allow only alphabetic characters */\r\n  public alpha(errorMessage?: string) {\r\n    return this.addRule(alphaRule, errorMessage);\r\n  }\r\n\r\n  /** Allow only alphanumeric characters */\r\n  public alphanumeric(errorMessage?: string) {\r\n    return this.addRule(alphaNumericRule, errorMessage);\r\n  }\r\n\r\n  /** Allow only numeric characters */\r\n  public numeric(errorMessage?: string) {\r\n    return this.addRule(isNumericRule, errorMessage);\r\n  }\r\n\r\n  /** Value must starts with the given string */\r\n  public startsWith(value: string, errorMessage?: string) {\r\n    return this.addRule(startsWithRule, errorMessage, { value });\r\n  }\r\n\r\n  /** Value must ends with the given string */\r\n  public endsWith(value: string, errorMessage?: string) {\r\n    return this.addRule(endsWithRule, errorMessage, { value });\r\n  }\r\n\r\n  /** Value must contain the given string */\r\n  public contains(value: string, errorMessage?: string) {\r\n    return this.addRule(containsRule, errorMessage, { value });\r\n  }\r\n\r\n  /** Value must not contain the given string */\r\n  public notContains(value: string, errorMessage?: string) {\r\n    return this.addRule(notContainsRule, errorMessage, { value });\r\n  }\r\n\r\n  /** Value must be a valid IP address */\r\n  public ip(errorMessage?: string) {\r\n    return this.addRule(ipRule, errorMessage);\r\n  }\r\n\r\n  /** Value must be a valid IPv4 address */\r\n  public ip4(errorMessage?: string) {\r\n    return this.addRule(ip4Rule, errorMessage);\r\n  }\r\n\r\n  /** Value must be a valid IPv6 address */\r\n  public ip6(errorMessage?: string) {\r\n    return this.addRule(ip6Rule, errorMessage);\r\n  }\r\n\r\n  /** Check if the string matches a credit card number */\r\n  public creditCard(errorMessage?: string) {\r\n    return this.addRule(isCreditCardRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid color */\r\n  public color(errorMessage?: string) {\r\n    return this.addRule(colorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid hex color */\r\n  public hexColor(errorMessage?: string) {\r\n    return this.addRule(hexColorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid HSL color */\r\n  public hslColor(errorMessage?: string) {\r\n    return this.addRule(hslColorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid RGB color */\r\n  public rgbColor(errorMessage?: string) {\r\n    return this.addRule(rgbColorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid RGBA color */\r\n  public rgbaColor(errorMessage?: string) {\r\n    return this.addRule(rgbaColorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid light color */\r\n  public lightColor(errorMessage?: string) {\r\n    return this.addRule(lightColorRule, errorMessage);\r\n  }\r\n\r\n  /** Determine if the value is a valid dark color */\r\n  public darkColor(errorMessage?: string) {\r\n    return this.addRule(darkColorRule, errorMessage);\r\n  }\r\n\r\n  // ==================== ID Format Rules ====================\r\n\r\n  /**\r\n   * Value must be a valid UUID. Optionally restrict to a specific version.\r\n   *\r\n   * @example\r\n   * v.string().uuid()    // any RFC 4122 UUID\r\n   * v.string().uuid(4)   // only v4 (random)\r\n   * v.string().uuid(7)   // only v7 (timestamp-ordered)\r\n   */\r\n  public uuid(version?: UUIDVersion, errorMessage?: string) {\r\n    return this.addRule(uuidRule, errorMessage, { version });\r\n  }\r\n\r\n  /**\r\n   * Value must be a valid CUID. Defaults to CUID2; pass `{ version: 1 }` for legacy.\r\n   *\r\n   * @example\r\n   * v.string().cuid()                   // CUID2\r\n   * v.string().cuid({ version: 1 })     // legacy CUID1\r\n   */\r\n  public cuid(options?: { version?: 1 | 2; errorMessage?: string }) {\r\n    const { errorMessage, version } = options ?? {};\r\n    return this.addRule(cuidRule, errorMessage, { version });\r\n  }\r\n\r\n  /** Value must be a valid ULID (26 chars, Crockford base32). */\r\n  public ulid(errorMessage?: string) {\r\n    return this.addRule(ulidRule, errorMessage);\r\n  }\r\n\r\n  /**\r\n   * Value must be a valid nanoid string. Default length is 21.\r\n   *\r\n   * @example\r\n   * v.string().nanoid()       // 21 chars (default)\r\n   * v.string().nanoid(10)     // 10 chars\r\n   */\r\n  public nanoid(length?: number, errorMessage?: string) {\r\n    return this.addRule(nanoidRule, errorMessage, { length });\r\n  }\r\n\r\n  /**\r\n   * @inheritdoc\r\n   *\r\n   * Maps String-specific rule options to JSON Schema keywords.\r\n   * Non-representable rules (cross-field, refine, color rules, etc.) are silently omitted.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * v.string().min(2).max(100).email().toJsonSchema(\"draft-2020-12\")\r\n   * // → { type: \"string\", minLength: 2, maxLength: 100, format: \"email\" }\r\n   * ```\r\n   */\r\n  public override toJsonSchema(target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\r\n    const schema: JsonSchemaResult = { type: \"string\" };\r\n\r\n    // minLength / min\r\n    const minOpts = getRuleOptions(this.rules, \"minLength\");\r\n    if (minOpts?.minLength !== undefined) schema.minLength = minOpts.minLength;\r\n\r\n    // maxLength / max\r\n    const maxOpts = getRuleOptions(this.rules, \"maxLength\");\r\n    if (maxOpts?.maxLength !== undefined) schema.maxLength = maxOpts.maxLength;\r\n\r\n    // betweenLength covers both min and max in one rule\r\n    const betweenOpts = getRuleOptions(this.rules, \"betweenLength\");\r\n    if (betweenOpts) {\r\n      if (betweenOpts.minLength !== undefined) schema.minLength = betweenOpts.minLength;\r\n      if (betweenOpts.maxLength !== undefined) schema.maxLength = betweenOpts.maxLength;\r\n    }\r\n\r\n    // exact length\r\n    const lengthOpts = getRuleOptions(this.rules, \"length\");\r\n    if (lengthOpts?.length !== undefined) {\r\n      schema.minLength = lengthOpts.length;\r\n      schema.maxLength = lengthOpts.length;\r\n    }\r\n\r\n    // pattern (regex)\r\n    const patternOpts = getRuleOptions(this.rules, \"pattern\");\r\n    if (patternOpts?.pattern instanceof RegExp) {\r\n      schema.pattern = patternOpts.pattern.source;\r\n    }\r\n\r\n    // format hints\r\n    if (getRuleOptions(this.rules, \"email\") !== undefined ||\r\n        this.rules.some(r => r.name === \"email\")) {\r\n      schema.format = \"email\";\r\n    } else if (this.rules.some(r => r.name === \"url\")) {\r\n      schema.format = \"uri\";\r\n    } else if (this.rules.some(r => r.name === \"ip\")) {\r\n      schema.format = \"ipv4\";\r\n    } else if (this.rules.some(r => r.name === \"ip4\")) {\r\n      schema.format = \"ipv4\";\r\n    } else if (this.rules.some(r => r.name === \"ip6\")) {\r\n      schema.format = \"ipv6\";\r\n    } else if (this.rules.some(r => r.name === \"uuid\")) {\r\n      schema.format = \"uuid\";\r\n    } else if (this.rules.some(r => r.name === \"hexColor\")) {\r\n      schema.format = \"color\";\r\n    }\r\n\r\n    // CUID / ULID / nanoid don't have widely-supported format keywords —\r\n    // fall back to pattern so JSON Schema validators still enforce shape.\r\n    if (!schema.format) {\r\n      const cuidOpts = getRuleOptions(this.rules, \"cuid\");\r\n      if (cuidOpts) {\r\n        schema.pattern = cuidOpts.version === 1 ? \"^c[a-z0-9]{24,}$\" : \"^[a-z][a-z0-9]{23}$\";\r\n      }\r\n      if (this.rules.some(r => r.name === \"ulid\")) {\r\n        schema.pattern = \"^[0-9A-HJKMNP-TV-Z]{26}$\";\r\n      }\r\n      const nanoidOpts = getRuleOptions(this.rules, \"nanoid\");\r\n      if (nanoidOpts) {\r\n        const len = (nanoidOpts.length as number | undefined) ?? 21;\r\n        schema.pattern = `^[A-Za-z0-9_-]{${len}}$`;\r\n      }\r\n    }\r\n\r\n    // enum (from PrimitiveValidator.in / .enum)\r\n    const inOpts = getRuleOptions(this.rules, \"in\");\r\n    if (inOpts?.values && Array.isArray(inOpts.values)) {\r\n      schema.enum = inOpts.values;\r\n    }\r\n\r\n    if (this.isNullable) applyNullable(schema, target);\r\n\r\n    return schema;\r\n  }\r\n}\r\n"],"mappings":"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"}