diff --git a/package.json b/package.json index 80fd83c..26a55c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deka-dom-el", - "version": "0.1.0", + "version": "0.1.1", "description": "A low-code library that simplifies the creation of native DOM elements/components using small wrappers and tweaks.", "author": "Jan Andrle ", "license": "MIT", @@ -19,6 +19,9 @@ ".": { "import": "./index.js" }, + "./jsdom": { + "import": "./src/jsdom.js" + }, "./signals": { "import": "./src/signals.js" }, @@ -31,6 +34,9 @@ ".": [ "./index.d.ts" ], + "./jsdom": [ + "./src/jsdom.d.ts" + ], "./signals": [ "./src/signals.d.ts" ], diff --git a/src/dom.js b/src/dom.js index ed84701..bf66d52 100644 --- a/src/dom.js +++ b/src/dom.js @@ -22,7 +22,7 @@ export function createElement(tag, attributes, ...connect){ case typeof tag==="function": el= tag(attributes || undefined); break; case tag==="#text": el= assign(document.createTextNode(""), attributes); break; case namespace_curr!=="html": el= assign(document.createElementNS(namespace_curr, tag), attributes); break; - default: el= assign(document.createElement(tag), attributes); + case !el: el= assign(document.createElement(tag), attributes); } connect.forEach(c=> c(el)); return el; diff --git a/src/jsdom.d.ts b/src/jsdom.d.ts new file mode 100644 index 0000000..54af1de --- /dev/null +++ b/src/jsdom.d.ts @@ -0,0 +1,6 @@ +import { el, assign, on } from "../index.d"; +export function register(dom: typeof document): Promise<{ + el: typeof el, + assign: typeof assign, + on: typeof on +}> diff --git a/src/jsdom.js b/src/jsdom.js new file mode 100644 index 0000000..cadbef4 --- /dev/null +++ b/src/jsdom.js @@ -0,0 +1,11 @@ +let keys= []; +export function register(dom){ + const window= dom.window; + if(!keys.length) + keys= Object.getOwnPropertyNames(window).filter((k) => !k.startsWith('_') && !(k in globalThis)); + keys.forEach(key=> globalThis[key]= window[key]); + global.document= window.document + global.window= window + window.console= global.console + return import("../index.js"); +}