| 258 | * @returns {T} object with property access deprecated |
| 259 | */ |
| 260 | const deprecateAllProperties = (obj, message, code) => { |
| 261 | const newObj = {}; |
| 262 | const descriptors = Object.getOwnPropertyDescriptors(obj); |
| 263 | for (const name of Object.keys(descriptors)) { |
| 264 | const descriptor = descriptors[name]; |
| 265 | if (typeof descriptor.value === "function") { |
| 266 | Object.defineProperty(newObj, name, { |
| 267 | ...descriptor, |
| 268 | value: util.deprecate(descriptor.value, message, code) |
| 269 | }); |
| 270 | } else if (descriptor.get || descriptor.set) { |
| 271 | Object.defineProperty(newObj, name, { |
| 272 | ...descriptor, |
| 273 | get: descriptor.get && util.deprecate(descriptor.get, message, code), |
| 274 | set: descriptor.set && util.deprecate(descriptor.set, message, code) |
| 275 | }); |
| 276 | } else { |
| 277 | let value = descriptor.value; |
| 278 | Object.defineProperty(newObj, name, { |
| 279 | configurable: descriptor.configurable, |
| 280 | enumerable: descriptor.enumerable, |
| 281 | get: util.deprecate(() => value, message, code), |
| 282 | set: descriptor.writable |
| 283 | ? util.deprecate( |
| 284 | /** |
| 285 | * Handles the callback logic for this hook. |
| 286 | * @template T |
| 287 | * @param {T} v value |
| 288 | * @returns {T} result |
| 289 | */ |
| 290 | (v) => (value = v), |
| 291 | message, |
| 292 | code |
| 293 | ) |
| 294 | : undefined |
| 295 | }); |
| 296 | } |
| 297 | } |
| 298 | return /** @type {T} */ (newObj); |
| 299 | }; |
| 300 | |
| 301 | module.exports.deprecateAllProperties = deprecateAllProperties; |
| 302 | |