Something went wrong on our end
Select Git revision
-
Volker Schukai authoredVolker Schukai authored
jsdom.mjs 3.07 KiB
'use strict';
import {extend} from "../../source/data/extend.mjs";
import {getGlobal} from "../../source/types/global.mjs";
//import Storage from "dom-storage";
export const isBrowser = new Function("try {return this===window;}catch(e){ return false;}");
export const isNode = new Function("try {return this===global;}catch(e){return false;}");
let JSDOMExport = null;
/**
* this helper function creates the dom stack in the node environment
*
* @return {Promise<unknown>|Promise<void>}
*/
function initJSDOM(options) {
if (typeof window === "object" && window['DOMParser']) return Promise.resolve();
const g = getGlobal();
options = extend({}, {
pretendToBeVisual: true,
contentType: "text/html",
includeNodeLocations: true,
storageQuota: 10000000,
runScripts: "dangerously",
resources: "usable"
}, options || {})
return import("jsdom").then(({JSDOM}) => {
JSDOMExport = JSDOM;
const {window} = new JSDOM(`<html>
<head>
</head>
<body>
<div id="mocks"></div>
</body>`, options);
g['window'] = window;
return new Promise((resolve, reject) =>
window.addEventListener("load", () => {
[
'Blob',
'CSSStyleSheet',
'customElements',
'CustomEvent',
'document',
'Document',
'DocumentFragment',
'DOMParser',
'Element',
'ElementInternals',
'Event',
'EventTarget',
'getComputedStyle',
'HTMLButtonElement',
'HTMLCollection',
'HTMLDivElement',
'HTMLDocument',
'HTMLElement',
'HTMLFormElement',
'HTMLInputElement',
'HTMLScriptElement',
'HTMLSelectElement',
'HTMLTemplateElement',
'HTMLTextAreaElement',
'InputEvent',
'KeyboardEvent',
'MutationObserver',
'navigator',
'Node',
'NodeFilter',
'NodeList',
'self',
'ShadowRoot',
'XMLSerializer',
].forEach(key => {
g[key] = window[key]
});
import("dom-storage").then(({default: Storage}) => {
g.localStorage = new Storage(null, {strict: true});
g.sessionStorage = new Storage(null, {strict: true});
window['localStorage'] = g.localStorage;
window['sessionStorage'] = g.sessionStorage;
resolve(g);
}).catch(e => {
console.error(e);
reject(e);
});
})
);
});
}
export {initJSDOM, JSDOMExport}