@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 7.28 kB
Source Map (JSON)
{"version":3,"file":"result.mjs","sources":["../../../src/core/result.ts"],"sourcesContent":["import { Text } from '../tools/text'\n\n/**\n * Interface defining the structure and methods of a Result object.\n */\nexport interface IResult<T = any> {\n /**\n * Indicates whether the operation resulted in success (no errors).\n */\n readonly isSuccess: boolean\n /**\n * Collection of errors\n */\n readonly errors: Map<string, Error>\n\n /**\n * Sets the data associated with the result.\n *\n * @param data The data to be stored in the result.\n * @returns The current Result object for chaining methods.\n */\n setData: (data: T) => IResult<T>\n /**\n * Retrieves the data associated with the result.\n *\n * @returns The data stored in the result, if any.\n */\n getData: () => T | null | undefined\n\n /**\n * Adds an error message or Error object to the result.\n * @param error The error message or Error object to be added.\n * @param key Error key. You can leave it blank. Then it will be generated automatically.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addError: (error: Error | string, key?: string) => IResult\n /**\n * Adds multiple errors to the result in a single call.\n *\n * @param errors An array of errors or strings that will be converted to errors.\n * @returns {IResult} The current Result object for chaining methods.\n */\n addErrors: (errors: (Error | string)[]) => IResult\n /**\n * Retrieves an iterator for the errors collected in the result.\n *\n * @returns {IterableIterator<Error>} An iterator over the stored Error objects.\n */\n getErrors: () => IterableIterator<Error>\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns {string[]} An array of strings representing the error messages.\n */\n getErrorMessages: () => string[]\n /**\n * Checks for an error in a collection by key\n * @param key - Error key\n */\n hasError(key: string): boolean\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString: () => string\n}\n\n/**\n * A class representing an operation result with success/failure status, data, and errors.\n * Similar to \\Bitrix\\Main\\Result from Bitrix Framework.\n * @link https://dev.1c-bitrix.ru/api_d7/bitrix/main/result/index.php\n */\nexport class Result<T = any> implements IResult<T> {\n protected _errors: Map<string, Error>\n protected _data: T | null | undefined\n\n constructor(data?: T) {\n this._errors = new Map()\n this._data = data ?? null\n }\n\n get isSuccess(): boolean {\n return this._errors.size === 0\n }\n\n get errors(): Map<string, Error> {\n return this._errors\n }\n\n setData(data: T | null | undefined): Result<T> {\n this._data = data\n\n return this\n }\n\n getData(): T | null | undefined {\n return this._data\n }\n\n addError(error: Error | string, key?: string): Result<T> {\n const errorKey = key ?? Text.getUuidRfc4122()\n const errorObj = typeof error === 'string' ? new Error(error) : error\n\n this._errors.set(errorKey, errorObj)\n\n return this\n }\n\n addErrors(errors: (Error | string)[]): Result<T> {\n for (const error of errors) {\n this.addError(error)\n }\n\n return this\n }\n\n getErrors(): IterableIterator<Error> {\n return this._errors.values()\n }\n\n hasError(key: string): boolean {\n return this._errors.has(key)\n }\n\n /**\n * Retrieves an array of error messages from the collected errors.\n *\n * @returns An array of strings representing the error messages. Each string\n * contains the message of a corresponding error object.\n */\n getErrorMessages(): string[] {\n return Array.from(this._errors.values(), e => e.message)\n }\n\n /**\n * Converts the Result object to a string.\n *\n * @returns {string} Returns a string representation of the result operation\n */\n toString(): string {\n const status = this.isSuccess ? 'success' : 'failure'\n const data = this.safeStringify(this._data)\n\n return this.isSuccess\n ? `Result(${status}): ${data}`\n : `Result(${status}): ${data}\\nErrors: ${this.getErrorMessages().join(', ')}`\n }\n\n private safeStringify(data: unknown): string {\n try {\n return JSON.stringify(data, this.replacer, 2)\n } catch {\n return '[Unable to serialize data]'\n }\n }\n\n private replacer(_: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack\n }\n }\n return value\n }\n\n // Static constructors\n static ok<U>(data?: U): Result<U> {\n return new Result<U>(data)\n }\n\n static fail<U>(error: Error | string, key?: string): Result<U> {\n return new Result<U>().addError(error, key)\n }\n}\n"],"names":[],"mappings":"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"}