Something went wrong on our end
Select Git revision
Monster.Data.Pathfinder.html
-
Volker Schukai authoredVolker Schukai authored
jsdom.mjs 3.37 KiB
'use strict';
import {extend} from "../../source/data/extend.mjs";
import {getGlobal} from "../../source/types/global.mjs";
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(`<!DOCTYPE html><html lang="en"><head><title>Test</title></head><body><div id="mocks"></div></body></html>`, 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',
'requestAnimationFrame',
'HTMLSelectElement',
'HTMLTemplateElement',
'HTMLTextAreaElement',
'InputEvent',
'KeyboardEvent',
'MutationObserver',
'navigator',
'Node',
'NodeFilter',
'NodeList',
'self',
'ShadowRoot',
'XMLSerializer',
].forEach(key => {
try {
g[key] = window[key]
} catch(e) {
console.error("Error setting key", key, e);
}
});
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("Error loading dom-storage", e);
reject(e);
});
})
);
});
}
export {initJSDOM, JSDOMExport}