@beforesemicolon/site-builder 0.29.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var m=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var T=(s,e)=>m(s,"name",{value:e,configurable:!0});var B=(s,e)=>{for(var n in e)m(s,n,{get:e[n],enumerable:!0})},D=(s,e,n,$)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of _(e))!z.call(s,c)&&c!==n&&m(s,c,{get:()=>e[c],enumerable:!($=q(e,c))||$.enumerable});return s};var G=s=>D(m({},"__esModule",{value:!0}),s);var J={};B(J,{parseTemplate:()=>H});module.exports=G(J);var S=require("./utils/merge-objects.js"),E=require("./default-parse-options.js"),u=require("./parse-widget.js"),j=require("./parse-style.js");const b=new Map,C=T(s=>Array.from(new Set(s)),"unique"),H=T(async(s,e=E.defaultOptions)=>{if(e=(0,S.mergeObjects)(E.defaultOptions,e),b.set(s.id,s),s.extends){const t=b.get(s.extends)||await e.fetchTemplate?.(s.extends);if(!t)throw new Error(`Template "${s.extends}" not found`);b.set(s.extends,t),s=(0,S.mergeObjects)(t,s)}const{metadata:n={},scripts:$=[],stylesheets:c=[],links:k=[],fonts:F=[],favicons:I=[],content:g="",manifest:W,...l}=s??{},x=new Map,M=new Map,U=typeof g=="string"?g:await(0,u.parseTemplateContent)(g,{...l,assetsOrigin:e.assetsOrigin},x,M,e);n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");const A=Object.entries(n).map(([t,i])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${i}">`:(t==="msapplication-TileImage"&&(i=`${e.assetsOrigin}${i}`),`<meta name="${t}" content="${i}">`)).join("");let d="";k.forEach(t=>{let i="<link ";Object.entries(t).forEach(([o,f])=>{i+=`${o}="${f}" `}),d+=i+"/>"});let y="";I.forEach(t=>{let i="<link ";Object.entries(t).forEach(([o,f])=>{i+=`${o}="${o==="href"?`${e.assetsOrigin}assets/favicons/`:""}${f}" `}),y+=i+"/>"});let O="";F.forEach(t=>{O+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font" crossorigin>`});let a="",w="";Array.from(x.values()).flat().forEach(t=>{c.push(t)}),C(c).forEach(t=>{if(typeof t=="string")t.startsWith("http")?a+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?a+=`<link rel="stylesheet" href="${e.assetsOrigin}stylesheets/${t}">`:w+=t;else if(Array.isArray(t)){const[i,o]=t;a+=`<style id="${i}-style">${(0,j.parseStyle)(o)}</style>`}else{a+="<style";const{attributes:i,content:o="",...f}=t;Object.entries(i??f).forEach(([h,r])=>{h==="href"&&!r.startsWith("http")&&r.endsWith(".css")&&(r=`${e.assetsOrigin}stylesheets/${r}`),a+=`${h}="${r}" `}),a+=`>${(0,j.parseStyle)(o)}</style>`}}),w&&(a=`<style>${w}</style>`+a);let p="";return Array.from(M.values()).flat().forEach(t=>{$.push(t)}),C($).forEach(t=>{if(typeof t=="string")t.startsWith("http")?p+=`<script src="${t}"></script>`:t.endsWith(".js")?p+=`<script src="${e.assetsOrigin}scripts/${t}"></script>`:p+=`<script>${t}</script>`;else{p+="<script ";const{attributes:i,content:o="",...f}=t;Object.entries(i??f).forEach(([h,r])=>{h==="src"&&!r.startsWith("http")&&r.endsWith(".js")&&(r=`${e.assetsOrigin}scripts/${r}`),p+=`${h}="${r}" `}),p+=`>${o}</script>`}}),`<!doctype html><html lang="${l.lang??"en"}"><head><title>${l.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- og --><meta property="og:title" content="${l.title}"><meta property="og:type" content="website"><meta property="og:description" content="${l.description}"><meta property="og:image" content="${l.image}"><meta property="og:url" content="${l.domain}"><meta property="og:site_name" content="${l.title}">`+(A?`<!-- metas -->${A}`:"")+(y?`<!-- favicons -->${y}`:"")+(O?`<!-- fonts -->${O}`:"")+(d?`<!-- links -->${d}`:"")+(W?`<link rel="manifest" href="${e.assetsOrigin}assets/${W}">`:"")+(a?`<!-- stylesheets -->${a}`:"")+"</head><body>"+U+(p?`<!-- scripts -->${p}`:"")+"</body></html>"},"parseTemplate");0&&(module.exports={parseTemplate});
1
+ "use strict";var m=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var T=(i,e)=>m(i,"name",{value:e,configurable:!0});var B=(i,e)=>{for(var n in e)m(i,n,{get:e[n],enumerable:!0})},G=(i,e,n,$)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of _(e))!z.call(i,f)&&f!==n&&m(i,f,{get:()=>e[f],enumerable:!($=V(e,f))||$.enumerable});return i};var H=i=>G(m({},"__esModule",{value:!0}),i);var K={};B(K,{parseTemplate:()=>J});module.exports=H(K);var b=require("./utils/merge-objects.js"),W=require("./default-parse-options.js"),C=require("./parse-widget.js"),E=require("./parse-style.js"),F=require("./utils/replace-string-value.js");const S=new Map,k=T(i=>Array.from(new Set(i)),"unique"),J=T(async(i,e=W.defaultOptions)=>{if(e=(0,b.mergeObjects)(W.defaultOptions,e),S.set(i.id,i),i.extends){const t=S.get(i.extends)||await e.fetchTemplate?.(i.extends);if(!t)throw new Error(`Template "${i.extends}" not found`);S.set(i.extends,t),i=(0,b.mergeObjects)(t,i)}const{metadata:n={},scripts:$=[],stylesheets:f=[],links:I=[],fonts:U=[],favicons:q=[],content:d="",manifest:j,...c}=i??{},x=new Map,M=new Map,u={...c,assetsOrigin:e.assetsOrigin},D=typeof d=="string"?d:await(0,C.parseTemplateContent)({content:d,data:u,widgetStyles:x,widgetScripts:M,opt:e});n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");const A=Object.entries(n).map(([t,s])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${s}">`:(t==="msapplication-TileImage"&&(s=`${e.assetsOrigin}${s}`),`<meta name="${t}" content="${s}">`)).join("");let g="";I.forEach(t=>{let s="<link ";Object.entries(t).forEach(([o,p])=>{s+=`${o}="${p}" `}),g+=s+"/>"});let y="";q.forEach(t=>{let s="<link ";Object.entries(t).forEach(([o,p])=>{s+=`${o}="${o==="href"?`${e.assetsOrigin}assets/favicons/`:""}${p}" `}),y+=s+"/>"});let w="";U.forEach(t=>{let s="";t.endsWith(".woff2")?s="font/woff2":t.endsWith(".woff")?s="font/woff":t.endsWith(".ttf")?s="font/ttf":t.endsWith(".otf")&&(s="font/otf"),w+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font"${s?` type="${s}"`:""} crossorigin>`});let a="",O="";Array.from(x.values()).flat().forEach(t=>{f.push(t)}),k(f).forEach(t=>{if(typeof t=="string")t.startsWith("http")?a+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?a+=`<link rel="stylesheet" href="${e.assetsOrigin}stylesheets/${t}">`:O+=(0,F.replaceStringValue)(t,u);else if(Array.isArray(t)){const[s,o]=t;a+=`<style id="${s}-style">${(0,E.parseStyle)(o)}</style>`}else{a+="<style";const{attributes:s,content:o="",...p}=t;Object.entries(s??p).forEach(([h,r])=>{h==="href"&&!r.startsWith("http")&&r.endsWith(".css")&&(r=`${e.assetsOrigin}stylesheets/${r}`),a+=`${h}="${r}" `}),a+=`>${(0,E.parseStyle)(o)}</style>`}}),O&&(a=`<style>${O}</style>`+a);let l="";return Array.from(M.values()).flat().forEach(t=>{$.push(t)}),k($).forEach(t=>{if(typeof t=="string")t.startsWith("http")?l+=`<script src="${t}"></script>`:t.endsWith(".js")?l+=`<script src="${e.assetsOrigin}scripts/${t}"></script>`:l+=`<script>${t}</script>`;else{l+="<script ";const{attributes:s,content:o="",...p}=t;Object.entries(s??p).forEach(([h,r])=>{h==="src"&&!r.startsWith("http")&&r.endsWith(".js")&&(r=`${e.assetsOrigin}scripts/${r}`),l+=`${h}="${r}" `}),l+=`>${o}</script>`}}),`<!doctype html><html lang="${c.lang??"en"}"><head><title>${c.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="${c.description}"><!-- og --><meta property="og:title" content="${c.title}"><meta property="og:type" content="website"><meta property="og:description" content="${c.description}"><meta property="og:image" content="${c.image}"><meta property="og:url" content="${c.domain}"><meta property="og:site_name" content="${c.title}">`+(A?`<!-- metas -->${A}`:"")+(y?`<!-- favicons -->${y}`:"")+(w?`<!-- fonts -->${w}`:"")+(g?`<!-- links -->${g}`:"")+(j?`<link rel="manifest" href="${e.assetsOrigin}assets/${j}">`:"")+(a?`<!-- stylesheets -->${a}`:"")+"</head><body>"+D+(l?`<!-- scripts -->${l}`:"")+"</body></html>"},"parseTemplate");0&&(module.exports={parseTemplate});
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var u=(n,t)=>d(n,"name",{value:t,configurable:!0});var v=(n,t)=>{for(var i in t)d(n,i,{get:t[i],enumerable:!0})},x=(n,t,i,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of W(t))!N.call(n,r)&&r!==i&&d(n,r,{get:()=>t[r],enumerable:!(a=T(t,r))||a.enumerable});return n};var D=n=>x(d({},"__esModule",{value:!0}),n);var L={};v(L,{parseTemplateContent:()=>y,parseWidget:()=>w});module.exports=D(L);var g=require("./default-parse-options.js"),C=require("./utils/input-definitions-to-object.js"),M=require("./parse-style.js"),b=require("./utils/attributes-to-string.js"),j=require("./utils/replace-string-value.js"),h=require("./parse-component.js");const $=new Map;async function w(n,t={},i,a,r=g.defaultOptions){let{name:p,children:o,...s}=n;if(n["data-render-id"]=n["data-render-id"]||Math.random().toString(36).substring(2,15),{name:p,children:o,...s}=n,s.id){const e=$.get(s.id)||await r.fetchWidget?.(s.id);if(e){const c={...t,assetsOrigin:r.assetsOrigin,prod:r.prod},O={...(0,C.inputDefinitionsToObject)(e?.inputs??[]),...s,env:c};typeof e.render=="function"?o=[e.render({...O,$comp:(f,S={})=>(0,h.parseComponent)((r.components??{})[f],{...S,env:c},i)})]:o=e.content?[e.content]:[];const m=[],l=e.id||s.id;if(e.style){const f=typeof e.style=="function"?e.style(O):e.style;m.push([`widget-${l}`,(0,M.parseStyle)(f,e.cssSelector??"")])}e.stylesheets?.forEach(f=>{m.push(f)}),m.length>0&&i.set(l,m),e.scripts&&a.set(l,e.scripts),$.set(s.id,e)}}return r.prod?o.join(""):`<${p} id="${s.id}" data-render-id="${s["data-render-id"]}">${await y(o,t,i,a,r)}</${p}>`}u(w,"parseWidget");async function y(n,t={},i=new Map,a=new Map,r=g.defaultOptions){return n?(await Promise.all(n.map(async p=>{if(typeof p=="string")return(0,j.replaceStringValue)(p,t);const{name:o,children:s,...e}=p;if(o==="widget")return w(p,t,i,a,r);if(o==="component")return(0,h.parseComponent)((r.components??{})[e.id],{...e,env:{...t,assetsOrigin:r.assetsOrigin,prod:r.prod}},i);const c=(0,b.attributeToString)(e,t);return`<${o}`+(c?` ${c}`:"")+`>${await y(s,t,i,a,r)}</${o}>`}))).join(""):""}u(y,"parseTemplateContent");0&&(module.exports={parseTemplateContent,parseWidget});
1
+ "use strict";var m=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var g=(r,t)=>m(r,"name",{value:t,configurable:!0});var L=(r,t)=>{for(var i in t)m(r,i,{get:t[i],enumerable:!0})},v=(r,t,i,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of P(t))!W.call(r,n)&&n!==i&&m(r,n,{get:()=>t[n],enumerable:!(a=T(t,n))||a.enumerable});return r};var x=r=>v(m({},"__esModule",{value:!0}),r);var D={};L(D,{parseTemplateContent:()=>y,parseWidget:()=>S});module.exports=x(D);var u=require("./default-parse-options.js"),M=require("./utils/input-definitions-to-object.js"),$=require("./parse-style.js"),C=require("./utils/attributes-to-string.js"),b=require("./utils/replace-string-value.js"),O=require("./parse-component.js");const w=new Map;async function S({node:r,data:t={},widgetStyles:i=new Map,widgetScripts:a=new Map,opt:n=u.defaultOptions}){let{name:p,children:o,...s}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:p,children:o,...s}=r,s.id){const e=w.get(s.id)||await n.fetchWidget?.(s.id);if(e){const c={...t,assetsOrigin:n.assetsOrigin,prod:n.prod},h={...(0,M.inputDefinitionsToObject)(e?.inputs??[]),...s,env:c};typeof e.render=="function"?o=[e.render({...h,$comp:(d,j={})=>(0,O.parseComponent)((n.components??{})[d],{...j,env:c},i)})]:o=e.content?[e.content]:[];const f=[],l=e.id||s.id;if(e.style){const d=typeof e.style=="function"?e.style(h):e.style;f.push([`widget-${l}`,(0,$.parseStyle)(d,e.cssSelector??"")])}e.stylesheets?.forEach(d=>{f.push(d)}),f.length>0&&i.set(l,f),e.scripts&&a.set(l,e.scripts),w.set(s.id,e)}}return n.prod?o.join(""):`<${p} id="${s.id}" data-render-id="${s["data-render-id"]}">${await y({content:o,data:t,widgetStyles:i,widgetScripts:a,opt:n})}</${p}>`}g(S,"parseWidget");async function y({content:r,data:t={},widgetStyles:i=new Map,widgetScripts:a=new Map,opt:n=u.defaultOptions}){return r?(await Promise.all(r.map(async p=>{if(typeof p=="string")return(0,b.replaceStringValue)(p,t);const{name:o,children:s,...e}=p;if(o==="widget")return S({node:p,data:t,widgetStyles:i,widgetScripts:a,opt:n});if(o==="component")return(0,O.parseComponent)((n.components??{})[e.id],{...e,env:{...t,assetsOrigin:n.assetsOrigin,prod:n.prod}},i);const c=(0,C.attributeToString)(e,t);return`<${o}`+(c?` ${c}`:"")+`>${await y({content:s,data:t,widgetStyles:i,widgetScripts:a,opt:n})}</${o}>`}))).join(""):""}g(y,"parseTemplateContent");0&&(module.exports={parseTemplateContent,parseWidget});
package/dist/cjs/types.js CHANGED
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(r,e)=>{for(var s in e)n(r,s,{get:e[s],enumerable:!0})},b=(r,e,s,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of i(e))!d.call(r,o)&&o!==s&&n(r,o,{get:()=>e[o],enumerable:!(a=c(e,o))||a.enumerable});return r};var x=r=>b(n({},"__esModule",{value:!0}),r);var S={};m(S,{InputDefinitionType:()=>g,TemplateType:()=>l});module.exports=x(S);var g=(t=>(t.Text="text",t.Html="html",t.Markdown="markdown",t.Number="number",t.Code="code",t.Image="image",t.Video="video",t.Audio="audio",t.File="file",t.Font="font",t.Pdf="pdf",t.Icon="icon",t.Embed="embed",t.Favicon="favicon",t.Email="email",t.Password="password",t.Url="url",t.Tel="tel",t.Color="color",t.Date="date",t.DateTimeLocal="datetime-local",t.Month="month",t.Time="time",t.Week="week",t.Textarea="textarea",t.Boolean="boolean",t.Options="options",t.Group="group",t.List="list",t))(g||{}),l=(s=>(s.Base="base",s.Page="page",s))(l||{});0&&(module.exports={InputDefinitionType,TemplateType});
1
+ "use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(r,t)=>{for(var s in t)o(r,s,{get:t[s],enumerable:!0})},b=(r,t,s,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of d(t))!c.call(r,n)&&n!==s&&o(r,n,{get:()=>t[n],enumerable:!(a=i(t,n))||a.enumerable});return r};var x=r=>b(o({},"__esModule",{value:!0}),r);var S={};m(S,{InputDefinitionType:()=>g,TemplateType:()=>l});module.exports=x(S);var g=(e=>(e.Text="text",e.Html="html",e.Markdown="markdown",e.Number="number",e.Code="code",e.Image="image",e.Video="video",e.Audio="audio",e.File="file",e.Font="font",e.Pdf="pdf",e.Icon="icon",e.Embed="embed",e.Favicon="favicon",e.Email="email",e.Password="password",e.Url="url",e.Tel="tel",e.Color="color",e.Date="date",e.DateTimeLocal="datetime-local",e.Month="month",e.Time="time",e.Week="week",e.Textarea="textarea",e.Boolean="boolean",e.Options="options",e.Group="group",e.List="list",e))(g||{}),l=(s=>(s.Base="base",s.Page="page",s))(l||{});0&&(module.exports={InputDefinitionType,TemplateType});
package/dist/client.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";(()=>{var Z=Object.defineProperty;var c=(e,t)=>Z(e,"name",{value:t,configurable:!0});function L(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}c(L,"turnCamelToKebabCasing");var J=new Set(["@media","@supports","@container","@scope","@document","@layer","@starting-style","@page"]);function z(e,t){return t&&e.trim().startsWith(t)}c(z,"startsWithPrefix");function j(e,t=""){if(typeof e=="string")return e;let n=new Map,r=new Map;function o(f,a,s,u){for(let[p,d]of Object.entries(f))if(typeof d=="object"&&d!==null)if(p.startsWith("@")){let m=Array.from(J).some(l=>p.startsWith(l));o(d,a,p,u||!m)}else{let m,l=L(p);p.startsWith("&")?m=a?p.replace(/&/g,a):p.replace(/&/g,""):a?m=`${a} ${l}`:t&&!u&&!z(l,t)?m=`${t} ${l}`:m=l,o(d,m.trim(),s,u)}else if(d!=null){let m=a;if(t&&!u&&a&&!z(a,t)?m=`${t} ${a}`.trim():!a&&t&&!u&&(m=t),!m)continue;if(s){let l=r.get(s);l||(l=new Map,r.set(s,l));let w=l.get(m);w||(w=new Map,l.set(m,w)),w.set(L(p),d)}else{let l=n.get(m);l||(l=new Map,n.set(m,l)),l.set(L(p),d)}}}c(o,"walk"),o(e,"",null,!1);let g=[];for(let[f,a]of n)if(f&&a.size){let s=[];for(let[u,p]of a)s.push(`${u}: ${p};`);g.push(`${f} { ${s.join(" ")} }`)}for(let[f,a]of r){let s=[];for(let[u,p]of a)if(u&&p.size){let d=[];for(let[m,l]of p)d.push(`${m}: ${l};`);s.push(`${u} { ${d.join(" ")} }`)}s.length&&g.push(`${f} { ${s.join(" ")} }`)}return g.join(" ")}c(j,"parseStyle");function E(e,t){if(e===null||typeof e!="object"||t===null||typeof t!="object")return t;if(Array.isArray(e)&&Array.isArray(t))return Array.from(new Set([...e,...t]));let n=Array.isArray(e)?[...e]:{...e};for(let r in t)t.hasOwnProperty(r)&&(Array.isArray(e[r])&&Array.isArray(t[r])?n[r]=Array.from(new Set([...e[r],...t[r]])):n[r]=E(n[r],t[r]));return n}c(E,"mergeObjects");var k={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};function C(e){return e.reduce((t,{name:n="",value:r,type:o,definitions:g=[]})=>{switch(o){case"group":t[n]=C(g);break;case"options":t[n]={value:r,options:g.map(f=>Object.values(C([f]))[0])};break;case"list":t[n]=g.map(f=>Object.values(C([f]))[0]);break;default:t[n]=r}return t},{})}c(C,"inputDefinitionsToObject");var U=c((e,t)=>String(t??"").split(".").filter(Boolean).reduce((r,o)=>{try{return r&&typeof r=="object"?r[o]:void 0}catch{return null}},e),"deepValue");var x=c((e,t)=>{let n=null;for(;(n=/\{\{([a-z0-9.$_]+)}}/gim.exec(e))!==null;){let[r,o]=n,g=U(t,o);e=e.replace(r,String(g))}return e},"replaceStringValue");var M=c((e,t={})=>Object.entries(e).map(([n,r])=>(typeof r=="string"&&(r=x(r,t)),`${n}="${r}"`)).join(" "),"attributeToString");var A=c((e,t={},n=new Map)=>{if(!e||!e.content)return"";let{content:r,stylesheets:o,id:g}=e;return o&&n.set(`comp-${g}`,o),K(r,t,n)},"parseComponent");function K(e,t={},n=new Map){return e?e.map(r=>{if(typeof r=="string")return x(r,t);let{name:o,children:g,...f}=r,a=M(f,t);return`<${o}`+(a?` ${a}`:"")+`>${K(g,t,n)}</${o}>`}).join(""):""}c(K,"parseContent");var _=new Map;async function v(e,t={},n,r,o=k){let{name:g,children:f,...a}=e;if(e["data-render-id"]=e["data-render-id"]||Math.random().toString(36).substring(2,15),{name:g,children:f,...a}=e,a.id){let s=_.get(a.id)||await o.fetchWidget?.(a.id);if(s){let u={...t,assetsOrigin:o.assetsOrigin,prod:o.prod},p={...C(s?.inputs??[]),...a,env:u};typeof s.render=="function"?f=[s.render({...p,$comp:(l,w={})=>A((o.components??{})[l],{...w,env:u},n)})]:f=s.content?[s.content]:[];let d=[],m=s.id||a.id;if(s.style){let l=typeof s.style=="function"?s.style(p):s.style;d.push([`widget-${m}`,j(l,s.cssSelector??"")])}s.stylesheets?.forEach(l=>{d.push(l)}),d.length>0&&n.set(m,d),s.scripts&&r.set(m,s.scripts),_.set(a.id,s)}}return o.prod?f.join(""):`<${g} id="${a.id}" data-render-id="${a["data-render-id"]}">${await T(f,t,n,r,o)}</${g}>`}c(v,"parseWidget");async function T(e,t={},n=new Map,r=new Map,o=k){return e?(await Promise.all(e.map(async g=>{if(typeof g=="string")return x(g,t);let{name:f,children:a,...s}=g;if(f==="widget")return v(g,t,n,r,o);if(f==="component")return A((o.components??{})[s.id],{...s,env:{...t,assetsOrigin:o.assetsOrigin,prod:o.prod}},n);let u=M(s,t);return`<${f}`+(u?` ${u}`:"")+`>${await T(a,t,n,r,o)}</${f}>`}))).join(""):""}c(T,"parseTemplateContent");var N=new Map,G=c(e=>Array.from(new Set(e)),"unique"),q=c(async(e,t=k)=>{if(t=E(k,t),N.set(e.id,e),e.extends){let i=N.get(e.extends)||await t.fetchTemplate?.(e.extends);if(!i)throw new Error(`Template "${e.extends}" not found`);N.set(e.extends,i),e=E(i,e)}let{metadata:n={},scripts:r=[],stylesheets:o=[],links:g=[],fonts:f=[],favicons:a=[],content:s="",manifest:u,...p}=e??{},d=new Map,m=new Map,l=typeof s=="string"?s:await T(s,{...p,assetsOrigin:t.assetsOrigin},d,m,t);n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");let w=Object.entries(n).map(([i,h])=>i.startsWith("property:")?`<meta property="${i.replace("property:","")}" content="${h}">`:(i==="msapplication-TileImage"&&(h=`${t.assetsOrigin}${h}`),`<meta name="${i}" content="${h}">`)).join(""),R="";g.forEach(i=>{let h="<link ";Object.entries(i).forEach(([b,S])=>{h+=`${b}="${S}" `}),R+=h+"/>"});let B="";a.forEach(i=>{let h="<link ";Object.entries(i).forEach(([b,S])=>{h+=`${b}="${b==="href"?`${t.assetsOrigin}assets/favicons/`:""}${S}" `}),B+=h+"/>"});let F="";f.forEach(i=>{F+=`<link rel="preload" href="${t.assetsOrigin}assets/fonts/${i}" as="font" crossorigin>`});let $="",V="";Array.from(d.values()).flat().forEach(i=>{o.push(i)}),G(o).forEach(i=>{if(typeof i=="string")i.startsWith("http")?$+=`<link rel="stylesheet" href="${i}" >`:i.endsWith(".css")?$+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${i}">`:V+=i;else if(Array.isArray(i)){let[h,b]=i;$+=`<style id="${h}-style">${j(b)}</style>`}else{$+="<style";let{attributes:h,content:b="",...S}=i;Object.entries(h??S).forEach(([W,y])=>{W==="href"&&!y.startsWith("http")&&y.endsWith(".css")&&(y=`${t.assetsOrigin}stylesheets/${y}`),$+=`${W}="${y}" `}),$+=`>${j(b)}</style>`}}),V&&($=`<style>${V}</style>`+$);let O="";return Array.from(m.values()).flat().forEach(i=>{r.push(i)}),G(r).forEach(i=>{if(typeof i=="string")i.startsWith("http")?O+=`<script src="${i}"><\/script>`:i.endsWith(".js")?O+=`<script src="${t.assetsOrigin}scripts/${i}"><\/script>`:O+=`<script>${i}<\/script>`;else{O+="<script ";let{attributes:h,content:b="",...S}=i;Object.entries(h??S).forEach(([W,y])=>{W==="src"&&!y.startsWith("http")&&y.endsWith(".js")&&(y=`${t.assetsOrigin}scripts/${y}`),O+=`${W}="${y}" `}),O+=`>${b}<\/script>`}}),`<!doctype html><html lang="${p.lang??"en"}"><head><title>${p.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- og --><meta property="og:title" content="${p.title}"><meta property="og:type" content="website"><meta property="og:description" content="${p.description}"><meta property="og:image" content="${p.image}"><meta property="og:url" content="${p.domain}"><meta property="og:site_name" content="${p.title}">`+(w?`<!-- metas -->${w}`:"")+(B?`<!-- favicons -->${B}`:"")+(F?`<!-- fonts -->${F}`:"")+(R?`<!-- links -->${R}`:"")+(u?`<link rel="manifest" href="${t.assetsOrigin}assets/${u}">`:"")+($?`<!-- stylesheets -->${$}`:"")+"</head><body>"+l+(O?`<!-- scripts -->${O}`:"")+"</body></html>"},"parseTemplate");var H=c(e=>{switch(typeof e){case"number":return"number";case"boolean":return"boolean";case"object":return Array.isArray(e)?"list":"group";default:return"text"}},"dataTypeToInputType");function P(e,t){switch(t.type){case"group":return{...t,definitions:Object.entries(e??{}).map(([n,r])=>P(r,(t.definitions??[]).find(o=>o.name===n)??{name:n,type:H(r),value:r}))};case"list":return{...t,definitions:(e??[]).map((n,r)=>P(n,(t.definitions??[])[r]??{name:String(r),type:H(n),value:n}))};default:return{...t,value:e}}}c(P,"mergeDataIntoInputDefinition");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:C,mergeDataIntoInputDefinition:P,attributeToString:M,parseTemplate:q,parseTemplateContent:T,parseWidget:v,parseStyle:j,parseComponent:A}});})();
1
+ "use strict";(()=>{var J=Object.defineProperty;var l=(e,t)=>J(e,"name",{value:t,configurable:!0});function A(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}l(A,"turnCamelToKebabCasing");var Q=new Set(["@media","@supports","@container","@scope","@document","@layer","@starting-style","@page"]);function U(e,t){return t&&e.trim().startsWith(t)}l(U,"startsWithPrefix");function C(e,t=""){if(typeof e=="string")return e;let n=new Map,r=new Map;function o(g,a,i,u){for(let[p,h]of Object.entries(g))if(typeof h=="object"&&h!==null)if(p.startsWith("@")){let m=Array.from(Q).some(c=>p.startsWith(c));o(h,a,p,u||!m)}else{let m,c=A(p);p.startsWith("&")?m=a?p.replace(/&/g,a):p.replace(/&/g,""):a?m=`${a} ${c}`:t&&!u&&!U(c,t)?m=`${t} ${c}`:m=c,o(h,m.trim(),i,u)}else if(h!=null){let m=a;if(t&&!u&&a&&!U(a,t)?m=`${t} ${a}`.trim():!a&&t&&!u&&(m=t),!m)continue;if(i){let c=r.get(i);c||(c=new Map,r.set(i,c));let w=c.get(m);w||(w=new Map,c.set(m,w)),w.set(A(p),h)}else{let c=n.get(m);c||(c=new Map,n.set(m,c)),c.set(A(p),h)}}}l(o,"walk"),o(e,"",null,!1);let f=[];for(let[g,a]of n)if(g&&a.size){let i=[];for(let[u,p]of a)i.push(`${u}: ${p};`);f.push(`${g} { ${i.join(" ")} }`)}for(let[g,a]of r){let i=[];for(let[u,p]of a)if(u&&p.size){let h=[];for(let[m,c]of p)h.push(`${m}: ${c};`);i.push(`${u} { ${h.join(" ")} }`)}i.length&&f.push(`${g} { ${i.join(" ")} }`)}return f.join(" ")}l(C,"parseStyle");function E(e,t){if(e===null||typeof e!="object"||t===null||typeof t!="object")return t;if(Array.isArray(e)&&Array.isArray(t))return Array.from(new Set([...e,...t]));let n=Array.isArray(e)?[...e]:{...e};for(let r in t)t.hasOwnProperty(r)&&(Array.isArray(e[r])&&Array.isArray(t[r])?n[r]=Array.from(new Set([...e[r],...t[r]])):n[r]=E(n[r],t[r]));return n}l(E,"mergeObjects");var k={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};function x(e){return e.reduce((t,{name:n="",value:r,type:o,definitions:f=[]})=>{switch(o){case"group":t[n]=x(f);break;case"options":t[n]={value:r,options:f.map(g=>Object.values(x([g]))[0])};break;case"list":t[n]=f.map(g=>Object.values(x([g]))[0]);break;default:t[n]=r}return t},{})}l(x,"inputDefinitionsToObject");var K=l((e,t)=>String(t??"").split(".").filter(Boolean).reduce((r,o)=>{try{return r&&typeof r=="object"?r[o]:void 0}catch{return null}},e),"deepValue");var S=l((e,t)=>{let n=null;for(;(n=/\{\{([a-z0-9.$_]+)}}/gim.exec(e))!==null;){let[r,o]=n,f=K(t,o);e=e.replace(r,String(f))}return e},"replaceStringValue");var M=l((e,t={})=>Object.entries(e).map(([n,r])=>(typeof r=="string"&&(r=S(r,t)),`${n}="${r}"`)).join(" "),"attributeToString");var L=l((e,t={},n=new Map)=>{if(!e||!e.content)return"";let{content:r,stylesheets:o,id:f}=e;return o&&n.set(`comp-${f}`,o),_(r,t,n)},"parseComponent");function _(e,t={},n=new Map){return e?e.map(r=>{if(typeof r=="string")return S(r,t);let{name:o,children:f,...g}=r,a=M(g,t);return`<${o}`+(a?` ${a}`:"")+`>${_(f,t,n)}</${o}>`}).join(""):""}l(_,"parseContent");var G=new Map;async function F({node:e,data:t={},widgetStyles:n=new Map,widgetScripts:r=new Map,opt:o=k}){let{name:f,children:g,...a}=e;if(e["data-render-id"]=e["data-render-id"]||Math.random().toString(36).substring(2,15),{name:f,children:g,...a}=e,a.id){let i=G.get(a.id)||await o.fetchWidget?.(a.id);if(i){let u={...t,assetsOrigin:o.assetsOrigin,prod:o.prod},p={...x(i?.inputs??[]),...a,env:u};typeof i.render=="function"?g=[i.render({...p,$comp:(c,w={})=>L((o.components??{})[c],{...w,env:u},n)})]:g=i.content?[i.content]:[];let h=[],m=i.id||a.id;if(i.style){let c=typeof i.style=="function"?i.style(p):i.style;h.push([`widget-${m}`,C(c,i.cssSelector??"")])}i.stylesheets?.forEach(c=>{h.push(c)}),h.length>0&&n.set(m,h),i.scripts&&r.set(m,i.scripts),G.set(a.id,i)}}return o.prod?g.join(""):`<${f} id="${a.id}" data-render-id="${a["data-render-id"]}">${await W({content:g,data:t,widgetStyles:n,widgetScripts:r,opt:o})}</${f}>`}l(F,"parseWidget");async function W({content:e,data:t={},widgetStyles:n=new Map,widgetScripts:r=new Map,opt:o=k}){return e?(await Promise.all(e.map(async f=>{if(typeof f=="string")return S(f,t);let{name:g,children:a,...i}=f;if(g==="widget")return F({node:f,data:t,widgetStyles:n,widgetScripts:r,opt:o});if(g==="component")return L((o.components??{})[i.id],{...i,env:{...t,assetsOrigin:o.assetsOrigin,prod:o.prod}},n);let u=M(i,t);return`<${g}`+(u?` ${u}`:"")+`>${await W({content:a,data:t,widgetStyles:n,widgetScripts:r,opt:o})}</${g}>`}))).join(""):""}l(W,"parseTemplateContent");var N=new Map,q=l(e=>Array.from(new Set(e)),"unique"),H=l(async(e,t=k)=>{if(t=E(k,t),N.set(e.id,e),e.extends){let s=N.get(e.extends)||await t.fetchTemplate?.(e.extends);if(!s)throw new Error(`Template "${e.extends}" not found`);N.set(e.extends,s),e=E(s,e)}let{metadata:n={},scripts:r=[],stylesheets:o=[],links:f=[],fonts:g=[],favicons:a=[],content:i="",manifest:u,...p}=e??{},h=new Map,m=new Map,c={...p,assetsOrigin:t.assetsOrigin},w=typeof i=="string"?i:await W({content:i,data:c,widgetStyles:h,widgetScripts:m,opt:t});n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");let z=Object.entries(n).map(([s,d])=>s.startsWith("property:")?`<meta property="${s.replace("property:","")}" content="${d}">`:(s==="msapplication-TileImage"&&(d=`${t.assetsOrigin}${d}`),`<meta name="${s}" content="${d}">`)).join(""),R="";f.forEach(s=>{let d="<link ";Object.entries(s).forEach(([b,j])=>{d+=`${b}="${j}" `}),R+=d+"/>"});let V="";a.forEach(s=>{let d="<link ";Object.entries(s).forEach(([b,j])=>{d+=`${b}="${b==="href"?`${t.assetsOrigin}assets/favicons/`:""}${j}" `}),V+=d+"/>"});let v="";g.forEach(s=>{let d="";s.endsWith(".woff2")?d="font/woff2":s.endsWith(".woff")?d="font/woff":s.endsWith(".ttf")?d="font/ttf":s.endsWith(".otf")&&(d="font/otf"),v+=`<link rel="preload" href="${t.assetsOrigin}assets/fonts/${s}" as="font"${d?` type="${d}"`:""} crossorigin>`});let $="",B="";Array.from(h.values()).flat().forEach(s=>{o.push(s)}),q(o).forEach(s=>{if(typeof s=="string")s.startsWith("http")?$+=`<link rel="stylesheet" href="${s}" >`:s.endsWith(".css")?$+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${s}">`:B+=S(s,c);else if(Array.isArray(s)){let[d,b]=s;$+=`<style id="${d}-style">${C(b)}</style>`}else{$+="<style";let{attributes:d,content:b="",...j}=s;Object.entries(d??j).forEach(([T,y])=>{T==="href"&&!y.startsWith("http")&&y.endsWith(".css")&&(y=`${t.assetsOrigin}stylesheets/${y}`),$+=`${T}="${y}" `}),$+=`>${C(b)}</style>`}}),B&&($=`<style>${B}</style>`+$);let O="";return Array.from(m.values()).flat().forEach(s=>{r.push(s)}),q(r).forEach(s=>{if(typeof s=="string")s.startsWith("http")?O+=`<script src="${s}"><\/script>`:s.endsWith(".js")?O+=`<script src="${t.assetsOrigin}scripts/${s}"><\/script>`:O+=`<script>${s}<\/script>`;else{O+="<script ";let{attributes:d,content:b="",...j}=s;Object.entries(d??j).forEach(([T,y])=>{T==="src"&&!y.startsWith("http")&&y.endsWith(".js")&&(y=`${t.assetsOrigin}scripts/${y}`),O+=`${T}="${y}" `}),O+=`>${b}<\/script>`}}),`<!doctype html><html lang="${p.lang??"en"}"><head><title>${p.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="${p.description}"><!-- og --><meta property="og:title" content="${p.title}"><meta property="og:type" content="website"><meta property="og:description" content="${p.description}"><meta property="og:image" content="${p.image}"><meta property="og:url" content="${p.domain}"><meta property="og:site_name" content="${p.title}">`+(z?`<!-- metas -->${z}`:"")+(V?`<!-- favicons -->${V}`:"")+(v?`<!-- fonts -->${v}`:"")+(R?`<!-- links -->${R}`:"")+(u?`<link rel="manifest" href="${t.assetsOrigin}assets/${u}">`:"")+($?`<!-- stylesheets -->${$}`:"")+"</head><body>"+w+(O?`<!-- scripts -->${O}`:"")+"</body></html>"},"parseTemplate");var Z=l(e=>{switch(typeof e){case"number":return"number";case"boolean":return"boolean";case"object":return Array.isArray(e)?"list":"group";default:return"text"}},"dataTypeToInputType");function P(e,t){switch(t.type){case"group":return{...t,definitions:Object.entries(e??{}).map(([n,r])=>P(r,(t.definitions??[]).find(o=>o.name===n)??{name:n,type:Z(r),value:r}))};case"list":return{...t,definitions:(e??[]).map((n,r)=>P(n,(t.definitions??[])[r]??{name:String(r),type:Z(n),value:n}))};default:return{...t,value:e}}}l(P,"mergeDataIntoInputDefinition");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:x,mergeDataIntoInputDefinition:P,attributeToString:M,parseTemplate:H,parseTemplateContent:W,parseWidget:F,parseStyle:C,parseComponent:L}});})();
2
2
  //# sourceMappingURL=client.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/turn-camel-to-kebab-casing.ts", "../src/parse-style.ts", "../src/utils/merge-objects.ts", "../src/default-parse-options.ts", "../src/utils/input-definitions-to-object.ts", "../src/utils/deep-value.ts", "../src/utils/replace-string-value.ts", "../src/utils/attributes-to-string.ts", "../src/parse-component.ts", "../src/parse-widget.ts", "../src/parse-template.ts", "../src/utils/merge-data-into-input-definition.ts", "../src/client.ts"],
4
- "sourcesContent": ["export function turnCamelToKebabCasing(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n}\n", "import { Style } from './types.ts'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\n\nconst prefixingAtRules = new Set([\n '@media',\n '@supports',\n '@container',\n '@scope',\n '@document',\n '@layer',\n '@starting-style',\n '@page',\n])\n\nfunction startsWithPrefix(sel: string, prefix: string) {\n return prefix && sel.trim().startsWith(prefix)\n}\n\nexport function parseStyle(style: Style, prefix = ''): string {\n if (typeof style === 'string') return style\n\n const selectorMap = new Map<string, Map<string, string>>()\n const atRuleMap = new Map<string, Map<string, Map<string, string>>>()\n\n function walk(\n node: Style,\n sel: string,\n at: string | null,\n insideNonPrefixingAtRule: boolean\n ) {\n for (const [key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n if (key.startsWith('@')) {\n const isPrefixing = Array.from(prefixingAtRules).some(\n (rule) => key.startsWith(rule)\n )\n walk(\n value,\n sel,\n key,\n insideNonPrefixingAtRule || !isPrefixing\n )\n } else {\n let nextSel: string\n const kebabKey = turnCamelToKebabCasing(key)\n if (key.startsWith('&')) {\n nextSel = sel\n ? key.replace(/&/g, sel)\n : key.replace(/&/g, '')\n } else if (sel) {\n nextSel = `${sel} ${kebabKey}`\n } else if (\n prefix &&\n !insideNonPrefixingAtRule &&\n !startsWithPrefix(kebabKey, prefix)\n ) {\n nextSel = `${prefix} ${kebabKey}`\n } else {\n nextSel = kebabKey\n }\n walk(value, nextSel.trim(), at, insideNonPrefixingAtRule)\n }\n } else if (value != null) {\n let finalSel = sel\n if (\n prefix &&\n !insideNonPrefixingAtRule &&\n sel &&\n !startsWithPrefix(sel, prefix)\n ) {\n finalSel = `${prefix} ${sel}`.trim()\n } else if (!sel && prefix && !insideNonPrefixingAtRule) {\n finalSel = prefix\n }\n if (!finalSel) continue\n if (at) {\n let selMap = atRuleMap.get(at)\n if (!selMap) {\n selMap = new Map()\n atRuleMap.set(at, selMap)\n }\n let props = selMap.get(finalSel)\n if (!props) {\n props = new Map()\n selMap.set(finalSel, props)\n }\n props.set(turnCamelToKebabCasing(key), value as string)\n } else {\n let props = selectorMap.get(finalSel)\n if (!props) {\n props = new Map()\n selectorMap.set(finalSel, props)\n }\n props.set(turnCamelToKebabCasing(key), value as string)\n }\n }\n }\n }\n\n walk(style, '', null, false)\n\n const blocks: string[] = []\n\n for (const [sel, props] of selectorMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n blocks.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n\n for (const [at, selMap] of atRuleMap) {\n const inner: string[] = []\n for (const [sel, props] of selMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n inner.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n if (inner.length) blocks.push(`${at} { ${inner.join(' ')} }`)\n }\n\n return blocks.join(' ')\n}\n", "export function mergeObjects(a: unknown, b: unknown) {\n if (a === null || typeof a !== 'object') return b\n if (b === null || typeof b !== 'object') return b\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return Array.from(new Set([...a, ...b]))\n }\n\n const obj = Array.isArray(a) ? [...a] : { ...a }\n\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n // @ts-expect-error a or b in unknown\n if (Array.isArray(a[key]) && Array.isArray(b[key])) {\n // @ts-expect-error a or b in unknown\n obj[key] = Array.from(new Set([...a[key], ...b[key]]))\n } else {\n // @ts-expect-error a or b in unknown\n obj[key] = mergeObjects(obj[key], b[key])\n }\n }\n }\n\n return obj\n}\n", "import { parseOptions } from './types.ts'\n\nexport const defaultOptions: parseOptions = {\n fetchWidget: async () => null,\n fetchTemplate: async () => null,\n prod: false,\n assetsOrigin: '/',\n}\n", "import { ObjectLiteral, InputDefinition } from '../types.ts'\n\nexport function inputDefinitionsToObject(inputDefinitions: InputDefinition[]) {\n return inputDefinitions.reduce(\n (acc, { name = '', value, type, definitions = [] }) => {\n switch (type) {\n case 'group':\n acc[name] = inputDefinitionsToObject(definitions)\n break\n case 'options':\n acc[name] = {\n value,\n options: definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n }),\n }\n break\n case 'list':\n acc[name] = definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n })\n break\n default:\n acc[name] = value\n }\n\n return acc\n },\n {} as ObjectLiteral\n )\n}\n", "import { ObjectLiteral } from '../types.ts'\n\nexport const deepValue = (obj: ObjectLiteral | unknown[], key: string) => {\n const keyParts = String(key ?? '')\n .split('.')\n .filter(Boolean)\n\n return keyParts.reduce((acc, k) => {\n try {\n // @ts-expect-error No index signature with a parameter of type string\n return acc && typeof acc === 'object' ? acc[k] : undefined\n } catch (e) {\n return null\n }\n }, obj) as unknown\n}\n", "import { deepValue } from './deep-value.ts'\n\nexport const replaceStringValue = (\n value: string,\n data: Record<string, unknown>\n) => {\n let match = null\n\n while ((match = /\\{\\{([a-z0-9.$_]+)}}/gim.exec(value)) !== null) {\n const [full, key] = match\n const dv = deepValue(data, key)\n\n value = value.replace(full, String(dv))\n }\n\n return value\n}\n", "import { replaceStringValue } from './replace-string-value.ts'\n\nexport const attributeToString = (\n attributes: Record<string, unknown>,\n data = {}\n) => {\n return Object.entries(attributes)\n .map(([name, value]) => {\n if (typeof value === 'string') {\n value = replaceStringValue(value, data)\n }\n\n return `${name}=\"${value}\"`\n })\n .join(' ')\n}\n", "import {\n Component,\n ObjectLiteral,\n Stylesheet,\n TemplateContent,\n} from './types.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\n\nexport const parseComponent = (\n component: Component,\n props: ObjectLiteral = {},\n widgetStyles: Map<string, Stylesheet[]> = new Map()\n): string => {\n if (!component || !component.content) {\n return ''\n }\n\n const { content, stylesheets, id } = component\n\n if (stylesheets) {\n widgetStyles.set(`comp-${id}`, stylesheets)\n }\n\n return parseContent(content, props, widgetStyles)\n}\n\nfunction parseContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Stylesheet[]> = new Map()\n): string {\n if (!content) {\n return ''\n }\n\n return content\n .map((node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${parseContent(children, data, widgetStyles)}</${name}>`\n )\n })\n .join('')\n}\n", "import {\n parseOptions,\n ContentNode,\n Widget,\n TemplateContent,\n Stylesheet,\n Script,\n ObjectLiteral,\n} from './types.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { parseStyle } from './parse-style.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\nimport { parseComponent } from './parse-component.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\nexport async function parseWidget(\n node: ContentNode,\n data = {},\n widgetStyles: Map<string, Stylesheet[]>,\n widgetScripts: Map<string, Script[]>,\n opt: parseOptions = defaultOptions\n) {\n let { name, children, ...attributes } = node\n\n node['data-render-id'] =\n node['data-render-id'] || Math.random().toString(36).substring(2, 15)\n ;({ name, children, ...attributes } = node)\n\n if (attributes.id) {\n const widget =\n widgetCache.get(attributes.id) ||\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n }\n\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...attributes,\n env,\n }\n\n if (typeof widget.render === 'function') {\n children = [\n widget.render({\n ...props,\n $comp: (\n compId: string,\n compData: ObjectLiteral = {}\n ) => {\n return parseComponent(\n (opt.components ?? {})[compId],\n {\n ...compData,\n env,\n },\n widgetStyles\n )\n },\n }),\n ]\n } else {\n children = widget.content ? [widget.content] : []\n }\n\n const styles = []\n const ID = widget.id || attributes.id\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n\n styles.push([\n `widget-${ID}`,\n parseStyle(styleContent, widget.cssSelector ?? ''),\n ])\n }\n\n widget.stylesheets?.forEach((stylesheet) => {\n styles.push(stylesheet)\n })\n\n if (styles.length > 0) {\n widgetStyles.set(ID, styles)\n }\n\n if (widget.scripts) {\n widgetScripts.set(ID, widget.scripts)\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n\n return (\n `<${name} id=\"${attributes.id}\" data-render-id=\"${attributes['data-render-id']}\"` +\n `>${await parseTemplateContent(children, data, widgetStyles, widgetScripts, opt)}</${name}>`\n )\n}\n\nexport async function parseTemplateContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Stylesheet[]> = new Map(),\n widgetScripts: Map<string, Script[]> = new Map(),\n opt: parseOptions = defaultOptions\n): Promise<string> {\n if (!content) {\n return ''\n }\n\n return (\n await Promise.all(\n content.map(async (node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n if (name === 'widget') {\n return parseWidget(\n node as ContentNode,\n data,\n widgetStyles,\n widgetScripts,\n opt\n )\n }\n\n if (name === 'component') {\n return parseComponent(\n (opt.components ?? {})[attributes.id],\n {\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n },\n },\n widgetStyles\n )\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent(children, data, widgetStyles, widgetScripts, opt)}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import {\n parseOptions,\n Template,\n TemplateContent,\n Stylesheet,\n Script,\n StyleTag,\n ScriptTag,\n} from './types.ts'\nimport { mergeObjects } from './utils/merge-objects.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { parseTemplateContent } from './parse-widget.ts'\nimport { parseStyle } from './parse-style.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nconst unique = (list: unknown[]) => Array.from(new Set(list))\n\nexport const parseTemplate = async (\n temp: Template,\n opt: parseOptions = defaultOptions\n) => {\n opt = mergeObjects(defaultOptions, opt) as parseOptions\n tempCache.set(temp.id, temp)\n\n if (temp.extends) {\n const base =\n tempCache.get(temp.extends) ||\n (await opt.fetchTemplate?.(temp.extends))\n\n if (!base) {\n throw new Error(`Template \"${temp.extends}\" not found`)\n }\n\n tempCache.set(temp.extends, base)\n temp = mergeObjects(base, temp) as Template\n }\n\n const {\n metadata = {},\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n ...data\n } = temp ?? {}\n\n const widgetStyles: Map<string, Stylesheet[]> = new Map()\n const widgetScripts: Map<string, Script[]> = new Map()\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseTemplateContent(\n content as TemplateContent,\n { ...data, assetsOrigin: opt.assetsOrigin },\n widgetStyles,\n widgetScripts,\n opt\n )\n\n if (!metadata['charset']) {\n metadata['charset'] = 'UTF-8'\n }\n\n if (!metadata['viewport']) {\n metadata['viewport'] = 'width=device-width, initial-scale=1.0'\n }\n\n const metas = Object.entries(metadata)\n .map(([key, value]) => {\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n\n let ls = ''\n\n links.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${value}\" `\n })\n\n ls += l + '/>'\n })\n\n let fi = ''\n\n favicons.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${key === 'href' ? `${opt.assetsOrigin}assets/favicons/` : ''}${value}\" `\n })\n\n fi += l + '/>'\n })\n\n let ft = ''\n\n fonts.forEach((font) => {\n ft += `<link rel=\"preload\" href=\"${opt.assetsOrigin}assets/fonts/${font}\" as=\"font\" crossorigin>`\n })\n\n let st = ''\n let loseInlineStyles = ''\n\n Array.from(widgetStyles.values())\n .flat()\n .forEach((style) => {\n stylesheets.push(style)\n })\n\n unique(stylesheets).forEach((stylesheet) => {\n if (typeof stylesheet === 'string') {\n if (stylesheet.startsWith('http')) {\n st += `<link rel=\"stylesheet\" href=\"${stylesheet}\" >`\n } else if (stylesheet.endsWith('.css')) {\n st += `<link rel=\"stylesheet\" href=\"${opt.assetsOrigin}stylesheets/${stylesheet}\">`\n } else {\n loseInlineStyles += stylesheet\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}-style\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n const {\n attributes,\n content = '',\n ...attrs\n } = stylesheet as StyleTag\n\n Object.entries(attributes ?? attrs).forEach(([key, value]) => {\n if (\n key === 'href' &&\n !value.startsWith('http') &&\n value.endsWith('.css')\n ) {\n value = `${opt.assetsOrigin}stylesheets/${value}`\n }\n\n st += `${key}=\"${value}\" `\n })\n\n st += `>${parseStyle(content)}</style>`\n }\n })\n\n if (loseInlineStyles) {\n // make it come before so it can easily be overridden by widget styles\n st = `<style>${loseInlineStyles}</style>` + st\n }\n\n let sc = ''\n\n Array.from(widgetScripts.values())\n .flat()\n .forEach((script) => {\n scripts.push(script)\n })\n\n unique(scripts).forEach((script) => {\n if (typeof script === 'string') {\n if (script.startsWith('http')) {\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n sc += `<script>${script}</script>`\n }\n } else {\n sc += '<script '\n\n const { attributes, content = '', ...attrs } = script as ScriptTag\n\n Object.entries(attributes ?? attrs).forEach(([key, value]) => {\n if (\n key === 'src' &&\n !value.startsWith('http') &&\n value.endsWith('.js')\n ) {\n value = `${opt.assetsOrigin}scripts/${value}`\n }\n\n sc += `${key}=\"${value}\" `\n })\n\n sc += `>${content}</script>`\n }\n })\n\n return (\n '<!doctype html>' +\n `<html lang=\"${data.lang ?? 'en'}\">` +\n '<head>' +\n `<title>${data.title}</title>` +\n '<meta charset=\"UTF-8\">' +\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">' +\n '<!-- og -->' +\n `<meta property=\"og:title\" content=\"${data.title}\">` +\n `<meta property=\"og:type\" content=\"website\">` +\n `<meta property=\"og:description\" content=\"${data.description}\">` +\n `<meta property=\"og:image\" content=\"${data.image}\">` +\n `<meta property=\"og:url\" content=\"${data.domain}\">` +\n `<meta property=\"og:site_name\" content=\"${data.title}\">` +\n (metas ? `<!-- metas -->${metas}` : '') +\n (fi ? `<!-- favicons -->${fi}` : '') +\n (ft ? `<!-- fonts -->${ft}` : '') +\n (ls ? `<!-- links -->${ls}` : '') +\n (manifest\n ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">`\n : '') +\n (st ? `<!-- stylesheets -->${st}` : '') +\n '</head><body>' +\n bodyContent +\n (sc ? `<!-- scripts -->${sc}` : '') +\n '</body></html>'\n )\n}\n", "import {\n InputDefinition,\n ObjectLiteral,\n InputDefinitionType,\n} from '../types.ts'\n\nconst dataTypeToInputType = (data: unknown) => {\n switch (typeof data) {\n case 'number':\n return InputDefinitionType.Number\n case 'boolean':\n return InputDefinitionType.Boolean\n case 'object':\n if (Array.isArray(data)) {\n return InputDefinitionType.List\n } else {\n return InputDefinitionType.Group\n }\n default:\n return InputDefinitionType.Text\n }\n}\n\nexport function mergeDataIntoInputDefinition(\n data: unknown,\n def: InputDefinition\n): InputDefinition {\n switch (def.type) {\n case 'group':\n return {\n ...def,\n definitions: Object.entries((data ?? {}) as ObjectLiteral).map(\n ([k, v]) => {\n return mergeDataIntoInputDefinition(\n v,\n ((def.definitions ?? []) as InputDefinition[]).find(\n (item) => item.name === k\n ) ?? {\n name: k,\n type: dataTypeToInputType(v),\n value: v,\n }\n )\n }\n ),\n }\n case 'list':\n return {\n ...def,\n definitions: ((data ?? []) as Array<unknown>).map(\n (item, idx) => {\n return mergeDataIntoInputDefinition(\n item,\n ((def.definitions ?? [])[idx] ?? {\n name: String(idx),\n type: dataTypeToInputType(item),\n value: item,\n }) as InputDefinition\n )\n }\n ),\n }\n default:\n return {\n ...def,\n value: data,\n }\n }\n}\n", "import { parseStyle } from './parse-style.ts'\nimport { parseTemplate } from './parse-template.ts'\nimport { parseTemplateContent, parseWidget } from './parse-widget.ts'\nimport { parseComponent } from './parse-component.js'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { mergeDataIntoInputDefinition } from './utils/merge-data-into-input-definition.ts'\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nif (window) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window.BFS = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ...(window.BFS || {}),\n SITE_BUILDER: {\n inputDefinitionsToObject,\n mergeDataIntoInputDefinition,\n attributeToString,\n parseTemplate,\n parseTemplateContent,\n parseWidget,\n parseStyle,\n parseComponent,\n },\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["turnCamelToKebabCasing", "str", "__name", "prefixingAtRules", "startsWithPrefix", "sel", "prefix", "__name", "parseStyle", "style", "selectorMap", "atRuleMap", "walk", "node", "at", "insideNonPrefixingAtRule", "key", "value", "isPrefixing", "rule", "nextSel", "kebabKey", "turnCamelToKebabCasing", "finalSel", "selMap", "props", "blocks", "propStrs", "k", "v", "inner", "mergeObjects", "a", "b", "obj", "key", "__name", "defaultOptions", "inputDefinitionsToObject", "inputDefinitions", "acc", "name", "value", "type", "definitions", "item", "__name", "deepValue", "__name", "obj", "key", "acc", "k", "replaceStringValue", "__name", "value", "data", "match", "full", "key", "dv", "deepValue", "attributeToString", "__name", "attributes", "data", "name", "value", "replaceStringValue", "parseComponent", "__name", "component", "props", "widgetStyles", "content", "stylesheets", "id", "parseContent", "data", "node", "replaceStringValue", "name", "children", "attributes", "attrs", "attributeToString", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "widgetScripts", "opt", "defaultOptions", "name", "children", "attributes", "widget", "env", "props", "inputDefinitionsToObject", "compId", "compData", "parseComponent", "styles", "ID", "styleContent", "parseStyle", "stylesheet", "parseTemplateContent", "__name", "content", "replaceStringValue", "attrs", "attributeToString", "tempCache", "unique", "__name", "list", "parseTemplate", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "widgetScripts", "bodyContent", "parseTemplateContent", "metas", "key", "value", "ls", "link", "l", "fi", "ft", "font", "st", "loseInlineStyles", "style", "stylesheet", "id", "parseStyle", "attributes", "attrs", "sc", "script", "dataTypeToInputType", "__name", "data", "mergeDataIntoInputDefinition", "def", "k", "v", "item", "idx", "inputDefinitionsToObject", "mergeDataIntoInputDefinition", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle", "parseComponent"]
4
+ "sourcesContent": ["export function turnCamelToKebabCasing(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n}\n", "import { Style } from './types.ts'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\n\nconst prefixingAtRules = new Set([\n '@media',\n '@supports',\n '@container',\n '@scope',\n '@document',\n '@layer',\n '@starting-style',\n '@page',\n])\n\nfunction startsWithPrefix(sel: string, prefix: string) {\n return prefix && sel.trim().startsWith(prefix)\n}\n\nexport function parseStyle(style: Style, prefix = ''): string {\n if (typeof style === 'string') return style\n\n const selectorMap = new Map<string, Map<string, string>>()\n const atRuleMap = new Map<string, Map<string, Map<string, string>>>()\n\n function walk(\n node: Style,\n sel: string,\n at: string | null,\n insideNonPrefixingAtRule: boolean\n ) {\n for (const [key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n if (key.startsWith('@')) {\n const isPrefixing = Array.from(prefixingAtRules).some(\n (rule) => key.startsWith(rule)\n )\n walk(\n value,\n sel,\n key,\n insideNonPrefixingAtRule || !isPrefixing\n )\n } else {\n let nextSel: string\n const kebabKey = turnCamelToKebabCasing(key)\n if (key.startsWith('&')) {\n nextSel = sel\n ? key.replace(/&/g, sel)\n : key.replace(/&/g, '')\n } else if (sel) {\n nextSel = `${sel} ${kebabKey}`\n } else if (\n prefix &&\n !insideNonPrefixingAtRule &&\n !startsWithPrefix(kebabKey, prefix)\n ) {\n nextSel = `${prefix} ${kebabKey}`\n } else {\n nextSel = kebabKey\n }\n walk(value, nextSel.trim(), at, insideNonPrefixingAtRule)\n }\n } else if (value != null) {\n let finalSel = sel\n if (\n prefix &&\n !insideNonPrefixingAtRule &&\n sel &&\n !startsWithPrefix(sel, prefix)\n ) {\n finalSel = `${prefix} ${sel}`.trim()\n } else if (!sel && prefix && !insideNonPrefixingAtRule) {\n finalSel = prefix\n }\n if (!finalSel) continue\n if (at) {\n let selMap = atRuleMap.get(at)\n if (!selMap) {\n selMap = new Map()\n atRuleMap.set(at, selMap)\n }\n let props = selMap.get(finalSel)\n if (!props) {\n props = new Map()\n selMap.set(finalSel, props)\n }\n props.set(turnCamelToKebabCasing(key), value as string)\n } else {\n let props = selectorMap.get(finalSel)\n if (!props) {\n props = new Map()\n selectorMap.set(finalSel, props)\n }\n props.set(turnCamelToKebabCasing(key), value as string)\n }\n }\n }\n }\n\n walk(style, '', null, false)\n\n const blocks: string[] = []\n\n for (const [sel, props] of selectorMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n blocks.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n\n for (const [at, selMap] of atRuleMap) {\n const inner: string[] = []\n for (const [sel, props] of selMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n inner.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n if (inner.length) blocks.push(`${at} { ${inner.join(' ')} }`)\n }\n\n return blocks.join(' ')\n}\n", "export function mergeObjects(a: unknown, b: unknown) {\n if (a === null || typeof a !== 'object') return b\n if (b === null || typeof b !== 'object') return b\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return Array.from(new Set([...a, ...b]))\n }\n\n const obj = Array.isArray(a) ? [...a] : { ...a }\n\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n // @ts-expect-error a or b in unknown\n if (Array.isArray(a[key]) && Array.isArray(b[key])) {\n // @ts-expect-error a or b in unknown\n obj[key] = Array.from(new Set([...a[key], ...b[key]]))\n } else {\n // @ts-expect-error a or b in unknown\n obj[key] = mergeObjects(obj[key], b[key])\n }\n }\n }\n\n return obj\n}\n", "import { parseOptions } from './types.ts'\n\nexport const defaultOptions: parseOptions = {\n fetchWidget: async () => null,\n fetchTemplate: async () => null,\n prod: false,\n assetsOrigin: '/',\n}\n", "import { ObjectLiteral, InputDefinition } from '../types.ts'\n\nexport function inputDefinitionsToObject(inputDefinitions: InputDefinition[]) {\n return inputDefinitions.reduce(\n (acc, { name = '', value, type, definitions = [] }) => {\n switch (type) {\n case 'group':\n acc[name] = inputDefinitionsToObject(definitions)\n break\n case 'options':\n acc[name] = {\n value,\n options: definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n }),\n }\n break\n case 'list':\n acc[name] = definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n })\n break\n default:\n acc[name] = value\n }\n\n return acc\n },\n {} as ObjectLiteral\n )\n}\n", "import { ObjectLiteral } from '../types.ts'\n\nexport const deepValue = (obj: ObjectLiteral | unknown[], key: string) => {\n const keyParts = String(key ?? '')\n .split('.')\n .filter(Boolean)\n\n return keyParts.reduce((acc, k) => {\n try {\n // @ts-expect-error No index signature with a parameter of type string\n return acc && typeof acc === 'object' ? acc[k] : undefined\n } catch (e) {\n return null\n }\n }, obj) as unknown\n}\n", "import { deepValue } from './deep-value.ts'\n\nexport const replaceStringValue = (\n value: string,\n data: Record<string, unknown>\n) => {\n let match = null\n\n while ((match = /\\{\\{([a-z0-9.$_]+)}}/gim.exec(value)) !== null) {\n const [full, key] = match\n const dv = deepValue(data, key)\n\n value = value.replace(full, String(dv))\n }\n\n return value\n}\n", "import { replaceStringValue } from './replace-string-value.ts'\n\nexport const attributeToString = (\n attributes: Record<string, unknown>,\n data = {}\n) => {\n return Object.entries(attributes)\n .map(([name, value]) => {\n if (typeof value === 'string') {\n value = replaceStringValue(value, data)\n }\n\n return `${name}=\"${value}\"`\n })\n .join(' ')\n}\n", "import {\n Component,\n ObjectLiteral,\n Stylesheet,\n TemplateContent,\n} from './types.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\n\nexport const parseComponent = (\n component: Component,\n props: ObjectLiteral = {},\n widgetStyles: Map<string, Stylesheet[]> = new Map()\n): string => {\n if (!component || !component.content) {\n return ''\n }\n\n const { content, stylesheets, id } = component\n\n if (stylesheets) {\n widgetStyles.set(`comp-${id}`, stylesheets)\n }\n\n return parseContent(content, props, widgetStyles)\n}\n\nfunction parseContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Stylesheet[]> = new Map()\n): string {\n if (!content) {\n return ''\n }\n\n return content\n .map((node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${parseContent(children, data, widgetStyles)}</${name}>`\n )\n })\n .join('')\n}\n", "import {\n parseOptions,\n ContentNode,\n Widget,\n TemplateContent,\n Stylesheet,\n Script,\n ObjectLiteral,\n} from './types.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { parseStyle } from './parse-style.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\nimport { parseComponent } from './parse-component.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\ninterface ParseWidgetOptions {\n node: ContentNode\n data?: ObjectLiteral\n widgetStyles?: Map<string, Stylesheet[]>\n widgetScripts?: Map<string, Script[]>\n opt?: parseOptions\n}\n\ninterface ParseTemplateContentOptions {\n content: TemplateContent\n data?: ObjectLiteral\n widgetStyles?: Map<string, Stylesheet[]>\n widgetScripts?: Map<string, Script[]>\n opt?: parseOptions\n}\n\nexport async function parseWidget({\n node,\n data = {},\n widgetStyles = new Map(),\n widgetScripts = new Map(),\n opt = defaultOptions,\n}: ParseWidgetOptions) {\n let { name, children, ...attributes } = node\n\n node['data-render-id'] =\n node['data-render-id'] || Math.random().toString(36).substring(2, 15)\n ;({ name, children, ...attributes } = node)\n\n if (attributes.id) {\n const widget =\n widgetCache.get(attributes.id) ||\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n }\n\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...attributes,\n env,\n }\n\n if (typeof widget.render === 'function') {\n children = [\n widget.render({\n ...props,\n $comp: (\n compId: string,\n compData: ObjectLiteral = {}\n ) => {\n return parseComponent(\n (opt.components ?? {})[compId],\n {\n ...compData,\n env,\n },\n widgetStyles\n )\n },\n }),\n ]\n } else {\n children = widget.content ? [widget.content] : []\n }\n\n const styles = []\n const ID = widget.id || attributes.id\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n\n styles.push([\n `widget-${ID}`,\n parseStyle(styleContent, widget.cssSelector ?? ''),\n ])\n }\n\n widget.stylesheets?.forEach((stylesheet) => {\n styles.push(stylesheet)\n })\n\n if (styles.length > 0) {\n widgetStyles.set(ID, styles)\n }\n\n if (widget.scripts) {\n widgetScripts.set(ID, widget.scripts)\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n\n return (\n `<${name} id=\"${attributes.id}\" data-render-id=\"${attributes['data-render-id']}\"` +\n `>${await parseTemplateContent({\n content: children,\n data,\n widgetStyles,\n widgetScripts,\n opt,\n })}</${name}>`\n )\n}\n\nexport async function parseTemplateContent({\n content,\n data = {},\n widgetStyles = new Map(),\n widgetScripts = new Map(),\n opt = defaultOptions,\n}: ParseTemplateContentOptions): Promise<string> {\n if (!content) {\n return ''\n }\n\n return (\n await Promise.all(\n content.map(async (node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n if (name === 'widget') {\n return parseWidget({\n node,\n data,\n widgetStyles,\n widgetScripts,\n opt,\n })\n }\n\n if (name === 'component') {\n return parseComponent(\n (opt.components ?? {})[attributes.id],\n {\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n },\n },\n widgetStyles\n )\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent({\n content: children,\n data,\n widgetStyles,\n widgetScripts,\n opt,\n })}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import {\n parseOptions,\n Script,\n ScriptTag,\n Stylesheet,\n StyleTag,\n Template,\n} from './types.ts'\nimport { mergeObjects } from './utils/merge-objects.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { parseTemplateContent } from './parse-widget.ts'\nimport { parseStyle } from './parse-style.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nconst unique = (list: unknown[]) => Array.from(new Set(list))\n\nexport const parseTemplate = async (\n temp: Template,\n opt: parseOptions = defaultOptions\n) => {\n opt = mergeObjects(defaultOptions, opt) as parseOptions\n tempCache.set(temp.id, temp)\n\n if (temp.extends) {\n const base =\n tempCache.get(temp.extends) ||\n (await opt.fetchTemplate?.(temp.extends))\n\n if (!base) {\n throw new Error(`Template \"${temp.extends}\" not found`)\n }\n\n tempCache.set(temp.extends, base)\n temp = mergeObjects(base, temp) as Template\n }\n\n const {\n metadata = {},\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n ...data\n } = temp ?? {}\n\n const widgetStyles: Map<string, Stylesheet[]> = new Map()\n const widgetScripts: Map<string, Script[]> = new Map()\n\n const localData = { ...data, assetsOrigin: opt.assetsOrigin }\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseTemplateContent({\n content,\n data: localData,\n widgetStyles,\n widgetScripts,\n opt,\n })\n\n if (!metadata['charset']) {\n metadata['charset'] = 'UTF-8'\n }\n\n if (!metadata['viewport']) {\n metadata['viewport'] = 'width=device-width, initial-scale=1.0'\n }\n\n const metas = Object.entries(metadata)\n .map(([key, value]) => {\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n\n let ls = ''\n\n links.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${value}\" `\n })\n\n ls += l + '/>'\n })\n\n let fi = ''\n\n favicons.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${key === 'href' ? `${opt.assetsOrigin}assets/favicons/` : ''}${value}\" `\n })\n\n fi += l + '/>'\n })\n\n let ft = ''\n\n fonts.forEach((font) => {\n // Infer font type from extension\n let type = ''\n if (font.endsWith('.woff2')) type = 'font/woff2'\n else if (font.endsWith('.woff')) type = 'font/woff'\n else if (font.endsWith('.ttf')) type = 'font/ttf'\n else if (font.endsWith('.otf')) type = 'font/otf'\n\n ft += `<link rel=\"preload\" href=\"${opt.assetsOrigin}assets/fonts/${font}\" as=\"font\"${type ? ` type=\"${type}\"` : ''} crossorigin>`\n })\n\n let st = ''\n let loseInlineStyles = ''\n\n Array.from(widgetStyles.values())\n .flat()\n .forEach((style) => {\n stylesheets.push(style)\n })\n\n unique(stylesheets).forEach((stylesheet) => {\n if (typeof stylesheet === 'string') {\n if (stylesheet.startsWith('http')) {\n st += `<link rel=\"stylesheet\" href=\"${stylesheet}\" >`\n } else if (stylesheet.endsWith('.css')) {\n st += `<link rel=\"stylesheet\" href=\"${opt.assetsOrigin}stylesheets/${stylesheet}\">`\n } else {\n loseInlineStyles += replaceStringValue(\n stylesheet as string,\n localData\n )\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}-style\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n const {\n attributes,\n content = '',\n ...attrs\n } = stylesheet as StyleTag\n\n Object.entries(attributes ?? attrs).forEach(([key, value]) => {\n if (\n key === 'href' &&\n !value.startsWith('http') &&\n value.endsWith('.css')\n ) {\n value = `${opt.assetsOrigin}stylesheets/${value}`\n }\n\n st += `${key}=\"${value}\" `\n })\n\n st += `>${parseStyle(content)}</style>`\n }\n })\n\n if (loseInlineStyles) {\n // make it come before so it can easily be overridden by widget styles\n st = `<style>${loseInlineStyles}</style>` + st\n }\n\n let sc = ''\n\n Array.from(widgetScripts.values())\n .flat()\n .forEach((script) => {\n scripts.push(script)\n })\n\n unique(scripts).forEach((script) => {\n if (typeof script === 'string') {\n if (script.startsWith('http')) {\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n sc += `<script>${script}</script>`\n }\n } else {\n sc += '<script '\n\n const { attributes, content = '', ...attrs } = script as ScriptTag\n\n Object.entries(attributes ?? attrs).forEach(([key, value]) => {\n if (\n key === 'src' &&\n !value.startsWith('http') &&\n value.endsWith('.js')\n ) {\n value = `${opt.assetsOrigin}scripts/${value}`\n }\n\n sc += `${key}=\"${value}\" `\n })\n\n sc += `>${content}</script>`\n }\n })\n\n return (\n '<!doctype html>' +\n `<html lang=\"${data.lang ?? 'en'}\">` +\n '<head>' +\n `<title>${data.title}</title>` +\n '<meta charset=\"UTF-8\">' +\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">' +\n `<meta name=\"description\" content=\"${data.description}\">` +\n '<!-- og -->' +\n `<meta property=\"og:title\" content=\"${data.title}\">` +\n `<meta property=\"og:type\" content=\"website\">` +\n `<meta property=\"og:description\" content=\"${data.description}\">` +\n `<meta property=\"og:image\" content=\"${data.image}\">` +\n `<meta property=\"og:url\" content=\"${data.domain}\">` +\n `<meta property=\"og:site_name\" content=\"${data.title}\">` +\n (metas ? `<!-- metas -->${metas}` : '') +\n (fi ? `<!-- favicons -->${fi}` : '') +\n (ft ? `<!-- fonts -->${ft}` : '') +\n (ls ? `<!-- links -->${ls}` : '') +\n (manifest\n ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">`\n : '') +\n (st ? `<!-- stylesheets -->${st}` : '') +\n '</head><body>' +\n bodyContent +\n (sc ? `<!-- scripts -->${sc}` : '') +\n '</body></html>'\n )\n}\n", "import {\n InputDefinition,\n ObjectLiteral,\n InputDefinitionType,\n} from '../types.ts'\n\nconst dataTypeToInputType = (data: unknown) => {\n switch (typeof data) {\n case 'number':\n return InputDefinitionType.Number\n case 'boolean':\n return InputDefinitionType.Boolean\n case 'object':\n if (Array.isArray(data)) {\n return InputDefinitionType.List\n } else {\n return InputDefinitionType.Group\n }\n default:\n return InputDefinitionType.Text\n }\n}\n\nexport function mergeDataIntoInputDefinition(\n data: unknown,\n def: InputDefinition\n): InputDefinition {\n switch (def.type) {\n case 'group':\n return {\n ...def,\n definitions: Object.entries((data ?? {}) as ObjectLiteral).map(\n ([k, v]) => {\n return mergeDataIntoInputDefinition(\n v,\n ((def.definitions ?? []) as InputDefinition[]).find(\n (item) => item.name === k\n ) ?? {\n name: k,\n type: dataTypeToInputType(v),\n value: v,\n }\n )\n }\n ),\n }\n case 'list':\n return {\n ...def,\n definitions: ((data ?? []) as Array<unknown>).map(\n (item, idx) => {\n return mergeDataIntoInputDefinition(\n item,\n ((def.definitions ?? [])[idx] ?? {\n name: String(idx),\n type: dataTypeToInputType(item),\n value: item,\n }) as InputDefinition\n )\n }\n ),\n }\n default:\n return {\n ...def,\n value: data,\n }\n }\n}\n", "import { parseStyle } from './parse-style.ts'\nimport { parseTemplate } from './parse-template.ts'\nimport { parseTemplateContent, parseWidget } from './parse-widget.ts'\nimport { parseComponent } from './parse-component.js'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { mergeDataIntoInputDefinition } from './utils/merge-data-into-input-definition.ts'\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nif (window) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window.BFS = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ...(window.BFS || {}),\n SITE_BUILDER: {\n inputDefinitionsToObject,\n mergeDataIntoInputDefinition,\n attributeToString,\n parseTemplate,\n parseTemplateContent,\n parseWidget,\n parseStyle,\n parseComponent,\n },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["turnCamelToKebabCasing", "str", "__name", "prefixingAtRules", "startsWithPrefix", "sel", "prefix", "__name", "parseStyle", "style", "selectorMap", "atRuleMap", "walk", "node", "at", "insideNonPrefixingAtRule", "key", "value", "isPrefixing", "rule", "nextSel", "kebabKey", "turnCamelToKebabCasing", "finalSel", "selMap", "props", "blocks", "propStrs", "k", "v", "inner", "mergeObjects", "a", "b", "obj", "key", "__name", "defaultOptions", "inputDefinitionsToObject", "inputDefinitions", "acc", "name", "value", "type", "definitions", "item", "__name", "deepValue", "__name", "obj", "key", "acc", "k", "replaceStringValue", "__name", "value", "data", "match", "full", "key", "dv", "deepValue", "attributeToString", "__name", "attributes", "data", "name", "value", "replaceStringValue", "parseComponent", "__name", "component", "props", "widgetStyles", "content", "stylesheets", "id", "parseContent", "data", "node", "replaceStringValue", "name", "children", "attributes", "attrs", "attributeToString", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "widgetScripts", "opt", "defaultOptions", "name", "children", "attributes", "widget", "env", "props", "inputDefinitionsToObject", "compId", "compData", "parseComponent", "styles", "ID", "styleContent", "parseStyle", "stylesheet", "parseTemplateContent", "__name", "content", "replaceStringValue", "attrs", "attributeToString", "tempCache", "unique", "__name", "list", "parseTemplate", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "widgetScripts", "localData", "bodyContent", "parseTemplateContent", "metas", "key", "value", "ls", "link", "l", "fi", "ft", "font", "type", "st", "loseInlineStyles", "style", "stylesheet", "replaceStringValue", "id", "parseStyle", "attributes", "attrs", "sc", "script", "dataTypeToInputType", "__name", "data", "mergeDataIntoInputDefinition", "def", "k", "v", "item", "idx", "inputDefinitionsToObject", "mergeDataIntoInputDefinition", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle", "parseComponent"]
7
7
  }
@@ -1 +1 @@
1
- var I=Object.defineProperty;var y=(i,s)=>I(i,"name",{value:s,configurable:!0});import{mergeObjects as W}from"./utils/merge-objects.js";import{defaultOptions as x}from"./default-parse-options.js";import{parseTemplateContent as U}from"./parse-widget.js";import{parseStyle as M}from"./parse-style.js";const O=new Map,A=y(i=>Array.from(new Set(i)),"unique"),R=y(async(i,s=x)=>{if(s=W(x,s),O.set(i.id,i),i.extends){const t=O.get(i.extends)||await s.fetchTemplate?.(i.extends);if(!t)throw new Error(`Template "${i.extends}" not found`);O.set(i.extends,t),i=W(t,i)}const{metadata:p={},scripts:w=[],stylesheets:T=[],links:C=[],fonts:u=[],favicons:k=[],content:$="",manifest:b,...o}=i??{},S=new Map,E=new Map,F=typeof $=="string"?$:await U($,{...o,assetsOrigin:s.assetsOrigin},S,E,s);p.charset||(p.charset="UTF-8"),p.viewport||(p.viewport="width=device-width, initial-scale=1.0");const j=Object.entries(p).map(([t,e])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${e}">`:(t==="msapplication-TileImage"&&(e=`${s.assetsOrigin}${e}`),`<meta name="${t}" content="${e}">`)).join("");let h="";C.forEach(t=>{let e="<link ";Object.entries(t).forEach(([a,l])=>{e+=`${a}="${l}" `}),h+=e+"/>"});let m="";k.forEach(t=>{let e="<link ";Object.entries(t).forEach(([a,l])=>{e+=`${a}="${a==="href"?`${s.assetsOrigin}assets/favicons/`:""}${l}" `}),m+=e+"/>"});let g="";u.forEach(t=>{g+=`<link rel="preload" href="${s.assetsOrigin}assets/fonts/${t}" as="font" crossorigin>`});let n="",d="";Array.from(S.values()).flat().forEach(t=>{T.push(t)}),A(T).forEach(t=>{if(typeof t=="string")t.startsWith("http")?n+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?n+=`<link rel="stylesheet" href="${s.assetsOrigin}stylesheets/${t}">`:d+=t;else if(Array.isArray(t)){const[e,a]=t;n+=`<style id="${e}-style">${M(a)}</style>`}else{n+="<style";const{attributes:e,content:a="",...l}=t;Object.entries(e??l).forEach(([f,r])=>{f==="href"&&!r.startsWith("http")&&r.endsWith(".css")&&(r=`${s.assetsOrigin}stylesheets/${r}`),n+=`${f}="${r}" `}),n+=`>${M(a)}</style>`}}),d&&(n=`<style>${d}</style>`+n);let c="";return Array.from(E.values()).flat().forEach(t=>{w.push(t)}),A(w).forEach(t=>{if(typeof t=="string")t.startsWith("http")?c+=`<script src="${t}"></script>`:t.endsWith(".js")?c+=`<script src="${s.assetsOrigin}scripts/${t}"></script>`:c+=`<script>${t}</script>`;else{c+="<script ";const{attributes:e,content:a="",...l}=t;Object.entries(e??l).forEach(([f,r])=>{f==="src"&&!r.startsWith("http")&&r.endsWith(".js")&&(r=`${s.assetsOrigin}scripts/${r}`),c+=`${f}="${r}" `}),c+=`>${a}</script>`}}),`<!doctype html><html lang="${o.lang??"en"}"><head><title>${o.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- og --><meta property="og:title" content="${o.title}"><meta property="og:type" content="website"><meta property="og:description" content="${o.description}"><meta property="og:image" content="${o.image}"><meta property="og:url" content="${o.domain}"><meta property="og:site_name" content="${o.title}">`+(j?`<!-- metas -->${j}`:"")+(m?`<!-- favicons -->${m}`:"")+(g?`<!-- fonts -->${g}`:"")+(h?`<!-- links -->${h}`:"")+(b?`<link rel="manifest" href="${s.assetsOrigin}assets/${b}">`:"")+(n?`<!-- stylesheets -->${n}`:"")+"</head><body>"+F+(c?`<!-- scripts -->${c}`:"")+"</body></html>"},"parseTemplate");export{R as parseTemplate};
1
+ var U=Object.defineProperty;var y=(i,s)=>U(i,"name",{value:s,configurable:!0});import{mergeObjects as x}from"./utils/merge-objects.js";import{defaultOptions as M}from"./default-parse-options.js";import{parseTemplateContent as q}from"./parse-widget.js";import{parseStyle as u}from"./parse-style.js";import{replaceStringValue as D}from"./utils/replace-string-value.js";const w=new Map,A=y(i=>Array.from(new Set(i)),"unique"),X=y(async(i,s=M)=>{if(s=x(M,s),w.set(i.id,i),i.extends){const t=w.get(i.extends)||await s.fetchTemplate?.(i.extends);if(!t)throw new Error(`Template "${i.extends}" not found`);w.set(i.extends,t),i=x(t,i)}const{metadata:l={},scripts:O=[],stylesheets:T=[],links:k=[],fonts:C=[],favicons:F=[],content:$="",manifest:S,...o}=i??{},b=new Map,W=new Map,E={...o,assetsOrigin:s.assetsOrigin},I=typeof $=="string"?$:await q({content:$,data:E,widgetStyles:b,widgetScripts:W,opt:s});l.charset||(l.charset="UTF-8"),l.viewport||(l.viewport="width=device-width, initial-scale=1.0");const j=Object.entries(l).map(([t,e])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${e}">`:(t==="msapplication-TileImage"&&(e=`${s.assetsOrigin}${e}`),`<meta name="${t}" content="${e}">`)).join("");let h="";k.forEach(t=>{let e="<link ";Object.entries(t).forEach(([a,f])=>{e+=`${a}="${f}" `}),h+=e+"/>"});let m="";F.forEach(t=>{let e="<link ";Object.entries(t).forEach(([a,f])=>{e+=`${a}="${a==="href"?`${s.assetsOrigin}assets/favicons/`:""}${f}" `}),m+=e+"/>"});let d="";C.forEach(t=>{let e="";t.endsWith(".woff2")?e="font/woff2":t.endsWith(".woff")?e="font/woff":t.endsWith(".ttf")?e="font/ttf":t.endsWith(".otf")&&(e="font/otf"),d+=`<link rel="preload" href="${s.assetsOrigin}assets/fonts/${t}" as="font"${e?` type="${e}"`:""} crossorigin>`});let n="",g="";Array.from(b.values()).flat().forEach(t=>{T.push(t)}),A(T).forEach(t=>{if(typeof t=="string")t.startsWith("http")?n+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?n+=`<link rel="stylesheet" href="${s.assetsOrigin}stylesheets/${t}">`:g+=D(t,E);else if(Array.isArray(t)){const[e,a]=t;n+=`<style id="${e}-style">${u(a)}</style>`}else{n+="<style";const{attributes:e,content:a="",...f}=t;Object.entries(e??f).forEach(([p,r])=>{p==="href"&&!r.startsWith("http")&&r.endsWith(".css")&&(r=`${s.assetsOrigin}stylesheets/${r}`),n+=`${p}="${r}" `}),n+=`>${u(a)}</style>`}}),g&&(n=`<style>${g}</style>`+n);let c="";return Array.from(W.values()).flat().forEach(t=>{O.push(t)}),A(O).forEach(t=>{if(typeof t=="string")t.startsWith("http")?c+=`<script src="${t}"></script>`:t.endsWith(".js")?c+=`<script src="${s.assetsOrigin}scripts/${t}"></script>`:c+=`<script>${t}</script>`;else{c+="<script ";const{attributes:e,content:a="",...f}=t;Object.entries(e??f).forEach(([p,r])=>{p==="src"&&!r.startsWith("http")&&r.endsWith(".js")&&(r=`${s.assetsOrigin}scripts/${r}`),c+=`${p}="${r}" `}),c+=`>${a}</script>`}}),`<!doctype html><html lang="${o.lang??"en"}"><head><title>${o.title}</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="${o.description}"><!-- og --><meta property="og:title" content="${o.title}"><meta property="og:type" content="website"><meta property="og:description" content="${o.description}"><meta property="og:image" content="${o.image}"><meta property="og:url" content="${o.domain}"><meta property="og:site_name" content="${o.title}">`+(j?`<!-- metas -->${j}`:"")+(m?`<!-- favicons -->${m}`:"")+(d?`<!-- fonts -->${d}`:"")+(h?`<!-- links -->${h}`:"")+(S?`<link rel="manifest" href="${s.assetsOrigin}assets/${S}">`:"")+(n?`<!-- stylesheets -->${n}`:"")+"</head><body>"+I+(c?`<!-- scripts -->${c}`:"")+"</body></html>"},"parseTemplate");export{X as parseTemplate};
@@ -1 +1 @@
1
- var C=Object.defineProperty;var l=(s,n)=>C(s,"name",{value:n,configurable:!0});import{defaultOptions as g}from"./default-parse-options.js";import{inputDefinitionsToObject as M}from"./utils/input-definitions-to-object.js";import{parseStyle as b}from"./parse-style.js";import{attributeToString as j}from"./utils/attributes-to-string.js";import{replaceStringValue as w}from"./utils/replace-string-value.js";import{parseComponent as h}from"./parse-component.js";const y=new Map;async function S(s,n={},a,p,e=g){let{name:o,children:i,...r}=s;if(s["data-render-id"]=s["data-render-id"]||Math.random().toString(36).substring(2,15),{name:o,children:i,...r}=s,r.id){const t=y.get(r.id)||await e.fetchWidget?.(r.id);if(t){const c={...n,assetsOrigin:e.assetsOrigin,prod:e.prod},u={...M(t?.inputs??[]),...r,env:c};typeof t.render=="function"?i=[t.render({...u,$comp:(f,$={})=>h((e.components??{})[f],{...$,env:c},a)})]:i=t.content?[t.content]:[];const m=[],d=t.id||r.id;if(t.style){const f=typeof t.style=="function"?t.style(u):t.style;m.push([`widget-${d}`,b(f,t.cssSelector??"")])}t.stylesheets?.forEach(f=>{m.push(f)}),m.length>0&&a.set(d,m),t.scripts&&p.set(d,t.scripts),y.set(r.id,t)}}return e.prod?i.join(""):`<${o} id="${r.id}" data-render-id="${r["data-render-id"]}">${await O(i,n,a,p,e)}</${o}>`}l(S,"parseWidget");async function O(s,n={},a=new Map,p=new Map,e=g){return s?(await Promise.all(s.map(async o=>{if(typeof o=="string")return w(o,n);const{name:i,children:r,...t}=o;if(i==="widget")return S(o,n,a,p,e);if(i==="component")return h((e.components??{})[t.id],{...t,env:{...n,assetsOrigin:e.assetsOrigin,prod:e.prod}},a);const c=j(t,n);return`<${i}`+(c?` ${c}`:"")+`>${await O(r,n,a,p,e)}</${i}>`}))).join(""):""}l(O,"parseTemplateContent");export{O as parseTemplateContent,S as parseWidget};
1
+ var M=Object.defineProperty;var l=(s,r)=>M(s,"name",{value:r,configurable:!0});import{defaultOptions as u}from"./default-parse-options.js";import{inputDefinitionsToObject as $}from"./utils/input-definitions-to-object.js";import{parseStyle as C}from"./parse-style.js";import{attributeToString as b}from"./utils/attributes-to-string.js";import{replaceStringValue as S}from"./utils/replace-string-value.js";import{parseComponent as O}from"./parse-component.js";const y=new Map;async function j({node:s,data:r={},widgetStyles:a=new Map,widgetScripts:p=new Map,opt:e=u}){let{name:o,children:i,...n}=s;if(s["data-render-id"]=s["data-render-id"]||Math.random().toString(36).substring(2,15),{name:o,children:i,...n}=s,n.id){const t=y.get(n.id)||await e.fetchWidget?.(n.id);if(t){const c={...r,assetsOrigin:e.assetsOrigin,prod:e.prod},g={...$(t?.inputs??[]),...n,env:c};typeof t.render=="function"?i=[t.render({...g,$comp:(d,w={})=>O((e.components??{})[d],{...w,env:c},a)})]:i=t.content?[t.content]:[];const f=[],m=t.id||n.id;if(t.style){const d=typeof t.style=="function"?t.style(g):t.style;f.push([`widget-${m}`,C(d,t.cssSelector??"")])}t.stylesheets?.forEach(d=>{f.push(d)}),f.length>0&&a.set(m,f),t.scripts&&p.set(m,t.scripts),y.set(n.id,t)}}return e.prod?i.join(""):`<${o} id="${n.id}" data-render-id="${n["data-render-id"]}">${await h({content:i,data:r,widgetStyles:a,widgetScripts:p,opt:e})}</${o}>`}l(j,"parseWidget");async function h({content:s,data:r={},widgetStyles:a=new Map,widgetScripts:p=new Map,opt:e=u}){return s?(await Promise.all(s.map(async o=>{if(typeof o=="string")return S(o,r);const{name:i,children:n,...t}=o;if(i==="widget")return j({node:o,data:r,widgetStyles:a,widgetScripts:p,opt:e});if(i==="component")return O((e.components??{})[t.id],{...t,env:{...r,assetsOrigin:e.assetsOrigin,prod:e.prod}},a);const c=b(t,r);return`<${i}`+(c?` ${c}`:"")+`>${await h({content:n,data:r,widgetStyles:a,widgetScripts:p,opt:e})}</${i}>`}))).join(""):""}l(h,"parseTemplateContent");export{h as parseTemplateContent,j as parseWidget};
package/dist/esm/types.js CHANGED
@@ -1 +1 @@
1
- var r=(t=>(t.Text="text",t.Html="html",t.Markdown="markdown",t.Number="number",t.Code="code",t.Image="image",t.Video="video",t.Audio="audio",t.File="file",t.Font="font",t.Pdf="pdf",t.Icon="icon",t.Embed="embed",t.Favicon="favicon",t.Email="email",t.Password="password",t.Url="url",t.Tel="tel",t.Color="color",t.Date="date",t.DateTimeLocal="datetime-local",t.Month="month",t.Time="time",t.Week="week",t.Textarea="textarea",t.Boolean="boolean",t.Options="options",t.Group="group",t.List="list",t))(r||{}),s=(e=>(e.Base="base",e.Page="page",e))(s||{});export{r as InputDefinitionType,s as TemplateType};
1
+ var r=(e=>(e.Text="text",e.Html="html",e.Markdown="markdown",e.Number="number",e.Code="code",e.Image="image",e.Video="video",e.Audio="audio",e.File="file",e.Font="font",e.Pdf="pdf",e.Icon="icon",e.Embed="embed",e.Favicon="favicon",e.Email="email",e.Password="password",e.Url="url",e.Tel="tel",e.Color="color",e.Date="date",e.DateTimeLocal="datetime-local",e.Month="month",e.Time="time",e.Week="week",e.Textarea="textarea",e.Boolean="boolean",e.Options="options",e.Group="group",e.List="list",e))(r||{}),s=(t=>(t.Base="base",t.Page="page",t))(s||{});export{r as InputDefinitionType,s as TemplateType};
@@ -1,3 +1,18 @@
1
- import { parseOptions, ContentNode, TemplateContent, Stylesheet, Script } from './types.ts';
2
- export declare function parseWidget(node: ContentNode, data: {} | undefined, widgetStyles: Map<string, Stylesheet[]>, widgetScripts: Map<string, Script[]>, opt?: parseOptions): Promise<string>;
3
- export declare function parseTemplateContent(content: TemplateContent, data?: {}, widgetStyles?: Map<string, Stylesheet[]>, widgetScripts?: Map<string, Script[]>, opt?: parseOptions): Promise<string>;
1
+ import { parseOptions, ContentNode, TemplateContent, Stylesheet, Script, ObjectLiteral } from './types.ts';
2
+ interface ParseWidgetOptions {
3
+ node: ContentNode;
4
+ data?: ObjectLiteral;
5
+ widgetStyles?: Map<string, Stylesheet[]>;
6
+ widgetScripts?: Map<string, Script[]>;
7
+ opt?: parseOptions;
8
+ }
9
+ interface ParseTemplateContentOptions {
10
+ content: TemplateContent;
11
+ data?: ObjectLiteral;
12
+ widgetStyles?: Map<string, Stylesheet[]>;
13
+ widgetScripts?: Map<string, Script[]>;
14
+ opt?: parseOptions;
15
+ }
16
+ export declare function parseWidget({ node, data, widgetStyles, widgetScripts, opt, }: ParseWidgetOptions): Promise<string>;
17
+ export declare function parseTemplateContent({ content, data, widgetStyles, widgetScripts, opt, }: ParseTemplateContentOptions): Promise<string>;
18
+ export {};
@@ -86,6 +86,15 @@ export interface Template {
86
86
  manifest?: string;
87
87
  content?: TemplateContent | string;
88
88
  }
89
+ export interface RenderContentProps extends ObjectLiteral {
90
+ env: {
91
+ id?: string | undefined;
92
+ assetsOrigin: string | undefined;
93
+ prod: boolean | undefined;
94
+ } & ObjectLiteral;
95
+ $comp: (compId: string, compData?: ObjectLiteral) => string;
96
+ }
97
+ export type RenderWidgetContent = (props: RenderContentProps) => string;
89
98
  export interface Widget {
90
99
  id: string;
91
100
  name: string;
@@ -94,7 +103,7 @@ export interface Widget {
94
103
  style?: Style | ((props?: Record<string, unknown>) => Style);
95
104
  stylesheets?: Array<Stylesheet>;
96
105
  inputs?: InputDefinition<unknown>[];
97
- render?: <P>(props: P) => string;
106
+ render?: RenderWidgetContent;
98
107
  content?: string;
99
108
  }
100
109
  export interface Component {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beforesemicolon/site-builder",
3
- "version": "0.29.0",
3
+ "version": "0.32.0",
4
4
  "description": "Site builder based on JSON files",
5
5
  "engines": {
6
6
  "node": ">=18.16.0"