/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { env } from './process.js'; export function isHotReloadEnabled() { return env && !!env['VSCODE_DEV']; } export function registerHotReloadHandler(handler) { if (!isHotReloadEnabled()) { return { dispose() { } }; } else { const handlers = registerGlobalHotReloadHandler(); handlers.add(handler); return { dispose() { handlers.delete(handler); } }; } } function registerGlobalHotReloadHandler() { if (!hotReloadHandlers) { hotReloadHandlers = new Set(); } const g = globalThis; if (!g.$hotReload_applyNewExports) { g.$hotReload_applyNewExports = oldExports => { for (const h of hotReloadHandlers) { const result = h(oldExports); if (result) { return result; } } return undefined; }; } return hotReloadHandlers; } let hotReloadHandlers = undefined; if (isHotReloadEnabled()) { // This code does not run in production. registerHotReloadHandler(({ oldExports, newSrc }) => { // Don't match its own source code if (newSrc.indexOf('/* ' + 'hot-reload:patch-prototype-methods */') === -1) { return undefined; } return newExports => { var _a, _b; for (const key in newExports) { const exportedItem = newExports[key]; console.log(`[hot-reload] Patching prototype methods of '${key}'`, { exportedItem }); if (typeof exportedItem === 'function' && exportedItem.prototype) { const oldExportedItem = oldExports[key]; if (oldExportedItem) { for (const prop of Object.getOwnPropertyNames(exportedItem.prototype)) { const descriptor = Object.getOwnPropertyDescriptor(exportedItem.prototype, prop); const oldDescriptor = Object.getOwnPropertyDescriptor(oldExportedItem.prototype, prop); if (((_a = descriptor === null || descriptor === void 0 ? void 0 : descriptor.value) === null || _a === void 0 ? void 0 : _a.toString()) !== ((_b = oldDescriptor === null || oldDescriptor === void 0 ? void 0 : oldDescriptor.value) === null || _b === void 0 ? void 0 : _b.toString())) { console.log(`[hot-reload] Patching prototype method '${key}.${prop}'`); } Object.defineProperty(oldExportedItem.prototype, prop, descriptor); } newExports[key] = oldExportedItem; } } } return true; }; }); }