{"version":3,"sources":["../../../src/schema/utils/validation-utils.ts"],"sourcesContent":["import CollectionNode from '../../parser/nodes/collections';\r\nimport ObjectNode from '../../parser/nodes/objects';\r\nimport TokenNode from '../../parser/nodes/tokens';\r\nimport Schema from '../schema';\r\nimport IOError from '../../errors/io-error';\r\nimport ErrorCodes from '../../errors/io-error-codes';\r\n\r\nexport class ValidationUtils {\r\n  static isValidDataNode(data: unknown): data is ObjectNode | CollectionNode {\r\n    return data instanceof ObjectNode || data instanceof CollectionNode;\r\n  }\r\n\r\n  static isValidSchema(schema: unknown): schema is Schema | TokenNode {\r\n    return schema instanceof Schema || schema instanceof TokenNode;\r\n  }\r\n\r\n  static validateProcessingInputs(\r\n    data: unknown,\r\n    schema: unknown\r\n  ): { data: ObjectNode | CollectionNode; schema: Schema | TokenNode } {\r\n    if (!ValidationUtils.isValidDataNode(data)) {\r\n      const hasCtorName = (data as any)?.constructor?.name;\r\n      const typeName = data === null ? 'null'\r\n        : data === undefined ? 'undefined'\r\n        : hasCtorName === undefined ? 'undefined'\r\n        : hasCtorName || 'unknown';\r\n      throw new IOError(ErrorCodes.invalidType, `Invalid data node type: ${typeName}`);\r\n    }\r\n\r\n    if (!ValidationUtils.isValidSchema(schema)) {\r\n      const hasCtorName = (schema as any)?.constructor?.name;\r\n      const typeName = schema === null ? 'null'\r\n        : schema === undefined ? 'undefined'\r\n        : hasCtorName === undefined ? 'undefined'\r\n        : hasCtorName || 'unknown';\r\n      throw new IOError(ErrorCodes.invalidSchema, `Invalid schema type: ${typeName}`);\r\n    }\r\n\r\n    return { data: data as ObjectNode | CollectionNode, schema: schema as Schema | TokenNode };\r\n  }\r\n}\r\n\r\nexport class ProcessingResult<T> {\r\n  public readonly success: boolean;\r\n  public readonly data?: T;\r\n  public readonly error?: Error;\r\n\r\n  private constructor(success: boolean, data?: T, error?: Error) {\r\n    this.success = success;\r\n    this.data = data;\r\n    this.error = error;\r\n    Object.freeze(this); // ensure immutability at runtime\r\n  }\r\n\r\n  static success<T>(data: T): ProcessingResult<T> {\r\n    return new ProcessingResult<T>(true, data);\r\n  }\r\n\r\n  static failure<T>(error: Error): ProcessingResult<T> {\r\n    return new ProcessingResult<T>(false, undefined, error);\r\n  }\r\n\r\n  isSuccess(): this is ProcessingResult<T> & { data: T } {\r\n    return this.success;\r\n  }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAC3B,qBAAuB;AACvB,oBAAsB;AACtB,oBAAmB;AACnB,sBAAoB;AACpB,4BAAuB;AAEhB,MAAM,gBAAgB;AAAA,EAC3B,OAAO,gBAAgB,MAAoD;AACzE,WAAO,gBAAgB,eAAAA,WAAc,gBAAgB,mBAAAC;AAAA,EACvD;AAAA,EAEA,OAAO,cAAc,QAA+C;AAClE,WAAO,kBAAkB,cAAAC,WAAU,kBAAkB,cAAAC;AAAA,EACvD;AAAA,EAEA,OAAO,yBACL,MACA,QACmE;AACnE,QAAI,CAAC,gBAAgB,gBAAgB,IAAI,GAAG;AAC1C,YAAM,cAAe,MAAc,aAAa;AAChD,YAAM,WAAW,SAAS,OAAO,SAC7B,SAAS,SAAY,cACrB,gBAAgB,SAAY,cAC5B,eAAe;AACnB,YAAM,IAAI,gBAAAC,QAAQ,sBAAAC,QAAW,aAAa,2BAA2B,QAAQ,EAAE;AAAA,IACjF;AAEA,QAAI,CAAC,gBAAgB,cAAc,MAAM,GAAG;AAC1C,YAAM,cAAe,QAAgB,aAAa;AAClD,YAAM,WAAW,WAAW,OAAO,SAC/B,WAAW,SAAY,cACvB,gBAAgB,SAAY,cAC5B,eAAe;AACnB,YAAM,IAAI,gBAAAD,QAAQ,sBAAAC,QAAW,eAAe,wBAAwB,QAAQ,EAAE;AAAA,IAChF;AAEA,WAAO,EAAE,MAA2C,OAAqC;AAAA,EAC3F;AACF;AAEO,MAAM,iBAAoB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,SAAkB,MAAU,OAAe;AAC7D,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,WAAO,OAAO,IAAI;AAAA,EACpB;AAAA,EAEA,OAAO,QAAW,MAA8B;AAC9C,WAAO,IAAI,iBAAoB,MAAM,IAAI;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAW,OAAmC;AACnD,WAAO,IAAI,iBAAoB,OAAO,QAAW,KAAK;AAAA,EACxD;AAAA,EAEA,YAAuD;AACrD,WAAO,KAAK;AAAA,EACd;AACF;","names":["ObjectNode","CollectionNode","Schema","TokenNode","IOError","ErrorCodes"]}