{"version":3,"file":"length-rules.mjs","names":[],"sources":["../../../../../../../../@warlock.js/seal/src/rules/length/length-rules.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\r\nimport type { SchemaRule } from \"../../types\";\r\n\r\n/**\r\n * Min length rule - validates minimum length\r\n * Works for any value with a length property (strings, arrays, etc.)\r\n */\r\nexport const minLengthRule: SchemaRule<{ minLength: number }> = {\r\n  name: \"minLength\",\r\n  defaultErrorMessage: \"The :input must be at least :minLength characters long\",\r\n  async validate(value: any, context) {\r\n    const length = typeof value?.length === \"number\" ? value.length : String(value || \"\").length;\r\n\r\n    if (length >= this.context.options.minLength) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.minLength = this.context.options.minLength;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Max length rule - validates maximum length\r\n * Works for any value with a length property (strings, arrays, etc.)\r\n */\r\nexport const maxLengthRule: SchemaRule<{ maxLength: number }> = {\r\n  name: \"maxLength\",\r\n  defaultErrorMessage: \"The :input must not exceed :maxLength characters\",\r\n  async validate(value: any, context) {\r\n    const length = typeof value?.length === \"number\" ? value.length : String(value || \"\").length;\r\n\r\n    if (length <= this.context.options.maxLength) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.maxLength = this.context.options.maxLength;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Between length rule - validates length is between min and max (inclusive)\r\n * Works for any value with a length property (strings, arrays, etc.)\r\n */\r\nexport const betweenLengthRule: SchemaRule<{\r\n  minLength: number;\r\n  maxLength: number;\r\n}> = {\r\n  name: \"betweenLength\",\r\n  defaultErrorMessage: \"The :input must be between :minLength and :maxLength characters long\",\r\n  async validate(value: any, context) {\r\n    const length = typeof value?.length === \"number\" ? value.length : String(value || \"\").length;\r\n\r\n    if (length >= this.context.options.minLength && length <= this.context.options.maxLength) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.minLength = this.context.options.minLength;\r\n    this.context.translationParams.maxLength = this.context.options.maxLength;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Length rule - validates exact length\r\n * Works for any value with a length property (strings, arrays, etc.)\r\n */\r\nexport const lengthRule: SchemaRule<{ length: number }> = {\r\n  name: \"length\",\r\n  defaultErrorMessage: \"The :input must be exactly :length characters long\",\r\n  async validate(value: any, context) {\r\n    const length = typeof value?.length === \"number\" ? value.length : String(value || \"\").length;\r\n\r\n    if (length === this.context.options.length) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.length = this.context.options.length;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Min words rule - validates minimum word count\r\n */\r\nexport const minWordsRule: SchemaRule<{ minWords: number }> = {\r\n  name: \"minWords\",\r\n  defaultErrorMessage: \"The :input must be at least :minWords words\",\r\n  async validate(value: any, context) {\r\n    if (String(value || \"\").split(\" \").length >= this.context.options.minWords) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.minWords = this.context.options.minWords;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Max words rule - validates maximum word count\r\n */\r\nexport const maxWordsRule: SchemaRule<{ maxWords: number }> = {\r\n  name: \"maxWords\",\r\n  defaultErrorMessage: \"The :input must be at most :maxWords words\",\r\n  async validate(value: any, context) {\r\n    if (String(value || \"\").split(\" \").length <= this.context.options.maxWords) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.maxWords = this.context.options.maxWords;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n\r\n/**\r\n * Words rule - validates exact word count\r\n */\r\nexport const wordsRule: SchemaRule<{ words: number }> = {\r\n  name: \"words\",\r\n  defaultErrorMessage: \"The :input must be exactly :words words\",\r\n  async validate(value: any, context) {\r\n    if (String(value || \"\").split(\" \").length === this.context.options.words) {\r\n      return VALID_RULE;\r\n    }\r\n\r\n    this.context.translationParams.words = this.context.options.words;\r\n\r\n    return invalidRule(this, context);\r\n  },\r\n};\r\n"],"mappings":";;;;;;;;AAOA,MAAa,gBAAmD;CAC9D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAGlC,KAFe,OAAO,OAAO,WAAW,WAAW,MAAM,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC,WAExE,KAAK,QAAQ,QAAQ,WACjC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,QAAQ;EAEhE,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;AAMA,MAAa,gBAAmD;CAC9D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAGlC,KAFe,OAAO,OAAO,WAAW,WAAW,MAAM,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC,WAExE,KAAK,QAAQ,QAAQ,WACjC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,QAAQ;EAEhE,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;AAMA,MAAa,oBAGR;CACH,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,MAAM,SAAS,OAAO,OAAO,WAAW,WAAW,MAAM,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC;EAEtF,IAAI,UAAU,KAAK,QAAQ,QAAQ,aAAa,UAAU,KAAK,QAAQ,QAAQ,WAC7E,OAAO;EAGT,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,QAAQ;EAChE,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,QAAQ;EAEhE,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;AAMA,MAAa,aAA6C;CACxD,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAGlC,KAFe,OAAO,OAAO,WAAW,WAAW,MAAM,SAAS,OAAO,SAAS,EAAE,CAAC,CAAC,YAEvE,KAAK,QAAQ,QAAQ,QAClC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,SAAS,KAAK,QAAQ,QAAQ;EAE7D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,eAAiD;CAC5D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,KAAK,QAAQ,QAAQ,UAChE,OAAO;EAGT,KAAK,QAAQ,kBAAkB,WAAW,KAAK,QAAQ,QAAQ;EAE/D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,eAAiD;CAC5D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,KAAK,QAAQ,QAAQ,UAChE,OAAO;EAGT,KAAK,QAAQ,kBAAkB,WAAW,KAAK,QAAQ,QAAQ;EAE/D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,YAA2C;CACtD,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,QAAQ,QAAQ,OACjE,OAAO;EAGT,KAAK,QAAQ,kBAAkB,QAAQ,KAAK,QAAQ,QAAQ;EAE5D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}