import { JSDOM } from "jsdom"; import { loadBudibase } from "../src/index"; export const load = async (props) => { const dom = new JSDOM(``); setAppDef(dom.window, props); const app = await loadBudibase({ componentLibraries: allLibs(dom.window), window: dom.window, localStorage: createLocalStorage(), props }); return {dom, app}; } const setAppDef = (window, props) => { window["##BUDIBASE_APPDEFINITION##"] = ({ componentLibraries: [], props, hierarchy: {}, appRootPath: "" }); } const allLibs = (window) => ({ testlib: maketestlib(window) }); const createLocalStorage = () => { const data = {}; return ({ getItem: key => data[key], setItem: (key, value) => data[key] = value }); } const maketestlib = (window) => ({ div: function(opts) { const node = window.document.createElement("DIV"); const defaultChild = window.document.createElement("DIV"); defaultChild.className = "default-child"; node.appendChild(defaultChild); let currentProps = {...opts.props}; let childNodes = []; const set = (props) => { currentProps = Object.assign(currentProps, props); node.className = currentProps.className || ""; if(currentProps._children && currentProps._children.length > 0) { if(currentProps.append) { for(let c of childNodes) { node.removeChild(c); } const components = currentProps._bb.appendChildren(currentProps._children, node); childNodes = components.map(c => c._element); } else { currentProps._bb.hydrateChildren(currentProps._children, node); } } } this.$set = set; this._element = node; set(opts.props); opts.target.appendChild(node); }, h1: function(opts) { const node = window.document.createElement("H1"); let currentProps = {...opts.props}; const set = (props) => { currentProps = Object.assign(currentProps, props); if(currentProps.text) { node.innerText = currentProps.text; } } this.$set = set; this._element = node; set(opts.props); opts.target.appendChild(node); } });