bguard 0.0.5 → 0.0.6

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 (217) hide show
  1. package/lib/InferType.js +1 -19
  2. package/lib/InferType.js.map +1 -1
  3. package/lib/asserts/array/index.js +7 -86
  4. package/lib/asserts/array/index.js.map +1 -1
  5. package/lib/asserts/array/index.mjs +7 -59
  6. package/lib/asserts/array/index.mjs.map +1 -1
  7. package/lib/asserts/boolean/index.js +7 -114
  8. package/lib/asserts/boolean/index.js.map +1 -1
  9. package/lib/asserts/boolean/index.mjs +7 -87
  10. package/lib/asserts/boolean/index.mjs.map +1 -1
  11. package/lib/asserts/common/equalTo.js +4 -50
  12. package/lib/asserts/common/equalTo.js.map +1 -1
  13. package/lib/asserts/common/equalTo.mjs +4 -23
  14. package/lib/asserts/common/equalTo.mjs.map +1 -1
  15. package/lib/asserts/common/index.js +6 -68
  16. package/lib/asserts/common/index.js.map +1 -1
  17. package/lib/asserts/common/index.mjs +6 -41
  18. package/lib/asserts/common/index.mjs.map +1 -1
  19. package/lib/asserts/number/index.js +8 -108
  20. package/lib/asserts/number/index.js.map +1 -1
  21. package/lib/asserts/number/index.mjs +8 -81
  22. package/lib/asserts/number/index.mjs.map +1 -1
  23. package/lib/asserts/number/max.js +6 -47
  24. package/lib/asserts/number/max.js.map +1 -1
  25. package/lib/asserts/number/max.mjs +3 -17
  26. package/lib/asserts/number/max.mjs.map +1 -1
  27. package/lib/asserts/number/maxExcluded.js +6 -47
  28. package/lib/asserts/number/maxExcluded.js.map +1 -1
  29. package/lib/asserts/number/maxExcluded.mjs +3 -17
  30. package/lib/asserts/number/maxExcluded.mjs.map +1 -1
  31. package/lib/asserts/number/min.js +6 -47
  32. package/lib/asserts/number/min.js.map +1 -1
  33. package/lib/asserts/number/min.mjs +3 -17
  34. package/lib/asserts/number/min.mjs.map +1 -1
  35. package/lib/asserts/number/minExcluded.js +6 -47
  36. package/lib/asserts/number/minExcluded.js.map +1 -1
  37. package/lib/asserts/number/minExcluded.mjs +3 -17
  38. package/lib/asserts/number/minExcluded.mjs.map +1 -1
  39. package/lib/asserts/number/negative.js +6 -47
  40. package/lib/asserts/number/negative.js.map +1 -1
  41. package/lib/asserts/number/negative.mjs +3 -17
  42. package/lib/asserts/number/negative.mjs.map +1 -1
  43. package/lib/asserts/number/positive.js +6 -47
  44. package/lib/asserts/number/positive.js.map +1 -1
  45. package/lib/asserts/number/positive.mjs +3 -17
  46. package/lib/asserts/number/positive.mjs.map +1 -1
  47. package/lib/asserts/object/index.js +7 -90
  48. package/lib/asserts/object/index.js.map +1 -1
  49. package/lib/asserts/object/index.mjs +7 -63
  50. package/lib/asserts/object/index.mjs.map +1 -1
  51. package/lib/asserts/string/email.js +6 -47
  52. package/lib/asserts/string/email.js.map +1 -1
  53. package/lib/asserts/string/email.mjs +3 -17
  54. package/lib/asserts/string/email.mjs.map +1 -1
  55. package/lib/asserts/string/index.js +8 -108
  56. package/lib/asserts/string/index.js.map +1 -1
  57. package/lib/asserts/string/index.mjs +8 -81
  58. package/lib/asserts/string/index.mjs.map +1 -1
  59. package/lib/asserts/string/maxLength.js +6 -47
  60. package/lib/asserts/string/maxLength.js.map +1 -1
  61. package/lib/asserts/string/maxLength.mjs +3 -17
  62. package/lib/asserts/string/maxLength.mjs.map +1 -1
  63. package/lib/asserts/string/minLength.js +6 -47
  64. package/lib/asserts/string/minLength.js.map +1 -1
  65. package/lib/asserts/string/minLength.mjs +3 -17
  66. package/lib/asserts/string/minLength.mjs.map +1 -1
  67. package/lib/asserts/string/regExp.js +6 -47
  68. package/lib/asserts/string/regExp.js.map +1 -1
  69. package/lib/asserts/string/regExp.mjs +3 -17
  70. package/lib/asserts/string/regExp.mjs.map +1 -1
  71. package/lib/chunk-2AP4OQMT.js +26 -0
  72. package/lib/chunk-2AP4OQMT.js.map +1 -0
  73. package/lib/chunk-32IQXZRK.mjs +13 -0
  74. package/lib/chunk-32IQXZRK.mjs.map +1 -0
  75. package/lib/chunk-3FEJUC3K.mjs +13 -0
  76. package/lib/chunk-3FEJUC3K.mjs.map +1 -0
  77. package/lib/chunk-5NCJN6D2.js +70 -0
  78. package/lib/chunk-5NCJN6D2.js.map +1 -0
  79. package/lib/chunk-5ZMICHV3.js +21 -0
  80. package/lib/chunk-5ZMICHV3.js.map +1 -0
  81. package/lib/chunk-63IQFNFO.mjs +27 -0
  82. package/lib/chunk-63IQFNFO.mjs.map +1 -0
  83. package/lib/chunk-A2SAWKJA.mjs +13 -0
  84. package/lib/chunk-A2SAWKJA.mjs.map +1 -0
  85. package/lib/chunk-A3UTB4RE.mjs +28 -0
  86. package/lib/chunk-A3UTB4RE.mjs.map +1 -0
  87. package/lib/chunk-A7I2JEQO.js +13 -0
  88. package/lib/chunk-A7I2JEQO.js.map +1 -0
  89. package/lib/chunk-AJ4WV5DG.mjs +13 -0
  90. package/lib/chunk-AJ4WV5DG.mjs.map +1 -0
  91. package/lib/chunk-APTTIN2L.js +42 -0
  92. package/lib/chunk-APTTIN2L.js.map +1 -0
  93. package/lib/chunk-AXOP6HPJ.js +14 -0
  94. package/lib/chunk-AXOP6HPJ.js.map +1 -0
  95. package/lib/chunk-BGMR7A6X.mjs +13 -0
  96. package/lib/chunk-BGMR7A6X.mjs.map +1 -0
  97. package/lib/chunk-FCFO5J5Y.mjs +14 -0
  98. package/lib/chunk-FCFO5J5Y.mjs.map +1 -0
  99. package/lib/chunk-GEZME6V2.mjs +39 -0
  100. package/lib/chunk-GEZME6V2.mjs.map +1 -0
  101. package/lib/chunk-GNBSKTFV.js +27 -0
  102. package/lib/chunk-GNBSKTFV.js.map +1 -0
  103. package/lib/chunk-IQ3QYABE.js +32 -0
  104. package/lib/chunk-IQ3QYABE.js.map +1 -0
  105. package/lib/chunk-K2S3FS5K.js +13 -0
  106. package/lib/chunk-K2S3FS5K.js.map +1 -0
  107. package/lib/chunk-KCBOOOTF.mjs +13 -0
  108. package/lib/chunk-KCBOOOTF.mjs.map +1 -0
  109. package/lib/chunk-L6A7NXUJ.js +13 -0
  110. package/lib/chunk-L6A7NXUJ.js.map +1 -0
  111. package/lib/chunk-L7HUXYFV.mjs +42 -0
  112. package/lib/chunk-L7HUXYFV.mjs.map +1 -0
  113. package/lib/chunk-LHTJHMKJ.mjs +27 -0
  114. package/lib/chunk-LHTJHMKJ.mjs.map +1 -0
  115. package/lib/chunk-NOADI6PO.mjs +21 -0
  116. package/lib/chunk-NOADI6PO.mjs.map +1 -0
  117. package/lib/chunk-NWY33MFU.js +13 -0
  118. package/lib/chunk-NWY33MFU.js.map +1 -0
  119. package/lib/chunk-P3Y6IWFA.mjs +70 -0
  120. package/lib/chunk-P3Y6IWFA.mjs.map +1 -0
  121. package/lib/chunk-PDVXBE27.js +27 -0
  122. package/lib/chunk-PDVXBE27.js.map +1 -0
  123. package/lib/chunk-PJP63SJT.js +13 -0
  124. package/lib/chunk-PJP63SJT.js.map +1 -0
  125. package/lib/chunk-QJOXKH7A.mjs +26 -0
  126. package/lib/chunk-QJOXKH7A.mjs.map +1 -0
  127. package/lib/chunk-QKGQ4XZC.js +13 -0
  128. package/lib/chunk-QKGQ4XZC.js.map +1 -0
  129. package/lib/chunk-QYLH5ZAC.mjs +32 -0
  130. package/lib/chunk-QYLH5ZAC.mjs.map +1 -0
  131. package/lib/chunk-VPFIIM2X.js +39 -0
  132. package/lib/chunk-VPFIIM2X.js.map +1 -0
  133. package/lib/chunk-YXHH5BF6.js +28 -0
  134. package/lib/chunk-YXHH5BF6.js.map +1 -0
  135. package/lib/core.js +6 -107
  136. package/lib/core.js.map +1 -1
  137. package/lib/core.mjs +5 -78
  138. package/lib/core.mjs.map +1 -1
  139. package/lib/exceptions.js +9 -50
  140. package/lib/exceptions.js.map +1 -1
  141. package/lib/exceptions.mjs +5 -19
  142. package/lib/exceptions.mjs.map +1 -1
  143. package/lib/index.js +29 -283
  144. package/lib/index.js.map +1 -1
  145. package/lib/index.mjs +34 -252
  146. package/lib/index.mjs.map +1 -1
  147. package/lib/parseSchema.js +5 -115
  148. package/lib/parseSchema.js.map +1 -1
  149. package/lib/parseSchema.mjs +5 -88
  150. package/lib/parseSchema.mjs.map +1 -1
  151. package/lib/schemas/ArraySchema.js +6 -81
  152. package/lib/schemas/ArraySchema.js.map +1 -1
  153. package/lib/schemas/ArraySchema.mjs +6 -54
  154. package/lib/schemas/ArraySchema.mjs.map +1 -1
  155. package/lib/schemas/BooleanSchema.js +6 -109
  156. package/lib/schemas/BooleanSchema.js.map +1 -1
  157. package/lib/schemas/BooleanSchema.mjs +6 -82
  158. package/lib/schemas/BooleanSchema.mjs.map +1 -1
  159. package/lib/schemas/CommonSchema.js +5 -63
  160. package/lib/schemas/CommonSchema.js.map +1 -1
  161. package/lib/schemas/CommonSchema.mjs +5 -36
  162. package/lib/schemas/CommonSchema.mjs.map +1 -1
  163. package/lib/schemas/NumberSchema.js +7 -103
  164. package/lib/schemas/NumberSchema.js.map +1 -1
  165. package/lib/schemas/NumberSchema.mjs +7 -76
  166. package/lib/schemas/NumberSchema.mjs.map +1 -1
  167. package/lib/schemas/ObjectSchema.js +6 -85
  168. package/lib/schemas/ObjectSchema.js.map +1 -1
  169. package/lib/schemas/ObjectSchema.mjs +6 -58
  170. package/lib/schemas/ObjectSchema.mjs.map +1 -1
  171. package/lib/schemas/StringSchema.js +7 -103
  172. package/lib/schemas/StringSchema.js.map +1 -1
  173. package/lib/schemas/StringSchema.mjs +7 -76
  174. package/lib/schemas/StringSchema.mjs.map +1 -1
  175. package/package.json +4 -3
  176. package/lib/__tests__/ArraySchema.test.d.mts +0 -2
  177. package/lib/__tests__/ArraySchema.test.d.ts +0 -2
  178. package/lib/__tests__/ArraySchema.test.js +0 -201
  179. package/lib/__tests__/ArraySchema.test.js.map +0 -1
  180. package/lib/__tests__/ArraySchema.test.mjs +0 -199
  181. package/lib/__tests__/ArraySchema.test.mjs.map +0 -1
  182. package/lib/__tests__/BooleanSchema.test.d.mts +0 -2
  183. package/lib/__tests__/BooleanSchema.test.d.ts +0 -2
  184. package/lib/__tests__/BooleanSchema.test.js +0 -219
  185. package/lib/__tests__/BooleanSchema.test.js.map +0 -1
  186. package/lib/__tests__/BooleanSchema.test.mjs +0 -217
  187. package/lib/__tests__/BooleanSchema.test.mjs.map +0 -1
  188. package/lib/__tests__/CommonSchema.test.d.mts +0 -2
  189. package/lib/__tests__/CommonSchema.test.d.ts +0 -2
  190. package/lib/__tests__/CommonSchema.test.js +0 -253
  191. package/lib/__tests__/CommonSchema.test.js.map +0 -1
  192. package/lib/__tests__/CommonSchema.test.mjs +0 -251
  193. package/lib/__tests__/CommonSchema.test.mjs.map +0 -1
  194. package/lib/__tests__/MixTypes.test.d.mts +0 -2
  195. package/lib/__tests__/MixTypes.test.d.ts +0 -2
  196. package/lib/__tests__/MixTypes.test.js +0 -165
  197. package/lib/__tests__/MixTypes.test.js.map +0 -1
  198. package/lib/__tests__/MixTypes.test.mjs +0 -163
  199. package/lib/__tests__/MixTypes.test.mjs.map +0 -1
  200. package/lib/__tests__/NumberSchema.test.d.mts +0 -2
  201. package/lib/__tests__/NumberSchema.test.d.ts +0 -2
  202. package/lib/__tests__/NumberSchema.test.js +0 -253
  203. package/lib/__tests__/NumberSchema.test.js.map +0 -1
  204. package/lib/__tests__/NumberSchema.test.mjs +0 -251
  205. package/lib/__tests__/NumberSchema.test.mjs.map +0 -1
  206. package/lib/__tests__/ObjectSchema.test.d.mts +0 -2
  207. package/lib/__tests__/ObjectSchema.test.d.ts +0 -2
  208. package/lib/__tests__/ObjectSchema.test.js +0 -356
  209. package/lib/__tests__/ObjectSchema.test.js.map +0 -1
  210. package/lib/__tests__/ObjectSchema.test.mjs +0 -354
  211. package/lib/__tests__/ObjectSchema.test.mjs.map +0 -1
  212. package/lib/__tests__/StringSchema.test.d.mts +0 -2
  213. package/lib/__tests__/StringSchema.test.d.ts +0 -2
  214. package/lib/__tests__/StringSchema.test.js +0 -228
  215. package/lib/__tests__/StringSchema.test.js.map +0 -1
  216. package/lib/__tests__/StringSchema.test.mjs +0 -226
  217. package/lib/__tests__/StringSchema.test.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../jest/setup.ts","../../src/exceptions.ts","../../src/core.ts","../../src/parseSchema.ts","../../src/asserts/number/max.ts","../../src/asserts/number/maxExcluded.ts","../../src/asserts/number/min.ts","../../src/asserts/number/minExcluded.ts","../../src/asserts/number/positive.ts","../../src/asserts/common/equalTo.ts","../../src/schemas/CommonSchema.ts","../../src/schemas/NumberSchema.ts","../../src/asserts/number/index.ts","../../src/asserts/number/negative.ts","../../src/__tests__/NumberSchema.test.ts"],"sourcesContent":["export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;\n\nexport function expectEqualTypes<X, Y>(areEqual: Equal<X, Y>): void {\n expect(typeof areEqual).toBe('boolean');\n}\n","export class ValidationError extends Error {\n expected: unknown;\n received: unknown;\n pathToError: string;\n message: string;\n constructor(expected: unknown, received: unknown, pathToError: string, message: string) {\n super();\n this.expected = expected;\n this.received = received;\n this.pathToError = pathToError;\n this.message = message;\n }\n}\n\nexport class BuildSchemaError extends Error {}\n\nexport function throwException(expected: unknown, received: unknown, pathToError: string, message: string): never {\n throw new ValidationError(expected, received, pathToError, message);\n}\n","export const ctxSymbol = Symbol('contextSymbol');\n\nimport { throwException } from './exceptions';\nimport type { CommonSchema } from './schemas/CommonSchema';\n\nexport function innerCheck(schema: CommonSchema, receivedValue: unknown, pathToError: string) {\n const ctx = schema[ctxSymbol];\n if (receivedValue === undefined) {\n if (!ctx.isOptional) throwException('Required', receivedValue, pathToError, 'The required value is missing');\n return receivedValue;\n }\n\n if (receivedValue === null) {\n if (!ctx.isNullable) throwException('Not null', receivedValue, pathToError, 'Value should not be null');\n return receivedValue;\n }\n\n if (ctx.array) {\n if (!Array.isArray(receivedValue))\n throwException('Array', receivedValue, pathToError, 'Expected an array but received a different type');\n const schema = ctx.array;\n\n receivedValue.forEach((elem, i) => {\n innerCheck(schema, elem, `${pathToError}[${i}]`);\n });\n\n return receivedValue;\n }\n\n const typeOfVal = typeof receivedValue;\n\n if (ctx.object) {\n if (typeOfVal !== 'object')\n throwException('Object', receivedValue, pathToError, 'Expected an object but received a different type');\n if (Array.isArray(receivedValue))\n throwException(\n 'Object',\n receivedValue,\n pathToError,\n 'Expected an object but received an array. Invalid type of data',\n );\n const shapeSchema = ctx.object;\n for (const keyPerReceivedValue of Object.keys(receivedValue)) {\n if (shapeSchema[keyPerReceivedValue] === undefined)\n throwException('Not allowed', keyPerReceivedValue, pathToError, 'This key is not allowed in the object');\n }\n\n for (const [keyOfSchema, valueOfSchema] of Object.entries(shapeSchema)) {\n const receivedObjectValuePropery = (receivedValue as Record<string, unknown>)[keyOfSchema];\n if (receivedObjectValuePropery === undefined) {\n if (!valueOfSchema[ctxSymbol].isOptional)\n throwException(\n 'Required',\n receivedObjectValuePropery,\n pathToError,\n 'Missing required property in the object',\n );\n }\n innerCheck(valueOfSchema, receivedObjectValuePropery, `${pathToError}.${keyOfSchema}`);\n }\n\n return receivedValue;\n }\n\n if (ctx.type.length) {\n if (!ctx.type.includes(typeOfVal)) throwException(ctx.type, typeOfVal, pathToError, 'Invalid type of data');\n }\n\n ctx.requiredValidations.forEach((requiredValidation) => {\n requiredValidation(receivedValue, pathToError);\n });\n\n return receivedValue;\n}\n","import { InferType } from './InferType';\nimport { innerCheck } from './core';\nimport { ValidationError } from './exceptions';\nimport { CommonSchema } from './schemas/CommonSchema';\n\n/**\n * Parses and validates a value against the provided schema, returning a type-safe result.\n *\n * This function will throw a `ValidationError` if the value does not conform to the schema.\n * The inferred TypeScript type of the returned value will match the structure defined by the schema.\n *\n * @template T\n * @param {T} schema - The schema to validate the received value against. This schema dictates the expected structure and type of the value.\n * @param {unknown} receivedValue - The value to be validated and parsed according to the schema.\n * @returns {InferType<T>} The validated value, with its TypeScript type inferred from the schema.\n *\n * @throws {ValidationError} If the received value does not match the schema, a `ValidationError` will be thrown.\n * @throws {Error} If an unexpected error occurs during validation, an error will be thrown with a generic message.\n *\n * @example\n * const schema = object({\n * name: string(),\n * age: number(),\n * });\n *\n * const result = parseSchema(schema, { name: 'Alice', age: 30 });\n * // result will be inferred as { name: string; age: number }\n *\n * parseSchema(schema, { name: 'Alice', age: '30' });\n * // Throws ValidationError because 'age' should be a number, not a string.\n */\nexport function parseSchema<T extends CommonSchema>(schema: T, receivedValue: unknown): InferType<T> {\n try {\n return innerCheck(schema, receivedValue, '') as InferType<T>;\n } catch (e) {\n if (e instanceof ValidationError) throw e;\n /* istanbul ignore next */\n throw new Error('Something unexpected happened');\n }\n}\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value does not exceed a specified maximum value.\n *\n * @param {number} expected - The maximum allowable value.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value exceeds the expected maximum value.\n *\n * @example\n * const schema = number().custom(max(100));\n * parseSchema(schema, 99); // Valid\n * parseSchema(schema, 100); // Valid\n * parseSchema(schema, 101); // Throws an error: 'The received value is greater than expected'\n */\nexport const max =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected < received)\n throwException(expected, received, pathToError, 'The received value is greater than expected');\n };\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is strictly less than a specified maximum value (i.e., the maximum value is excluded).\n *\n * @param {number} expected - The maximum allowable value, which is excluded.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is greater than or equal to the expected maximum value.\n *\n * @example\n * const schema = number().custom(maxExcluded(100));\n * parseSchema(schema, 99); // Valid\n * parseSchema(schema, 100); // Throws an error: 'The received value is greater than or equal to expected'\n * parseSchema(schema, 101); // Throws an error: 'The received value is greater than or equal to expected'\n */\nexport const maxExcluded =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected <= received)\n throwException(expected, received, pathToError, 'The received value is greater than or equal to expected');\n };\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is not less than a specified minimum value.\n *\n * @param {number} expected - The minimum allowable value.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is less than the expected minimum value.\n *\n * @example\n * const schema = number().custom(min(10));\n * parseSchema(schema, 11); // Valid\n * parseSchema(schema, 10); // Valid\n * parseSchema(schema, 9); // Throws an error: 'The received value is less than expected'\n */\nexport const min =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected > received)\n throwException(expected, received, pathToError, 'The received value is less than expected');\n };\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is strictly greater than a specified minimum value (i.e., the minimum value is excluded).\n *\n * @param {number} expected - The minimum allowable value, which is excluded.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is less than or equal to the expected minimum value.\n *\n * @example\n * const schema = number().custom(minExcluded(10));\n * parseSchema(schema, 11); // Valid\n * parseSchema(schema, 10); // Throws an error: 'The received value is less than or equal to expected'\n * parseSchema(schema, 9); // Throws an error: 'The received value is less than or equal to expected'\n */\nexport const minExcluded =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected >= received)\n throwException(expected, received, pathToError, 'The received value is less than or equal to expected');\n };\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is positive (greater than zero).\n *\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is not positive.\n *\n * @example\n * const schema = number().custom(positive());\n * parseSchema(schema, 10); // Valid\n * parseSchema(schema, 0); // Throws an error: 'The received value is not a positive number'\n * parseSchema(schema, -5); // Throws an error: 'The received value is not a positive number'\n */\nexport const positive = (): RequiredValidation => (received: number, pathToError: string) => {\n if (received <= 0) throwException('positive', received, pathToError, 'The received value is not a positive number');\n};\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Creates a custom assertion that checks if a value is equal to the expected value.\n *\n * This assertion can be used within a `.custom` method to enforce that a value strictly matches the expected value.\n * It will throw a `ValidationError` if the values are not equal.\n *\n * @param {unknown} expected - The value that the received value is expected to match.\n * @returns {RequiredValidation} A function that takes the received value and the path to the error,\n * and throws a `ValidationError` if the received value does not equal the expected value.\n *\n * @throws {ValidationError} If the received value does not match the expected value.\n *\n * @example\n * import { number, equalTo } from 'bguard';\n *\n * // Define a schema with a custom assertion\n * const schema = number().custom(equalTo(5));\n *\n * // This will pass\n * parseSchema(schema, 5);\n *\n * // This will throw a ValidationError\n * parseSchema(schema, 3);\n */\nexport const equalTo =\n (expected: unknown): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected !== received)\n throwException(expected, received, pathToError, 'The received value is not equal to expected');\n };\n","import { ctxSymbol } from '../core';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type RequiredValidation = (received: any, pathToError: string) => void;\nexport type ObjectShapeSchemaType = Record<string, CommonSchema>;\n\nexport type PrimitiveType = 'number' | 'string' | 'boolean' | 'undefined' | 'object' | 'function' | 'symbol' | 'bigint';\nexport interface ValidatorContext {\n type: PrimitiveType[];\n isNullable?: boolean;\n isOptional?: boolean;\n requiredValidations: RequiredValidation[];\n array?: CommonSchema;\n object?: ObjectShapeSchemaType;\n}\n\nexport class CommonSchema {\n [ctxSymbol]: ValidatorContext;\n constructor(ctx: ValidatorContext) {\n this[ctxSymbol] = ctx;\n }\n\n /**\n * @param validators - One or more custom validation functions.\n * @returns {this} The schema instance with the added custom validation.\n */\n custom(...validators: RequiredValidation[]): this {\n this[ctxSymbol].requiredValidations.push(...validators);\n return this;\n }\n\n /**\n * Marks the schema as nullable, allowing the value to be `null`.\n *\n * @returns {WithNull<this>} The schema instance marked as nullable.\n */\n nullable(): WithNull<this> {\n this[ctxSymbol].isNullable = true;\n return this as WithNull<this>;\n }\n\n /**\n * Marks the schema as optional, allowing the value to be `undefined`.\n *\n * @returns {WithUndefined<this>}} The schema instance marked as optional.\n */\n optional(): WithUndefined<this> {\n this[ctxSymbol].isOptional = true;\n return this as WithUndefined<this>;\n }\n}\n\nexport type WithNull<T extends CommonSchema> = T & { validation_null: true };\nexport type WithUndefined<T extends CommonSchema> = T & { validation_undefined: true };\n\ntype TypeMapping = {\n number: number;\n string: string;\n boolean: boolean;\n undefined: undefined;\n object: object;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n function: Function;\n symbol: symbol;\n bigint: bigint;\n};\n\nexport type WithMix<Y = unknown> = CommonSchema & { validation_mix: Y };\nexport type ExtractFromMix<T> = T extends WithMix<infer X> ? X : never;\n\nexport type MapMixTypes<T extends PrimitiveType[]> = T extends (infer U)[]\n ? U extends keyof TypeMapping\n ? TypeMapping[U]\n : never\n : never;\n","import { equalTo } from '../asserts/common/equalTo';\n\nimport { CommonSchema } from './CommonSchema';\n\nexport class NumberSchema extends CommonSchema {\n _number = 1;\n\n /**\n * Restricts the schema to exactly match the specified value and infers the literal value as the TypeScript type.\n *\n * @param expectedValue - The value that the schema must exactly match.\n * @returns - The schema instance restricted to the specified value, with the literal value inferred as the TypeScript type\n *\n * @example - number().equalTo(42); // Infers the type 42\n */\n equalTo<Y extends number>(expectedValue: Y): WithNumber<this, Y> {\n return this.custom(equalTo(expectedValue)) as WithNumber<this, Y>;\n }\n}\n\nexport type WithNumber<T extends NumberSchema, Y = number> = T & { validation_number: Y };\nexport type ExtractFromNumber<T> = T extends WithNumber<NumberSchema, infer Y> ? Y : never;\n","import { NumberSchema } from '../../schemas/NumberSchema';\n\n/**\n * Creates a new schema for validating number values.\n *\n * @returns {NumberSchema} A new instance of `NumberSchema` for validating numbers.\n *\n * @example\n * const schema = number();\n * parseSchema(schema, 42); // Validates successfully\n * parseSchema(schema, '42'); // Throws a validation error\n */\nexport function number(): NumberSchema {\n return new NumberSchema({ type: ['number'], requiredValidations: [] });\n}\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is negative (less than zero).\n *\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is not negative.\n *\n * @example\n * const schema = number().custom(negative());\n * parseSchema(schema, -10); // Valid\n * parseSchema(schema, 0); // Throws an error: 'The received value is not a negative number'\n * parseSchema(schema, 5); // Throws an error: 'The received value is not a negative number'\n */\nexport const negative = (): RequiredValidation => (received: number, pathToError: string) => {\n if (received >= 0) throwException('negative', received, pathToError, 'The received value is not a negative number');\n};\n","import { expectEqualTypes } from '../../jest/setup';\nimport { parseSchema } from '../parseSchema';\nimport { max } from '../asserts/number/max';\nimport { maxExcluded } from '../asserts/number/maxExcluded';\nimport { min } from '../asserts/number/min';\nimport { minExcluded } from '../asserts/number/minExcluded';\nimport { positive } from '../asserts/number/positive';\nimport { InferType } from '../';\nimport { number } from '../asserts/number';\nimport { negative } from '../asserts/number/negative';\n\ndescribe('NumberSchema', () => {\n it('should be a number', () => {\n const numberSchema = number();\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n const actualNumber: number = 8;\n const parsedValue = parseSchema(numberSchema, actualNumber);\n\n expectEqualTypes<typeof actualNumber, InferType<typeof numberSchema>>(true);\n expectEqualTypes<typeof actualNumber, typeof parsedValue>(true);\n expect(parsedValue).toBe(actualNumber);\n });\n\n it('should not be a number', () => {\n const numberSchema = number();\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n const actualNotNumber: string = '9';\n expectEqualTypes<typeof actualNotNumber, InferType<typeof numberSchema>>(false);\n expect(() => parseSchema(numberSchema, actualNotNumber)).toThrow('Invalid type of data');\n });\n\n it('should be greater than or equal to 5', () => {\n const numberSchema = number().custom(min(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 8)).toBe(8);\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is less than expected');\n });\n\n it('should be less than or equal to 5', () => {\n const numberSchema = number().custom(max(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 2)).toBe(2);\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 9)).toThrow('The received value is greater than expected');\n });\n\n it('should be greater than 5', () => {\n const numberSchema = number().custom(minExcluded(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 8)).toBe(8);\n expect(() => parseSchema(numberSchema, 5)).toThrow('The received value is less than or equal to expected');\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is less than or equal to expected');\n });\n\n it('should be less than 5', () => {\n const numberSchema = number().custom(maxExcluded(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 2)).toBe(2);\n expect(() => parseSchema(numberSchema, 5)).toThrow('The received value is greater than or equal to expected');\n expect(() => parseSchema(numberSchema, 9)).toThrow('The received value is greater than or equal to expected');\n });\n\n it('should be equal to be positive and equal to 5', () => {\n const numberSchema = number().custom(positive()).equalTo(5);\n expectEqualTypes<5, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is not equal to expected');\n expect(() => parseSchema(numberSchema, 0)).toThrow('The received value is not a positive number');\n expect(() => parseSchema(numberSchema, -1)).toThrow('The received value is not a positive number');\n });\n\n it('should be equal to be positive and equal to 5', () => {\n const numberSchema = number().custom(negative()).equalTo(-2);\n expectEqualTypes<-2, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, -2)).toBe(-2);\n expect(() => parseSchema(numberSchema, -1)).toThrow('The received value is not equal to expected');\n expect(() => parseSchema(numberSchema, 0)).toThrow('The received value is not a negative number');\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is not a negative number');\n });\n});\n"],"mappings":"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","names":["schema"]}
@@ -1,251 +0,0 @@
1
- // jest/setup.ts
2
- function expectEqualTypes(areEqual) {
3
- expect(typeof areEqual).toBe("boolean");
4
- }
5
-
6
- // src/exceptions.ts
7
- var ValidationError = class extends Error {
8
- expected;
9
- received;
10
- pathToError;
11
- message;
12
- constructor(expected, received, pathToError, message) {
13
- super();
14
- this.expected = expected;
15
- this.received = received;
16
- this.pathToError = pathToError;
17
- this.message = message;
18
- }
19
- };
20
- function throwException(expected, received, pathToError, message) {
21
- throw new ValidationError(expected, received, pathToError, message);
22
- }
23
-
24
- // src/core.ts
25
- var ctxSymbol = Symbol("contextSymbol");
26
- function innerCheck(schema, receivedValue, pathToError) {
27
- const ctx = schema[ctxSymbol];
28
- if (receivedValue === void 0) {
29
- if (!ctx.isOptional) throwException("Required", receivedValue, pathToError, "The required value is missing");
30
- return receivedValue;
31
- }
32
- if (receivedValue === null) {
33
- if (!ctx.isNullable) throwException("Not null", receivedValue, pathToError, "Value should not be null");
34
- return receivedValue;
35
- }
36
- if (ctx.array) {
37
- if (!Array.isArray(receivedValue))
38
- throwException("Array", receivedValue, pathToError, "Expected an array but received a different type");
39
- const schema2 = ctx.array;
40
- receivedValue.forEach((elem, i) => {
41
- innerCheck(schema2, elem, `${pathToError}[${i}]`);
42
- });
43
- return receivedValue;
44
- }
45
- const typeOfVal = typeof receivedValue;
46
- if (ctx.object) {
47
- if (typeOfVal !== "object")
48
- throwException("Object", receivedValue, pathToError, "Expected an object but received a different type");
49
- if (Array.isArray(receivedValue))
50
- throwException(
51
- "Object",
52
- receivedValue,
53
- pathToError,
54
- "Expected an object but received an array. Invalid type of data"
55
- );
56
- const shapeSchema = ctx.object;
57
- for (const keyPerReceivedValue of Object.keys(receivedValue)) {
58
- if (shapeSchema[keyPerReceivedValue] === void 0)
59
- throwException("Not allowed", keyPerReceivedValue, pathToError, "This key is not allowed in the object");
60
- }
61
- for (const [keyOfSchema, valueOfSchema] of Object.entries(shapeSchema)) {
62
- const receivedObjectValuePropery = receivedValue[keyOfSchema];
63
- if (receivedObjectValuePropery === void 0) {
64
- if (!valueOfSchema[ctxSymbol].isOptional)
65
- throwException(
66
- "Required",
67
- receivedObjectValuePropery,
68
- pathToError,
69
- "Missing required property in the object"
70
- );
71
- }
72
- innerCheck(valueOfSchema, receivedObjectValuePropery, `${pathToError}.${keyOfSchema}`);
73
- }
74
- return receivedValue;
75
- }
76
- if (ctx.type.length) {
77
- if (!ctx.type.includes(typeOfVal)) throwException(ctx.type, typeOfVal, pathToError, "Invalid type of data");
78
- }
79
- ctx.requiredValidations.forEach((requiredValidation) => {
80
- requiredValidation(receivedValue, pathToError);
81
- });
82
- return receivedValue;
83
- }
84
-
85
- // src/parseSchema.ts
86
- function parseSchema(schema, receivedValue) {
87
- try {
88
- return innerCheck(schema, receivedValue, "");
89
- } catch (e) {
90
- if (e instanceof ValidationError) throw e;
91
- throw new Error("Something unexpected happened");
92
- }
93
- }
94
-
95
- // src/asserts/number/max.ts
96
- var max = (expected) => (received, pathToError) => {
97
- if (expected < received)
98
- throwException(expected, received, pathToError, "The received value is greater than expected");
99
- };
100
-
101
- // src/asserts/number/maxExcluded.ts
102
- var maxExcluded = (expected) => (received, pathToError) => {
103
- if (expected <= received)
104
- throwException(expected, received, pathToError, "The received value is greater than or equal to expected");
105
- };
106
-
107
- // src/asserts/number/min.ts
108
- var min = (expected) => (received, pathToError) => {
109
- if (expected > received)
110
- throwException(expected, received, pathToError, "The received value is less than expected");
111
- };
112
-
113
- // src/asserts/number/minExcluded.ts
114
- var minExcluded = (expected) => (received, pathToError) => {
115
- if (expected >= received)
116
- throwException(expected, received, pathToError, "The received value is less than or equal to expected");
117
- };
118
-
119
- // src/asserts/number/positive.ts
120
- var positive = () => (received, pathToError) => {
121
- if (received <= 0) throwException("positive", received, pathToError, "The received value is not a positive number");
122
- };
123
-
124
- // src/asserts/common/equalTo.ts
125
- var equalTo = (expected) => (received, pathToError) => {
126
- if (expected !== received)
127
- throwException(expected, received, pathToError, "The received value is not equal to expected");
128
- };
129
-
130
- // src/schemas/CommonSchema.ts
131
- var CommonSchema = class {
132
- [ctxSymbol];
133
- constructor(ctx) {
134
- this[ctxSymbol] = ctx;
135
- }
136
- /**
137
- * @param validators - One or more custom validation functions.
138
- * @returns {this} The schema instance with the added custom validation.
139
- */
140
- custom(...validators) {
141
- this[ctxSymbol].requiredValidations.push(...validators);
142
- return this;
143
- }
144
- /**
145
- * Marks the schema as nullable, allowing the value to be `null`.
146
- *
147
- * @returns {WithNull<this>} The schema instance marked as nullable.
148
- */
149
- nullable() {
150
- this[ctxSymbol].isNullable = true;
151
- return this;
152
- }
153
- /**
154
- * Marks the schema as optional, allowing the value to be `undefined`.
155
- *
156
- * @returns {WithUndefined<this>}} The schema instance marked as optional.
157
- */
158
- optional() {
159
- this[ctxSymbol].isOptional = true;
160
- return this;
161
- }
162
- };
163
-
164
- // src/schemas/NumberSchema.ts
165
- var NumberSchema = class extends CommonSchema {
166
- _number = 1;
167
- /**
168
- * Restricts the schema to exactly match the specified value and infers the literal value as the TypeScript type.
169
- *
170
- * @param expectedValue - The value that the schema must exactly match.
171
- * @returns - The schema instance restricted to the specified value, with the literal value inferred as the TypeScript type
172
- *
173
- * @example - number().equalTo(42); // Infers the type 42
174
- */
175
- equalTo(expectedValue) {
176
- return this.custom(equalTo(expectedValue));
177
- }
178
- };
179
-
180
- // src/asserts/number/index.ts
181
- function number() {
182
- return new NumberSchema({ type: ["number"], requiredValidations: [] });
183
- }
184
-
185
- // src/asserts/number/negative.ts
186
- var negative = () => (received, pathToError) => {
187
- if (received >= 0) throwException("negative", received, pathToError, "The received value is not a negative number");
188
- };
189
-
190
- // src/__tests__/NumberSchema.test.ts
191
- describe("NumberSchema", () => {
192
- it("should be a number", () => {
193
- const numberSchema = number();
194
- const actualNumber = 8;
195
- const parsedValue = parseSchema(numberSchema, actualNumber);
196
- expectEqualTypes(true);
197
- expectEqualTypes(true);
198
- expect(parsedValue).toBe(actualNumber);
199
- });
200
- it("should not be a number", () => {
201
- const numberSchema = number();
202
- const actualNotNumber = "9";
203
- expectEqualTypes(false);
204
- expect(() => parseSchema(numberSchema, actualNotNumber)).toThrow("Invalid type of data");
205
- });
206
- it("should be greater than or equal to 5", () => {
207
- const numberSchema = number().custom(min(5));
208
- expectEqualTypes(true);
209
- expect(parseSchema(numberSchema, 8)).toBe(8);
210
- expect(parseSchema(numberSchema, 5)).toBe(5);
211
- expect(() => parseSchema(numberSchema, 4)).toThrow("The received value is less than expected");
212
- });
213
- it("should be less than or equal to 5", () => {
214
- const numberSchema = number().custom(max(5));
215
- expectEqualTypes(true);
216
- expect(parseSchema(numberSchema, 2)).toBe(2);
217
- expect(parseSchema(numberSchema, 5)).toBe(5);
218
- expect(() => parseSchema(numberSchema, 9)).toThrow("The received value is greater than expected");
219
- });
220
- it("should be greater than 5", () => {
221
- const numberSchema = number().custom(minExcluded(5));
222
- expectEqualTypes(true);
223
- expect(parseSchema(numberSchema, 8)).toBe(8);
224
- expect(() => parseSchema(numberSchema, 5)).toThrow("The received value is less than or equal to expected");
225
- expect(() => parseSchema(numberSchema, 4)).toThrow("The received value is less than or equal to expected");
226
- });
227
- it("should be less than 5", () => {
228
- const numberSchema = number().custom(maxExcluded(5));
229
- expectEqualTypes(true);
230
- expect(parseSchema(numberSchema, 2)).toBe(2);
231
- expect(() => parseSchema(numberSchema, 5)).toThrow("The received value is greater than or equal to expected");
232
- expect(() => parseSchema(numberSchema, 9)).toThrow("The received value is greater than or equal to expected");
233
- });
234
- it("should be equal to be positive and equal to 5", () => {
235
- const numberSchema = number().custom(positive()).equalTo(5);
236
- expectEqualTypes(true);
237
- expect(parseSchema(numberSchema, 5)).toBe(5);
238
- expect(() => parseSchema(numberSchema, 4)).toThrow("The received value is not equal to expected");
239
- expect(() => parseSchema(numberSchema, 0)).toThrow("The received value is not a positive number");
240
- expect(() => parseSchema(numberSchema, -1)).toThrow("The received value is not a positive number");
241
- });
242
- it("should be equal to be positive and equal to 5", () => {
243
- const numberSchema = number().custom(negative()).equalTo(-2);
244
- expectEqualTypes(true);
245
- expect(parseSchema(numberSchema, -2)).toBe(-2);
246
- expect(() => parseSchema(numberSchema, -1)).toThrow("The received value is not equal to expected");
247
- expect(() => parseSchema(numberSchema, 0)).toThrow("The received value is not a negative number");
248
- expect(() => parseSchema(numberSchema, 4)).toThrow("The received value is not a negative number");
249
- });
250
- });
251
- //# sourceMappingURL=NumberSchema.test.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../jest/setup.ts","../../src/exceptions.ts","../../src/core.ts","../../src/parseSchema.ts","../../src/asserts/number/max.ts","../../src/asserts/number/maxExcluded.ts","../../src/asserts/number/min.ts","../../src/asserts/number/minExcluded.ts","../../src/asserts/number/positive.ts","../../src/asserts/common/equalTo.ts","../../src/schemas/CommonSchema.ts","../../src/schemas/NumberSchema.ts","../../src/asserts/number/index.ts","../../src/asserts/number/negative.ts","../../src/__tests__/NumberSchema.test.ts"],"sourcesContent":["export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;\n\nexport function expectEqualTypes<X, Y>(areEqual: Equal<X, Y>): void {\n expect(typeof areEqual).toBe('boolean');\n}\n","export class ValidationError extends Error {\n expected: unknown;\n received: unknown;\n pathToError: string;\n message: string;\n constructor(expected: unknown, received: unknown, pathToError: string, message: string) {\n super();\n this.expected = expected;\n this.received = received;\n this.pathToError = pathToError;\n this.message = message;\n }\n}\n\nexport class BuildSchemaError extends Error {}\n\nexport function throwException(expected: unknown, received: unknown, pathToError: string, message: string): never {\n throw new ValidationError(expected, received, pathToError, message);\n}\n","export const ctxSymbol = Symbol('contextSymbol');\n\nimport { throwException } from './exceptions';\nimport type { CommonSchema } from './schemas/CommonSchema';\n\nexport function innerCheck(schema: CommonSchema, receivedValue: unknown, pathToError: string) {\n const ctx = schema[ctxSymbol];\n if (receivedValue === undefined) {\n if (!ctx.isOptional) throwException('Required', receivedValue, pathToError, 'The required value is missing');\n return receivedValue;\n }\n\n if (receivedValue === null) {\n if (!ctx.isNullable) throwException('Not null', receivedValue, pathToError, 'Value should not be null');\n return receivedValue;\n }\n\n if (ctx.array) {\n if (!Array.isArray(receivedValue))\n throwException('Array', receivedValue, pathToError, 'Expected an array but received a different type');\n const schema = ctx.array;\n\n receivedValue.forEach((elem, i) => {\n innerCheck(schema, elem, `${pathToError}[${i}]`);\n });\n\n return receivedValue;\n }\n\n const typeOfVal = typeof receivedValue;\n\n if (ctx.object) {\n if (typeOfVal !== 'object')\n throwException('Object', receivedValue, pathToError, 'Expected an object but received a different type');\n if (Array.isArray(receivedValue))\n throwException(\n 'Object',\n receivedValue,\n pathToError,\n 'Expected an object but received an array. Invalid type of data',\n );\n const shapeSchema = ctx.object;\n for (const keyPerReceivedValue of Object.keys(receivedValue)) {\n if (shapeSchema[keyPerReceivedValue] === undefined)\n throwException('Not allowed', keyPerReceivedValue, pathToError, 'This key is not allowed in the object');\n }\n\n for (const [keyOfSchema, valueOfSchema] of Object.entries(shapeSchema)) {\n const receivedObjectValuePropery = (receivedValue as Record<string, unknown>)[keyOfSchema];\n if (receivedObjectValuePropery === undefined) {\n if (!valueOfSchema[ctxSymbol].isOptional)\n throwException(\n 'Required',\n receivedObjectValuePropery,\n pathToError,\n 'Missing required property in the object',\n );\n }\n innerCheck(valueOfSchema, receivedObjectValuePropery, `${pathToError}.${keyOfSchema}`);\n }\n\n return receivedValue;\n }\n\n if (ctx.type.length) {\n if (!ctx.type.includes(typeOfVal)) throwException(ctx.type, typeOfVal, pathToError, 'Invalid type of data');\n }\n\n ctx.requiredValidations.forEach((requiredValidation) => {\n requiredValidation(receivedValue, pathToError);\n });\n\n return receivedValue;\n}\n","import { InferType } from './InferType';\nimport { innerCheck } from './core';\nimport { ValidationError } from './exceptions';\nimport { CommonSchema } from './schemas/CommonSchema';\n\n/**\n * Parses and validates a value against the provided schema, returning a type-safe result.\n *\n * This function will throw a `ValidationError` if the value does not conform to the schema.\n * The inferred TypeScript type of the returned value will match the structure defined by the schema.\n *\n * @template T\n * @param {T} schema - The schema to validate the received value against. This schema dictates the expected structure and type of the value.\n * @param {unknown} receivedValue - The value to be validated and parsed according to the schema.\n * @returns {InferType<T>} The validated value, with its TypeScript type inferred from the schema.\n *\n * @throws {ValidationError} If the received value does not match the schema, a `ValidationError` will be thrown.\n * @throws {Error} If an unexpected error occurs during validation, an error will be thrown with a generic message.\n *\n * @example\n * const schema = object({\n * name: string(),\n * age: number(),\n * });\n *\n * const result = parseSchema(schema, { name: 'Alice', age: 30 });\n * // result will be inferred as { name: string; age: number }\n *\n * parseSchema(schema, { name: 'Alice', age: '30' });\n * // Throws ValidationError because 'age' should be a number, not a string.\n */\nexport function parseSchema<T extends CommonSchema>(schema: T, receivedValue: unknown): InferType<T> {\n try {\n return innerCheck(schema, receivedValue, '') as InferType<T>;\n } catch (e) {\n if (e instanceof ValidationError) throw e;\n /* istanbul ignore next */\n throw new Error('Something unexpected happened');\n }\n}\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value does not exceed a specified maximum value.\n *\n * @param {number} expected - The maximum allowable value.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value exceeds the expected maximum value.\n *\n * @example\n * const schema = number().custom(max(100));\n * parseSchema(schema, 99); // Valid\n * parseSchema(schema, 100); // Valid\n * parseSchema(schema, 101); // Throws an error: 'The received value is greater than expected'\n */\nexport const max =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected < received)\n throwException(expected, received, pathToError, 'The received value is greater than expected');\n };\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is strictly less than a specified maximum value (i.e., the maximum value is excluded).\n *\n * @param {number} expected - The maximum allowable value, which is excluded.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is greater than or equal to the expected maximum value.\n *\n * @example\n * const schema = number().custom(maxExcluded(100));\n * parseSchema(schema, 99); // Valid\n * parseSchema(schema, 100); // Throws an error: 'The received value is greater than or equal to expected'\n * parseSchema(schema, 101); // Throws an error: 'The received value is greater than or equal to expected'\n */\nexport const maxExcluded =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected <= received)\n throwException(expected, received, pathToError, 'The received value is greater than or equal to expected');\n };\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is not less than a specified minimum value.\n *\n * @param {number} expected - The minimum allowable value.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is less than the expected minimum value.\n *\n * @example\n * const schema = number().custom(min(10));\n * parseSchema(schema, 11); // Valid\n * parseSchema(schema, 10); // Valid\n * parseSchema(schema, 9); // Throws an error: 'The received value is less than expected'\n */\nexport const min =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected > received)\n throwException(expected, received, pathToError, 'The received value is less than expected');\n };\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is strictly greater than a specified minimum value (i.e., the minimum value is excluded).\n *\n * @param {number} expected - The minimum allowable value, which is excluded.\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is less than or equal to the expected minimum value.\n *\n * @example\n * const schema = number().custom(minExcluded(10));\n * parseSchema(schema, 11); // Valid\n * parseSchema(schema, 10); // Throws an error: 'The received value is less than or equal to expected'\n * parseSchema(schema, 9); // Throws an error: 'The received value is less than or equal to expected'\n */\nexport const minExcluded =\n (expected: number): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected >= received)\n throwException(expected, received, pathToError, 'The received value is less than or equal to expected');\n };\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is positive (greater than zero).\n *\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is not positive.\n *\n * @example\n * const schema = number().custom(positive());\n * parseSchema(schema, 10); // Valid\n * parseSchema(schema, 0); // Throws an error: 'The received value is not a positive number'\n * parseSchema(schema, -5); // Throws an error: 'The received value is not a positive number'\n */\nexport const positive = (): RequiredValidation => (received: number, pathToError: string) => {\n if (received <= 0) throwException('positive', received, pathToError, 'The received value is not a positive number');\n};\n","import { throwException } from '../../exceptions';\nimport { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Creates a custom assertion that checks if a value is equal to the expected value.\n *\n * This assertion can be used within a `.custom` method to enforce that a value strictly matches the expected value.\n * It will throw a `ValidationError` if the values are not equal.\n *\n * @param {unknown} expected - The value that the received value is expected to match.\n * @returns {RequiredValidation} A function that takes the received value and the path to the error,\n * and throws a `ValidationError` if the received value does not equal the expected value.\n *\n * @throws {ValidationError} If the received value does not match the expected value.\n *\n * @example\n * import { number, equalTo } from 'bguard';\n *\n * // Define a schema with a custom assertion\n * const schema = number().custom(equalTo(5));\n *\n * // This will pass\n * parseSchema(schema, 5);\n *\n * // This will throw a ValidationError\n * parseSchema(schema, 3);\n */\nexport const equalTo =\n (expected: unknown): RequiredValidation =>\n (received: number, pathToError: string) => {\n if (expected !== received)\n throwException(expected, received, pathToError, 'The received value is not equal to expected');\n };\n","import { ctxSymbol } from '../core';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type RequiredValidation = (received: any, pathToError: string) => void;\nexport type ObjectShapeSchemaType = Record<string, CommonSchema>;\n\nexport type PrimitiveType = 'number' | 'string' | 'boolean' | 'undefined' | 'object' | 'function' | 'symbol' | 'bigint';\nexport interface ValidatorContext {\n type: PrimitiveType[];\n isNullable?: boolean;\n isOptional?: boolean;\n requiredValidations: RequiredValidation[];\n array?: CommonSchema;\n object?: ObjectShapeSchemaType;\n}\n\nexport class CommonSchema {\n [ctxSymbol]: ValidatorContext;\n constructor(ctx: ValidatorContext) {\n this[ctxSymbol] = ctx;\n }\n\n /**\n * @param validators - One or more custom validation functions.\n * @returns {this} The schema instance with the added custom validation.\n */\n custom(...validators: RequiredValidation[]): this {\n this[ctxSymbol].requiredValidations.push(...validators);\n return this;\n }\n\n /**\n * Marks the schema as nullable, allowing the value to be `null`.\n *\n * @returns {WithNull<this>} The schema instance marked as nullable.\n */\n nullable(): WithNull<this> {\n this[ctxSymbol].isNullable = true;\n return this as WithNull<this>;\n }\n\n /**\n * Marks the schema as optional, allowing the value to be `undefined`.\n *\n * @returns {WithUndefined<this>}} The schema instance marked as optional.\n */\n optional(): WithUndefined<this> {\n this[ctxSymbol].isOptional = true;\n return this as WithUndefined<this>;\n }\n}\n\nexport type WithNull<T extends CommonSchema> = T & { validation_null: true };\nexport type WithUndefined<T extends CommonSchema> = T & { validation_undefined: true };\n\ntype TypeMapping = {\n number: number;\n string: string;\n boolean: boolean;\n undefined: undefined;\n object: object;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n function: Function;\n symbol: symbol;\n bigint: bigint;\n};\n\nexport type WithMix<Y = unknown> = CommonSchema & { validation_mix: Y };\nexport type ExtractFromMix<T> = T extends WithMix<infer X> ? X : never;\n\nexport type MapMixTypes<T extends PrimitiveType[]> = T extends (infer U)[]\n ? U extends keyof TypeMapping\n ? TypeMapping[U]\n : never\n : never;\n","import { equalTo } from '../asserts/common/equalTo';\n\nimport { CommonSchema } from './CommonSchema';\n\nexport class NumberSchema extends CommonSchema {\n _number = 1;\n\n /**\n * Restricts the schema to exactly match the specified value and infers the literal value as the TypeScript type.\n *\n * @param expectedValue - The value that the schema must exactly match.\n * @returns - The schema instance restricted to the specified value, with the literal value inferred as the TypeScript type\n *\n * @example - number().equalTo(42); // Infers the type 42\n */\n equalTo<Y extends number>(expectedValue: Y): WithNumber<this, Y> {\n return this.custom(equalTo(expectedValue)) as WithNumber<this, Y>;\n }\n}\n\nexport type WithNumber<T extends NumberSchema, Y = number> = T & { validation_number: Y };\nexport type ExtractFromNumber<T> = T extends WithNumber<NumberSchema, infer Y> ? Y : never;\n","import { NumberSchema } from '../../schemas/NumberSchema';\n\n/**\n * Creates a new schema for validating number values.\n *\n * @returns {NumberSchema} A new instance of `NumberSchema` for validating numbers.\n *\n * @example\n * const schema = number();\n * parseSchema(schema, 42); // Validates successfully\n * parseSchema(schema, '42'); // Throws a validation error\n */\nexport function number(): NumberSchema {\n return new NumberSchema({ type: ['number'], requiredValidations: [] });\n}\n","import { throwException } from '../../exceptions';\nimport type { RequiredValidation } from '../../schemas/CommonSchema';\n\n/**\n * Asserts that a number value is negative (less than zero).\n *\n * @returns {RequiredValidation} - A validation function that takes a received number and a path to the error message. Throws an error if the received value is not negative.\n *\n * @example\n * const schema = number().custom(negative());\n * parseSchema(schema, -10); // Valid\n * parseSchema(schema, 0); // Throws an error: 'The received value is not a negative number'\n * parseSchema(schema, 5); // Throws an error: 'The received value is not a negative number'\n */\nexport const negative = (): RequiredValidation => (received: number, pathToError: string) => {\n if (received >= 0) throwException('negative', received, pathToError, 'The received value is not a negative number');\n};\n","import { expectEqualTypes } from '../../jest/setup';\nimport { parseSchema } from '../parseSchema';\nimport { max } from '../asserts/number/max';\nimport { maxExcluded } from '../asserts/number/maxExcluded';\nimport { min } from '../asserts/number/min';\nimport { minExcluded } from '../asserts/number/minExcluded';\nimport { positive } from '../asserts/number/positive';\nimport { InferType } from '../';\nimport { number } from '../asserts/number';\nimport { negative } from '../asserts/number/negative';\n\ndescribe('NumberSchema', () => {\n it('should be a number', () => {\n const numberSchema = number();\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n const actualNumber: number = 8;\n const parsedValue = parseSchema(numberSchema, actualNumber);\n\n expectEqualTypes<typeof actualNumber, InferType<typeof numberSchema>>(true);\n expectEqualTypes<typeof actualNumber, typeof parsedValue>(true);\n expect(parsedValue).toBe(actualNumber);\n });\n\n it('should not be a number', () => {\n const numberSchema = number();\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n const actualNotNumber: string = '9';\n expectEqualTypes<typeof actualNotNumber, InferType<typeof numberSchema>>(false);\n expect(() => parseSchema(numberSchema, actualNotNumber)).toThrow('Invalid type of data');\n });\n\n it('should be greater than or equal to 5', () => {\n const numberSchema = number().custom(min(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 8)).toBe(8);\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is less than expected');\n });\n\n it('should be less than or equal to 5', () => {\n const numberSchema = number().custom(max(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 2)).toBe(2);\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 9)).toThrow('The received value is greater than expected');\n });\n\n it('should be greater than 5', () => {\n const numberSchema = number().custom(minExcluded(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 8)).toBe(8);\n expect(() => parseSchema(numberSchema, 5)).toThrow('The received value is less than or equal to expected');\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is less than or equal to expected');\n });\n\n it('should be less than 5', () => {\n const numberSchema = number().custom(maxExcluded(5));\n expectEqualTypes<number, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 2)).toBe(2);\n expect(() => parseSchema(numberSchema, 5)).toThrow('The received value is greater than or equal to expected');\n expect(() => parseSchema(numberSchema, 9)).toThrow('The received value is greater than or equal to expected');\n });\n\n it('should be equal to be positive and equal to 5', () => {\n const numberSchema = number().custom(positive()).equalTo(5);\n expectEqualTypes<5, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, 5)).toBe(5);\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is not equal to expected');\n expect(() => parseSchema(numberSchema, 0)).toThrow('The received value is not a positive number');\n expect(() => parseSchema(numberSchema, -1)).toThrow('The received value is not a positive number');\n });\n\n it('should be equal to be positive and equal to 5', () => {\n const numberSchema = number().custom(negative()).equalTo(-2);\n expectEqualTypes<-2, InferType<typeof numberSchema>>(true);\n\n expect(parseSchema(numberSchema, -2)).toBe(-2);\n expect(() => parseSchema(numberSchema, -1)).toThrow('The received value is not equal to expected');\n expect(() => parseSchema(numberSchema, 0)).toThrow('The received value is not a negative number');\n expect(() => parseSchema(numberSchema, 4)).toThrow('The received value is not a negative number');\n });\n});\n"],"mappings":"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","names":["schema"]}
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1,2 +0,0 @@
1
-
2
- export { }