@beforesemicolon/site-builder 0.33.0 → 0.35.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.
- package/.netlify/netlify.toml +28 -0
- package/dist/cjs/build-templates.js +6 -6
- package/dist/cjs/parse-widget.js +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +2 -2
- package/dist/esm/build-templates.js +5 -5
- package/dist/esm/parse-widget.js +1 -1
- package/dist/types/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
plugins = []
|
|
2
|
+
headers = []
|
|
3
|
+
redirects = []
|
|
4
|
+
|
|
5
|
+
[functions]
|
|
6
|
+
|
|
7
|
+
[functions."*"]
|
|
8
|
+
|
|
9
|
+
[build]
|
|
10
|
+
publish = "/Users/ecorreia/Sites/@beforesemicolon/site-builder/public"
|
|
11
|
+
publishOrigin = "ui"
|
|
12
|
+
commandOrigin = "ui"
|
|
13
|
+
base = "/Users/ecorreia/Sites/@beforesemicolon/site-builder"
|
|
14
|
+
command = "npm run build"
|
|
15
|
+
|
|
16
|
+
[build.environment]
|
|
17
|
+
|
|
18
|
+
[build.processing]
|
|
19
|
+
|
|
20
|
+
[build.processing.css]
|
|
21
|
+
|
|
22
|
+
[build.processing.html]
|
|
23
|
+
|
|
24
|
+
[build.processing.images]
|
|
25
|
+
|
|
26
|
+
[build.processing.js]
|
|
27
|
+
|
|
28
|
+
[build.services]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var oe=Object.create;var x=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var b=(t,n)=>x(t,"name",{value:n,configurable:!0});var le=(t,n)=>{for(var i in n)x(t,i,{get:n[i],enumerable:!0})},z=(t,n,i,g)=>{if(n&&typeof n=="object"||typeof n=="function")for(let p of ae(n))!ce.call(t,p)&&p!==i&&x(t,p,{get:()=>n[p],enumerable:!(g=ie(n,p))||g.enumerable});return t};var N=(t,n,i)=>(i=t!=null?oe(re(t)):{},z(n||!t||!t.__esModule?x(i,"default",{value:t,enumerable:!0}):i,t)),me=t=>z(x({},"__esModule",{value:!0}),t);var we={};le(we,{buildTemplates:()=>ue});module.exports=me(we);var e=N(require("path"),1),m=N(require("fs"),1),H=N(require("esbuild"),1),M=require("./utils/merge-objects.js"),Q=require("./parse-template.js"),V=N(require("clean-css"),1),Y=require("./types.js"),Z=require("html-minifier"),D=require("./utils/flatten-object.js");const pe=new V.default,{writeFile:T,readFile:C,readdir:P,mkdir:j,cp:w,rm:fe}=m.default.promises;async function de(t,n){try{const i=e.default.resolve(t,"templates"),g=e.default.resolve(t,"widgets"),p=await P(i),y=[];let v=null;for(const c of p)if(c.endsWith(".json")){const d=e.default.join(i,c),F=await C(d,"utf-8"),f=JSON.parse(F);c==="base.json"?v=f:y.push({id:f.id,name:f.name||f.id,url:`/${f.id}.html`,template:c,widgetsData:f.widgetsData||{}})}const O=await P(g),h=[];for(const c of O)if(c.endsWith(".js")){const d=e.default.basename(c,".js");h.push({id:d,name:d.charAt(0).toUpperCase()+d.slice(1).replace(/-/g," "),file:c})}const W={meta:v,pages:y,widgets:h},$=e.default.join(n,"config.json");await T($,JSON.stringify(W,null,2)),console.log("Generated config.json with",y.length,"pages and",h.length,"widgets")}catch(i){throw console.error("Error generating admin config:",i),i}}b(de,"generateAdminConfig");const ue=b(async({publicDir:t,srcDir:n,prod:i=!0})=>{console.log("Building templates:",{publicDir:t,srcDir:n,prod:i});const g=process.cwd(),p=e.default.join(g,"_redirects"),y=e.default.join(t,"_redirects"),v=e.default.resolve(t,"scripts"),O=e.default.resolve(t,"stylesheets"),h=e.default.resolve(n,"assets"),W=e.default.resolve(n,"admin"),$=e.default.resolve(n,"widgets"),c=e.default.resolve(t,"admin","widgets"),d=e.default.resolve(t,"assets"),F=e.default.resolve(n,"data"),f=e.default.resolve(t,"data"),B=e.default.resolve(n,"assets","robots.txt"),ee=e.default.join(t,"robots.txt"),E=e.default.resolve(n,"assets","sitemap.xml");if(m.default.existsSync(t)&&await fe(t,{recursive:!0,force:!0}),await j(t,{recursive:!0}),await j(v,{recursive:!0}),await j(O,{recursive:!0}),m.default.existsSync(p)&&await w(p,y),m.default.existsSync(h)&&await w(h,d,{recursive:!0}),m.default.existsSync(F)&&await w(F,f,{recursive:!0}),m.default.existsSync(W)){const s=e.default.resolve(t,"admin");await j(s,{recursive:!0}),await w(W,s,{recursive:!0}),await de(n,s),i||(await j(c,{recursive:!0}),await w($,c,{recursive:!0}))}const te=await P(e.default.resolve(n,"templates")),J=e.default.resolve(n,"locales"),k={};if(m.default.existsSync(J)){const s=await P(J);for(const o of s)if(o.endsWith(".json")){const l=JSON.parse(await C(e.default.join(J,o),"utf8")),r=e.default.basename(o,".json");k[r]=(0,D.flattenObject)(l)}}const L=await Promise.all(te.filter(s=>s.endsWith(".json")).map(async s=>{const o=e.default.basename(s);return{dir:e.default.dirname(s),name:o.replace(".json",""),content:JSON.parse(await C(e.default.resolve(n,"templates",s),"utf8"))}})),_=L.reduce((s,o)=>({...s,[o.name]:o}),{}),A=L.filter(({content:s})=>s.type===Y.TemplateType.Page&&s.excluded!==!0),R=e.default.resolve(n,"components");let G={};if(m.default.existsSync(R)){const s=await P(R),o=await Promise.all(s.filter(l=>l.endsWith(".json")).map(async l=>{const r=JSON.parse(await C(e.default.join(R,l),"utf8"));return[r.id,r]}));G=Object.fromEntries(o)}const I=b(async s=>{let o=typeof s=="string"?s:"";s&&typeof s=="object"&&"src"in s&&(o=String(s.src)),!o.startsWith("http")&&o.endsWith(".js")&&await H.default.build({entryPoints:[e.default.resolve(n,"scripts",o)],minify:!0,outfile:e.default.join(v,o)})},"handleScript"),K=b(async s=>{let o=typeof s=="string"?s:"";if(s&&typeof s=="object"&&"href"in s&&(o=String(s.href)),!o.startsWith("http")&&o.endsWith(".css")){const l=await C(e.default.resolve(n,"stylesheets",o),"utf8");await T(e.default.join(O,o),pe.minify(l).styles,"utf-8")}},"handleStylesheet"),X=[];for(const{name:s,dir:o,content:l}of A){let r=l;if(r.extends){const a=_[r.extends];r=(0,M.mergeObjects)(a.content,r)}const q=l.domain||"",U=l.route||"";if(U){const a=q?`${q.replace(/\/$/,"")}/${U.replace(/^\//,"")}`:`/${U.replace(/^\//,"")}`;X.push(a)}await j(e.default.join(t,o),{recursive:!0});for(let a=0;a<(r.scripts?.length??0);a++)await I(r.scripts[a]);for(let a=0;a<(r.stylesheets?.length??0);a++)await K(r.stylesheets[a]);const se=await(0,Q.parseTemplate)(r,{prod:i,components:G,locales:k,fetchTemplate:a=>_[a].content,fetchWidget:async a=>{const S=(await import(e.default.resolve($,`${a}.js`))).default;for(let u=0;u<(S.scripts?.length??0);u++)await I(S.scripts[u]);for(let u=0;u<(S.stylesheets?.length??0);u++)await K(S.stylesheets[u]);return S}}),ne=(0,Z.minify)(se,{collapseWhitespace:!0,removeComments:!0,minifyCSS:!0,minifyJS:!0});await T(e.default.join(t,o,`${s}.html`),ne)}if(m.default.existsSync(B))await w(B,e.default.join(t,"robots.txt"));else{const o=`User-agent: *
|
|
2
2
|
Disallow:
|
|
3
|
-
Sitemap: ${
|
|
4
|
-
`;await
|
|
3
|
+
Sitemap: ${A[0]?.content.domain?`${A[0].content.domain.replace(/\/$/,"")}/sitemap.xml`:"/sitemap.xml"}
|
|
4
|
+
`;await T(ee,o,"utf-8")}if(m.default.existsSync(E))await w(E,e.default.join(t,"sitemap.xml"));else{const s=`<?xml version="1.0" encoding="UTF-8"?>
|
|
5
5
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
6
|
-
`+
|
|
7
|
-
<loc>${
|
|
6
|
+
`+X.map(o=>` <url>
|
|
7
|
+
<loc>${o}</loc>
|
|
8
8
|
</url>`).join(`
|
|
9
9
|
`)+`
|
|
10
10
|
</urlset>
|
|
11
|
-
`;await
|
|
11
|
+
`;await T(e.default.join(t,"sitemap.xml"),s,"utf-8")}},"buildTemplates");0&&(module.exports={buildTemplates});
|
package/dist/cjs/parse-widget.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var $=(r,t)=>u(r,"name",{value:t,configurable:!0});var N=(r,t)=>{for(var i in t)u(r,i,{get:t[i],enumerable:!0})},E=(r,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of v(t))!x.call(r,e)&&e!==i&&u(r,e,{get:()=>t[e],enumerable:!(o=D(t,e))||o.enumerable});return r};var I=r=>E(u({},"__esModule",{value:!0}),r);var V={};N(V,{parseTemplateContent:()=>y,parseWidget:()=>L});module.exports=I(V);var w=require("./default-parse-options.js"),j=require("./utils/input-definitions-to-object.js"),T=require("./parse-style.js"),W=require("./utils/attributes-to-string.js"),M=require("./utils/replace-string-value.js"),b=require("./parse-component.js"),P=require("./utils/merge-objects.js");const S=new Map;async function L({node:r,data:t={},widgetStyles:i=new Map,widgetScripts:o=new Map,opt:e=w.defaultOptions}){let{name:c,children:a=[],...s}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:c,children:a=[],...s}=r,s.id){const n=(e?.useCache?S.get(s.id):null)??await e.fetchWidget?.(s.id);if(n){const g=s.id||s.name,m=t.widgetsData?.[g]||{},l={...t,assetsOrigin:e.assetsOrigin,prod:e.prod},f={...(0,j.inputDefinitionsToObject)(n?.inputs??[]),...m,...s,env:l},C=(e?.locales??{})[String(t.lang??"en")]||{};typeof n.render=="function"?a=[n.render({...f,env:l,$msg:(p,h={})=>String(C[p]||p).replace(/\{\{(\w+)\}\}/g,(_,A)=>String(h[A]||"")),$comp:(p,h={})=>(0,b.parseComponent)((e.components??{})[p],{...h,env:l},i)})]:typeof n.content=="string"?a=[(0,M.replaceStringValue)(n.content,{...f,env:l,$msg:C})]:Array.isArray(n.content)&&(a=[await y({content:n.content,data:{...t,...f},widgetStyles:i,widgetScripts:o,opt:e})]);const d=[],O=n.id||s.id;if(n.style){const p=typeof n.style=="function"?n.style(f):n.style;d.push([`widget-${O}`,(0,T.parseStyle)(p,n.cssSelector??"")])}n.stylesheets?.forEach(p=>{d.push(p)}),d.length>0&&i.set(O,d),n.scripts&&o.set(O,n.scripts),S.set(s.id,n)}}return
|
|
1
|
+
"use strict";var u=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var $=(r,t)=>u(r,"name",{value:t,configurable:!0});var N=(r,t)=>{for(var i in t)u(r,i,{get:t[i],enumerable:!0})},E=(r,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of v(t))!x.call(r,e)&&e!==i&&u(r,e,{get:()=>t[e],enumerable:!(o=D(t,e))||o.enumerable});return r};var I=r=>E(u({},"__esModule",{value:!0}),r);var V={};N(V,{parseTemplateContent:()=>y,parseWidget:()=>L});module.exports=I(V);var w=require("./default-parse-options.js"),j=require("./utils/input-definitions-to-object.js"),T=require("./parse-style.js"),W=require("./utils/attributes-to-string.js"),M=require("./utils/replace-string-value.js"),b=require("./parse-component.js"),P=require("./utils/merge-objects.js");const S=new Map;async function L({node:r,data:t={},widgetStyles:i=new Map,widgetScripts:o=new Map,opt:e=w.defaultOptions}){let{name:c,children:a=[],...s}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:c,children:a=[],...s}=r,s.id){const n=(e?.useCache?S.get(s.id):null)??await e.fetchWidget?.(s.id);if(n){const g=s.id||s.name,m=t.widgetsData?.[g]||{},l={...t,assetsOrigin:e.assetsOrigin,prod:e.prod},f={...(0,j.inputDefinitionsToObject)(n?.inputs??[]),...m,...s,env:l},C=(e?.locales??{})[String(t.lang??"en")]||{};typeof n.render=="function"?a=[n.render({...f,env:l,$msg:(p,h={})=>String(C[p]||p).replace(/\{\{(\w+)\}\}/g,(_,A)=>String(h[A]||"")),$comp:(p,h={})=>(0,b.parseComponent)((e.components??{})[p],{...h,env:l},i)})]:typeof n.content=="string"?a=[(0,M.replaceStringValue)(n.content,{...f,env:l,$msg:C})]:Array.isArray(n.content)&&(a=[await y({content:n.content,data:{...t,...f},widgetStyles:i,widgetScripts:o,opt:e})]);const d=[],O=n.id||s.id;if(n.style){const p=typeof n.style=="function"?n.style(f):n.style;d.push([`widget-${O}`,(0,T.parseStyle)(p,n.cssSelector??"")])}n.stylesheets?.forEach(p=>{d.push(p)}),d.length>0&&i.set(O,d),n.scripts&&o.set(O,n.scripts),S.set(s.id,n)}}return`<${c} id="${s.id}" data-render-id="${s["data-render-id"]}">${await y({content:a,data:t,widgetStyles:i,widgetScripts:o,opt:e})}</${c}>`}$(L,"parseWidget");async function y({content:r,data:t={},widgetStyles:i=new Map,widgetScripts:o=new Map,opt:e=w.defaultOptions}){return!r||!Array.isArray(r)?"":(await Promise.all(r.map(async c=>{if(typeof c=="string")return(0,M.replaceStringValue)(c,t);const{name:a,children:s,...n}=c;if(a==="widget")return L({node:c,data:t,widgetStyles:i,widgetScripts:o,opt:e});const g={...t,assetsOrigin:e.assetsOrigin,prod:e.prod,locales:e.locales};if(a==="component"){const l=(e?.locales??{})[String(t.lang??"en")]||{};return(0,b.parseComponent)((e.components??{})[n.id??""],(0,P.mergeObjects)(t,{...n,env:g,$msg:l}),i)}const m=(0,W.attributeToString)(n,g);return`<${a}`+(m?` ${m}`:"")+`>${await y({content:s,data:t,widgetStyles:i,widgetScripts:o,opt:e})}</${a}>`}))).join("")}$(y,"parseTemplateContent");0&&(module.exports={parseTemplateContent,parseWidget});
|
package/dist/client.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(()=>{var nt=Object.defineProperty;var g=(r,t)=>nt(r,"name",{value:t,configurable:!0});function M(r){return r.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}g(M,"turnCamelToKebabCasing");var st=new Set(["@media","@supports","@container","@scope","@document","@layer","@starting-style","@page"]);function X(r,t){return t&&r.trim().startsWith(t)}g(X,"startsWithPrefix");function W(r,t=""){if(typeof r=="string")return r;let n=new Map,e=new Map;function i(f,c,o,y){for(let[d,h]of Object.entries(f))if(typeof h=="object"&&h!==null)if(d.startsWith("@")){let m=Array.from(st).some(a=>d.startsWith(a));i(h,c,d,y||!m)}else{let m,a=M(d);d.startsWith("&")?m=c?d.replace(/&/g,c):d.replace(/&/g,""):c?m=`${c} ${a}`:t&&!y&&!X(a,t)?m=`${t} ${a}`:m=a,i(h,m.trim(),o,y)}else if(h!=null){let m=c;if(t&&!y&&c&&!X(c,t)?m=`${t} ${c}`.trim():!c&&t&&!y&&(m=t),!m)continue;if(o){let a=e.get(o);a||(a=new Map,e.set(o,a));let l=a.get(m);l||(l=new Map,a.set(m,l)),l.set(M(d),h)}else{let a=n.get(m);a||(a=new Map,n.set(m,a)),a.set(M(d),h)}}}g(i,"walk"),i(r,"",null,!1);let p=[];for(let[f,c]of n)if(f&&c.size){let o=[];for(let[y,d]of c)o.push(`${y}: ${d};`);p.push(`${f} { ${o.join(" ")} }`)}for(let[f,c]of e){let o=[];for(let[y,d]of c)if(y&&d.size){let h=[];for(let[m,a]of d)h.push(`${m}: ${a};`);o.push(`${y} { ${h.join(" ")} }`)}o.length&&p.push(`${f} { ${o.join(" ")} }`)}return p.join(" ")}g(W,"parseStyle");function x(r,t){if(r===null||typeof r!="object"||t===null||typeof t!="object")return t;if(Array.isArray(r)&&Array.isArray(t))return Array.from(new Set([...r,...t]));let n=Array.isArray(r)?[...r]:{...r};for(let e in t)t.hasOwnProperty(e)&&(Array.isArray(r[e])&&Array.isArray(t[e])?n[e]=Array.from(new Set([...r[e],...t[e]])):n[e]=x(n[e],t[e]));return n}g(x,"mergeObjects");var T={fetchWidget:async()=>null,fetchTemplate:async()=>null,useCache:!0,locales:{},components:{},prod:!1,assetsOrigin:"/"};function L(r){return r.reduce((t,{name:n="",value:e,type:i,definitions:p=[]})=>{switch(i){case"group":t[n]=L(p);break;case"options":t[n]={value:e,options:p.map(f=>Object.values(L([f]))[0])};break;case"list":t[n]=p.map(f=>Object.values(L([f]))[0]);break;default:t[n]=e}return t},{})}g(L,"inputDefinitionsToObject");var Y=g((r,t)=>String(t??"").split(".").filter(Boolean).reduce((e,i)=>{try{return e&&typeof e=="object"?e[i]:void 0}catch{return null}},r),"deepValue");var C=g((r,t)=>{let n=null;for(;(n=/\{\{([a-z0-9.$_]+)}}/gim.exec(r))!==null;){let[e,i]=n,p=Y(t,i);r=r.replace(e,String(p))}return r},"replaceStringValue");var D=g((r,t={})=>Object.entries(r).map(([n,e])=>(typeof e=="string"&&(e=C(e,t)),`${n}="${e}"`)).join(" "),"attributeToString");var V=g((r,t={},n=new Map)=>{if(!r||!r.content)return"";let{content:e="",stylesheets:i,id:p}=r;return i&&n.set(`comp-${p}`,i),typeof e=="string"?e?C(e,t):"":I(e,t,n)},"parseComponent");function I(r,t={},n=new Map){return r.map(e=>{if(typeof e=="string")return C(e,t);let{name:i,children:p=[],...f}=e,c=D(f,t);return`<${i}`+(c?` ${c}`:"")+`>${I(p,t,n)}</${i}>`}).join("")}g(I,"parseContent");var v=new Map;async function q({node:r,data:t={},widgetStyles:n=new Map,widgetScripts:e=new Map,opt:i=T}){let{name:p,children:f=[],...c}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:p,children:f=[],...c}=r,c.id){let o=(i?.useCache?v.get(c.id):null)??await i.fetchWidget?.(c.id);if(o){let y=c.id||c.name,d=t.widgetsData?.[y]||{},h={...t,assetsOrigin:i.assetsOrigin,prod:i.prod},m={...L(o?.inputs??[]),...d,...c,env:h},a=(i?.locales??{})[String(t.lang??"en")]||{};typeof o.render=="function"?f=[o.render({...m,env:h,$msg:(S,P={})=>String(a[S]||S).replace(/\{\{(\w+)\}\}/g,(J,B)=>String(P[B]||"")),$comp:(S,P={})=>V((i.components??{})[S],{...P,env:h},n)})]:typeof o.content=="string"?f=[C(o.content,{...m,env:h,$msg:a})]:Array.isArray(o.content)&&(f=[await A({content:o.content,data:{...t,...m},widgetStyles:n,widgetScripts:e,opt:i})]);let l=[],E=o.id||c.id;if(o.style){let S=typeof o.style=="function"?o.style(m):o.style;l.push([`widget-${E}`,W(S,o.cssSelector??"")])}o.stylesheets?.forEach(S=>{l.push(S)}),l.length>0&&n.set(E,l),o.scripts&&e.set(E,o.scripts),v.set(c.id,o)}}return i.prod?f.join(""):`<${p} id="${c.id}" data-render-id="${c["data-render-id"]}">${await A({content:f,data:t,widgetStyles:n,widgetScripts:e,opt:i})}</${p}>`}g(q,"parseWidget");async function A({content:r,data:t={},widgetStyles:n=new Map,widgetScripts:e=new Map,opt:i=T}){return!r||!Array.isArray(r)?"":(await Promise.all(r.map(async p=>{if(typeof p=="string")return C(p,t);let{name:f,children:c,...o}=p;if(f==="widget")return q({node:p,data:t,widgetStyles:n,widgetScripts:e,opt:i});let y={...t,assetsOrigin:i.assetsOrigin,prod:i.prod,locales:i.locales};if(f==="component"){let h=(i?.locales??{})[String(t.lang??"en")]||{};return V((i.components??{})[o.id??""],x(t,{...o,env:y,$msg:h}),n)}let d=D(o,y);return`<${f}`+(d?` ${d}`:"")+`>${await A({content:c,data:t,widgetStyles:n,widgetScripts:e,opt:i})}</${f}>`}))).join("")}g(A,"parseTemplateContent");var G=new Map,it={"default-src":["'self'"],"script-src":["'self'"],"style-src":["'self'"],"connect-src":["'self'"],"img-src":["'self'","data:"],"font-src":["'self'","data:"]},tt={charset:"UTF-8",viewport:{width:"device-width",initialScale:1},keywords:[],canonical:"",themeColor:"",languageDirection:"ltr",customMeta:{}},H=g(r=>Array.from(new Set(r)),"unique"),et=g(async(r,t=T)=>{if(t=x(T,t),G.set(r.id,r),r.extends){let s=G.get(r.extends)||await t.fetchTemplate?.(r.extends);if(!s)throw new Error(`Template "${r.extends}" not found`);G.set(r.extends,s),r=x(s,r)}let{metadata:n=tt,scripts:e=[],stylesheets:i=[],links:p=[],fonts:f=[],favicons:c=[],content:o="",manifest:y,csp:d=null,preload:h=[],structuredData:m={},...a}=r??{},l=x(it,d??{}),E=new Map,S=new Map,P={...a,assetsOrigin:t.assetsOrigin},J=typeof o=="string"?o:await A({content:o,data:P,widgetStyles:E,widgetScripts:S,opt:t}),B=ot(n,t);if(t.assetsOrigin&&t.assetsOrigin.startsWith("http")){let s=R(t.assetsOrigin);s&&(l["script-src"].push(s),l["style-src"].push(s),l["img-src"].push(s),l["connect-src"].push(s),l["font-src"].push(s))}let N="";p.forEach(s=>{let u="<link ";Object.entries(s).forEach(([$,w])=>{u+=`${$}="${w}" `}),N+=u+"/>"});let z="";c.forEach(s=>{let u="<link ";Object.entries(s).forEach(([$,w])=>{u+=`${$}="${$==="href"?`${t.assetsOrigin}assets/favicons/`:""}${w}" `}),z+=u+"/>"});let K="";f.forEach(s=>{let u="";s.endsWith(".woff2")?u="font/woff2":s.endsWith(".woff")?u="font/woff":s.endsWith(".ttf")?u="font/ttf":s.endsWith(".otf")&&(u="font/otf");let $="";s.startsWith("http")?(l["font-src"].push(R(s)||""),$=s):$=`${t.assetsOrigin}assets/fonts/${s}`,K+=`<link rel="preload" href="${$}" as="font"${u?` type="${u}"`:""} crossorigin>`});let j="",U="";Array.from(E.values()).flat().forEach(s=>{i.push(s)}),H(i).forEach(s=>{if(typeof s=="string")s.startsWith("http")?(l["style-src"].push(R(s)||""),j+=`<link rel="stylesheet" href="${s}" >`):s.endsWith(".css")?j+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${s}">`:U+=C(s,P);else if(Array.isArray(s)){l["style-src"].push("'unsafe-inline'");let[u,$]=s;j+=`<style id="${u}-style">${W($)}</style>`}else{l["style-src"].push("'unsafe-inline'"),j+="<style";let{attributes:u,content:$="",...w}=s;Object.entries(u??w).forEach(([O,b])=>{b=String(b),O==="href"&&!String(b).startsWith("http")&&String(b).endsWith(".css")?b=`${t.assetsOrigin}stylesheets/${b}`:String(b).startsWith("http")&&l["style-src"].push(R(String(b))||""),j+=`${O}="${b}" `}),j+=`>${W($)}</style>`}}),U&&(j=`<style>${U}</style>`+j);let k="";Array.from(S.values()).flat().forEach(s=>{e.push(s)}),H(e).forEach(s=>{if(typeof s=="string")s.startsWith("http")?(l["script-src"].push(R(s)||""),k+=`<script src="${s}"><\/script>`):s.endsWith(".js")?k+=`<script src="${t.assetsOrigin}scripts/${s}"><\/script>`:(l["script-src"].push("'unsafe-inline'"),k+=`<script>${s}<\/script>`);else{l["script-src"].push("'unsafe-inline'"),k+="<script ";let{attributes:u,content:$="",...w}=s;Object.entries(u??w).forEach(([O,b])=>{O==="src"&&!String(b).startsWith("http")&&String(b).endsWith(".js")?b=`${t.assetsOrigin}scripts/${b}`:String(b).startsWith("http")&&l["script-src"].push(R(String(b))||""),k+=`${O}="${b}" `}),k+=`>${$}<\/script>`}});let _="";d&&(_=Object.entries(l).map(([s,u])=>`${s} ${H(u).join(" ")}`).join("; "));let Z=h.map(({href:s,as:u,type:$,media:w})=>{if(s&&s.startsWith("http")){let O=R(s);if(O)switch(u){case"script":l["script-src"].push(O);break;case"style":l["style-src"].push(O);break;case"font":l["font-src"].push(O);break;case"image":l["img-src"].push(O);break;case"fetch":l["connect-src"].push(O);break;case"track":l["media-src"]=l["media-src"]||["'self'"],l["media-src"].push(O);break}}return`<link rel="preload" href="${s}" as="${u}"${$?` type="${$}"`:""} ${w?`media=${w}`:""} crossorigin>`}).join(""),Q=m&&Object.keys(m).length?`<script type="application/ld+json">${JSON.stringify(m)}<\/script>`:"";return`<!doctype html><html lang="${a.lang??"en"}"><head><title>${a.title}</title><meta name="description" content="${a.description}">`+(B?`<!-- metas -->${B}`:"")+'<!-- og --><meta property="og:type" content="website">'+(a.title?`<meta property="og:title" content="${a.title}">`:"")+(a.description?`<meta property="og:description" content="${a.description}">`:"")+(a.image?`<meta property="og:image" content="${a.image}">`:"")+(a.domain?`<meta property="og:url" content="${a.domain}">`:"")+(a.title?`<meta property="og:site_name" content="${a.title}">`:"")+(_?`<!-- csp --><meta http-equiv="Content-Security-Policy" content="${_}">`:"")+(z?`<!-- favicons -->${z}`:"")+(K?`<!-- fonts -->${K}`:"")+(N?`<!-- links -->${N}`:"")+(Z?`<!-- preload -->${Z}`:"")+(y?`<link rel="manifest" href="${t.assetsOrigin}assets/${y}">`:"")+(j?`<!-- stylesheets -->${j}`:"")+(Q?`<!-- structuredData -->${Q}`:"")+"</head><body>"+J+(k?`<!-- scripts -->${k}`:"")+"</body></html>"},"parseTemplate");function ot(r,t=T){return Array.isArray(r)?r.map(n=>`<meta ${Object.entries(n).filter(([e,i])=>e&&i).map(([e,i])=>`${M(e)}="${i}"`).join(" ")}>`).join(""):Object.entries(x(tt,r)).map(([n,e])=>{if(n=M(n),!e)return"";if(n==="viewport"){if(typeof e=="object"&&e!==null)e=Object.entries(e).map(([i,p])=>`${M(i)}=${p}`).join(", ");else return"";return`<meta name="viewport" content="${e}">`}if(n.startsWith("property:"))return`<meta property="${n.replace("property:","")}" content="${e}">`;if(Array.isArray(e))return e.length?`<meta name="${n}" content="${e.join(", ")}">`:"";if(e&&typeof e=="object"){if(n==="author"&&e?.name){let i=`<meta name="author" content="${e.name}">`;return e.url&&(i+=`<meta name="author:url" content="${e.url}">`),i}return n==="customMeta"?Object.entries(e).filter(([i,p])=>i&&p).map(([i,p])=>`<meta name="${M(i)}" content="${p}">`).join(""):""}return n==="msapplication-TileImage"&&(e=`${t.assetsOrigin}${e}`),`<meta name="${n}" content="${e}">`}).join("")}g(ot,"parseTemplateMetadata");function R(r){try{if(r.startsWith("http")){let{origin:t}=new URL(r);return t}}catch{}return null}g(R,"extractDomain");var rt=g(r=>{switch(typeof r){case"number":return"number";case"boolean":return"boolean";case"object":return Array.isArray(r)?"list":"group";default:return"text"}},"dataTypeToInputType");function F(r,t){switch(t.type){case"group":return{...t,definitions:Object.entries(r??{}).map(([n,e])=>F(e,(t.definitions??[]).find(i=>i.name===n)??{name:n,type:rt(e),value:e}))};case"list":return{...t,definitions:(r??[]).map((n,e)=>F(n,(t.definitions??[])[e]??{name:String(e),type:rt(n),value:n}))};default:return{...t,value:r}}}g(F,"mergeDataIntoInputDefinition");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:L,mergeDataIntoInputDefinition:F,attributeToString:D,parseTemplate:et,parseTemplateContent:A,parseWidget:q,parseStyle:W,parseComponent:V}});})();
|
|
1
|
+
"use strict";(()=>{var nt=Object.defineProperty;var g=(r,t)=>nt(r,"name",{value:t,configurable:!0});function M(r){return r.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}g(M,"turnCamelToKebabCasing");var st=new Set(["@media","@supports","@container","@scope","@document","@layer","@starting-style","@page"]);function X(r,t){return t&&r.trim().startsWith(t)}g(X,"startsWithPrefix");function W(r,t=""){if(typeof r=="string")return r;let n=new Map,e=new Map;function i(m,c,o,y){for(let[d,h]of Object.entries(m))if(typeof h=="object"&&h!==null)if(d.startsWith("@")){let f=Array.from(st).some(a=>d.startsWith(a));i(h,c,d,y||!f)}else{let f,a=M(d);d.startsWith("&")?f=c?d.replace(/&/g,c):d.replace(/&/g,""):c?f=`${c} ${a}`:t&&!y&&!X(a,t)?f=`${t} ${a}`:f=a,i(h,f.trim(),o,y)}else if(h!=null){let f=c;if(t&&!y&&c&&!X(c,t)?f=`${t} ${c}`.trim():!c&&t&&!y&&(f=t),!f)continue;if(o){let a=e.get(o);a||(a=new Map,e.set(o,a));let l=a.get(f);l||(l=new Map,a.set(f,l)),l.set(M(d),h)}else{let a=n.get(f);a||(a=new Map,n.set(f,a)),a.set(M(d),h)}}}g(i,"walk"),i(r,"",null,!1);let p=[];for(let[m,c]of n)if(m&&c.size){let o=[];for(let[y,d]of c)o.push(`${y}: ${d};`);p.push(`${m} { ${o.join(" ")} }`)}for(let[m,c]of e){let o=[];for(let[y,d]of c)if(y&&d.size){let h=[];for(let[f,a]of d)h.push(`${f}: ${a};`);o.push(`${y} { ${h.join(" ")} }`)}o.length&&p.push(`${m} { ${o.join(" ")} }`)}return p.join(" ")}g(W,"parseStyle");function x(r,t){if(r===null||typeof r!="object"||t===null||typeof t!="object")return t;if(Array.isArray(r)&&Array.isArray(t))return Array.from(new Set([...r,...t]));let n=Array.isArray(r)?[...r]:{...r};for(let e in t)t.hasOwnProperty(e)&&(Array.isArray(r[e])&&Array.isArray(t[e])?n[e]=Array.from(new Set([...r[e],...t[e]])):n[e]=x(n[e],t[e]));return n}g(x,"mergeObjects");var T={fetchWidget:async()=>null,fetchTemplate:async()=>null,useCache:!0,locales:{},components:{},prod:!1,assetsOrigin:"/"};function L(r){return r.reduce((t,{name:n="",value:e,type:i,definitions:p=[]})=>{switch(i){case"group":t[n]=L(p);break;case"options":t[n]={value:e,options:p.map(m=>Object.values(L([m]))[0])};break;case"list":t[n]=p.map(m=>Object.values(L([m]))[0]);break;default:t[n]=e}return t},{})}g(L,"inputDefinitionsToObject");var Y=g((r,t)=>String(t??"").split(".").filter(Boolean).reduce((e,i)=>{try{return e&&typeof e=="object"?e[i]:void 0}catch{return null}},r),"deepValue");var C=g((r,t)=>{let n=null;for(;(n=/\{\{([a-z0-9.$_]+)}}/gim.exec(r))!==null;){let[e,i]=n,p=Y(t,i);r=r.replace(e,String(p))}return r},"replaceStringValue");var D=g((r,t={})=>Object.entries(r).map(([n,e])=>(typeof e=="string"&&(e=C(e,t)),`${n}="${e}"`)).join(" "),"attributeToString");var V=g((r,t={},n=new Map)=>{if(!r||!r.content)return"";let{content:e="",stylesheets:i,id:p}=r;return i&&n.set(`comp-${p}`,i),typeof e=="string"?e?C(e,t):"":I(e,t,n)},"parseComponent");function I(r,t={},n=new Map){return r.map(e=>{if(typeof e=="string")return C(e,t);let{name:i,children:p=[],...m}=e,c=D(m,t);return`<${i}`+(c?` ${c}`:"")+`>${I(p,t,n)}</${i}>`}).join("")}g(I,"parseContent");var v=new Map;async function q({node:r,data:t={},widgetStyles:n=new Map,widgetScripts:e=new Map,opt:i=T}){let{name:p,children:m=[],...c}=r;if(r["data-render-id"]=r["data-render-id"]||Math.random().toString(36).substring(2,15),{name:p,children:m=[],...c}=r,c.id){let o=(i?.useCache?v.get(c.id):null)??await i.fetchWidget?.(c.id);if(o){let y=c.id||c.name,d=t.widgetsData?.[y]||{},h={...t,assetsOrigin:i.assetsOrigin,prod:i.prod},f={...L(o?.inputs??[]),...d,...c,env:h},a=(i?.locales??{})[String(t.lang??"en")]||{};typeof o.render=="function"?m=[o.render({...f,env:h,$msg:(S,P={})=>String(a[S]||S).replace(/\{\{(\w+)\}\}/g,(J,B)=>String(P[B]||"")),$comp:(S,P={})=>V((i.components??{})[S],{...P,env:h},n)})]:typeof o.content=="string"?m=[C(o.content,{...f,env:h,$msg:a})]:Array.isArray(o.content)&&(m=[await A({content:o.content,data:{...t,...f},widgetStyles:n,widgetScripts:e,opt:i})]);let l=[],E=o.id||c.id;if(o.style){let S=typeof o.style=="function"?o.style(f):o.style;l.push([`widget-${E}`,W(S,o.cssSelector??"")])}o.stylesheets?.forEach(S=>{l.push(S)}),l.length>0&&n.set(E,l),o.scripts&&e.set(E,o.scripts),v.set(c.id,o)}}return`<${p} id="${c.id}" data-render-id="${c["data-render-id"]}">${await A({content:m,data:t,widgetStyles:n,widgetScripts:e,opt:i})}</${p}>`}g(q,"parseWidget");async function A({content:r,data:t={},widgetStyles:n=new Map,widgetScripts:e=new Map,opt:i=T}){return!r||!Array.isArray(r)?"":(await Promise.all(r.map(async p=>{if(typeof p=="string")return C(p,t);let{name:m,children:c,...o}=p;if(m==="widget")return q({node:p,data:t,widgetStyles:n,widgetScripts:e,opt:i});let y={...t,assetsOrigin:i.assetsOrigin,prod:i.prod,locales:i.locales};if(m==="component"){let h=(i?.locales??{})[String(t.lang??"en")]||{};return V((i.components??{})[o.id??""],x(t,{...o,env:y,$msg:h}),n)}let d=D(o,y);return`<${m}`+(d?` ${d}`:"")+`>${await A({content:c,data:t,widgetStyles:n,widgetScripts:e,opt:i})}</${m}>`}))).join("")}g(A,"parseTemplateContent");var G=new Map,it={"default-src":["'self'"],"script-src":["'self'"],"style-src":["'self'"],"connect-src":["'self'"],"img-src":["'self'","data:"],"font-src":["'self'","data:"]},tt={charset:"UTF-8",viewport:{width:"device-width",initialScale:1},keywords:[],canonical:"",themeColor:"",languageDirection:"ltr",customMeta:{}},H=g(r=>Array.from(new Set(r)),"unique"),et=g(async(r,t=T)=>{if(t=x(T,t),G.set(r.id,r),r.extends){let s=G.get(r.extends)||await t.fetchTemplate?.(r.extends);if(!s)throw new Error(`Template "${r.extends}" not found`);G.set(r.extends,s),r=x(s,r)}let{metadata:n=tt,scripts:e=[],stylesheets:i=[],links:p=[],fonts:m=[],favicons:c=[],content:o="",manifest:y,csp:d=null,preload:h=[],structuredData:f={},...a}=r??{},l=x(it,d??{}),E=new Map,S=new Map,P={...a,assetsOrigin:t.assetsOrigin},J=typeof o=="string"?o:await A({content:o,data:P,widgetStyles:E,widgetScripts:S,opt:t}),B=ot(n,t);if(t.assetsOrigin&&t.assetsOrigin.startsWith("http")){let s=R(t.assetsOrigin);s&&(l["script-src"].push(s),l["style-src"].push(s),l["img-src"].push(s),l["connect-src"].push(s),l["font-src"].push(s))}let N="";p.forEach(s=>{let u="<link ";Object.entries(s).forEach(([$,j])=>{u+=`${$}="${j}" `}),N+=u+"/>"});let z="";c.forEach(s=>{let u="<link ";Object.entries(s).forEach(([$,j])=>{u+=`${$}="${$==="href"?`${t.assetsOrigin}assets/favicons/`:""}${j}" `}),z+=u+"/>"});let K="";m.forEach(s=>{let u="";s.endsWith(".woff2")?u="font/woff2":s.endsWith(".woff")?u="font/woff":s.endsWith(".ttf")?u="font/ttf":s.endsWith(".otf")&&(u="font/otf");let $="";s.startsWith("http")?(l["font-src"].push(R(s)||""),$=s):$=`${t.assetsOrigin}assets/fonts/${s}`,K+=`<link rel="preload" href="${$}" as="font"${u?` type="${u}"`:""} crossorigin>`});let w="",U="";Array.from(E.values()).flat().forEach(s=>{i.push(s)}),H(i).forEach(s=>{if(typeof s=="string")s.startsWith("http")?(l["style-src"].push(R(s)||""),w+=`<link rel="stylesheet" href="${s}" >`):s.endsWith(".css")?w+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${s}">`:U+=C(s,P);else if(Array.isArray(s)){l["style-src"].push("'unsafe-inline'");let[u,$]=s;w+=`<style id="${u}-style">${W($)}</style>`}else{l["style-src"].push("'unsafe-inline'"),w+="<style";let{attributes:u,content:$="",...j}=s;Object.entries(u??j).forEach(([O,b])=>{b=String(b),O==="href"&&!String(b).startsWith("http")&&String(b).endsWith(".css")?b=`${t.assetsOrigin}stylesheets/${b}`:String(b).startsWith("http")&&l["style-src"].push(R(String(b))||""),w+=`${O}="${b}" `}),w+=`>${W($)}</style>`}}),U&&(w=`<style>${U}</style>`+w);let k="";Array.from(S.values()).flat().forEach(s=>{e.push(s)}),H(e).forEach(s=>{if(typeof s=="string")s.startsWith("http")?(l["script-src"].push(R(s)||""),k+=`<script src="${s}"><\/script>`):s.endsWith(".js")?k+=`<script src="${t.assetsOrigin}scripts/${s}"><\/script>`:(l["script-src"].push("'unsafe-inline'"),k+=`<script>${s}<\/script>`);else{l["script-src"].push("'unsafe-inline'"),k+="<script ";let{attributes:u,content:$="",...j}=s;Object.entries(u??j).forEach(([O,b])=>{O==="src"&&!String(b).startsWith("http")&&String(b).endsWith(".js")?b=`${t.assetsOrigin}scripts/${b}`:String(b).startsWith("http")&&l["script-src"].push(R(String(b))||""),k+=`${O}="${b}" `}),k+=`>${$}<\/script>`}});let _="";d&&(_=Object.entries(l).map(([s,u])=>`${s} ${H(u).join(" ")}`).join("; "));let Z=h.map(({href:s,as:u,type:$,media:j})=>{if(s&&s.startsWith("http")){let O=R(s);if(O)switch(u){case"script":l["script-src"].push(O);break;case"style":l["style-src"].push(O);break;case"font":l["font-src"].push(O);break;case"image":l["img-src"].push(O);break;case"fetch":l["connect-src"].push(O);break;case"track":l["media-src"]=l["media-src"]||["'self'"],l["media-src"].push(O);break}}return`<link rel="preload" href="${s}" as="${u}"${$?` type="${$}"`:""} ${j?`media=${j}`:""} crossorigin>`}).join(""),Q=f&&Object.keys(f).length?`<script type="application/ld+json">${JSON.stringify(f)}<\/script>`:"";return`<!doctype html><html lang="${a.lang??"en"}"><head><title>${a.title}</title><meta name="description" content="${a.description}">`+(B?`<!-- metas -->${B}`:"")+'<!-- og --><meta property="og:type" content="website">'+(a.title?`<meta property="og:title" content="${a.title}">`:"")+(a.description?`<meta property="og:description" content="${a.description}">`:"")+(a.image?`<meta property="og:image" content="${a.image}">`:"")+(a.domain?`<meta property="og:url" content="${a.domain}">`:"")+(a.title?`<meta property="og:site_name" content="${a.title}">`:"")+(_?`<!-- csp --><meta http-equiv="Content-Security-Policy" content="${_}">`:"")+(z?`<!-- favicons -->${z}`:"")+(K?`<!-- fonts -->${K}`:"")+(N?`<!-- links -->${N}`:"")+(Z?`<!-- preload -->${Z}`:"")+(y?`<link rel="manifest" href="${t.assetsOrigin}assets/${y}">`:"")+(w?`<!-- stylesheets -->${w}`:"")+(Q?`<!-- structuredData -->${Q}`:"")+"</head><body>"+J+(k?`<!-- scripts -->${k}`:"")+"</body></html>"},"parseTemplate");function ot(r,t=T){return Array.isArray(r)?r.map(n=>`<meta ${Object.entries(n).filter(([e,i])=>e&&i).map(([e,i])=>`${M(e)}="${i}"`).join(" ")}>`).join(""):Object.entries(x(tt,r)).map(([n,e])=>{if(n=M(n),!e)return"";if(n==="viewport"){if(typeof e=="object"&&e!==null)e=Object.entries(e).map(([i,p])=>`${M(i)}=${p}`).join(", ");else return"";return`<meta name="viewport" content="${e}">`}if(n.startsWith("property:"))return`<meta property="${n.replace("property:","")}" content="${e}">`;if(Array.isArray(e))return e.length?`<meta name="${n}" content="${e.join(", ")}">`:"";if(e&&typeof e=="object"){if(n==="author"&&e?.name){let i=`<meta name="author" content="${e.name}">`;return e.url&&(i+=`<meta name="author:url" content="${e.url}">`),i}return n==="customMeta"?Object.entries(e).filter(([i,p])=>i&&p).map(([i,p])=>`<meta name="${M(i)}" content="${p}">`).join(""):""}return n==="msapplication-TileImage"&&(e=`${t.assetsOrigin}${e}`),`<meta name="${n}" content="${e}">`}).join("")}g(ot,"parseTemplateMetadata");function R(r){try{if(r.startsWith("http")){let{origin:t}=new URL(r);return t}}catch{}return null}g(R,"extractDomain");var rt=g(r=>{switch(typeof r){case"number":return"number";case"boolean":return"boolean";case"object":return Array.isArray(r)?"list":"group";default:return"text"}},"dataTypeToInputType");function F(r,t){switch(t.type){case"group":return{...t,definitions:Object.entries(r??{}).map(([n,e])=>F(e,(t.definitions??[]).find(i=>i.name===n)??{name:n,type:rt(e),value:e}))};case"list":return{...t,definitions:(r??[]).map((n,e)=>F(n,(t.definitions??[])[e]??{name:String(e),type:rt(n),value:n}))};default:return{...t,value:r}}}g(F,"mergeDataIntoInputDefinition");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:L,mergeDataIntoInputDefinition:F,attributeToString:D,parseTemplate:et,parseTemplateContent:A,parseWidget:q,parseStyle:W,parseComponent:V}});})();
|
|
2
2
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -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 useCache: true,\n locales: {},\n components: {},\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 if (typeof content === 'string') {\n return content ? replaceStringValue(content, props) : ''\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 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'\nimport { mergeObjects } from './utils/merge-objects.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\ninterface ParseWidgetOptions {\n node: ContentNode\n opt?: parseOptions\n data?: ObjectLiteral\n widgetStyles?: Map<string, Stylesheet[]>\n widgetScripts?: Map<string, Script[]>\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 (opt?.useCache ? widgetCache.get(attributes.id) : null) ??\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const widgetId = attributes.id || attributes.name\n const templateWidgetData =\n // @ts-expect-error Element implicitly has an any type...\n data.widgetsData?.[widgetId] || {}\n const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n }\n\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...templateWidgetData,\n ...attributes,\n env,\n }\n\n const localeMsgs =\n (opt?.locales ?? {})[String(data.lang ?? 'en')] || {}\n\n if (typeof widget.render === 'function') {\n children = [\n widget.render({\n ...props,\n env,\n $msg: (msgId: string, values = {}) => {\n return String(localeMsgs[msgId] || msgId).replace(\n /\\{\\{(\\w+)\\}\\}/g,\n (_, key: string) => String(values[key] || '')\n )\n },\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 if (typeof widget.content === 'string') {\n children = [\n replaceStringValue(widget.content, {\n ...props,\n env,\n $msg: localeMsgs,\n }),\n ]\n } else if (Array.isArray(widget.content)) {\n children = [\n await parseTemplateContent({\n content: widget.content,\n data: { ...data, ...props },\n widgetStyles,\n widgetScripts,\n opt,\n }),\n ]\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 || !Array.isArray(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 const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n locales: opt.locales,\n }\n\n if (name === 'component') {\n const localeMsgs =\n (opt?.locales ?? {})[String(data.lang ?? 'en')] || {}\n return parseComponent(\n (opt.components ?? {})[attributes.id ?? ''],\n mergeObjects(data, {\n ...attributes,\n env,\n $msg: localeMsgs,\n }) as ObjectLiteral,\n widgetStyles\n )\n }\n\n const attrs = attributeToString(attributes, env)\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 MetaTagDefinition,\n ObjectLiteral,\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'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nconst defaultCSP: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\"],\n 'connect-src': [\"'self'\"],\n 'img-src': [\"'self'\", 'data:'],\n 'font-src': [\"'self'\", 'data:'],\n}\n\nconst defaultMetadata: Template['metadata'] = {\n charset: 'UTF-8',\n viewport: { width: 'device-width', initialScale: 1 },\n keywords: [],\n canonical: '',\n themeColor: '',\n languageDirection: 'ltr',\n customMeta: {},\n}\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 = defaultMetadata,\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n csp = null,\n preload = [],\n structuredData = {},\n ...data\n } = temp ?? {}\n\n const cspConfig = mergeObjects(defaultCSP, csp ?? {}) as Record<\n string,\n string[]\n >\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 const metas = parseTemplateMetadata(metadata, opt)\n\n if (opt.assetsOrigin && opt.assetsOrigin.startsWith('http')) {\n const origin = extractDomain(opt.assetsOrigin)\n if (origin) {\n cspConfig['script-src'].push(origin)\n cspConfig['style-src'].push(origin)\n cspConfig['img-src'].push(origin)\n cspConfig['connect-src'].push(origin)\n cspConfig['font-src'].push(origin)\n }\n }\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 let href = ''\n\n if (font.startsWith('http')) {\n cspConfig['font-src'].push(extractDomain(font) || '')\n href = font\n } else {\n href = `${opt.assetsOrigin}assets/fonts/${font}`\n }\n\n ft += `<link rel=\"preload\" href=\"${href}\" 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 cspConfig['style-src'].push(extractDomain(stylesheet) || '')\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 cspConfig['style-src'].push(\"'unsafe-inline'\")\n const [id, style] = stylesheet\n st += `<style id=\"${id}-style\">${parseStyle(style)}</style>`\n } else {\n cspConfig['style-src'].push(\"'unsafe-inline'\")\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 value = String(value)\n\n if (\n key === 'href' &&\n !String(value).startsWith('http') &&\n String(value).endsWith('.css')\n ) {\n value = `${opt.assetsOrigin}stylesheets/${value}`\n } else if (String(value).startsWith('http')) {\n cspConfig['style-src'].push(\n extractDomain(String(value)) || ''\n )\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 cspConfig['script-src'].push(extractDomain(script) || '')\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n cspConfig['script-src'].push(\"'unsafe-inline'\")\n sc += `<script>${script}</script>`\n }\n } else {\n cspConfig['script-src'].push(\"'unsafe-inline'\")\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 !String(value).startsWith('http') &&\n String(value).endsWith('.js')\n ) {\n value = `${opt.assetsOrigin}scripts/${value}`\n } else if (String(value).startsWith('http')) {\n cspConfig['script-src'].push(\n extractDomain(String(value)) || ''\n )\n }\n\n sc += `${key}=\"${value}\" `\n })\n\n sc += `>${content}</script>`\n }\n })\n\n let cspString = ''\n if (csp) {\n cspString = Object.entries(cspConfig)\n .map(\n ([directive, value]) =>\n `${directive} ${unique(value as string[]).join(' ')}`\n )\n .join('; ')\n }\n\n // Preload links\n const preloadLinks = preload\n .map(({ href, as, type, media }) => {\n if (href && href.startsWith('http')) {\n const domain = extractDomain(href)\n if (domain) {\n switch (as) {\n case 'script':\n cspConfig['script-src'].push(domain)\n break\n case 'style':\n cspConfig['style-src'].push(domain)\n break\n case 'font':\n cspConfig['font-src'].push(domain)\n break\n case 'image':\n cspConfig['img-src'].push(domain)\n break\n case 'fetch':\n cspConfig['connect-src'].push(domain)\n break\n case 'track':\n cspConfig['media-src'] = cspConfig['media-src'] || [\n \"'self'\",\n ]\n cspConfig['media-src'].push(domain)\n break\n }\n }\n }\n return `<link rel=\"preload\" href=\"${href}\" as=\"${as}\"${type ? ` type=\"${type}\"` : ''} ${media ? `media=${media}` : ''} crossorigin>`\n })\n .join('')\n\n // Structured data script\n const structuredDataScript =\n structuredData && Object.keys(structuredData).length\n ? `<script type=\"application/ld+json\">${JSON.stringify(structuredData)}</script>`\n : ''\n\n return (\n '<!doctype html>' +\n `<html lang=\"${data.lang ?? 'en'}\">` +\n '<head>' +\n `<title>${data.title}</title>` +\n `<meta name=\"description\" content=\"${data.description}\">` +\n (metas ? `<!-- metas -->${metas}` : '') +\n '<!-- og -->' +\n `<meta property=\"og:type\" content=\"website\">` +\n (data.title\n ? `<meta property=\"og:title\" content=\"${data.title}\">`\n : '') +\n (data.description\n ? `<meta property=\"og:description\" content=\"${data.description}\">`\n : '') +\n (data.image\n ? `<meta property=\"og:image\" content=\"${data.image}\">`\n : '') +\n (data.domain\n ? `<meta property=\"og:url\" content=\"${data.domain}\">`\n : '') +\n (data.title\n ? `<meta property=\"og:site_name\" content=\"${data.title}\">`\n : '') +\n (cspString\n ? `<!-- csp --><meta http-equiv=\"Content-Security-Policy\" content=\"${cspString}\">`\n : '') +\n (fi ? `<!-- favicons -->${fi}` : '') +\n (ft ? `<!-- fonts -->${ft}` : '') +\n (ls ? `<!-- links -->${ls}` : '') +\n (preloadLinks ? `<!-- preload -->${preloadLinks}` : '') +\n (manifest\n ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">`\n : '') +\n (st ? `<!-- stylesheets -->${st}` : '') +\n (structuredDataScript\n ? `<!-- structuredData -->${structuredDataScript}`\n : '') +\n '</head><body>' +\n bodyContent +\n (sc ? `<!-- scripts -->${sc}` : '') +\n '</body></html>'\n )\n}\n\nfunction parseTemplateMetadata(\n metadata: MetaTagDefinition[] | ObjectLiteral,\n opt: parseOptions = defaultOptions\n): string {\n if (Array.isArray(metadata)) {\n // metadata is MetaTagDefinition[]\n return metadata\n .map(\n (metaObj) =>\n `<meta ${Object.entries(metaObj)\n .filter(([k, v]) => k && v)\n .map(([k, v]) => `${turnCamelToKebabCasing(k)}=\"${v}\"`)\n .join(' ')}>`\n )\n .join('')\n } else {\n return Object.entries(\n mergeObjects(defaultMetadata, metadata) as ObjectLiteral\n )\n .map(([key, value]) => {\n key = turnCamelToKebabCasing(key)\n\n if (!value) {\n // Skip empty values\n return ''\n }\n\n if (key === 'viewport') {\n if (typeof value === 'object' && value !== null) {\n value = Object.entries(value)\n .map(\n ([k, v]) => `${turnCamelToKebabCasing(k)}=${v}`\n )\n .join(', ')\n } else {\n return ''\n }\n return `<meta name=\"viewport\" content=\"${value}\">`\n }\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n if (Array.isArray(value)) {\n return value.length\n ? `<meta name=\"${key}\" content=\"${value.join(', ')}\">`\n : ''\n }\n if (value && typeof value === 'object') {\n // @ts-expect-error Property name does not exist on type object\n if (key === 'author' && value?.name) {\n // @ts-expect-error Property name does not exist on type object\n let tags = `<meta name=\"author\" content=\"${value.name}\">`\n // @ts-expect-error Property url does not exist on type object\n if (value.url) {\n // @ts-expect-error Property url does not exist on type object\n tags += `<meta name=\"author:url\" content=\"${value.url}\">`\n }\n return tags\n }\n if (key === 'customMeta') {\n return Object.entries(value)\n .filter(([k, v]) => k && v)\n .map(\n ([k, v]) =>\n `<meta name=\"${turnCamelToKebabCasing(k)}\" content=\"${v}\">`\n )\n .join('')\n }\n return ''\n }\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n }\n}\n\nfunction extractDomain(url: string): string | null {\n try {\n if (url.startsWith('http')) {\n const { origin } = new URL(url)\n return origin\n }\n } catch {\n // ignore\n }\n return null\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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",
|
|
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 useCache: true,\n locales: {},\n components: {},\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 if (typeof content === 'string') {\n return content ? replaceStringValue(content, props) : ''\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 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'\nimport { mergeObjects } from './utils/merge-objects.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\ninterface ParseWidgetOptions {\n node: ContentNode\n opt?: parseOptions\n data?: ObjectLiteral\n widgetStyles?: Map<string, Stylesheet[]>\n widgetScripts?: Map<string, Script[]>\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 (opt?.useCache ? widgetCache.get(attributes.id) : null) ??\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const widgetId = attributes.id || attributes.name\n const templateWidgetData =\n // @ts-expect-error Element implicitly has an any type...\n data.widgetsData?.[widgetId] || {}\n const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n }\n\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...templateWidgetData,\n ...attributes,\n env,\n }\n\n const localeMsgs =\n (opt?.locales ?? {})[String(data.lang ?? 'en')] || {}\n\n if (typeof widget.render === 'function') {\n children = [\n widget.render({\n ...props,\n env,\n $msg: (msgId: string, values = {}) => {\n return String(localeMsgs[msgId] || msgId).replace(\n /\\{\\{(\\w+)\\}\\}/g,\n (_, key: string) => String(values[key] || '')\n )\n },\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 if (typeof widget.content === 'string') {\n children = [\n replaceStringValue(widget.content, {\n ...props,\n env,\n $msg: localeMsgs,\n }),\n ]\n } else if (Array.isArray(widget.content)) {\n children = [\n await parseTemplateContent({\n content: widget.content,\n data: { ...data, ...props },\n widgetStyles,\n widgetScripts,\n opt,\n }),\n ]\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 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 || !Array.isArray(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 const env = {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n locales: opt.locales,\n }\n\n if (name === 'component') {\n const localeMsgs =\n (opt?.locales ?? {})[String(data.lang ?? 'en')] || {}\n return parseComponent(\n (opt.components ?? {})[attributes.id ?? ''],\n mergeObjects(data, {\n ...attributes,\n env,\n $msg: localeMsgs,\n }) as ObjectLiteral,\n widgetStyles\n )\n }\n\n const attrs = attributeToString(attributes, env)\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 MetaTagDefinition,\n ObjectLiteral,\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'\nimport { turnCamelToKebabCasing } from './utils/turn-camel-to-kebab-casing.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nconst defaultCSP: Record<string, string[]> = {\n 'default-src': [\"'self'\"],\n 'script-src': [\"'self'\"],\n 'style-src': [\"'self'\"],\n 'connect-src': [\"'self'\"],\n 'img-src': [\"'self'\", 'data:'],\n 'font-src': [\"'self'\", 'data:'],\n}\n\nconst defaultMetadata: Template['metadata'] = {\n charset: 'UTF-8',\n viewport: { width: 'device-width', initialScale: 1 },\n keywords: [],\n canonical: '',\n themeColor: '',\n languageDirection: 'ltr',\n customMeta: {},\n}\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 = defaultMetadata,\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n csp = null,\n preload = [],\n structuredData = {},\n ...data\n } = temp ?? {}\n\n const cspConfig = mergeObjects(defaultCSP, csp ?? {}) as Record<\n string,\n string[]\n >\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 const metas = parseTemplateMetadata(metadata, opt)\n\n if (opt.assetsOrigin && opt.assetsOrigin.startsWith('http')) {\n const origin = extractDomain(opt.assetsOrigin)\n if (origin) {\n cspConfig['script-src'].push(origin)\n cspConfig['style-src'].push(origin)\n cspConfig['img-src'].push(origin)\n cspConfig['connect-src'].push(origin)\n cspConfig['font-src'].push(origin)\n }\n }\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 let href = ''\n\n if (font.startsWith('http')) {\n cspConfig['font-src'].push(extractDomain(font) || '')\n href = font\n } else {\n href = `${opt.assetsOrigin}assets/fonts/${font}`\n }\n\n ft += `<link rel=\"preload\" href=\"${href}\" 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 cspConfig['style-src'].push(extractDomain(stylesheet) || '')\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 cspConfig['style-src'].push(\"'unsafe-inline'\")\n const [id, style] = stylesheet\n st += `<style id=\"${id}-style\">${parseStyle(style)}</style>`\n } else {\n cspConfig['style-src'].push(\"'unsafe-inline'\")\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 value = String(value)\n\n if (\n key === 'href' &&\n !String(value).startsWith('http') &&\n String(value).endsWith('.css')\n ) {\n value = `${opt.assetsOrigin}stylesheets/${value}`\n } else if (String(value).startsWith('http')) {\n cspConfig['style-src'].push(\n extractDomain(String(value)) || ''\n )\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 cspConfig['script-src'].push(extractDomain(script) || '')\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n cspConfig['script-src'].push(\"'unsafe-inline'\")\n sc += `<script>${script}</script>`\n }\n } else {\n cspConfig['script-src'].push(\"'unsafe-inline'\")\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 !String(value).startsWith('http') &&\n String(value).endsWith('.js')\n ) {\n value = `${opt.assetsOrigin}scripts/${value}`\n } else if (String(value).startsWith('http')) {\n cspConfig['script-src'].push(\n extractDomain(String(value)) || ''\n )\n }\n\n sc += `${key}=\"${value}\" `\n })\n\n sc += `>${content}</script>`\n }\n })\n\n let cspString = ''\n if (csp) {\n cspString = Object.entries(cspConfig)\n .map(\n ([directive, value]) =>\n `${directive} ${unique(value as string[]).join(' ')}`\n )\n .join('; ')\n }\n\n // Preload links\n const preloadLinks = preload\n .map(({ href, as, type, media }) => {\n if (href && href.startsWith('http')) {\n const domain = extractDomain(href)\n if (domain) {\n switch (as) {\n case 'script':\n cspConfig['script-src'].push(domain)\n break\n case 'style':\n cspConfig['style-src'].push(domain)\n break\n case 'font':\n cspConfig['font-src'].push(domain)\n break\n case 'image':\n cspConfig['img-src'].push(domain)\n break\n case 'fetch':\n cspConfig['connect-src'].push(domain)\n break\n case 'track':\n cspConfig['media-src'] = cspConfig['media-src'] || [\n \"'self'\",\n ]\n cspConfig['media-src'].push(domain)\n break\n }\n }\n }\n return `<link rel=\"preload\" href=\"${href}\" as=\"${as}\"${type ? ` type=\"${type}\"` : ''} ${media ? `media=${media}` : ''} crossorigin>`\n })\n .join('')\n\n // Structured data script\n const structuredDataScript =\n structuredData && Object.keys(structuredData).length\n ? `<script type=\"application/ld+json\">${JSON.stringify(structuredData)}</script>`\n : ''\n\n return (\n '<!doctype html>' +\n `<html lang=\"${data.lang ?? 'en'}\">` +\n '<head>' +\n `<title>${data.title}</title>` +\n `<meta name=\"description\" content=\"${data.description}\">` +\n (metas ? `<!-- metas -->${metas}` : '') +\n '<!-- og -->' +\n `<meta property=\"og:type\" content=\"website\">` +\n (data.title\n ? `<meta property=\"og:title\" content=\"${data.title}\">`\n : '') +\n (data.description\n ? `<meta property=\"og:description\" content=\"${data.description}\">`\n : '') +\n (data.image\n ? `<meta property=\"og:image\" content=\"${data.image}\">`\n : '') +\n (data.domain\n ? `<meta property=\"og:url\" content=\"${data.domain}\">`\n : '') +\n (data.title\n ? `<meta property=\"og:site_name\" content=\"${data.title}\">`\n : '') +\n (cspString\n ? `<!-- csp --><meta http-equiv=\"Content-Security-Policy\" content=\"${cspString}\">`\n : '') +\n (fi ? `<!-- favicons -->${fi}` : '') +\n (ft ? `<!-- fonts -->${ft}` : '') +\n (ls ? `<!-- links -->${ls}` : '') +\n (preloadLinks ? `<!-- preload -->${preloadLinks}` : '') +\n (manifest\n ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">`\n : '') +\n (st ? `<!-- stylesheets -->${st}` : '') +\n (structuredDataScript\n ? `<!-- structuredData -->${structuredDataScript}`\n : '') +\n '</head><body>' +\n bodyContent +\n (sc ? `<!-- scripts -->${sc}` : '') +\n '</body></html>'\n )\n}\n\nfunction parseTemplateMetadata(\n metadata: MetaTagDefinition[] | ObjectLiteral,\n opt: parseOptions = defaultOptions\n): string {\n if (Array.isArray(metadata)) {\n // metadata is MetaTagDefinition[]\n return metadata\n .map(\n (metaObj) =>\n `<meta ${Object.entries(metaObj)\n .filter(([k, v]) => k && v)\n .map(([k, v]) => `${turnCamelToKebabCasing(k)}=\"${v}\"`)\n .join(' ')}>`\n )\n .join('')\n } else {\n return Object.entries(\n mergeObjects(defaultMetadata, metadata) as ObjectLiteral\n )\n .map(([key, value]) => {\n key = turnCamelToKebabCasing(key)\n\n if (!value) {\n // Skip empty values\n return ''\n }\n\n if (key === 'viewport') {\n if (typeof value === 'object' && value !== null) {\n value = Object.entries(value)\n .map(\n ([k, v]) => `${turnCamelToKebabCasing(k)}=${v}`\n )\n .join(', ')\n } else {\n return ''\n }\n return `<meta name=\"viewport\" content=\"${value}\">`\n }\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n if (Array.isArray(value)) {\n return value.length\n ? `<meta name=\"${key}\" content=\"${value.join(', ')}\">`\n : ''\n }\n if (value && typeof value === 'object') {\n // @ts-expect-error Property name does not exist on type object\n if (key === 'author' && value?.name) {\n // @ts-expect-error Property name does not exist on type object\n let tags = `<meta name=\"author\" content=\"${value.name}\">`\n // @ts-expect-error Property url does not exist on type object\n if (value.url) {\n // @ts-expect-error Property url does not exist on type object\n tags += `<meta name=\"author:url\" content=\"${value.url}\">`\n }\n return tags\n }\n if (key === 'customMeta') {\n return Object.entries(value)\n .filter(([k, v]) => k && v)\n .map(\n ([k, v]) =>\n `<meta name=\"${turnCamelToKebabCasing(k)}\" content=\"${v}\">`\n )\n .join('')\n }\n return ''\n }\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n }\n}\n\nfunction extractDomain(url: string): string | null {\n try {\n if (url.startsWith('http')) {\n const { origin } = new URL(url)\n return origin\n }\n } catch {\n // ignore\n }\n return null\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
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", "replaceStringValue", "parseContent", "data", "node", "name", "children", "attributes", "attrs", "attributeToString", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "widgetScripts", "opt", "defaultOptions", "name", "children", "attributes", "widget", "widgetId", "templateWidgetData", "env", "props", "inputDefinitionsToObject", "localeMsgs", "msgId", "values", "_", "key", "compId", "compData", "parseComponent", "replaceStringValue", "parseTemplateContent", "styles", "ID", "styleContent", "parseStyle", "stylesheet", "__name", "content", "mergeObjects", "attrs", "attributeToString", "tempCache", "defaultCSP", "defaultMetadata", "unique", "__name", "list", "parseTemplate", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "csp", "preload", "structuredData", "data", "cspConfig", "widgetStyles", "widgetScripts", "localData", "bodyContent", "parseTemplateContent", "metas", "parseTemplateMetadata", "origin", "extractDomain", "ls", "link", "l", "key", "value", "fi", "ft", "font", "type", "href", "st", "loseInlineStyles", "style", "stylesheet", "replaceStringValue", "id", "parseStyle", "attributes", "attrs", "sc", "script", "cspString", "directive", "preloadLinks", "as", "media", "domain", "structuredDataScript", "metaObj", "k", "v", "turnCamelToKebabCasing", "tags", "url", "dataTypeToInputType", "__name", "data", "mergeDataIntoInputDefinition", "def", "k", "v", "item", "idx", "inputDefinitionsToObject", "mergeDataIntoInputDefinition", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle", "parseComponent"]
|
|
7
7
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var
|
|
1
|
+
var M=Object.defineProperty;var v=(n,o)=>M(n,"name",{value:o,configurable:!0});import e from"path";import l from"fs";import Q from"esbuild";import{mergeObjects as V}from"./utils/merge-objects.js";import{parseTemplate as Y}from"./parse-template.js";import Z from"clean-css";import{TemplateType as D}from"./types.js";import{minify as ee}from"html-minifier";import{flattenObject as te}from"./utils/flatten-object.js";const se=new Z,{writeFile:S,readFile:x,readdir:b,mkdir:g,cp:u,rm:ne}=l.promises;async function oe(n,o){try{const m=e.resolve(n,"templates"),$=e.resolve(n,"widgets"),T=await b(m),h=[];let j=null;for(const r of T)if(r.endsWith(".json")){const f=e.join(m,r),W=await x(f,"utf-8"),p=JSON.parse(W);r==="base.json"?j=p:h.push({id:p.id,name:p.name||p.id,url:`/${p.id}.html`,template:r,widgetsData:p.widgetsData||{}})}const C=await b($),w=[];for(const r of C)if(r.endsWith(".js")){const f=e.basename(r,".js");w.push({id:f,name:f.charAt(0).toUpperCase()+f.slice(1).replace(/-/g," "),file:r})}const P={meta:j,pages:h,widgets:w},O=e.join(o,"config.json");await S(O,JSON.stringify(P,null,2)),console.log("Generated config.json with",h.length,"pages and",w.length,"widgets")}catch(m){throw console.error("Error generating admin config:",m),m}}v(oe,"generateAdminConfig");const ye=v(async({publicDir:n,srcDir:o,prod:m=!0})=>{console.log("Building templates:",{publicDir:n,srcDir:o,prod:m});const $=process.cwd(),T=e.join($,"_redirects"),h=e.join(n,"_redirects"),j=e.resolve(n,"scripts"),C=e.resolve(n,"stylesheets"),w=e.resolve(o,"assets"),P=e.resolve(o,"admin"),O=e.resolve(o,"widgets"),r=e.resolve(n,"admin","widgets"),f=e.resolve(n,"assets"),W=e.resolve(o,"data"),p=e.resolve(n,"data"),R=e.resolve(o,"assets","robots.txt"),X=e.join(n,"robots.txt"),U=e.resolve(o,"assets","sitemap.xml");if(l.existsSync(n)&&await ne(n,{recursive:!0,force:!0}),await g(n,{recursive:!0}),await g(j,{recursive:!0}),await g(C,{recursive:!0}),l.existsSync(T)&&await u(T,h),l.existsSync(w)&&await u(w,f,{recursive:!0}),l.existsSync(W)&&await u(W,p,{recursive:!0}),l.existsSync(P)){const t=e.resolve(n,"admin");await g(t,{recursive:!0}),await u(P,t,{recursive:!0}),await oe(o,t),m||(await g(r,{recursive:!0}),await u(O,r,{recursive:!0}))}const q=await b(e.resolve(o,"templates")),F=e.resolve(o,"locales"),B={};if(l.existsSync(F)){const t=await b(F);for(const s of t)if(s.endsWith(".json")){const c=JSON.parse(await x(e.join(F,s),"utf8")),a=e.basename(s,".json");B[a]=te(c)}}const E=await Promise.all(q.filter(t=>t.endsWith(".json")).map(async t=>{const s=e.basename(t);return{dir:e.dirname(t),name:s.replace(".json",""),content:JSON.parse(await x(e.resolve(o,"templates",t),"utf8"))}})),k=E.reduce((t,s)=>({...t,[s.name]:s}),{}),N=E.filter(({content:t})=>t.type===D.Page&&t.excluded!==!0),J=e.resolve(o,"components");let L={};if(l.existsSync(J)){const t=await b(J),s=await Promise.all(t.filter(c=>c.endsWith(".json")).map(async c=>{const a=JSON.parse(await x(e.join(J,c),"utf8"));return[a.id,a]}));L=Object.fromEntries(s)}const _=v(async t=>{let s=typeof t=="string"?t:"";t&&typeof t=="object"&&"src"in t&&(s=String(t.src)),!s.startsWith("http")&&s.endsWith(".js")&&await Q.build({entryPoints:[e.resolve(o,"scripts",s)],minify:!0,outfile:e.join(j,s)})},"handleScript"),G=v(async t=>{let s=typeof t=="string"?t:"";if(t&&typeof t=="object"&&"href"in t&&(s=String(t.href)),!s.startsWith("http")&&s.endsWith(".css")){const c=await x(e.resolve(o,"stylesheets",s),"utf8");await S(e.join(C,s),se.minify(c).styles,"utf-8")}},"handleStylesheet"),I=[];for(const{name:t,dir:s,content:c}of N){let a=c;if(a.extends){const i=k[a.extends];a=V(i.content,a)}const K=c.domain||"",A=c.route||"";if(A){const i=K?`${K.replace(/\/$/,"")}/${A.replace(/^\//,"")}`:`/${A.replace(/^\//,"")}`;I.push(i)}await g(e.join(n,s),{recursive:!0});for(let i=0;i<(a.scripts?.length??0);i++)await _(a.scripts[i]);for(let i=0;i<(a.stylesheets?.length??0);i++)await G(a.stylesheets[i]);const z=await Y(a,{prod:m,components:L,locales:B,fetchTemplate:i=>k[i].content,fetchWidget:async i=>{const y=(await import(e.resolve(O,`${i}.js`))).default;for(let d=0;d<(y.scripts?.length??0);d++)await _(y.scripts[d]);for(let d=0;d<(y.stylesheets?.length??0);d++)await G(y.stylesheets[d]);return y}}),H=ee(z,{collapseWhitespace:!0,removeComments:!0,minifyCSS:!0,minifyJS:!0});await S(e.join(n,s,`${t}.html`),H)}if(l.existsSync(R))await u(R,e.join(n,"robots.txt"));else{const s=`User-agent: *
|
|
2
2
|
Disallow:
|
|
3
|
-
Sitemap: ${
|
|
4
|
-
`;await
|
|
3
|
+
Sitemap: ${N[0]?.content.domain?`${N[0].content.domain.replace(/\/$/,"")}/sitemap.xml`:"/sitemap.xml"}
|
|
4
|
+
`;await S(X,s,"utf-8")}if(l.existsSync(U))await u(U,e.join(n,"sitemap.xml"));else{const t=`<?xml version="1.0" encoding="UTF-8"?>
|
|
5
5
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
6
|
-
`+
|
|
6
|
+
`+I.map(s=>` <url>
|
|
7
7
|
<loc>${s}</loc>
|
|
8
8
|
</url>`).join(`
|
|
9
9
|
`)+`
|
|
10
10
|
</urlset>
|
|
11
|
-
`;await
|
|
11
|
+
`;await S(e.join(n,"sitemap.xml"),t,"utf-8")}},"buildTemplates");export{ye as buildTemplates};
|
package/dist/esm/parse-widget.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var j=Object.defineProperty;var O=(
|
|
1
|
+
var j=Object.defineProperty;var O=(i,n)=>j(i,"name",{value:n,configurable:!0});import{defaultOptions as w}from"./default-parse-options.js";import{inputDefinitionsToObject as T}from"./utils/input-definitions-to-object.js";import{parseStyle as W}from"./parse-style.js";import{attributeToString as P}from"./utils/attributes-to-string.js";import{replaceStringValue as M}from"./utils/replace-string-value.js";import{parseComponent as b}from"./parse-component.js";import{mergeObjects as L}from"./utils/merge-objects.js";const C=new Map;async function A({node:i,data:n={},widgetStyles:a=new Map,widgetScripts:p=new Map,opt:e=w}){let{name:o,children:s=[],...r}=i;if(i["data-render-id"]=i["data-render-id"]||Math.random().toString(36).substring(2,15),{name:o,children:s=[],...r}=i,r.id){const t=(e?.useCache?C.get(r.id):null)??await e.fetchWidget?.(r.id);if(t){const g=r.id||r.name,m=n.widgetsData?.[g]||{},l={...n,assetsOrigin:e.assetsOrigin,prod:e.prod},f={...T(t?.inputs??[]),...m,...r,env:l},$=(e?.locales??{})[String(n.lang??"en")]||{};typeof t.render=="function"?s=[t.render({...f,env:l,$msg:(c,y={})=>String($[c]||c).replace(/\{\{(\w+)\}\}/g,(D,S)=>String(y[S]||"")),$comp:(c,y={})=>b((e.components??{})[c],{...y,env:l},a)})]:typeof t.content=="string"?s=[M(t.content,{...f,env:l,$msg:$})]:Array.isArray(t.content)&&(s=[await h({content:t.content,data:{...n,...f},widgetStyles:a,widgetScripts:p,opt:e})]);const d=[],u=t.id||r.id;if(t.style){const c=typeof t.style=="function"?t.style(f):t.style;d.push([`widget-${u}`,W(c,t.cssSelector??"")])}t.stylesheets?.forEach(c=>{d.push(c)}),d.length>0&&a.set(u,d),t.scripts&&p.set(u,t.scripts),C.set(r.id,t)}}return`<${o} id="${r.id}" data-render-id="${r["data-render-id"]}">${await h({content:s,data:n,widgetStyles:a,widgetScripts:p,opt:e})}</${o}>`}O(A,"parseWidget");async function h({content:i,data:n={},widgetStyles:a=new Map,widgetScripts:p=new Map,opt:e=w}){return!i||!Array.isArray(i)?"":(await Promise.all(i.map(async o=>{if(typeof o=="string")return M(o,n);const{name:s,children:r,...t}=o;if(s==="widget")return A({node:o,data:n,widgetStyles:a,widgetScripts:p,opt:e});const g={...n,assetsOrigin:e.assetsOrigin,prod:e.prod,locales:e.locales};if(s==="component"){const l=(e?.locales??{})[String(n.lang??"en")]||{};return b((e.components??{})[t.id??""],L(n,{...t,env:g,$msg:l}),a)}const m=P(t,g);return`<${s}`+(m?` ${m}`:"")+`>${await h({content:r,data:n,widgetStyles:a,widgetScripts:p,opt:e})}</${s}>`}))).join("")}O(h,"parseTemplateContent");export{h as parseTemplateContent,A as parseWidget};
|
package/dist/types/types.d.ts
CHANGED