@beforesemicolon/site-builder 0.12.0 → 0.13.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.
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var r=(t,s)=>{for(var n in s)p(t,n,{get:s[n],enumerable:!0})},c=(t,s,n,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let e of i(s))!l.call(t,e)&&e!==n&&p(t,e,{get:()=>s[e],enumerable:!(a=o(s,e))||a.enumerable});return t};var f=t=>c(p({},"__esModule",{value:!0}),t);var d={};r(d,{defaultOptions:()=>O});module.exports=f(d);const O={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};0&&(module.exports={defaultOptions});
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var $=Object.prototype.hasOwnProperty;var p=(t,r)=>o(t,"name",{value:r,configurable:!0});var a=(t,r)=>{for(var e in r)o(t,e,{get:r[e],enumerable:!0})},c=(t,r,e,f)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of u(r))!$.call(t,n)&&n!==e&&o(t,n,{get:()=>r[n],enumerable:!(f=b(r,n))||f.enumerable});return t};var g=t=>c(o({},"__esModule",{value:!0}),t);var j={};a(j,{parseStyle:()=>m});module.exports=g(j);var i=require("./utils/turn-camel-to-kebab-casing.js");function m(t){return typeof t=="string"?t:Object.entries(t).map(([r,e])=>typeof e=="object"?`${(0,i.turnCamelToKebabCasing)(r)} { ${m(e)} }`:`${(0,i.turnCamelToKebabCasing)(r)}: ${e};`).join(" ")}p(m,"parseStyle");0&&(module.exports={parseStyle});
@@ -1,25 +1,25 @@
1
- "use strict";var y=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var u=(i,e)=>y(i,"name",{value:e,configurable:!0});var I=(i,e)=>{for(var s in e)y(i,s,{get:e[s],enumerable:!0})},K=(i,e,s,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of v(e))!D.call(i,o)&&o!==s&&y(i,o,{get:()=>e[o],enumerable:!(p=U(e,o))||p.enumerable});return i};var V=i=>K(y({},"__esModule",{value:!0}),i);var q={};I(q,{parseTemplate:()=>_});module.exports=V(q);var A=require("./utils/input-definitions-to-object.js"),E=require("./utils/replace-string-value.js"),M=require("./utils/turn-camel-to-kebab-casing.js"),x=require("./utils/merge-objects.js");const P=new Map,j=new Map,W={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"},_=u(async(i,e=W)=>{if(e=(0,x.mergeObjects)(W,e),j.set(i.id,i),i.extends){const t=j.get(i.extends)||await e.fetchTemplate(i.extends);if(!t)throw new Error(`Template "${i.extends}" not found`);j.set(i.extends,t),i=(0,x.mergeObjects)(t,i)}const{metadata:s={},scripts:p=[],stylesheets:o=[],links:m=[],fonts:g=[],favicons:c=[],content:d="",manifest:n,...r}=i??{},h=new Map,F=typeof d=="string"?d:await k(d,r,h,e);s.charset||(s.charset="UTF-8"),s.viewport||(s.viewport="width=device-width, initial-scale=1.0");const S=Object.entries(s).map(([t,a])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${a}">`:(t==="msapplication-TileImage"&&(a=`${e.assetsOrigin}${a}`),`<meta name="${t}" content="${a}">`)).join("");let O="";m.forEach(t=>{let a="<link ";Object.entries(t).forEach(([l,T])=>{a+=`${l}="${T}" `}),O+=a+"/>"});let b="";c.forEach(t=>{let a="<link ";Object.entries(t).forEach(([l,T])=>{a+=`${l}="${l==="href"?`${e.assetsOrigin}assets/favicons/`:""}${T}" `}),b+=a+"/>"});let w="";g.forEach(t=>{w+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font" crossorigin="anonymous">`});let f="";[...o,...Array.from(h.entries())].forEach(t=>{if(typeof t=="string")t.startsWith("http")?f+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?f+=`<link rel="stylesheet" href="${e.assetsOrigin}stylesheets/${t}">`:f+=`<style>${t}</style>`;else if(Array.isArray(t)){const[a,l]=t;f+=`<style id="${a}">${C(l)}</style>`}else f+="<style",Object.entries(t.attributes).forEach(([a,l])=>{f+=`${a}="${l}" `}),f+="></style>"});let $="";return p.forEach(t=>{typeof t=="string"?t.startsWith("http")?$+=`<script src="${t}"></script>`:t.endsWith(".js")?$+=`<script src="${e.assetsOrigin}scripts/${t}"></script>`:$+=`<script>${t}</script>`:($+="<script ",Object.entries(t).forEach(([a,l])=>{$+=`${a}="${l}" `}),$+="></script>")}),`<!doctype html>
2
- <html lang="${r.lang??"en"}">
1
+ "use strict";var $=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var j=(s,e)=>$(s,"name",{value:e,configurable:!0});var S=(s,e)=>{for(var i in e)$(s,i,{get:e[i],enumerable:!0})},U=(s,e,i,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of M(e))!F.call(s,c)&&c!==i&&$(s,c,{get:()=>e[c],enumerable:!(p=A(e,c))||p.enumerable});return s};var I=s=>U($({},"__esModule",{value:!0}),s);var q={};S(q,{parseTemplate:()=>_});module.exports=I(q);var O=require("./utils/merge-objects.js"),w=require("./default-parse-options.js"),x=require("./parse-widget.js"),u=require("./parse-style.js");const y=new Map,_=j(async(s,e=w.defaultOptions)=>{if(e=(0,O.mergeObjects)(w.defaultOptions,e),y.set(s.id,s),s.extends){const t=y.get(s.extends)||await e.fetchTemplate(s.extends);if(!t)throw new Error(`Template "${s.extends}" not found`);y.set(s.extends,t),s=(0,O.mergeObjects)(t,s)}const{metadata:i={},scripts:p=[],stylesheets:c=[],links:v=[],fonts:C=[],favicons:W=[],content:f="",manifest:T,...o}=s??{},b=new Map,k=typeof f=="string"?f:await(0,x.parseTemplateContent)(f,o,b,e);i.charset||(i.charset="UTF-8"),i.viewport||(i.viewport="width=device-width, initial-scale=1.0");const E=Object.entries(i).map(([t,r])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${r}">`:(t==="msapplication-TileImage"&&(r=`${e.assetsOrigin}${r}`),`<meta name="${t}" content="${r}">`)).join("");let m="";v.forEach(t=>{let r="<link ";Object.entries(t).forEach(([n,g])=>{r+=`${n}="${g}" `}),m+=r+"/>"});let h="";W.forEach(t=>{let r="<link ";Object.entries(t).forEach(([n,g])=>{r+=`${n}="${n==="href"?`${e.assetsOrigin}assets/favicons/`:""}${g}" `}),h+=r+"/>"});let d="";C.forEach(t=>{d+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font" crossorigin="anonymous">`});let a="";[...c,...Array.from(b.entries())].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}">`:a+=`<style>${t}</style>`;else if(Array.isArray(t)){const[r,n]=t;a+=`<style id="${r}">${(0,u.parseStyle)(n)}</style>`}else a+="<style",Object.entries(t.attributes).forEach(([r,n])=>{a+=`${r}="${n}" `}),a+="></style>"});let l="";return p.forEach(t=>{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>`:(l+="<script ",Object.entries(t).forEach(([r,n])=>{l+=`${r}="${n}" `}),l+="></script>")}),`<!doctype html>
2
+ <html lang="${o.lang??"en"}">
3
3
  <head>
4
- <title>${r.title}</title>
4
+ <title>${o.title}</title>
5
5
  <meta charset="UTF-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <!-- og -->
8
- <meta property="og:title" content="${r.title}">
8
+ <meta property="og:title" content="${o.title}">
9
9
  <meta property="og:type" content="website">
10
- <meta property="og:description" content="${r.description}">
11
- <meta property="og:image" content="${r.image}">
12
- <meta property="og:url" content="${r.domain}">
13
- <meta property="og:site_name" content="${r.title}">
14
- ${S?`<!-- metas -->${S}`:""}
15
- ${b?`<!-- favicons -->${b}`:""}
16
- ${w?`<!-- fonts -->${w}`:""}
17
- ${O?`<!-- links -->${O}`:""}
18
- ${n?`<link rel="manifest" href="${e.assetsOrigin}assets/${n}">`:""}
19
- ${f?`<!-- stylesheets -->${f}`:""}
10
+ <meta property="og:description" content="${o.description}">
11
+ <meta property="og:image" content="${o.image}">
12
+ <meta property="og:url" content="${o.domain}">
13
+ <meta property="og:site_name" content="${o.title}">
14
+ ${E?`<!-- metas -->${E}`:""}
15
+ ${h?`<!-- favicons -->${h}`:""}
16
+ ${d?`<!-- fonts -->${d}`:""}
17
+ ${m?`<!-- links -->${m}`:""}
18
+ ${T?`<link rel="manifest" href="${e.assetsOrigin}assets/${T}">`:""}
19
+ ${a?`<!-- stylesheets -->${a}`:""}
20
20
  </head>
21
21
  <body>
22
- ${F}
23
- ${$?"<!-- scripts -->"+$:""}
22
+ ${k}
23
+ ${l?"<!-- scripts -->"+l:""}
24
24
  </body>
25
- </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");function C(i){return typeof i=="string"?i:Object.entries(i).map(([e,s])=>typeof s=="object"?`${(0,M.turnCamelToKebabCasing)(e)} { ${C(s)} }`:`${(0,M.turnCamelToKebabCasing)(e)}: ${s};`).join(" ")}u(C,"parseStyle");async function k(i,e={},s,p=W){return(await Promise.all(i.map(async o=>{if(typeof o=="string")return(0,E.replaceStringValue)(o,e);let{name:m,children:g,...c}=o;if(m==="widget"){if(o["data-render-id"]=o["data-render-id"]||Math.random().toString(36).substring(2,15),{name:m,children:g,...c}=o,c.id){const n=P.get(c.id)||await p.fetchWidget(c.id);if(n){const r={...(0,A.inputDefinitionsToObject)(n?.inputs??[]),...c,env:{...e,assetsOrigin:p.assetsOrigin}};if(typeof n.render=="function"?g=[n.render(r)]:g=n.content?[n.content]:[],n.style){const h=typeof n.style=="function"?n.style(r):n.style;s.set(n.id||c.id,C(h))}P.set(c.id,n)}}if(p.prod)return g.join("")}const d=Object.entries(c).map(([n,r])=>(typeof r=="string"&&(r=(0,E.replaceStringValue)(r,e)),`${n}="${r}"`)).join(" ");return`<${m}`+(d?` ${d}`:"")+`>${await k(g,e,s,p)}</${m}>`}))).join("")}u(k,"parseContent");0&&(module.exports={parseTemplate});
25
+ </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");0&&(module.exports={parseTemplate});
@@ -0,0 +1 @@
1
+ "use strict";var m=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var f=(e,t)=>m(e,"name",{value:t,configurable:!0});var M=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},S=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of b(t))!h.call(e,i)&&i!==r&&m(e,i,{get:()=>t[i],enumerable:!(s=w(t,i))||s.enumerable});return e};var W=e=>S(m({},"__esModule",{value:!0}),e);var j={};M(j,{parseTemplateContent:()=>u,parseWidget:()=>$});module.exports=W(j);var c=require("./default-parse-options.js"),y=require("./utils/input-definitions-to-object.js"),C=require("./parse-style.js"),l=require("./utils/attributes-to-string.js"),T=require("./utils/replace-string-value.js");const d=new Map;async function $(e,t={},r,s=c.defaultOptions){let{name:i,children:a,...o}=e;if(e["data-render-id"]=e["data-render-id"]||Math.random().toString(36).substring(2,15),{name:i,children:a,...o}=e,o.id){const n=d.get(o.id)||await s.fetchWidget(o.id);if(n){const g={...(0,y.inputDefinitionsToObject)(n?.inputs??[]),...o,env:{...t,assetsOrigin:s.assetsOrigin}};if(typeof n.render=="function"?a=[n.render(g)]:a=n.content?[n.content]:[],n.style){const O=typeof n.style=="function"?n.style(g):n.style;r.set(n.id||o.id,(0,C.parseStyle)(O))}d.set(o.id,n)}}if(s.prod)return a.join("");const p=(0,l.attributeToString)(o,t);return`<${i}`+(p?` ${p}`:"")+`>${await u(a,t,r,s)}</${i}>`}f($,"parseWidget");async function u(e,t={},r,s=c.defaultOptions){return(await Promise.all(e.map(async i=>{if(typeof i=="string")return(0,T.replaceStringValue)(i,t);const{name:a,children:o,...p}=i;if(a==="widget")return $(i,t,r,s);const n=(0,l.attributeToString)(p,t);return`<${a}`+(n?` ${n}`:"")+`>${await u(o,t,r,s)}</${a}>`}))).join("")}f(u,"parseTemplateContent");0&&(module.exports={parseTemplateContent,parseWidget});
package/dist/cjs/types.js CHANGED
@@ -1 +1 @@
1
- "use strict";var g=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var b=(e,t)=>{for(var s in t)g(e,s,{get:t[s],enumerable:!0})},i=(e,t,s,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of m(t))!c.call(e,a)&&a!==s&&g(e,a,{get:()=>t[a],enumerable:!(o=n(t,a))||o.enumerable});return e};var x=e=>i(g({},"__esModule",{value:!0}),e);var k={};b(k,{InputDefinitionType:()=>l,TemplateType:()=>d});module.exports=x(k);var l=(r=>(r.Text="text",r.Html="html",r.Markdown="markdown",r.Number="number",r.Code="code",r.Image="image",r.Video="video",r.Audio="audio",r.File="file",r.Font="font",r.Pdf="pdf",r.Icon="icon",r.Embed="embed",r.Favicon="favicon",r.Email="email",r.Password="password",r.Url="url",r.Tel="tel",r.Color="color",r.Date="date",r.DateTimeLocal="datetime-local",r.Month="month",r.Time="time",r.Week="week",r.Textarea="textarea",r.Boolean="boolean",r.Options="options",r.Group="group",r.List="list",r))(l||{}),d=(s=>(s.Base="base",s.Page="page",s))(d||{});0&&(module.exports={InputDefinitionType,TemplateType});
1
+ "use strict";var g=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var i=(t,r)=>{for(var s in r)g(t,s,{get:r[s],enumerable:!0})},b=(t,r,s,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of m(r))!c.call(t,a)&&a!==s&&g(t,a,{get:()=>r[a],enumerable:!(l=d(r,a))||l.enumerable});return t};var x=t=>b(g({},"__esModule",{value:!0}),t);var k={};i(k,{InputDefinitionType:()=>o,TemplateType:()=>n});module.exports=x(k);var o=(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))(o||{}),n=(s=>(s.Base="base",s.Page="page",s))(n||{});0&&(module.exports={InputDefinitionType,TemplateType});
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var p=(t,r)=>o(t,"name",{value:r,configurable:!0});var m=(t,r)=>{for(var e in r)o(t,e,{get:r[e],enumerable:!0})},b=(t,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of s(r))!f.call(t,i)&&i!==e&&o(t,i,{get:()=>r[i],enumerable:!(n=g(r,i))||n.enumerable});return t};var j=t=>b(o({},"__esModule",{value:!0}),t);var S={};m(S,{attributeToString:()=>u});module.exports=j(S);var c=require("./replace-string-value.js");const u=p((t,r={})=>Object.entries(t).map(([e,n])=>(typeof n=="string"&&(n=(0,c.replaceStringValue)(n,r)),`${e}="${n}"`)).join(" "),"attributeToString");0&&(module.exports={attributeToString});
package/dist/client.js CHANGED
@@ -1,26 +1,26 @@
1
- "use strict";(()=>{var I=Object.defineProperty;var c=(e,t)=>I(e,"name",{value:t,configurable:!0});function y(e){return e.reduce((t,{name:n,value:i,type:l,definitions:f=[]})=>{switch(l){case"group":t[n]=y(f);break;case"list":t[n]=f.map(g=>Object.values(y([g]))[0]);break;default:t[n]=i}return t},{})}c(y,"inputDefinitionsToObject");var W=c((e,t)=>String(t??"").split(".").filter(Boolean).reduce((i,l)=>{try{return i&&typeof i=="object"?i[l]:void 0}catch{return null}},e),"deepValue");var A=c((e,t)=>{let n=null;for(;(n=/{{([a-z0-9.$_]+)}}/gim.exec(e))!==null;){let[i,l]=n,f=W(t,l);e=e.replace(i,String(f))}return e},"replaceStringValue");var k=c(e=>{let t=e.match(/(?:[A-Z]+(?=[A-Z][a-z])|[A-Z]+|[a-zA-Z])[^A-Z]*/g);if(t){for(let n=0;n<t.length;n++)t[n]=t[n].toLowerCase();return t.join("-")}return name},"turnCamelToKebabCasing");function w(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 i in t)t.hasOwnProperty(i)&&(Array.isArray(e[i])&&Array.isArray(t[i])?n[i]=Array.from(new Set([...e[i],...t[i]])):n[i]=w(n[i],t[i]));return n}c(w,"mergeObjects");var M=new Map,S=new Map,C={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"},P=c(async(e,t=C)=>{if(t=w(C,t),S.set(e.id,e),e.extends){let r=S.get(e.extends)||await t.fetchTemplate(e.extends);if(!r)throw new Error(`Template "${e.extends}" not found`);S.set(e.extends,r),e=w(r,e)}let{metadata:n={},scripts:i=[],stylesheets:l=[],links:f=[],fonts:g=[],favicons:p=[],content:$="",manifest:s,...o}=e??{},h=new Map,L=typeof $=="string"?$:await D($,o,h,t);n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");let E=Object.entries(n).map(([r,a])=>r.startsWith("property:")?`<meta property="${r.replace("property:","")}" content="${a}">`:(r==="msapplication-TileImage"&&(a=`${t.assetsOrigin}${a}`),`<meta name="${r}" content="${a}">`)).join(""),O="";f.forEach(r=>{let a="<link ";Object.entries(r).forEach(([m,T])=>{a+=`${m}="${T}" `}),O+=a+"/>"});let j="";p.forEach(r=>{let a="<link ";Object.entries(r).forEach(([m,T])=>{a+=`${m}="${m==="href"?`${t.assetsOrigin}assets/favicons/`:""}${T}" `}),j+=a+"/>"});let b="";g.forEach(r=>{b+=`<link rel="preload" href="${t.assetsOrigin}assets/fonts/${r}" as="font" crossorigin="anonymous">`});let d="";[...l,...Array.from(h.entries())].forEach(r=>{if(typeof r=="string")r.startsWith("http")?d+=`<link rel="stylesheet" href="${r}" >`:r.endsWith(".css")?d+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${r}">`:d+=`<style>${r}</style>`;else if(Array.isArray(r)){let[a,m]=r;d+=`<style id="${a}">${x(m)}</style>`}else d+="<style",Object.entries(r.attributes).forEach(([a,m])=>{d+=`${a}="${m}" `}),d+="></style>"});let u="";return i.forEach(r=>{typeof r=="string"?r.startsWith("http")?u+=`<script src="${r}"><\/script>`:r.endsWith(".js")?u+=`<script src="${t.assetsOrigin}scripts/${r}"><\/script>`:u+=`<script>${r}<\/script>`:(u+="<script ",Object.entries(r).forEach(([a,m])=>{u+=`${a}="${m}" `}),u+="><\/script>")}),`<!doctype html>
2
- <html lang="${o.lang??"en"}">
1
+ "use strict";(()=>{var Z=Object.defineProperty;var o=(e,t)=>Z(e,"name",{value:t,configurable:!0});var k=o(e=>{let t=e.match(/(?:[A-Z]+(?=[A-Z][a-z])|[A-Z]+|[a-zA-Z])[^A-Z]*/g);if(t){for(let r=0;r<t.length;r++)t[r]=t[r].toLowerCase();return t.join("-")}return name},"turnCamelToKebabCasing");function $(e){return typeof e=="string"?e:Object.entries(e).map(([t,r])=>typeof r=="object"?`${k(t)} { ${$(r)} }`:`${k(t)}: ${r};`).join(" ")}o($,"parseStyle");function b(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 r=Array.isArray(e)?[...e]:{...e};for(let n in t)t.hasOwnProperty(n)&&(Array.isArray(e[n])&&Array.isArray(t[n])?r[n]=Array.from(new Set([...e[n],...t[n]])):r[n]=b(r[n],t[n]));return r}o(b,"mergeObjects");var d={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};function h(e){return e.reduce((t,{name:r,value:n,type:p,definitions:a=[]})=>{switch(p){case"group":t[r]=h(a);break;case"list":t[r]=a.map(c=>Object.values(h([c]))[0]);break;default:t[r]=n}return t},{})}o(h,"inputDefinitionsToObject");var L=o((e,t)=>String(t??"").split(".").filter(Boolean).reduce((n,p)=>{try{return n&&typeof n=="object"?n[p]:void 0}catch{return null}},e),"deepValue");var j=o((e,t)=>{let r=null;for(;(r=/{{([a-z0-9.$_]+)}}/gim.exec(e))!==null;){let[n,p]=r,a=L(t,p);e=e.replace(n,String(a))}return e},"replaceStringValue");var T=o((e,t={})=>Object.entries(e).map(([r,n])=>(typeof n=="string"&&(n=j(n,t)),`${r}="${n}"`)).join(" "),"attributeToString");var I=new Map;async function E(e,t={},r,n=d){let{name:p,children:a,...c}=e;if(e["data-render-id"]=e["data-render-id"]||Math.random().toString(36).substring(2,15),{name:p,children:a,...c}=e,c.id){let s=I.get(c.id)||await n.fetchWidget(c.id);if(s){let O={...h(s?.inputs??[]),...c,env:{...t,assetsOrigin:n.assetsOrigin}};if(typeof s.render=="function"?a=[s.render(O)]:a=s.content?[s.content]:[],s.style){let f=typeof s.style=="function"?s.style(O):s.style;r.set(s.id||c.id,$(f))}I.set(c.id,s)}}if(n.prod)return a.join("");let y=T(c,t);return`<${p}`+(y?` ${y}`:"")+`>${await w(a,t,r,n)}</${p}>`}o(E,"parseWidget");async function w(e,t={},r,n=d){return(await Promise.all(e.map(async p=>{if(typeof p=="string")return j(p,t);let{name:a,children:c,...y}=p;if(a==="widget")return E(p,t,r,n);let s=T(y,t);return`<${a}`+(s?` ${s}`:"")+`>${await w(c,t,r,n)}</${a}>`}))).join("")}o(w,"parseTemplateContent");var W=new Map,P=o(async(e,t=d)=>{if(t=b(d,t),W.set(e.id,e),e.extends){let i=W.get(e.extends)||await t.fetchTemplate(e.extends);if(!i)throw new Error(`Template "${e.extends}" not found`);W.set(e.extends,i),e=b(i,e)}let{metadata:r={},scripts:n=[],stylesheets:p=[],links:a=[],fonts:c=[],favicons:y=[],content:s="",manifest:O,...f}=e??{},M=new Map,V=typeof s=="string"?s:await w(s,f,M,t);r.charset||(r.charset="UTF-8"),r.viewport||(r.viewport="width=device-width, initial-scale=1.0");let D=Object.entries(r).map(([i,l])=>i.startsWith("property:")?`<meta property="${i.replace("property:","")}" content="${l}">`:(i==="msapplication-TileImage"&&(l=`${t.assetsOrigin}${l}`),`<meta name="${i}" content="${l}">`)).join(""),S="";a.forEach(i=>{let l="<link ";Object.entries(i).forEach(([m,x])=>{l+=`${m}="${x}" `}),S+=l+"/>"});let A="";y.forEach(i=>{let l="<link ";Object.entries(i).forEach(([m,x])=>{l+=`${m}="${m==="href"?`${t.assetsOrigin}assets/favicons/`:""}${x}" `}),A+=l+"/>"});let C="";c.forEach(i=>{C+=`<link rel="preload" href="${t.assetsOrigin}assets/fonts/${i}" as="font" crossorigin="anonymous">`});let u="";[...p,...Array.from(M.entries())].forEach(i=>{if(typeof i=="string")i.startsWith("http")?u+=`<link rel="stylesheet" href="${i}" >`:i.endsWith(".css")?u+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${i}">`:u+=`<style>${i}</style>`;else if(Array.isArray(i)){let[l,m]=i;u+=`<style id="${l}">${$(m)}</style>`}else u+="<style",Object.entries(i.attributes).forEach(([l,m])=>{u+=`${l}="${m}" `}),u+="></style>"});let g="";return n.forEach(i=>{typeof i=="string"?i.startsWith("http")?g+=`<script src="${i}"><\/script>`:i.endsWith(".js")?g+=`<script src="${t.assetsOrigin}scripts/${i}"><\/script>`:g+=`<script>${i}<\/script>`:(g+="<script ",Object.entries(i).forEach(([l,m])=>{g+=`${l}="${m}" `}),g+="><\/script>")}),`<!doctype html>
2
+ <html lang="${f.lang??"en"}">
3
3
  <head>
4
- <title>${o.title}</title>
4
+ <title>${f.title}</title>
5
5
  <meta charset="UTF-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <!-- og -->
8
- <meta property="og:title" content="${o.title}">
8
+ <meta property="og:title" content="${f.title}">
9
9
  <meta property="og:type" content="website">
10
- <meta property="og:description" content="${o.description}">
11
- <meta property="og:image" content="${o.image}">
12
- <meta property="og:url" content="${o.domain}">
13
- <meta property="og:site_name" content="${o.title}">
14
- ${E?`<!-- metas -->${E}`:""}
15
- ${j?`<!-- favicons -->${j}`:""}
16
- ${b?`<!-- fonts -->${b}`:""}
17
- ${O?`<!-- links -->${O}`:""}
18
- ${s?`<link rel="manifest" href="${t.assetsOrigin}assets/${s}">`:""}
19
- ${d?`<!-- stylesheets -->${d}`:""}
10
+ <meta property="og:description" content="${f.description}">
11
+ <meta property="og:image" content="${f.image}">
12
+ <meta property="og:url" content="${f.domain}">
13
+ <meta property="og:site_name" content="${f.title}">
14
+ ${D?`<!-- metas -->${D}`:""}
15
+ ${A?`<!-- favicons -->${A}`:""}
16
+ ${C?`<!-- fonts -->${C}`:""}
17
+ ${S?`<!-- links -->${S}`:""}
18
+ ${O?`<link rel="manifest" href="${t.assetsOrigin}assets/${O}">`:""}
19
+ ${u?`<!-- stylesheets -->${u}`:""}
20
20
  </head>
21
21
  <body>
22
- ${L}
23
- ${u?"<!-- scripts -->"+u:""}
22
+ ${V}
23
+ ${g?"<!-- scripts -->"+g:""}
24
24
  </body>
25
- </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");function x(e){return typeof e=="string"?e:Object.entries(e).map(([t,n])=>typeof n=="object"?`${k(t)} { ${x(n)} }`:`${k(t)}: ${n};`).join(" ")}c(x,"parseStyle");async function D(e,t={},n,i=C){return(await Promise.all(e.map(async l=>{if(typeof l=="string")return A(l,t);let{name:f,children:g,...p}=l;if(f==="widget"){if(l["data-render-id"]=l["data-render-id"]||Math.random().toString(36).substring(2,15),{name:f,children:g,...p}=l,p.id){let s=M.get(p.id)||await i.fetchWidget(p.id);if(s){let o={...y(s?.inputs??[]),...p,env:{...t,assetsOrigin:i.assetsOrigin}};if(typeof s.render=="function"?g=[s.render(o)]:g=s.content?[s.content]:[],s.style){let h=typeof s.style=="function"?s.style(o):s.style;n.set(s.id||p.id,x(h))}M.set(p.id,s)}}if(i.prod)return g.join("")}let $=Object.entries(p).map(([s,o])=>(typeof o=="string"&&(o=A(o,t)),`${s}="${o}"`)).join(" ");return`<${f}`+($?` ${$}`:"")+`>${await D(g,t,n,i)}</${f}>`}))).join("")}c(D,"parseContent");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{parseTemplate:P,inputDefinitionsToObject:y}});})();
25
+ </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:h,attributeToString:T,parseTemplate:P,parseTemplateContent:w,parseWidget:E,parseStyle:$}});})();
26
26
  //# sourceMappingURL=client.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/utils/input-definitions-to-object.ts", "../src/utils/deep-value.ts", "../src/utils/replace-string-value.ts", "../src/utils/turn-camel-to-kebab-casing.ts", "../src/utils/merge-objects.ts", "../src/parse-template.ts", "../src/client.ts"],
4
- "sourcesContent": ["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 '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", "export const turnCamelToKebabCasing = (str: string) => {\n const match = str.match(/(?:[A-Z]+(?=[A-Z][a-z])|[A-Z]+|[a-zA-Z])[^A-Z]*/g)\n\n if (match) {\n for (let i = 0; i < match.length; i++) {\n match[i] = match[i].toLowerCase()\n }\n\n return match.join('-')\n }\n\n return name\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 { Template, Style, TemplateContent, Widget } from './types.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\nimport { mergeObjects } from './utils/merge-objects.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\nconst tempCache: Map<string, Template> = new Map()\n\ninterface parseOptions {\n prod?: boolean\n assetsOrigin?: string\n fetchWidget: (id: string) => Widget | null | Promise<Widget | null>\n fetchTemplate: (id: string) => Template | null | Promise<Template | null>\n}\n\nconst defaultOptions: parseOptions = {\n fetchWidget: async () => null,\n fetchTemplate: async () => null,\n prod: false,\n assetsOrigin: '/',\n}\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 = new Map()\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseContent(\n content as TemplateContent,\n data,\n widgetStyles,\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=\"anonymous\">`\n })\n\n let st = ''\n\n ;[...stylesheets, ...Array.from(widgetStyles.entries())].forEach(\n (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 st += `<style>${stylesheet}</style>`\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n Object.entries(stylesheet.attributes).forEach(\n ([key, value]) => {\n st += `${key}=\"${value}\" `\n }\n )\n\n st += '></style>'\n }\n }\n )\n\n let sc = ''\n\n 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 Object.entries(script).forEach(([key, value]) => {\n sc += `${key}=\"${value}\" `\n })\n\n sc += `></script>`\n }\n })\n\n return `<!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 ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">` : ''}\n ${st ? `<!-- stylesheets -->${st}` : ''}\n</head>\n<body>\n${bodyContent}\n${sc ? '<!-- scripts -->' + sc : ''}\n</body>\n</html>`\n .replace(/\\s{2,}/g, ' ')\n .replace(/[\\t\\n]+/g, '')\n}\n\nfunction parseStyle(style: Style): string {\n if (typeof style === 'string') {\n return style\n }\n\n return Object.entries(style)\n .map(([key, value]) => {\n if (typeof value === 'object') {\n return `${turnCamelToKebabCasing(key)} { ${parseStyle(value)} }`\n }\n\n return `${turnCamelToKebabCasing(key)}: ${value};`\n })\n .join(' ')\n}\n\nasync function parseContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n): Promise<string> {\n return (\n await Promise.all(\n content.map(async (node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n let { name, children, ...attributes } = node\n\n if (name === 'widget') {\n node['data-render-id'] =\n node['data-render-id'] ||\n 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 props = {\n ...inputDefinitionsToObject(\n widget?.inputs ?? []\n ),\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n },\n }\n\n if (typeof widget.render === 'function') {\n children = [widget.render(props)]\n } else {\n children = widget.content\n ? [widget.content]\n : []\n }\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n widgetStyles.set(\n widget.id || attributes.id,\n parseStyle(styleContent)\n )\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n }\n\n const attrs = 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 return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseContent(children, data, widgetStyles, opt)}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import { parseTemplate } from './parse-template.js'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.js'\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 parseTemplate,\n inputDefinitionsToObject,\n },\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["inputDefinitionsToObject", "inputDefinitions", "acc", "name", "value", "type", "definitions", "item", "__name", "deepValue", "__name", "obj", "key", "acc", "k", "replaceStringValue", "__name", "value", "data", "match", "full", "key", "dv", "deepValue", "turnCamelToKebabCasing", "__name", "str", "match", "i", "mergeObjects", "a", "b", "obj", "key", "__name", "widgetCache", "tempCache", "defaultOptions", "parseTemplate", "__name", "temp", "opt", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "bodyContent", "parseContent", "metas", "key", "value", "ls", "link", "l", "fi", "ft", "font", "st", "stylesheet", "id", "style", "parseStyle", "sc", "script", "turnCamelToKebabCasing", "node", "replaceStringValue", "name", "children", "attributes", "widget", "props", "inputDefinitionsToObject", "styleContent", "attrs", "parseTemplate", "inputDefinitionsToObject"]
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-widget.ts", "../src/parse-template.ts", "../src/client.ts"],
4
+ "sourcesContent": ["export const turnCamelToKebabCasing = (str: string) => {\n const match = str.match(/(?:[A-Z]+(?=[A-Z][a-z])|[A-Z]+|[a-zA-Z])[^A-Z]*/g)\n\n if (match) {\n for (let i = 0; i < match.length; i++) {\n match[i] = match[i].toLowerCase()\n }\n\n return match.join('-')\n }\n\n return name\n}\n", "import { Style } from './types.ts'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\n\nexport function parseStyle(style: Style): string {\n if (typeof style === 'string') {\n return style\n }\n\n return Object.entries(style)\n .map(([key, value]) => {\n if (typeof value === 'object') {\n return `${turnCamelToKebabCasing(key)} { ${parseStyle(value)} }`\n }\n\n return `${turnCamelToKebabCasing(key)}: ${value};`\n })\n .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 '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 parseOptions,\n TemplateContentNode,\n Widget,\n Style,\n TemplateContent,\n} from './types.js'\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'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\nexport async function parseWidget(\n node: TemplateContentNode,\n data = {},\n widgetStyles: Map<string, Style>,\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 props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n },\n }\n\n if (typeof widget.render === 'function') {\n children = [widget.render(props)]\n } else {\n children = widget.content ? [widget.content] : []\n }\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n widgetStyles.set(\n widget.id || attributes.id,\n parseStyle(styleContent)\n )\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n}\n\nexport async function parseTemplateContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n): Promise<string> {\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 TemplateContentNode,\n data,\n widgetStyles,\n opt\n )\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import { parseOptions, Template, TemplateContent } 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\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 = new Map()\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseTemplateContent(\n content as TemplateContent,\n data,\n widgetStyles,\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=\"anonymous\">`\n })\n\n let st = ''\n\n ;[...stylesheets, ...Array.from(widgetStyles.entries())].forEach(\n (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 st += `<style>${stylesheet}</style>`\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n Object.entries(stylesheet.attributes).forEach(\n ([key, value]) => {\n st += `${key}=\"${value}\" `\n }\n )\n\n st += '></style>'\n }\n }\n )\n\n let sc = ''\n\n 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 Object.entries(script).forEach(([key, value]) => {\n sc += `${key}=\"${value}\" `\n })\n\n sc += `></script>`\n }\n })\n\n return `<!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 ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">` : ''}\n ${st ? `<!-- stylesheets -->${st}` : ''}\n</head>\n<body>\n${bodyContent}\n${sc ? '<!-- scripts -->' + sc : ''}\n</body>\n</html>`\n .replace(/\\s{2,}/g, ' ')\n .replace(/[\\t\\n]+/g, '')\n}\n", "import { parseStyle } from './parse-style.ts'\nimport { parseTemplate } from './parse-template.ts'\nimport { parseTemplateContent, parseWidget } from './parse-widget.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.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 attributeToString,\n parseTemplate,\n parseTemplateContent,\n parseWidget,\n parseStyle,\n },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["turnCamelToKebabCasing", "__name", "str", "match", "i", "parseStyle", "style", "key", "value", "turnCamelToKebabCasing", "__name", "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", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "opt", "defaultOptions", "name", "children", "attributes", "widget", "props", "inputDefinitionsToObject", "styleContent", "parseStyle", "attrs", "attributeToString", "parseTemplateContent", "__name", "content", "replaceStringValue", "tempCache", "parseTemplate", "__name", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "bodyContent", "parseTemplateContent", "metas", "key", "value", "ls", "link", "fi", "ft", "font", "st", "stylesheet", "id", "style", "parseStyle", "sc", "script", "inputDefinitionsToObject", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle"]
7
7
  }
@@ -0,0 +1 @@
1
+ const e={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};export{e as defaultOptions};
@@ -0,0 +1 @@
1
+ var i=Object.defineProperty;var n=(r,t)=>i(r,"name",{value:t,configurable:!0});import{turnCamelToKebabCasing as o}from"./utils/turn-camel-to-kebab-casing.js";function f(r){return typeof r=="string"?r:Object.entries(r).map(([t,e])=>typeof e=="object"?`${o(t)} { ${f(e)} }`:`${o(t)}: ${e};`).join(" ")}n(f,"parseStyle");export{f as parseStyle};
@@ -1,25 +1,25 @@
1
- var A=Object.defineProperty;var y=(i,e)=>A(i,"name",{value:e,configurable:!0});import{inputDefinitionsToObject as F}from"./utils/input-definitions-to-object.js";import{replaceStringValue as E}from"./utils/replace-string-value.js";import{turnCamelToKebabCasing as M}from"./utils/turn-camel-to-kebab-casing.js";import{mergeObjects as x}from"./utils/merge-objects.js";const S=new Map,T=new Map,j={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"},G=y(async(i,e=j)=>{if(e=x(j,e),T.set(i.id,i),i.extends){const t=T.get(i.extends)||await e.fetchTemplate(i.extends);if(!t)throw new Error(`Template "${i.extends}" not found`);T.set(i.extends,t),i=x(t,i)}const{metadata:a={},scripts:g=[],stylesheets:p=[],links:m=[],fonts:$=[],favicons:o=[],content:d="",manifest:s,...n}=i??{},h=new Map,k=typeof d=="string"?d:await P(d,n,h,e);a.charset||(a.charset="UTF-8"),a.viewport||(a.viewport="width=device-width, initial-scale=1.0");const C=Object.entries(a).map(([t,r])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${r}">`:(t==="msapplication-TileImage"&&(r=`${e.assetsOrigin}${r}`),`<meta name="${t}" content="${r}">`)).join("");let u="";m.forEach(t=>{let r="<link ";Object.entries(t).forEach(([c,w])=>{r+=`${c}="${w}" `}),u+=r+"/>"});let O="";o.forEach(t=>{let r="<link ";Object.entries(t).forEach(([c,w])=>{r+=`${c}="${c==="href"?`${e.assetsOrigin}assets/favicons/`:""}${w}" `}),O+=r+"/>"});let b="";$.forEach(t=>{b+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font" crossorigin="anonymous">`});let l="";[...p,...Array.from(h.entries())].forEach(t=>{if(typeof t=="string")t.startsWith("http")?l+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?l+=`<link rel="stylesheet" href="${e.assetsOrigin}stylesheets/${t}">`:l+=`<style>${t}</style>`;else if(Array.isArray(t)){const[r,c]=t;l+=`<style id="${r}">${W(c)}</style>`}else l+="<style",Object.entries(t.attributes).forEach(([r,c])=>{l+=`${r}="${c}" `}),l+="></style>"});let f="";return g.forEach(t=>{typeof t=="string"?t.startsWith("http")?f+=`<script src="${t}"></script>`:t.endsWith(".js")?f+=`<script src="${e.assetsOrigin}scripts/${t}"></script>`:f+=`<script>${t}</script>`:(f+="<script ",Object.entries(t).forEach(([r,c])=>{f+=`${r}="${c}" `}),f+="></script>")}),`<!doctype html>
2
- <html lang="${n.lang??"en"}">
1
+ var C=Object.defineProperty;var O=(s,r)=>C(s,"name",{value:r,configurable:!0});import{mergeObjects as w}from"./utils/merge-objects.js";import{defaultOptions as T}from"./default-parse-options.js";import{parseTemplateContent as W}from"./parse-widget.js";import{parseStyle as k}from"./parse-style.js";const h=new Map,B=O(async(s,r=T)=>{if(r=w(T,r),h.set(s.id,s),s.extends){const t=h.get(s.extends)||await r.fetchTemplate(s.extends);if(!t)throw new Error(`Template "${s.extends}" not found`);h.set(s.extends,t),s=w(t,s)}const{metadata:l={},scripts:b=[],stylesheets:E=[],links:j=[],fonts:x=[],favicons:u=[],content:c="",manifest:d,...a}=s??{},g=new Map,v=typeof c=="string"?c:await W(c,a,g,r);l.charset||(l.charset="UTF-8"),l.viewport||(l.viewport="width=device-width, initial-scale=1.0");const y=Object.entries(l).map(([t,e])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${e}">`:(t==="msapplication-TileImage"&&(e=`${r.assetsOrigin}${e}`),`<meta name="${t}" content="${e}">`)).join("");let p="";j.forEach(t=>{let e="<link ";Object.entries(t).forEach(([i,m])=>{e+=`${i}="${m}" `}),p+=e+"/>"});let $="";u.forEach(t=>{let e="<link ";Object.entries(t).forEach(([i,m])=>{e+=`${i}="${i==="href"?`${r.assetsOrigin}assets/favicons/`:""}${m}" `}),$+=e+"/>"});let f="";x.forEach(t=>{f+=`<link rel="preload" href="${r.assetsOrigin}assets/fonts/${t}" as="font" crossorigin="anonymous">`});let n="";[...E,...Array.from(g.entries())].forEach(t=>{if(typeof t=="string")t.startsWith("http")?n+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?n+=`<link rel="stylesheet" href="${r.assetsOrigin}stylesheets/${t}">`:n+=`<style>${t}</style>`;else if(Array.isArray(t)){const[e,i]=t;n+=`<style id="${e}">${k(i)}</style>`}else n+="<style",Object.entries(t.attributes).forEach(([e,i])=>{n+=`${e}="${i}" `}),n+="></style>"});let o="";return b.forEach(t=>{typeof t=="string"?t.startsWith("http")?o+=`<script src="${t}"></script>`:t.endsWith(".js")?o+=`<script src="${r.assetsOrigin}scripts/${t}"></script>`:o+=`<script>${t}</script>`:(o+="<script ",Object.entries(t).forEach(([e,i])=>{o+=`${e}="${i}" `}),o+="></script>")}),`<!doctype html>
2
+ <html lang="${a.lang??"en"}">
3
3
  <head>
4
- <title>${n.title}</title>
4
+ <title>${a.title}</title>
5
5
  <meta charset="UTF-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <!-- og -->
8
- <meta property="og:title" content="${n.title}">
8
+ <meta property="og:title" content="${a.title}">
9
9
  <meta property="og:type" content="website">
10
- <meta property="og:description" content="${n.description}">
11
- <meta property="og:image" content="${n.image}">
12
- <meta property="og:url" content="${n.domain}">
13
- <meta property="og:site_name" content="${n.title}">
14
- ${C?`<!-- metas -->${C}`:""}
15
- ${O?`<!-- favicons -->${O}`:""}
16
- ${b?`<!-- fonts -->${b}`:""}
17
- ${u?`<!-- links -->${u}`:""}
18
- ${s?`<link rel="manifest" href="${e.assetsOrigin}assets/${s}">`:""}
19
- ${l?`<!-- stylesheets -->${l}`:""}
10
+ <meta property="og:description" content="${a.description}">
11
+ <meta property="og:image" content="${a.image}">
12
+ <meta property="og:url" content="${a.domain}">
13
+ <meta property="og:site_name" content="${a.title}">
14
+ ${y?`<!-- metas -->${y}`:""}
15
+ ${$?`<!-- favicons -->${$}`:""}
16
+ ${f?`<!-- fonts -->${f}`:""}
17
+ ${p?`<!-- links -->${p}`:""}
18
+ ${d?`<link rel="manifest" href="${r.assetsOrigin}assets/${d}">`:""}
19
+ ${n?`<!-- stylesheets -->${n}`:""}
20
20
  </head>
21
21
  <body>
22
- ${k}
23
- ${f?"<!-- scripts -->"+f:""}
22
+ ${v}
23
+ ${o?"<!-- scripts -->"+o:""}
24
24
  </body>
25
- </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");function W(i){return typeof i=="string"?i:Object.entries(i).map(([e,a])=>typeof a=="object"?`${M(e)} { ${W(a)} }`:`${M(e)}: ${a};`).join(" ")}y(W,"parseStyle");async function P(i,e={},a,g=j){return(await Promise.all(i.map(async p=>{if(typeof p=="string")return E(p,e);let{name:m,children:$,...o}=p;if(m==="widget"){if(p["data-render-id"]=p["data-render-id"]||Math.random().toString(36).substring(2,15),{name:m,children:$,...o}=p,o.id){const s=S.get(o.id)||await g.fetchWidget(o.id);if(s){const n={...F(s?.inputs??[]),...o,env:{...e,assetsOrigin:g.assetsOrigin}};if(typeof s.render=="function"?$=[s.render(n)]:$=s.content?[s.content]:[],s.style){const h=typeof s.style=="function"?s.style(n):s.style;a.set(s.id||o.id,W(h))}S.set(o.id,s)}}if(g.prod)return $.join("")}const d=Object.entries(o).map(([s,n])=>(typeof n=="string"&&(n=E(n,e)),`${s}="${n}"`)).join(" ");return`<${m}`+(d?` ${d}`:"")+`>${await P($,e,a,g)}</${m}>`}))).join("")}y(P,"parseContent");export{G as parseTemplate};
25
+ </html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");export{B as parseTemplate};
@@ -0,0 +1 @@
1
+ var y=Object.defineProperty;var m=(r,e)=>y(r,"name",{value:e,configurable:!0});import{defaultOptions as c}from"./default-parse-options.js";import{inputDefinitionsToObject as C}from"./utils/input-definitions-to-object.js";import{parseStyle as T}from"./parse-style.js";import{attributeToString as l}from"./utils/attributes-to-string.js";import{replaceStringValue as $}from"./utils/replace-string-value.js";const u=new Map;async function O(r,e={},a,o=c){let{name:s,children:i,...n}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:s,children:i,...n}=r,n.id){const t=u.get(n.id)||await o.fetchWidget(n.id);if(t){const f={...C(t?.inputs??[]),...n,env:{...e,assetsOrigin:o.assetsOrigin}};if(typeof t.render=="function"?i=[t.render(f)]:i=t.content?[t.content]:[],t.style){const d=typeof t.style=="function"?t.style(f):t.style;a.set(t.id||n.id,T(d))}u.set(n.id,t)}}if(o.prod)return i.join("");const p=l(n,e);return`<${s}`+(p?` ${p}`:"")+`>${await g(i,e,a,o)}</${s}>`}m(O,"parseWidget");async function g(r,e={},a,o=c){return(await Promise.all(r.map(async s=>{if(typeof s=="string")return $(s,e);const{name:i,children:n,...p}=s;if(i==="widget")return O(s,e,a,o);const t=l(p,e);return`<${i}`+(t?` ${t}`:"")+`>${await g(n,e,a,o)}</${i}>`}))).join("")}m(g,"parseTemplateContent");export{g as parseTemplateContent,O as parseWidget};
package/dist/esm/types.js CHANGED
@@ -1 +1 @@
1
- var e=(r=>(r.Text="text",r.Html="html",r.Markdown="markdown",r.Number="number",r.Code="code",r.Image="image",r.Video="video",r.Audio="audio",r.File="file",r.Font="font",r.Pdf="pdf",r.Icon="icon",r.Embed="embed",r.Favicon="favicon",r.Email="email",r.Password="password",r.Url="url",r.Tel="tel",r.Color="color",r.Date="date",r.DateTimeLocal="datetime-local",r.Month="month",r.Time="time",r.Week="week",r.Textarea="textarea",r.Boolean="boolean",r.Options="options",r.Group="group",r.List="list",r))(e||{}),s=(t=>(t.Base="base",t.Page="page",t))(s||{});export{e as InputDefinitionType,s as TemplateType};
1
+ var t=(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))(t||{}),s=(r=>(r.Base="base",r.Page="page",r))(s||{});export{t as InputDefinitionType,s as TemplateType};
@@ -0,0 +1 @@
1
+ var o=Object.defineProperty;var e=(t,n)=>o(t,"name",{value:n,configurable:!0});import{replaceStringValue as p}from"./replace-string-value.js";const s=e((t,n={})=>Object.entries(t).map(([i,r])=>(typeof r=="string"&&(r=p(r,n)),`${i}="${r}"`)).join(" "),"attributeToString");export{s as attributeToString};
@@ -0,0 +1,2 @@
1
+ import { parseOptions } from './types.ts';
2
+ export declare const defaultOptions: parseOptions;
@@ -0,0 +1,2 @@
1
+ import { Style } from './types.ts';
2
+ export declare function parseStyle(style: Style): string;
@@ -1,9 +1,2 @@
1
- import { Template, Widget } from './types.ts';
2
- interface parseOptions {
3
- prod?: boolean;
4
- assetsOrigin?: string;
5
- fetchWidget: (id: string) => Widget | null | Promise<Widget | null>;
6
- fetchTemplate: (id: string) => Template | null | Promise<Template | null>;
7
- }
1
+ import { parseOptions, Template } from './types.ts';
8
2
  export declare const parseTemplate: (temp: Template, opt?: parseOptions) => Promise<string>;
9
- export {};
@@ -0,0 +1,3 @@
1
+ import { parseOptions, TemplateContentNode, Style, TemplateContent } from './types.js';
2
+ export declare function parseWidget(node: TemplateContentNode, data: {} | undefined, widgetStyles: Map<string, Style>, opt?: parseOptions): Promise<string>;
3
+ export declare function parseTemplateContent(content: TemplateContent, data: {} | undefined, widgetStyles: Map<string, Style>, opt?: parseOptions): Promise<string>;
@@ -80,9 +80,16 @@ export interface Template {
80
80
  }
81
81
  export interface Widget {
82
82
  id: string;
83
+ name: string;
83
84
  style: Style | ((props?: Record<string, unknown>) => Style);
84
85
  inputs: InputDefinition[];
85
86
  render: <P>(props: P) => string;
86
87
  content: string;
87
88
  }
89
+ export interface parseOptions {
90
+ prod?: boolean;
91
+ assetsOrigin?: string;
92
+ fetchWidget: (id: string) => Widget | null | Promise<Widget | null>;
93
+ fetchTemplate: (id: string) => Template | null | Promise<Template | null>;
94
+ }
88
95
  export {};
@@ -0,0 +1 @@
1
+ export declare const attributeToString: (attributes: Record<string, unknown>, data?: {}) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beforesemicolon/site-builder",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Site builder based on JSON files",
5
5
  "engines": {
6
6
  "node": ">=18.16.0"