export function setupDocumentReadyState(
document: Document,
Event: typeof Event,
) {
let readyState: 0 | 1 | 2 = 0;
Object.defineProperty(document, 'readyState', {
get() {
switch (readyState) {
case 0:
return 'loading';
case 1:
return 'interactive';
case 2:
return 'complete';
}
},
set(value) {
if (value === 'interactive' && readyState < 1) {
readyState = 1;
document.dispatchEvent(new Event('readystatechange'));
} else if (value === 'complete' && readyState < 2) {
readyState = 2;
document.dispatchEvent(new Event('readystatechange'));
document.dispatchEvent(new Event('DOMContentLoaded'));
} else if (value === 'loading') {
readyState = 0;
}
},
configurable: true,
});
}