UNPKG

mic-inspector

Version:

A react inspector which a most similar of Chorme DevTools inspector

145 lines (144 loc) 6.12 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useArrayInfo = exports.renderObjectSubs = exports.objectSubsFilter = exports.getObjectName = exports.arraylikeMethodNames = exports.Node = exports.Object = void 0; var react_1 = __importStar(require("react")); var types_1 = require("../named-descriptor/types"); var property_1 = require("../property"); var types_2 = require("./types"); var locale_1 = require("../named-descriptor/locale"); var locale_2 = require("../property-value/locale"); exports.Object = window.Object, exports.Node = window.Node; exports.arraylikeMethodNames = __spreadArrays((!window.Symbol ? [] : [Symbol.iterator]), ['entries', 'forEach', 'item', 'keys', 'splice', 'values']); /** * Returns a string represents object name * @param value An object * @param isNode A boolean represents whether the object is a node */ exports.getObjectName = function (value, isNode) { // if the object is a node if (isNode) { try { var nodeName = value.nodeName.toLocaleLowerCase(); return nodeName[0] === '#' ? nodeName.substring(1) : nodeName; } catch (e) { } } var constructor = value === null || value === void 0 ? void 0 : value.constructor; return constructor === exports.Object && value !== exports.Object.prototype ? '' : constructor === null || constructor === void 0 ? void 0 : constructor.name; }; /** * A method to fitler object subs * @param param0 A descriptor of the object * @param arraylike A boolean represents whether the object is an array */ exports.objectSubsFilter = function (_a, arraylike) { var get = _a.get, set = _a.set, nameType = _a.nameType, valueType = _a.valueType, value = _a.value, enumerable = _a.enumerable; // if the object is an array if (arraylike) { return (nameType & types_1.DescriptorNameType.Index) === types_1.DescriptorNameType.Index; } // if the accessors existed if (get || set) { return false; } switch (true) { case (valueType & types_1.DescriptorValueType.Normal) === types_1.DescriptorValueType.Normal: case (valueType & types_1.DescriptorValueType.Result) === types_1.DescriptorValueType.Result: break; default: return false; } return !locale_2.isObjectOrFunction(value) || enumerable; }; /** * A method to render object subs * @param object The object value * @param arraylike A boolean represents whether the object is an array * @param maxPropertyLength A number represents the length of object properties to preview */ exports.renderObjectSubs = function (object, arraylike, maxPropertyLength) { if (maxPropertyLength === void 0) { maxPropertyLength = 5; } var objectSubs = []; // for each descriptors for (var _i = 0, _a = locale_1.getNamedDescriptors(object); _i < _a.length; _i++) { var descriptor = _a[_i]; var length_1 = objectSubs.length; // if the length is greater than maxPropertyLength * 2 if (length_1 >= maxPropertyLength * 2) { break; } // if descriptor has filtered if (!exports.objectSubsFilter(descriptor, arraylike)) { continue; } objectSubs.push(react_1.default.createElement(property_1.Property, { key: length_1, descriptor: descriptor, preview: true }), react_1.default.createElement("i", { key: length_1 + 1, "data-separator": types_2.ObjectValueSeparator.Comma }, ",")); } // if the length of subs is less than maxPropertyLength * 2 if (objectSubs.length < maxPropertyLength * 2) { // remove the last one that the comma element objectSubs.splice(objectSubs.length - 1, 1); } else { objectSubs.push(react_1.default.createElement("i", { key: objectSubs.length + 1, "data-separator": types_2.ObjectValueSeparator.Spread }, "...")); } return objectSubs; }; /** * Get the array info * @param value An object that maybe is an array */ exports.useArrayInfo = function (value) { return react_1.useMemo(function () { tryBlock: try { // if the object is an array if (Array.isArray(value)) { break tryBlock; } // the the length property in the object if ('length' in value) { // for each array method names for (var _i = 0, _a = exports.arraylikeMethodNames; _i < _a.length; _i++) { var name_1 = _a[_i]; // if this method is a function if (typeof value[name_1] === 'function') { break tryBlock; } } } return [false, 0]; } catch (e) { } var length = 0; try { length = value.length; } catch (e) { } return [true, length]; }, [value]); };