43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
import { isHotReloadEnabled, registerHotReloadHandler } from './hotReload.js';
|
|
import { constObservable, observableSignalFromEvent, observableValue } from './observable.js';
|
|
export function readHotReloadableExport(value, reader) {
|
|
observeHotReloadableExports([value], reader);
|
|
return value;
|
|
}
|
|
export function observeHotReloadableExports(values, reader) {
|
|
if (isHotReloadEnabled()) {
|
|
const o = observableSignalFromEvent('reload', event => registerHotReloadHandler(({ oldExports }) => {
|
|
if (![...Object.values(oldExports)].some(v => values.includes(v))) {
|
|
return undefined;
|
|
}
|
|
return (_newExports) => {
|
|
event(undefined);
|
|
return true;
|
|
};
|
|
}));
|
|
o.read(reader);
|
|
}
|
|
}
|
|
const classes = new Map();
|
|
export function createHotClass(clazz) {
|
|
if (!isHotReloadEnabled()) {
|
|
return constObservable(clazz);
|
|
}
|
|
const id = clazz.name;
|
|
let existing = classes.get(id);
|
|
if (!existing) {
|
|
existing = observableValue(id, clazz);
|
|
classes.set(id, existing);
|
|
}
|
|
else {
|
|
setTimeout(() => {
|
|
existing.set(clazz, undefined);
|
|
}, 0);
|
|
}
|
|
return existing;
|
|
}
|
|
//# sourceMappingURL=hotReloadHelpers.js.map
|