@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 17.8 kB
Source Map (JSON)
{"version":3,"file":"type.mjs","sources":["../../../src/tools/type.ts"],"sourcesContent":["const OBJECT_CONSTRUCTOR_STRING = Function.prototype.toString.call(Object)\n\ninterface BlobLike {\n readonly size: number\n readonly type: string\n slice(start?: number, end?: number, contentType?: string): Blob\n}\n\ninterface FileLike extends BlobLike {\n name: string\n lastModified?: number\n lastModifiedDate?: object\n}\n\n/**\n * The `Type` class is designed to check and determine data types\n *\n * @see bitrix/js/main/core/src/lib/type.js\n */\nclass TypeManager {\n getTag(value: any): string {\n return Object.prototype.toString.call(value)\n }\n\n /**\n * Checks that value is string\n * @param value\n * @return {boolean}\n *\n * @memo get from pull.client.Utils\n */\n isString(value: any): value is string {\n return typeof value === 'string' || value instanceof String\n }\n\n /**\n * Returns true if a value is not an empty string\n * @param value\n * @returns {boolean} Returns true if a value is not an empty string\n */\n isStringFilled(value: any): value is string {\n return this.isString(value) && value !== ''\n }\n\n /**\n * Checks that value is function\n * @param value\n * @return {boolean}\n *\n * @memo get from pull.client.Utils\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n isFunction(value: any): value is Function {\n return value === null\n ? false\n : typeof value === 'function' || value instanceof Function\n }\n\n /**\n * Checks that value is an object\n * @param value\n * @return {boolean}\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n isObject(value: any): value is object | Function {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n }\n\n /**\n * Checks that value is object like\n * @param value\n * @return {boolean}\n */\n isObjectLike<T>(value: any): value is T {\n return !!value && typeof value === 'object'\n }\n\n /**\n * Checks that value is plain object\n * @param value\n * @return {boolean}\n */\n isPlainObject(value: any): value is Record<string | number, any> {\n if (!this.isObjectLike(value) || this.getTag(value) !== '[object Object]') {\n return false\n }\n\n const proto = Object.getPrototypeOf(value)\n if (proto === null) {\n return true\n }\n\n const ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor\n\n return (\n typeof ctor === 'function'\n && Function.prototype.toString.call(ctor) === OBJECT_CONSTRUCTOR_STRING\n )\n }\n\n isJsonRpcRequest(value: any): boolean {\n return (\n typeof value === 'object'\n && value\n && 'jsonrpc' in value\n && this.isStringFilled(value.jsonrpc)\n && 'method' in value\n && this.isStringFilled(value.method)\n )\n }\n\n isJsonRpcResponse(value: any): boolean {\n return (\n typeof value === 'object'\n && value\n && 'jsonrpc' in value\n && this.isStringFilled(value.jsonrpc)\n && 'id' in value\n && ('result' in value || 'error' in value)\n )\n }\n\n /**\n * Checks that value is boolean\n * @param value\n * @return {boolean}\n */\n isBoolean(value: any): value is boolean {\n return value === true || value === false\n }\n\n /**\n * Checks that value is number\n * @param value\n * @return {boolean}\n */\n isNumber(value: any): value is number {\n return typeof value === 'number' && !Number.isNaN(value)\n }\n\n /**\n * Checks that value is integer\n * @param value\n * @return {boolean}\n */\n isInteger(value: any): value is number {\n return Number.isInteger(value)\n }\n\n /**\n * Checks that value is float\n * @param value\n * @return {boolean}\n */\n isFloat(value: any): value is number {\n return this.isNumber(value) && !this.isInteger(value)\n }\n\n /**\n * Checks that value is nil\n * @param value\n * @return {boolean}\n */\n isNil(value: any): value is null | undefined {\n return value === null || value === undefined\n }\n\n /**\n * Checks that value is an array\n * @param value\n * @return {boolean}\n */\n isArray(value: any): value is any[] {\n return !this.isNil(value) && Array.isArray(value)\n }\n\n /**\n * Returns true if a value is an array, and it has at least one element\n * @param value\n * @returns {boolean} Returns true if a value is an array, and it has at least one element\n */\n isArrayFilled(value: any): value is any[] {\n return this.isArray(value) && value.length > 0\n }\n\n /**\n * Checks that value is array like\n * @param value\n * @return {boolean}\n */\n isArrayLike(value: any): value is ArrayLike<any> {\n return (\n !this.isNil(value)\n && !this.isFunction(value)\n && value.length > -1\n && value.length <= Number.MAX_SAFE_INTEGER\n )\n }\n\n /**\n * Checks that value is Date\n * @param value\n * @return {boolean}\n */\n isDate(value: any): value is Date {\n return value instanceof Date\n }\n\n /**\n * Checks that is a DOM node\n * @param value\n * @return {boolean}\n */\n isDomNode(value: any): value is Node {\n return (\n this.isObjectLike<{\n nodeType?: any\n }>(value)\n && !this.isPlainObject(value)\n && 'nodeType' in value\n )\n }\n\n /**\n * Checks that value is element node\n * @param value\n * @return {boolean}\n */\n isElementNode(value: any): value is HTMLElement {\n return this.isDomNode(value) && value.nodeType === Node.ELEMENT_NODE\n }\n\n /**\n * Checks that value is a text node\n * @param value\n * @return {boolean}\n */\n isTextNode(value: any): value is Text {\n return this.isDomNode(value) && value.nodeType === Node.TEXT_NODE\n }\n\n /**\n * Checks that value is Map\n * @param value\n * @return {boolean}\n */\n isMap(value: any): value is Map<unknown, unknown> {\n return this.isObjectLike(value) && this.getTag(value) === '[object Map]'\n }\n\n /**\n * Checks that value is Set\n * @param value\n * @return {boolean}\n */\n isSet(value: any): value is Set<unknown> {\n return this.isObjectLike(value) && this.getTag(value) === '[object Set]'\n }\n\n /**\n * Checks that value is WeakMap\n * @param value\n * @return {boolean}\n */\n isWeakMap(value: any): value is WeakMap<object, unknown> {\n return this.isObjectLike(value) && this.getTag(value) === '[object WeakMap]'\n }\n\n /**\n * Checks that value is WeakSet\n * @param value\n * @return {boolean}\n */\n isWeakSet(value: any): value is WeakSet<object> {\n return this.isObjectLike(value) && this.getTag(value) === '[object WeakSet]'\n }\n\n /**\n * Checks that value is prototype\n * @param value\n * @return {boolean}\n */\n isPrototype(value: any): value is object {\n return (\n (\n (\n typeof (value && value.constructor) === 'function'\n && value.constructor.prototype\n ) || Object.prototype\n ) === value\n )\n }\n\n /**\n * Checks that value is regexp\n * @param value\n * @return {boolean}\n */\n isRegExp(value: any): value is RegExp {\n return this.isObjectLike(value) && this.getTag(value) === '[object RegExp]'\n }\n\n /**\n * Checks that value is null\n * @param value\n * @return {boolean}\n */\n isNull(value: any): value is null {\n return value === null\n }\n\n /**\n * Checks that value is undefined\n * @param value\n * @return {boolean}\n */\n isUndefined(value: any): value is undefined {\n return typeof value === 'undefined'\n }\n\n /**\n * Checks that value is ArrayBuffer\n * @param value\n * @return {boolean}\n */\n isArrayBuffer(value: any): value is ArrayBuffer {\n return (\n this.isObjectLike(value) && this.getTag(value) === '[object ArrayBuffer]'\n )\n }\n\n /**\n * Checks that value is typed array\n * @param value\n * @return {boolean}\n */\n isTypedArray(value: any): value is\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array {\n const regExpTypedTag\n = /^\\[object (?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)\\]$/\n return this.isObjectLike(value) && regExpTypedTag.test(this.getTag(value))\n }\n\n /**\n * Checks that value is Blob\n * @param value\n * @return {boolean}\n */\n isBlob(value: any): value is BlobLike {\n return (\n this.isObjectLike(value)\n && this.isNumber((value as BlobLike).size)\n && this.isString((value as BlobLike).type)\n && this.isFunction((value as BlobLike).slice)\n )\n }\n\n /**\n * Checks that value is File\n * @param value\n * @return {boolean}\n */\n isFile(value: any): value is FileLike {\n return (\n this.isBlob(value)\n && this.isString((value as FileLike).name)\n && (this.isNumber((value as FileLike).lastModified) || this.isObjectLike((value as FileLike).lastModifiedDate))\n )\n }\n\n /**\n * Checks that value is FormData\n * @param value\n * @return {boolean}\n */\n isFormData(value: any): value is FormData {\n if (typeof FormData !== 'undefined' && value instanceof FormData) {\n return true\n }\n\n return this.isObjectLike(value) && this.getTag(value) === '[object FormData]'\n }\n\n clone(obj: any, bCopyObj: boolean = true): any {\n let _obj, i, l\n\n if (this.isNil(obj) || typeof obj !== 'object') {\n return obj\n }\n\n if (this.isDomNode(obj)) {\n _obj = obj.cloneNode(bCopyObj)\n } else if (typeof obj == 'object') {\n if (this.isArray(obj)) {\n _obj = []\n for (i = 0, l = obj.length; i < l; i++) {\n if (typeof obj[i] == 'object' && bCopyObj) {\n _obj[i] = this.clone(obj[i], bCopyObj)\n } else {\n _obj[i] = obj[i]\n }\n }\n } else {\n _obj = {}\n if (obj.constructor) {\n if (this.isDate(obj)) {\n _obj = new Date(obj)\n } else {\n _obj = new obj.constructor()\n }\n }\n\n for (i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n continue\n }\n if (typeof obj[i] === 'object' && bCopyObj) {\n _obj[i] = this.clone(obj[i], bCopyObj)\n } else {\n _obj[i] = obj[i]\n }\n }\n }\n } else {\n _obj = obj\n }\n\n return _obj\n }\n}\n\nexport const Type = new TypeManager()\n"],"names":[],"mappings":"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"}