summaryrefslogtreecommitdiff
path: root/extensions/console/02_console.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/console/02_console.js')
-rw-r--r--extensions/console/02_console.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/extensions/console/02_console.js b/extensions/console/02_console.js
index 6f2ed0c0e..b4b29e1ea 100644
--- a/extensions/console/02_console.js
+++ b/extensions/console/02_console.js
@@ -87,6 +87,10 @@
MathFloor,
Number,
NumberPrototypeToString,
+ Proxy,
+ ReflectGet,
+ ReflectGetOwnPropertyDescriptor,
+ ReflectGetPrototypeOf,
WeakMap,
WeakSet,
} = window.__bootstrap.primordials;
@@ -1953,6 +1957,58 @@
});
}
+ /** Creates a proxy that represents a subset of the properties
+ * of the original object optionally without evaluating the properties
+ * in order to get the values. */
+ function createFilteredInspectProxy({ object, keys, evaluate }) {
+ return new Proxy({}, {
+ get(_target, key) {
+ if (key === SymbolToStringTag) {
+ return object.constructor?.name;
+ } else if (ArrayPrototypeIncludes(keys, key)) {
+ return ReflectGet(object, key);
+ } else {
+ return undefined;
+ }
+ },
+ getOwnPropertyDescriptor(_target, key) {
+ if (!ArrayPrototypeIncludes(keys, key)) {
+ return undefined;
+ } else if (evaluate) {
+ return getEvaluatedDescriptor(object, key);
+ } else {
+ return getDescendantPropertyDescriptor(object, key) ??
+ getEvaluatedDescriptor(object, key);
+ }
+ },
+ has(_target, key) {
+ return ArrayPrototypeIncludes(keys, key);
+ },
+ ownKeys() {
+ return keys;
+ },
+ });
+
+ function getDescendantPropertyDescriptor(object, key) {
+ let propertyDescriptor = ReflectGetOwnPropertyDescriptor(object, key);
+ if (!propertyDescriptor) {
+ const prototype = ReflectGetPrototypeOf(object);
+ if (prototype) {
+ propertyDescriptor = getDescendantPropertyDescriptor(prototype, key);
+ }
+ }
+ return propertyDescriptor;
+ }
+
+ function getEvaluatedDescriptor(object, key) {
+ return {
+ configurable: true,
+ enumerable: true,
+ value: object[key],
+ };
+ }
+ }
+
// A helper function that will bind our own console implementation
// with default implementation of Console from V8. This will cause
// console messages to be piped to inspector console.
@@ -1997,5 +2053,6 @@
customInspect,
inspect,
wrapConsole,
+ createFilteredInspectProxy,
};
})(this);