{"version":3,"sources":["../../../src/schema/types/bigint.ts"],"sourcesContent":["import Definitions from '../../core/definitions'\r\nimport ErrorCodes from '../../errors/io-error-codes'\r\nimport ValidationError from '../../errors/io-validation-error'\r\nimport Node from '../../parser/nodes/nodes'\r\nimport Schema from '../../schema/schema'\r\nimport TypeDef from '../../schema/typedef'\r\nimport doCommonTypeCheck from './common-type'\r\nimport MemberDef from './memberdef'\r\nimport { NUMBER_TYPES, NUMBER_MAP, throwError } from './common-number'\r\n\r\nconst bigintSchema = new Schema(\r\n  \"bigint\",\r\n  { type:       { type: \"string\", optional: false, null: false, choices: NUMBER_TYPES } },\r\n  { default:    { type: \"bigint\", optional: true,  null: false  } },\r\n  { choices:    { type: \"array\",  optional: true,  null: false, of: { type: \"bigint\" } } },\r\n  { min:        { type: \"bigint\", optional: true,  null: false } },\r\n  { max:        { type: \"bigint\", optional: true,  null: false } },\r\n  { multipleOf: { type: \"bigint\", optional: true,  null: false } },\r\n  { format:     { type: \"string\", optional: true,  null: false, choices: [\"decimal\", \"hex\", \"octal\", \"binary\"], default:\"decimal\" } },\r\n  { optional:   { type: \"bool\",   optional: true } },\r\n  { null:       { type: \"bool\",   optional: true } },\r\n)\r\n\r\n/**\r\n * BigInt type definition\r\n *\r\n * @internal\r\n */\r\nclass BigIntDef implements TypeDef {\r\n  private _type: string = 'bigint'\r\n\r\n  get type(): string { return this._type }\r\n  get schema(): Schema { return bigintSchema }\r\n\r\n  parse(node: Node, memberDef: MemberDef, defs?: Definitions): bigint {\r\n    const valueNode = defs?.getV(node) || node\r\n    const rawValue = typeof (valueNode as any)?.toValue === 'function' ? (valueNode as any).toValue(defs) : valueNode\r\n    let { value, changed } = doCommonTypeCheck(memberDef, valueNode, node, defs)\r\n    if (changed) return value\r\n\r\n    value = this.validate(memberDef, value, node)\r\n\r\n    return value\r\n  }\r\n\r\n  load(value: any, memberDef: MemberDef, defs?: Definitions): bigint {\r\n    const { value: checkedValue, changed } = doCommonTypeCheck(memberDef, value)\r\n    if (changed) return checkedValue\r\n\r\n    return this.validate(memberDef, value)\r\n  }\r\n\r\n  stringify(value: any, memberDef: MemberDef): string {\r\n    // Validate before stringifying\r\n    this.validate(memberDef, value)\r\n\r\n    if (memberDef.format === 'hex') { return value.toString(16) }\r\n    if (memberDef.format === 'octal') { return value.toString(8) }\r\n    if (memberDef.format === 'binary') { return value.toString(2) }\r\n    return value.toString()\r\n  }\r\n\r\n  /**\r\n   * Validates bigint value\r\n   */\r\n  validate(memberDef: MemberDef, value: any, node?: Node): bigint {\r\n    const valueType = typeof value === \"bigint\" ? \"bigint\" : NUMBER_MAP[typeof value] ? \"number\" : \"\"\r\n\r\n    if (valueType === \"\") {\r\n      throw new ValidationError(\r\n        ErrorCodes.invalidType,\r\n        `Expecting a value of type '${memberDef.type}' for '${memberDef.path}'`,\r\n        node\r\n      )\r\n    }\r\n\r\n    if (valueType !== \"bigint\") {\r\n      throw new ValidationError(\r\n        `not-a-${memberDef.type}`,\r\n        `Invalid value encountered for '${memberDef.path}'`,\r\n        node\r\n      )\r\n    }\r\n\r\n    const { min, max, multipleOf } = memberDef\r\n\r\n    if ((min !== undefined && min !== null && value < min) ||\r\n        (max !== undefined && max !== null && value > max)) {\r\n      throwError(ErrorCodes.invalidRange, memberDef.path!, value, node)\r\n    }\r\n\r\n    // Validate multipleOf constraint\r\n    if (multipleOf !== undefined && multipleOf !== null) {\r\n      const remainder = value % BigInt(multipleOf)\r\n      if (remainder !== 0n) {\r\n        throw new ValidationError(\r\n          ErrorCodes.invalidValue,\r\n          `The value ${value} for '${memberDef.path}' must be a multiple of ${multipleOf}`,\r\n          node\r\n        )\r\n      }\r\n    }\r\n\r\n    return value\r\n  }\r\n}\r\n\r\nexport default BigIntDef\r\n"],"mappings":"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","names":["Schema","doCommonTypeCheck","ValidationError","ErrorCodes"]}