mic-inspector
Version:
A react inspector which a most similar of Chorme DevTools inspector
145 lines (144 loc) • 6.12 kB
JavaScript
;
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]);
};