mirror of
https://github.com/nodejs/node.git
synced 2025-05-07 12:03:30 +00:00

Simplify the implementation by implementing it directly in C++. This improves performance and also makes structuredClone supported in custom snapshots. PR-URL: https://github.com/nodejs/node/pull/50330 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
62 lines
2.4 KiB
JavaScript
62 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* This file exposes web interfaces that is defined with the WebIDL
|
|
* Exposed=Window + Exposed=(Window,Worker) extended attribute or exposed in
|
|
* WindowOrWorkerGlobalScope mixin.
|
|
* See more details at https://webidl.spec.whatwg.org/#Exposed and
|
|
* https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope.
|
|
*/
|
|
|
|
const {
|
|
globalThis,
|
|
} = primordials;
|
|
|
|
const {
|
|
defineOperation,
|
|
defineLazyProperties,
|
|
defineReplaceableLazyAttribute,
|
|
exposeLazyInterfaces,
|
|
} = require('internal/util');
|
|
|
|
// https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope
|
|
const timers = require('timers');
|
|
defineOperation(globalThis, 'clearInterval', timers.clearInterval);
|
|
defineOperation(globalThis, 'clearTimeout', timers.clearTimeout);
|
|
defineOperation(globalThis, 'setInterval', timers.setInterval);
|
|
defineOperation(globalThis, 'setTimeout', timers.setTimeout);
|
|
|
|
const {
|
|
queueMicrotask,
|
|
} = require('internal/process/task_queues');
|
|
defineOperation(globalThis, 'queueMicrotask', queueMicrotask);
|
|
|
|
const { structuredClone } = internalBinding('messaging');
|
|
defineOperation(globalThis, 'structuredClone', structuredClone);
|
|
defineLazyProperties(globalThis, 'buffer', ['atob', 'btoa']);
|
|
|
|
// https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts
|
|
exposeLazyInterfaces(globalThis, 'internal/worker/io', ['BroadcastChannel']);
|
|
exposeLazyInterfaces(globalThis, 'internal/worker/io', [
|
|
'MessageChannel', 'MessagePort', 'MessageEvent',
|
|
]);
|
|
// https://www.w3.org/TR/FileAPI/#dfn-Blob
|
|
exposeLazyInterfaces(globalThis, 'internal/blob', ['Blob']);
|
|
// https://www.w3.org/TR/FileAPI/#dfn-file
|
|
exposeLazyInterfaces(globalThis, 'internal/file', ['File']);
|
|
// https://www.w3.org/TR/hr-time-2/#the-performance-attribute
|
|
exposeLazyInterfaces(globalThis, 'perf_hooks', [
|
|
'Performance', 'PerformanceEntry', 'PerformanceMark', 'PerformanceMeasure',
|
|
'PerformanceObserver', 'PerformanceObserverEntryList', 'PerformanceResourceTiming',
|
|
]);
|
|
|
|
defineReplaceableLazyAttribute(globalThis, 'perf_hooks', ['performance']);
|
|
|
|
// https://html.spec.whatwg.org/multipage/system-state.html#the-navigator-object
|
|
exposeLazyInterfaces(globalThis, 'internal/navigator', ['Navigator']);
|
|
defineReplaceableLazyAttribute(globalThis, 'internal/navigator', ['navigator'], false);
|
|
|
|
// https://w3c.github.io/FileAPI/#creating-revoking
|
|
const { installObjectURLMethods } = require('internal/url');
|
|
installObjectURLMethods();
|