mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
0646eda4fc
Store all primordials as properties of the primordials object. Static functions are prefixed by the constructor's name and prototype methods are prefixed by the constructor's name followed by "Prototype". For example: primordials.Object.keys becomes primordials.ObjectKeys. PR-URL: https://github.com/nodejs/node/pull/30610 Refs: https://github.com/nodejs/node/issues/29766 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
// See https://console.spec.whatwg.org/#console-namespace
|
|
// > For historical web-compatibility reasons, the namespace object
|
|
// > for console must have as its [[Prototype]] an empty object,
|
|
// > created as if by ObjectCreate(%ObjectPrototype%),
|
|
// > instead of %ObjectPrototype%.
|
|
|
|
// Since in Node.js, the Console constructor has been exposed through
|
|
// require('console'), we need to keep the Console constructor but
|
|
// we cannot actually use `new Console` to construct the global console.
|
|
// Therefore, the console.Console.prototype is not
|
|
// in the global console prototype chain anymore.
|
|
|
|
const {
|
|
ObjectCreate,
|
|
ReflectDefineProperty,
|
|
ReflectGetOwnPropertyDescriptor,
|
|
ReflectOwnKeys,
|
|
} = primordials;
|
|
|
|
const {
|
|
Console,
|
|
kBindStreamsLazy,
|
|
kBindProperties
|
|
} = require('internal/console/constructor');
|
|
|
|
const globalConsole = ObjectCreate({});
|
|
|
|
// Since Console is not on the prototype chain of the global console,
|
|
// the symbol properties on Console.prototype have to be looked up from
|
|
// the global console itself. In addition, we need to make the global
|
|
// console a namespace by binding the console methods directly onto
|
|
// the global console with the receiver fixed.
|
|
for (const prop of ReflectOwnKeys(Console.prototype)) {
|
|
if (prop === 'constructor') { continue; }
|
|
const desc = ReflectGetOwnPropertyDescriptor(Console.prototype, prop);
|
|
if (typeof desc.value === 'function') { // fix the receiver
|
|
desc.value = desc.value.bind(globalConsole);
|
|
}
|
|
ReflectDefineProperty(globalConsole, prop, desc);
|
|
}
|
|
|
|
globalConsole[kBindStreamsLazy](process);
|
|
globalConsole[kBindProperties](true, 'auto');
|
|
|
|
// This is a legacy feature - the Console constructor is exposed on
|
|
// the global console instance.
|
|
globalConsole.Console = Console;
|
|
|
|
module.exports = globalConsole;
|