{"record":{"id":"360fa6d0b448e113","repo":"dianping/cat","slug":"property-description-must-be-an-object-descripto","errorCode":null,"errorMessage":"Property description must be an object: {descriptor}","messagePattern":"Property description must be an object: (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"cat-home/src/main/webapp/assets/js/editor/worker-xquery.js","lineNumber":49331,"sourceCode":"    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;","sourceCodeStart":49313,"sourceCodeEnd":49349,"githubUrl":"https://github.com/dianping/cat/blob/e815e74d4c2dd74edac831241f1253fcc7d25381/cat-home/src/main/webapp/assets/js/editor/worker-xquery.js#L49313-L49349","documentation":"es5-shim's Object.defineProperty fallback validates the third argument (the property descriptor) and throws this TypeError when it is not an object. A descriptor must be an object like {value: x}, {get: fn}, or {set: fn}; primitives, null, and undefined are rejected per the ES5 spec. The shim appends the offending value to the message, which helps identify what was actually passed.","triggerScenarios":"Object.defineProperty(obj, 'p', null); Object.defineProperty(obj, 'p', 'value'); Object.defineProperty(obj, 'p', undefined); or building a descriptor conditionally where a branch forgets to return an object (returns undefined).","commonSituations":"A descriptor factory function with a missing return on one path; passing a value directly instead of wrapping it ({value: v} is required, not v); JSON round-tripping a descriptor into a string; copy-paste from code that used assignment instead of defineProperty.","solutions":["Wrap the intended value in a descriptor object: {value: v, writable: true, enumerable: true, configurable: true}.","If the descriptor is computed, ensure every code path returns an object; add a default of {} or throw explicitly with context.","If the descriptor may be absent, guard: only call defineProperty when descriptor != null."],"exampleFix":"// before\nObject.defineProperty(obj, 'count', 0); // wrong: raw value as descriptor\n\n// after\nObject.defineProperty(obj, 'count', { value: 0, writable: true, enumerable: true, configurable: true });","handlingStrategy":"validation","validationCode":"if (descriptor === null || (typeof descriptor !== 'object' && typeof descriptor !== 'function')) {\n  descriptor = { value: descriptor }; // or throw with context\n}\nObject.defineProperty(obj, prop, descriptor);","typeGuard":"function isPropertyDescriptor(d) {\n  return d !== null && d !== undefined &&\n    (typeof d === 'object' || typeof d === 'function');\n}","tryCatchPattern":null,"preventionTips":["Wrap raw values: {value: v}","Ensure descriptor factory functions return on every path","Remember descriptor keys: value, get, set, writable, enumerable, configurable"],"tags":["es5-shim","polyfill","define-property","descriptor","typeerror"],"backgroundTag":null,"analyzedSha":"e815e74d4c2dd74edac831241f1253fcc7d25381","analyzedAt":"2026-08-14T14:22:34.512Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}