express5-valid 1.0.1

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.
Files changed (48) hide show
  1. package/README.md +314 -0
  2. package/dist/arg-error.d.mts +12 -0
  3. package/dist/arg-error.d.ts +12 -0
  4. package/dist/arg-error.d.ts.map +1 -0
  5. package/dist/index.d.mts +11 -0
  6. package/dist/index.d.ts +11 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +884 -0
  9. package/dist/index.js.map +7 -0
  10. package/dist/index.mjs +851 -0
  11. package/dist/index.mjs.map +7 -0
  12. package/dist/middleware.d.mts +10 -0
  13. package/dist/middleware.d.ts +10 -0
  14. package/dist/middleware.d.ts.map +1 -0
  15. package/dist/router.d.mts +14 -0
  16. package/dist/router.d.ts +14 -0
  17. package/dist/router.d.ts.map +1 -0
  18. package/dist/types.d.mts +17 -0
  19. package/dist/types.d.ts +17 -0
  20. package/dist/types.d.ts.map +1 -0
  21. package/dist/valid-array.d.mts +28 -0
  22. package/dist/valid-array.d.ts +28 -0
  23. package/dist/valid-array.d.ts.map +1 -0
  24. package/dist/valid-base.d.mts +20 -0
  25. package/dist/valid-base.d.ts +20 -0
  26. package/dist/valid-base.d.ts.map +1 -0
  27. package/dist/valid-boolean.d.mts +14 -0
  28. package/dist/valid-boolean.d.ts +14 -0
  29. package/dist/valid-boolean.d.ts.map +1 -0
  30. package/dist/valid-date.d.mts +22 -0
  31. package/dist/valid-date.d.ts +22 -0
  32. package/dist/valid-date.d.ts.map +1 -0
  33. package/dist/valid-enum.d.mts +15 -0
  34. package/dist/valid-enum.d.ts +15 -0
  35. package/dist/valid-enum.d.ts.map +1 -0
  36. package/dist/valid-error-handler.d.mts +4 -0
  37. package/dist/valid-error-handler.d.ts +4 -0
  38. package/dist/valid-error-handler.d.ts.map +1 -0
  39. package/dist/valid-number.d.mts +27 -0
  40. package/dist/valid-number.d.ts +27 -0
  41. package/dist/valid-number.d.ts.map +1 -0
  42. package/dist/valid-object.d.mts +16 -0
  43. package/dist/valid-object.d.ts +16 -0
  44. package/dist/valid-object.d.ts.map +1 -0
  45. package/dist/valid-string.d.mts +32 -0
  46. package/dist/valid-string.d.ts +32 -0
  47. package/dist/valid-string.d.ts.map +1 -0
  48. package/package.json +70 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/arg-error.ts", "../src/valid-number.ts", "../src/valid-string.ts", "../src/valid-boolean.ts", "../src/valid-array.ts", "../src/valid-date.ts", "../src/valid-enum.ts", "../src/valid-object.ts", "../src/valid-base.ts", "../src/middleware.ts", "../src/valid-error-handler.ts", "../src/router.ts"],
4
+ "sourcesContent": ["import ArgError from \"./arg-error\";\r\nimport ValidBase from \"./valid-base\";\r\nimport { getContext } from \"./middleware\";\r\n\r\nexport { ArgError };\r\nexport { validMiddleware } from \"./middleware\";\r\nexport { default as validErrorHandler } from \"./valid-error-handler\";\r\nexport { createJsonRouter, type JsonRouter } from \"./router\";\r\nexport type { NumberArrayConfig, StringArrayConfig } from \"./types\";\r\n\r\nexport function body(name: string): ValidBase {\r\n const ctx = getContext();\r\n if (ctx.body === undefined) {\r\n throw new ArgError('body', 'BODY_UNDEFINED', 'body must be defined');\r\n }\r\n if (ctx.body === null) {\r\n throw new ArgError('body', 'BODY_NULL', 'body must not be null');\r\n }\r\n if (Array.isArray(ctx.body)) {\r\n throw new ArgError('body', 'BODY_ARRAY', 'body must not be an array');\r\n }\r\n return validArgument(ctx.body as Record<string, unknown>, name);\r\n}\r\n\r\nexport function params(name: string): ValidBase {\r\n const ctx = getContext();\r\n return validArgument(ctx.params, name);\r\n}\r\n\r\nexport function validArgument(obj: Record<string, unknown>, name: string): ValidBase {\r\n return new ValidBase(obj[name], name);\r\n}\r\n", "export interface ErrorParams {\r\n [key: string]: unknown;\r\n}\r\n\r\nexport default class ArgError extends Error {\r\n field: string;\r\n code: string;\r\n details: string;\r\n params: ErrorParams;\r\n\r\n constructor(field: string, code: string, details: string, params: ErrorParams = {}) {\r\n super(`${field} ${details}`);\r\n this.field = field;\r\n this.code = code;\r\n this.details = details;\r\n this.params = params;\r\n }\r\n\r\n get msg(): string {\r\n return this.details;\r\n }\r\n}", "import ArgError, { type ErrorParams } from \"./arg-error\";\n\nexport default class ValidNumber<T = number | undefined> {\n private _value: unknown;\n private _name: string;\n private _isRequired = false;\n private _isNullable = false;\n private _default: number | undefined;\n private _min: number | undefined;\n private _max: number | undefined;\n private _isInteger = false;\n private _isPositive = false;\n private _isNegative = false;\n private _oneOf: number[] | undefined;\n\n constructor(value: unknown, name: string) {\n this._value = value;\n this._name = name;\n }\n\n private error(code: string, details: string, params: ErrorParams = {}): never {\n throw new ArgError(`${this._name}`, code, details, params);\n }\n\n get required(): ValidNumber<Exclude<T, undefined>> {\n this._isRequired = true;\n return this as unknown as ValidNumber<Exclude<T, undefined>>;\n }\n\n get nullable(): ValidNumber<T | null> {\n this._isNullable = true;\n return this as unknown as ValidNumber<T | null>;\n }\n\n default(v: number): ValidNumber<Exclude<T, undefined>> {\n this._default = v;\n return this as unknown as ValidNumber<Exclude<T, undefined>>;\n }\n\n min(n: number): this {\n this._min = n;\n return this;\n }\n\n max(n: number): this {\n this._max = n;\n return this;\n }\n\n get integer(): this {\n this._isInteger = true;\n return this;\n }\n\n get positive(): this {\n this._isPositive = true;\n return this;\n }\n\n get negative(): this {\n this._isNegative = true;\n return this;\n }\n\n between(min: number, max: number): this {\n this._min = min;\n this._max = max;\n return this;\n }\n\n oneOf(values: number[]): this {\n this._oneOf = values;\n return this;\n }\n\n get value(): T {\n let val = this._value;\n\n // Apply default if undefined\n if (val === undefined && this._default !== undefined) {\n val = this._default;\n }\n\n // Check undefined\n if (val === undefined) {\n if (this._isRequired) {\n this.error('REQUIRED', 'is required');\n }\n return undefined as T;\n }\n\n // Check null\n if (val === null) {\n if (!this._isNullable) {\n this.error('NOT_NULLABLE', 'cannot be null');\n }\n return null as T;\n }\n\n // Parse number\n let num: number;\n if (typeof val === 'number') {\n num = val;\n } else if (typeof val === 'string') {\n num = parseFloat(val);\n } else {\n this.error('INVALID_TYPE', 'must be a number', { expected: 'number' });\n }\n\n if (isNaN(num)) {\n this.error('INVALID_NUMBER', 'must be a valid number');\n }\n\n // Validations\n if (this._isInteger && !Number.isInteger(num)) {\n this.error('NOT_INTEGER', 'must be an integer');\n }\n\n if (this._isPositive && num <= 0) {\n this.error('NOT_POSITIVE', 'must be positive');\n }\n\n if (this._isNegative && num >= 0) {\n this.error('NOT_NEGATIVE', 'must be negative');\n }\n\n if (this._min !== undefined && num < this._min) {\n this.error('MIN_VALUE', `must be at least ${this._min}`, { min: this._min });\n }\n\n if (this._max !== undefined && num > this._max) {\n this.error('MAX_VALUE', `must be at most ${this._max}`, { max: this._max });\n }\n\n if (this._oneOf !== undefined && !this._oneOf.includes(num)) {\n this.error('NOT_IN_LIST', `must be one of: ${this._oneOf.join(', ')}`, { allowed: this._oneOf });\n }\n\n return num as T;\n }\n}\n", "import ArgError, { type ErrorParams } from \"./arg-error\";\r\n\r\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\nconst URL_REGEX = /^https?:\\/\\/.+/;\r\n\r\nexport default class ValidString<T = string | undefined> {\r\n private _value: unknown;\r\n private _name: string;\r\n private _isRequired = false;\r\n private _isNullable = false;\r\n private _default: string | undefined;\r\n private _minLength: number | undefined;\r\n private _maxLength: number | undefined;\r\n private _pattern: RegExp | undefined;\r\n private _isEmail = false;\r\n private _isUrl = false;\r\n private _shouldTrim = false;\r\n private _toLowercase = false;\r\n private _toUppercase = false;\r\n private _oneOf: string[] | undefined;\r\n\r\n constructor(value: unknown, name: string) {\r\n this._value = value;\r\n this._name = name;\r\n }\r\n\r\n private error(code: string, details: string, params: ErrorParams = {}): never {\r\n throw new ArgError(`${this._name}`, code, details, params);\r\n }\r\n\r\n get required(): ValidString<Exclude<T, undefined>> {\r\n this._isRequired = true;\r\n return this as unknown as ValidString<Exclude<T, undefined>>;\r\n }\r\n\r\n get nullable(): ValidString<T | null> {\r\n this._isNullable = true;\r\n return this as unknown as ValidString<T | null>;\r\n }\r\n\r\n default(v: string): ValidString<Exclude<T, undefined>> {\r\n this._default = v;\r\n return this as unknown as ValidString<Exclude<T, undefined>>;\r\n }\r\n\r\n minLength(n: number): this {\r\n this._minLength = n;\r\n return this;\r\n }\r\n\r\n maxLength(n: number): this {\r\n this._maxLength = n;\r\n return this;\r\n }\r\n\r\n pattern(regex: RegExp): this {\r\n this._pattern = regex;\r\n return this;\r\n }\r\n\r\n get email(): this {\r\n this._isEmail = true;\r\n return this;\r\n }\r\n\r\n get url(): this {\r\n this._isUrl = true;\r\n return this;\r\n }\r\n\r\n get trim(): this {\r\n this._shouldTrim = true;\r\n return this;\r\n }\r\n\r\n get lowercase(): this {\r\n this._toLowercase = true;\r\n return this;\r\n }\r\n\r\n get uppercase(): this {\r\n this._toUppercase = true;\r\n return this;\r\n }\r\n\r\n oneOf(values: string[]): this {\r\n this._oneOf = values;\r\n return this;\r\n }\r\n\r\n get value(): T {\r\n let val = this._value;\r\n\r\n // Apply default if undefined\r\n if (val === undefined && this._default !== undefined) {\r\n val = this._default;\r\n }\r\n\r\n // Check undefined\r\n if (val === undefined) {\r\n if (this._isRequired) {\r\n this.error('REQUIRED', 'is required');\r\n }\r\n return undefined as T;\r\n }\r\n\r\n // Check null\r\n if (val === null) {\r\n if (!this._isNullable) {\r\n this.error('NOT_NULLABLE', 'cannot be null');\r\n }\r\n return null as T;\r\n }\r\n\r\n // Must be string\r\n if (typeof val !== 'string') {\r\n this.error('INVALID_TYPE', 'must be a string', { expected: 'string' });\r\n }\r\n\r\n let str = val;\r\n\r\n // Transformations\r\n if (this._shouldTrim) {\r\n str = str.trim();\r\n }\r\n\r\n if (this._toLowercase) {\r\n str = str.toLowerCase();\r\n }\r\n\r\n if (this._toUppercase) {\r\n str = str.toUpperCase();\r\n }\r\n\r\n // Validations\r\n if (this._minLength !== undefined && str.length < this._minLength) {\r\n this.error('MIN_LENGTH', `must be at least ${this._minLength} characters`, { min: this._minLength });\r\n }\r\n\r\n if (this._maxLength !== undefined && str.length > this._maxLength) {\r\n this.error('MAX_LENGTH', `must be at most ${this._maxLength} characters`, { max: this._maxLength });\r\n }\r\n\r\n if (this._pattern !== undefined && !this._pattern.test(str)) {\r\n this.error('PATTERN_MISMATCH', 'does not match required pattern');\r\n }\r\n\r\n if (this._isEmail && !EMAIL_REGEX.test(str)) {\r\n this.error('INVALID_EMAIL', 'must be a valid email');\r\n }\r\n\r\n if (this._isUrl && !URL_REGEX.test(str)) {\r\n this.error('INVALID_URL', 'must be a valid URL');\r\n }\r\n\r\n if (this._oneOf !== undefined && !this._oneOf.includes(str)) {\r\n this.error('NOT_IN_LIST', `must be one of: ${this._oneOf.join(', ')}`, { allowed: this._oneOf });\r\n }\r\n\r\n return str as T;\r\n }\r\n}\r\n", "import ArgError from \"./arg-error\";\r\n\r\nexport default class ValidBoolean<T = boolean | undefined> {\r\n private _value: unknown;\r\n private _name: string;\r\n private _isRequired = false;\r\n private _isNullable = false;\r\n private _default: boolean | undefined;\r\n\r\n constructor(value: unknown, name: string) {\r\n this._value = value;\r\n this._name = name;\r\n }\r\n\r\n private error(code: string, details: string): never {\r\n throw new ArgError(`${this._name}`, code, details);\r\n }\r\n\r\n get required(): ValidBoolean<Exclude<T, undefined>> {\r\n this._isRequired = true;\r\n return this as unknown as ValidBoolean<Exclude<T, undefined>>;\r\n }\r\n\r\n get nullable(): ValidBoolean<T | null> {\r\n this._isNullable = true;\r\n return this as unknown as ValidBoolean<T | null>;\r\n }\r\n\r\n default(v: boolean): ValidBoolean<Exclude<T, undefined>> {\r\n this._default = v;\r\n return this as unknown as ValidBoolean<Exclude<T, undefined>>;\r\n }\r\n\r\n get value(): T {\r\n let val = this._value;\r\n\r\n // Apply default if undefined\r\n if (val === undefined && this._default !== undefined) {\r\n val = this._default;\r\n }\r\n\r\n // Check undefined\r\n if (val === undefined) {\r\n if (this._isRequired) {\r\n this.error('REQUIRED', 'is required');\r\n }\r\n return undefined as T;\r\n }\r\n\r\n // Check null\r\n if (val === null) {\r\n if (!this._isNullable) {\r\n this.error('NOT_NULLABLE', 'cannot be null');\r\n }\r\n return null as T;\r\n }\r\n\r\n // Parse boolean\r\n let bool: boolean;\r\n if (typeof val === 'boolean') {\r\n bool = val;\r\n } else if (val === 'true' || val === 1) {\r\n bool = true;\r\n } else if (val === 'false' || val === 0) {\r\n bool = false;\r\n } else {\r\n this.error('INVALID_TYPE', 'must be a boolean');\r\n }\r\n\r\n return bool as T;\r\n }\r\n}\r\n", "import ArgError, { type ErrorParams } from \"./arg-error\";\r\nimport type { NumberArrayConfig, StringArrayConfig } from \"./types\";\r\n\r\nexport type ObjectArrayValidator<T> = (obj: Record<string, unknown>, index: number) => T;\r\n\r\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\nconst URL_REGEX = /^https?:\\/\\/.+/;\r\n\r\ntype ArrayNullability<T, N> = N extends undefined\r\n ? T[] | undefined\r\n : N extends null\r\n ? T[] | null\r\n : T[];\r\n\r\nexport default class ValidArray<T = unknown, N = T[] | undefined> {\r\n private _value: unknown;\r\n private _name: string;\r\n private _isRequired = false;\r\n private _isNullable = false;\r\n private _default: unknown[] | undefined;\r\n private _minLength: number | undefined;\r\n private _maxLength: number | undefined;\r\n private _elementValidator: ((val: unknown, index: number) => unknown) | undefined;\r\n\r\n constructor(value: unknown, name: string) {\r\n this._value = value;\r\n this._name = name;\r\n }\r\n\r\n private error(code: string, details: string, params: ErrorParams = {}): never {\r\n throw new ArgError(`${this._name}`, code, details, params);\r\n }\r\n\r\n private elementError(code: string, details: string, index: number, params: ErrorParams = {}): never {\r\n throw new ArgError(\r\n `${this._name}`,\r\n 'ARRAY_ELEMENT',\r\n `element at index ${index} ${details}`,\r\n { index, code, ...params }\r\n );\r\n }\r\n\r\n get required(): ValidArray<T, Exclude<N, undefined>> {\r\n this._isRequired = true;\r\n return this as unknown as ValidArray<T, Exclude<N, undefined>>;\r\n }\r\n\r\n get nullable(): ValidArray<T, N | null> {\r\n this._isNullable = true;\r\n return this as unknown as ValidArray<T, N | null>;\r\n }\r\n\r\n default(v: T[]): ValidArray<T, Exclude<N, undefined>> {\r\n this._default = v;\r\n return this as unknown as ValidArray<T, Exclude<N, undefined>>;\r\n }\r\n\r\n minLength(n: number): this {\r\n this._minLength = n;\r\n return this;\r\n }\r\n\r\n maxLength(n: number): this {\r\n this._maxLength = n;\r\n return this;\r\n }\r\n\r\n ofNumbers(config?: NumberArrayConfig): ValidArray<number, ArrayNullability<number, N>> {\r\n this._elementValidator = (val: unknown, index: number) => {\r\n let num: number;\r\n if (typeof val === 'number') {\r\n num = val;\r\n } else if (typeof val === 'string') {\r\n num = parseFloat(val);\r\n } else {\r\n this.elementError('INVALID_TYPE', 'must be a number', index, { expected: 'number' });\r\n }\r\n\r\n if (isNaN(num)) {\r\n this.elementError('INVALID_NUMBER', 'must be a valid number', index);\r\n }\r\n\r\n if (config) {\r\n if (config.integer && !Number.isInteger(num)) {\r\n this.elementError('NOT_INTEGER', 'must be an integer', index);\r\n }\r\n if (config.positive && num <= 0) {\r\n this.elementError('NOT_POSITIVE', 'must be positive', index);\r\n }\r\n if (config.negative && num >= 0) {\r\n this.elementError('NOT_NEGATIVE', 'must be negative', index);\r\n }\r\n if (config.min !== undefined && num < config.min) {\r\n this.elementError('MIN_VALUE', `must be at least ${config.min}`, index, { min: config.min });\r\n }\r\n if (config.max !== undefined && num > config.max) {\r\n this.elementError('MAX_VALUE', `must be at most ${config.max}`, index, { max: config.max });\r\n }\r\n }\r\n\r\n return num;\r\n };\r\n return this as unknown as ValidArray<number, ArrayNullability<number, N>>;\r\n }\r\n\r\n ofStrings(config?: StringArrayConfig): ValidArray<string, ArrayNullability<string, N>> {\r\n this._elementValidator = (val: unknown, index: number) => {\r\n if (typeof val !== 'string') {\r\n this.elementError('INVALID_TYPE', 'must be a string', index, { expected: 'string' });\r\n }\r\n\r\n let str = val;\r\n\r\n if (config) {\r\n if (config.trim) {\r\n str = str.trim();\r\n }\r\n if (config.minLength !== undefined && str.length < config.minLength) {\r\n this.elementError('MIN_LENGTH', `must be at least ${config.minLength} characters`, index, { min: config.minLength });\r\n }\r\n if (config.maxLength !== undefined && str.length > config.maxLength) {\r\n this.elementError('MAX_LENGTH', `must be at most ${config.maxLength} characters`, index, { max: config.maxLength });\r\n }\r\n if (config.pattern && !config.pattern.test(str)) {\r\n this.elementError('PATTERN_MISMATCH', 'does not match required pattern', index);\r\n }\r\n if (config.email && !EMAIL_REGEX.test(str)) {\r\n this.elementError('INVALID_EMAIL', 'must be a valid email', index);\r\n }\r\n if (config.url && !URL_REGEX.test(str)) {\r\n this.elementError('INVALID_URL', 'must be a valid URL', index);\r\n }\r\n }\r\n\r\n return str;\r\n };\r\n return this as unknown as ValidArray<string, ArrayNullability<string, N>>;\r\n }\r\n\r\n ofBooleans(): ValidArray<boolean, ArrayNullability<boolean, N>> {\r\n this._elementValidator = (val: unknown, index: number) => {\r\n if (typeof val === 'boolean') {\r\n return val;\r\n }\r\n if (val === 'true' || val === 1) {\r\n return true;\r\n }\r\n if (val === 'false' || val === 0) {\r\n return false;\r\n }\r\n this.elementError('INVALID_TYPE', 'must be a boolean', index, { expected: 'boolean' });\r\n };\r\n return this as unknown as ValidArray<boolean, ArrayNullability<boolean, N>>;\r\n }\r\n\r\n ofObjects<O>(validator: ObjectArrayValidator<O>): ValidArray<O, ArrayNullability<O, N>> {\r\n this._elementValidator = (val: unknown, index: number) => {\r\n if (val === null || typeof val !== 'object' || Array.isArray(val)) {\r\n this.elementError('INVALID_TYPE', 'must be an object', index, { expected: 'object' });\r\n }\r\n\r\n try {\r\n return validator(val as Record<string, unknown>, index);\r\n } catch (e) {\r\n if (e instanceof ArgError) {\r\n // Re-throw with nested field path including index\r\n throw new ArgError(\r\n `${this._name}[${index}].${e.field}`,\r\n e.code,\r\n e.details,\r\n e.params\r\n );\r\n }\r\n throw e;\r\n }\r\n };\r\n return this as unknown as ValidArray<O, ArrayNullability<O, N>>;\r\n }\r\n\r\n get value(): N {\r\n let val = this._value;\r\n\r\n // Apply default if undefined\r\n if (val === undefined && this._default !== undefined) {\r\n val = this._default;\r\n }\r\n\r\n // Check undefined\r\n if (val === undefined) {\r\n if (this._isRequired) {\r\n this.error('REQUIRED', 'is required');\r\n }\r\n return undefined as N;\r\n }\r\n\r\n // Check null\r\n if (val === null) {\r\n if (!this._isNullable) {\r\n this.error('NOT_NULLABLE', 'cannot be null');\r\n }\r\n return null as N;\r\n }\r\n\r\n // Must be array\r\n if (!Array.isArray(val)) {\r\n this.error('INVALID_TYPE', 'must be an array', { expected: 'array' });\r\n }\r\n\r\n // Length validations\r\n if (this._minLength !== undefined && val.length < this._minLength) {\r\n this.error('ARRAY_MIN_LENGTH', `must have at least ${this._minLength} elements`, { min: this._minLength });\r\n }\r\n\r\n if (this._maxLength !== undefined && val.length > this._maxLength) {\r\n this.error('ARRAY_MAX_LENGTH', `must have at most ${this._maxLength} elements`, { max: this._maxLength });\r\n }\r\n\r\n // Validate elements\r\n if (this._elementValidator) {\r\n const validated = val.map((item, index) => this._elementValidator!(item, index));\r\n return validated as N;\r\n }\r\n\r\n return val as N;\r\n }\r\n}\r\n", "import ArgError, { type ErrorParams } from \"./arg-error\";\r\n\r\nexport default class ValidDate<T = Date | undefined> {\r\n private _value: unknown;\r\n private _name: string;\r\n private _isRequired = false;\r\n private _isNullable = false;\r\n private _default: Date | undefined;\r\n private _min: Date | undefined;\r\n private _max: Date | undefined;\r\n private _isPast = false;\r\n private _isFuture = false;\r\n\r\n constructor(value: unknown, name: string) {\r\n this._value = value;\r\n this._name = name;\r\n }\r\n\r\n private error(code: string, details: string, params: ErrorParams = {}): never {\r\n throw new ArgError(`${this._name}`, code, details, params);\r\n }\r\n\r\n get required(): ValidDate<Exclude<T, undefined>> {\r\n this._isRequired = true;\r\n return this as unknown as ValidDate<Exclude<T, undefined>>;\r\n }\r\n\r\n get nullable(): ValidDate<T | null> {\r\n this._isNullable = true;\r\n return this as unknown as ValidDate<T | null>;\r\n }\r\n\r\n default(v: Date): ValidDate<Exclude<T, undefined>> {\r\n this._default = v;\r\n return this as unknown as ValidDate<Exclude<T, undefined>>;\r\n }\r\n\r\n min(date: Date): this {\r\n this._min = date;\r\n return this;\r\n }\r\n\r\n max(date: Date): this {\r\n this._max = date;\r\n return this;\r\n }\r\n\r\n get past(): this {\r\n this._isPast = true;\r\n return this;\r\n }\r\n\r\n get future(): this {\r\n this._isFuture = true;\r\n return this;\r\n }\r\n\r\n get value(): T {\r\n let val = this._value;\r\n\r\n // Apply default if undefined\r\n if (val === undefined && this._default !== undefined) {\r\n val = this._default;\r\n }\r\n\r\n // Check undefined\r\n if (val === undefined) {\r\n if (this._isRequired) {\r\n this.error('REQUIRED', 'is required');\r\n }\r\n return undefined as T;\r\n }\r\n\r\n // Check null\r\n if (val === null) {\r\n if (!this._isNullable) {\r\n this.error('NOT_NULLABLE', 'cannot be null');\r\n }\r\n return null as T;\r\n }\r\n\r\n // Parse date\r\n let date: Date;\r\n if (val instanceof Date) {\r\n date = val;\r\n } else if (typeof val === 'string' || typeof val === 'number') {\r\n date = new Date(val);\r\n } else {\r\n this.error('INVALID_TYPE', 'must be a date', { expected: 'date' });\r\n }\r\n\r\n if (isNaN(date.getTime())) {\r\n this.error('INVALID_DATE', 'must be a valid date');\r\n }\r\n\r\n const now = new Date();\r\n\r\n // Validations\r\n if (this._isPast && date >= now) {\r\n this.error('DATE_NOT_PAST', 'must be in the past');\r\n }\r\n\r\n if (this._isFuture && date <= now) {\r\n this.error('DATE_NOT_FUTURE', 'must be in the future');\r\n }\r\n\r\n if (this._min !== undefined && date < this._min) {\r\n this.error('DATE_MIN', `must be after ${this._min.toISOString()}`, { min: this._min.toISOString() });\r\n }\r\n\r\n if (this._max !== undefined && date > this._max) {\r\n this.error('DATE_MAX', `must be before ${this._max.toISOString()}`, { max: this._max.toISOString() });\r\n }\r\n\r\n return date as T;\r\n }\r\n}\r\n", "import ArgError, { type ErrorParams } from \"./arg-error\";\r\n\r\nexport default class ValidEnum<V extends string | number, T = V | undefined> {\r\n private _value: unknown;\r\n private _name: string;\r\n private _allowedValues: V[];\r\n private _isRequired = false;\r\n private _isNullable = false;\r\n private _default: V | undefined;\r\n\r\n constructor(value: unknown, name: string, allowedValues: V[]) {\r\n this._value = value;\r\n this._name = name;\r\n this._allowedValues = allowedValues;\r\n }\r\n\r\n private error(code: string, details: string, params: ErrorParams = {}): never {\r\n throw new ArgError(`${this._name}`, code, details, params);\r\n }\r\n\r\n get required(): ValidEnum<V, Exclude<T, undefined>> {\r\n this._isRequired = true;\r\n return this as unknown as ValidEnum<V, Exclude<T, undefined>>;\r\n }\r\n\r\n get nullable(): ValidEnum<V, T | null> {\r\n this._isNullable = true;\r\n return this as unknown as ValidEnum<V, T | null>;\r\n }\r\n\r\n default(v: V): ValidEnum<V, Exclude<T, undefined>> {\r\n this._default = v;\r\n return this as unknown as ValidEnum<V, Exclude<T, undefined>>;\r\n }\r\n\r\n get value(): T {\r\n let val = this._value;\r\n\r\n // Apply default if undefined\r\n if (val === undefined && this._default !== undefined) {\r\n val = this._default;\r\n }\r\n\r\n // Check undefined\r\n if (val === undefined) {\r\n if (this._isRequired) {\r\n this.error('REQUIRED', 'is required');\r\n }\r\n return undefined as T;\r\n }\r\n\r\n // Check null\r\n if (val === null) {\r\n if (!this._isNullable) {\r\n this.error('NOT_NULLABLE', 'cannot be null');\r\n }\r\n return null as T;\r\n }\r\n\r\n // Check if value is in allowed values\r\n if (!this._allowedValues.includes(val as V)) {\r\n this.error('NOT_IN_LIST', `must be one of: ${this._allowedValues.join(', ')}`, { allowed: this._allowedValues });\r\n }\r\n\r\n return val as T;\r\n }\r\n}\r\n", "import ArgError, { type ErrorParams } from \"./arg-error\";\n\nexport type ObjectValidator<T> = (obj: Record<string, unknown>) => T;\n\nexport default class ValidObject<T, N = T | undefined> {\n private _value: unknown;\n private _name: string;\n private _validator: ObjectValidator<T>;\n private _isRequired = false;\n private _isNullable = false;\n private _default: T | undefined;\n\n constructor(value: unknown, name: string, validator: ObjectValidator<T>) {\n this._value = value;\n this._name = name;\n this._validator = validator;\n }\n\n private error(code: string, details: string, params: ErrorParams = {}): never {\n throw new ArgError(`${this._name}`, code, details, params);\n }\n\n get required(): ValidObject<T, Exclude<N, undefined>> {\n this._isRequired = true;\n return this as unknown as ValidObject<T, Exclude<N, undefined>>;\n }\n\n get nullable(): ValidObject<T, N | null> {\n this._isNullable = true;\n return this as unknown as ValidObject<T, N | null>;\n }\n\n default(v: T): ValidObject<T, Exclude<N, undefined>> {\n this._default = v;\n return this as unknown as ValidObject<T, Exclude<N, undefined>>;\n }\n\n get value(): N {\n let val = this._value;\n\n // Apply default if undefined\n if (val === undefined && this._default !== undefined) {\n val = this._default;\n }\n\n // Check undefined\n if (val === undefined) {\n if (this._isRequired) {\n this.error('REQUIRED', 'is required');\n }\n return undefined as N;\n }\n\n // Check null\n if (val === null) {\n if (!this._isNullable) {\n this.error('NOT_NULLABLE', 'cannot be null');\n }\n return null as N;\n }\n\n // Must be object (not array, not null)\n if (typeof val !== 'object' || Array.isArray(val)) {\n this.error('INVALID_TYPE', 'must be an object', { expected: 'object' });\n }\n\n // Run custom validator\n try {\n const validated = this._validator(val as Record<string, unknown>);\n return validated as unknown as N;\n } catch (e) {\n if (e instanceof ArgError) {\n // Re-throw with nested field path\n throw new ArgError(\n `${this._name}.${e.field}`,\n e.code,\n e.details,\n e.params\n );\n }\n throw e;\n }\n }\n}\n", "import ValidNumber from \"./valid-number\";\r\nimport ValidString from \"./valid-string\";\r\nimport ValidBoolean from \"./valid-boolean\";\r\nimport ValidArray from \"./valid-array\";\r\nimport ValidDate from \"./valid-date\";\r\nimport ValidEnum from \"./valid-enum\";\r\nimport ValidObject, { type ObjectValidator } from \"./valid-object\";\r\n\r\nexport default class ValidBase {\r\n private _value: unknown;\r\n private _name: string;\r\n\r\n constructor(value: unknown, name: string) {\r\n this._value = value;\r\n this._name = name;\r\n }\r\n\r\n get number(): ValidNumber {\r\n return new ValidNumber(this._value, this._name);\r\n }\r\n\r\n get string(): ValidString {\r\n return new ValidString(this._value, this._name);\r\n }\r\n\r\n get boolean(): ValidBoolean {\r\n return new ValidBoolean(this._value, this._name);\r\n }\r\n\r\n get array(): ValidArray {\r\n return new ValidArray(this._value, this._name);\r\n }\r\n\r\n get date(): ValidDate {\r\n return new ValidDate(this._value, this._name);\r\n }\r\n\r\n enum<V extends string | number>(allowedValues: V[]): ValidEnum<V> {\r\n return new ValidEnum<V>(this._value, this._name, allowedValues);\r\n }\r\n\r\n object<T>(validator: ObjectValidator<T>): ValidObject<T> {\r\n return new ValidObject<T>(this._value, this._name, validator);\r\n }\r\n}\r\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Request, Response, NextFunction } from \"express\";\n\nexport interface RequestContext {\n body: unknown;\n params: Record<string, unknown>;\n}\n\nexport const requestStorage = new AsyncLocalStorage<RequestContext>();\n\nexport function getContext(): RequestContext {\n const ctx = requestStorage.getStore();\n if (!ctx) {\n throw new Error('body/params must be called inside validMiddleware context');\n }\n return ctx;\n}\n\nexport function validMiddleware(req: Request, _res: Response, next: NextFunction): void {\n const context: RequestContext = {\n body: req.body,\n params: req.params as Record<string, unknown>,\n };\n\n requestStorage.run(context, next);\n}\n\n", "import { ErrorRequestHandler } from \"express\";\r\nimport ArgError from \"./arg-error\";\r\n\r\nconst validErrorHandler: ErrorRequestHandler = (error, req, res, next) => {\r\n if (error instanceof ArgError) {\r\n res.status(400).json({\r\n error: error.message,\r\n code: 400,\r\n errorCode: error.code,\r\n params: error.params,\r\n field: error.field,\r\n url: req.originalUrl,\r\n message: error.msg\r\n });\r\n } else {\r\n next(error);\r\n }\r\n};\r\n\r\nexport default validErrorHandler;", "import { Router, Request, Response, NextFunction, RequestHandler } from 'express';\nimport { requestStorage, RequestContext } from './middleware';\n\ntype JsonHandler = (req: Request, res: Response) => unknown | Promise<unknown>;\ntype Middleware = RequestHandler;\n\nexport interface JsonRouter {\n get: (path: string, handler: JsonHandler, ...middlewares: Middleware[]) => JsonRouter;\n post: (path: string, handler: JsonHandler, ...middlewares: Middleware[]) => JsonRouter;\n put: (path: string, handler: JsonHandler, ...middlewares: Middleware[]) => JsonRouter;\n patch: (path: string, handler: JsonHandler, ...middlewares: Middleware[]) => JsonRouter;\n delete: (path: string, handler: JsonHandler, ...middlewares: Middleware[]) => JsonRouter;\n router: Router;\n}\n\nfunction wrapHandler(handler: JsonHandler) {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Cr\u00E9er le contexte ici, quand les params sont disponibles\n const context: RequestContext = {\n body: req.body,\n params: req.params as Record<string, unknown>,\n };\n\n requestStorage.run(context, async () => {\n try {\n const result = await handler(req, res);\n\n if (res.headersSent) {\n return;\n }\n\n if (result === undefined || result === null) {\n res.status(204).end();\n } else {\n res.json(result);\n }\n } catch (error) {\n next(error);\n }\n });\n };\n}\n\nexport function createJsonRouter(): JsonRouter {\n const expressRouter = Router();\n\n const jsonRouter: JsonRouter = {\n router: expressRouter,\n get: (path, handler, ...middlewares) => {\n expressRouter.get(path, ...middlewares, wrapHandler(handler));\n return jsonRouter;\n },\n post: (path, handler, ...middlewares) => {\n expressRouter.post(path, ...middlewares, wrapHandler(handler));\n return jsonRouter;\n },\n put: (path, handler, ...middlewares) => {\n expressRouter.put(path, ...middlewares, wrapHandler(handler));\n return jsonRouter;\n },\n patch: (path, handler, ...middlewares) => {\n expressRouter.patch(path, ...middlewares, wrapHandler(handler));\n return jsonRouter;\n },\n delete: (path, handler, ...middlewares) => {\n expressRouter.delete(path, ...middlewares, wrapHandler(handler));\n return jsonRouter;\n },\n };\n\n return jsonRouter;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["params", "params", "params", "EMAIL_REGEX", "URL_REGEX", "params", "params", "params", "params"]
7
+ }