@beforesemicolon/site-builder 0.23.0 → 0.24.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/dist/cjs/parse-template.js +5 -5
- package/dist/client.js +3 -3
- package/dist/client.js.map +3 -3
- package/dist/esm/parse-template.js +8 -8
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var x=(s,e)=>f(s,"name",{value:e,configurable:!0});var I=(s,e)=>{for(var r in e)f(s,r,{get:e[r],enumerable:!0})},U=(s,e,r,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of S(e))!F.call(s,c)&&c!==r&&f(s,c,{get:()=>e[c],enumerable:!(p=M(e,c))||p.enumerable});return s};var _=s=>U(f({},"__esModule",{value:!0}),s);var z={};I(z,{parseTemplate:()=>q});module.exports=_(z);var w=require("./utils/merge-objects.js"),T=require("./default-parse-options.js"),v=require("./parse-widget.js"),C=require("./parse-style.js");const O=new Map,q=x(async(s,e=T.defaultOptions)=>{if(e=(0,w.mergeObjects)(T.defaultOptions,e),O.set(s.id,s),s.extends){const t=O.get(s.extends)||await e.fetchTemplate?.(s.extends);if(!t)throw new Error(`Template "${s.extends}" not found`);O.set(s.extends,t),s=(0,w.mergeObjects)(t,s)}const{metadata:r={},scripts:p=[],stylesheets:c=[],links:W=[],fonts:k=[],favicons:u=[],content:$="",manifest:b,...o}=s??{},E=new Map,A=typeof $=="string"?$:await(0,v.parseTemplateContent)($,o,E,e);r.charset||(r.charset="UTF-8"),r.viewport||(r.viewport="width=device-width, initial-scale=1.0");const j=Object.entries(r).map(([t,i])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${i}">`:(t==="msapplication-TileImage"&&(i=`${e.assetsOrigin}${i}`),`<meta name="${t}" content="${i}">`)).join("");let m="";W.forEach(t=>{let i="<link ";Object.entries(t).forEach(([a,y])=>{i+=`${a}="${y}" `}),m+=i+"/>"});let h="";u.forEach(t=>{let i="<link ";Object.entries(t).forEach(([a,y])=>{i+=`${a}="${a==="href"?`${e.assetsOrigin}assets/favicons/`:""}${y}" `}),h+=i+"/>"});let d="";k.forEach(t=>{d+=`<link rel="preload" href="${e.assetsOrigin}assets/fonts/${t}" as="font" crossorigin>`});let n="",g="";[...c,...Array.from(E.entries())].forEach(t=>{if(typeof t=="string")t.startsWith("http")?n+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?n+=`<link rel="stylesheet" href="${e.assetsOrigin}stylesheets/${t}">`:g+=t;else if(Array.isArray(t)){const[i,a]=t;n+=`<style id="${i}">${(0,C.parseStyle)(a)}</style>`}else n+="<style",Object.entries(t.attributes).forEach(([i,a])=>{n+=`${i}="${a}" `}),n+="></style>"}),g&&(n=`<style>${g}</style>`+n);let l="";return p.forEach(t=>{typeof t=="string"?t.startsWith("http")?l+=`<script src="${t}"></script>`:t.endsWith(".js")?l+=`<script src="${e.assetsOrigin}scripts/${t}"></script>`:l+=`<script>${t}</script>`:(l+="<script ",Object.entries(t).forEach(([i,a])=>{l+=`${i}="${a}" `}),l+="></script>")}),`<!doctype html>
|
|
2
2
|
<html lang="${o.lang??"en"}">
|
|
3
3
|
<head>
|
|
4
4
|
<title>${o.title}</title>
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
<meta property="og:image" content="${o.image}">
|
|
12
12
|
<meta property="og:url" content="${o.domain}">
|
|
13
13
|
<meta property="og:site_name" content="${o.title}">
|
|
14
|
-
${
|
|
14
|
+
${j?`<!-- metas -->${j}`:""}
|
|
15
15
|
${h?`<!-- favicons -->${h}`:""}
|
|
16
16
|
${d?`<!-- fonts -->${d}`:""}
|
|
17
17
|
${m?`<!-- links -->${m}`:""}
|
|
18
|
-
${
|
|
19
|
-
${
|
|
18
|
+
${b?`<link rel="manifest" href="${e.assetsOrigin}assets/${b}">`:""}
|
|
19
|
+
${n?`<!-- stylesheets -->${n}`:""}
|
|
20
20
|
</head>
|
|
21
21
|
<body>
|
|
22
|
-
${
|
|
22
|
+
${A}
|
|
23
23
|
${l?"<!-- scripts -->"+l:""}
|
|
24
24
|
</body>
|
|
25
25
|
</html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");0&&(module.exports={parseTemplate});
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(()=>{var
|
|
1
|
+
"use strict";(()=>{var U=Object.defineProperty;var a=(e,t)=>U(e,"name",{value:t,configurable:!0});function x(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}a(x,"turnCamelToKebabCasing");function v(e,t){return t&&e.trim().startsWith(t)}a(v,"startsWithPrefix");function j(e,t="",n=""){if(typeof e=="string")return e;let r=new Map,l=new Map;function c(o,i,d){for(let[p,$]of Object.entries(o))if(typeof $=="object"&&$!==null)if(p.startsWith("@"))c($,i,p);else{let f;if(p.startsWith("&"))f=i?p.replace(/&/g,i):p.replace(/&/g,"");else{let g=x(p);i&&!v(g,t)?f=`${i} ${g}`:i?f=`${i} ${g}`:t&&!v(g,t)?f=`${t} ${g}`:f=g,f=f.trim()}c($,f,d)}else if($!=null){let f=i&&t&&!v(i,t)?`${t} ${i}`.trim():i||t;if(!f)continue;if(d){let g=l.get(d);g||(g=new Map,l.set(d,g));let y=g.get(f);y||(y=new Map,g.set(f,y)),y.set(x(p),$)}else{let g=r.get(f);g||(g=new Map,r.set(f,g)),g.set(x(p),$)}}}a(c,"walk"),c(e,"",n);let m=[];for(let[o,i]of r)if(o&&i.size){let d=[];for(let[p,$]of i)d.push(`${p}: ${$};`);m.push(`${o} { ${d.join(" ")} }`)}for(let[o,i]of l){let d=[];for(let[p,$]of i)if(p&&$.size){let f=[];for(let[g,y]of $)f.push(`${g}: ${y};`);d.push(`${p} { ${f.join(" ")} }`)}d.length&&m.push(`${o} { ${d.join(" ")} }`)}return m.join(" ")}a(j,"parseStyle");function C(e,t){if(e===null||typeof e!="object"||t===null||typeof t!="object")return t;if(Array.isArray(e)&&Array.isArray(t))return Array.from(new Set([...e,...t]));let n=Array.isArray(e)?[...e]:{...e};for(let r in t)t.hasOwnProperty(r)&&(Array.isArray(e[r])&&Array.isArray(t[r])?n[r]=Array.from(new Set([...e[r],...t[r]])):n[r]=C(n[r],t[r]));return n}a(C,"mergeObjects");var k={fetchWidget:async()=>null,fetchTemplate:async()=>null,prod:!1,assetsOrigin:"/"};function O(e){return e.reduce((t,{name:n="",value:r,type:l,definitions:c=[]})=>{switch(l){case"group":t[n]=O(c);break;case"options":t[n]={value:r,options:c.map(m=>Object.values(O([m]))[0])};break;case"list":t[n]=c.map(m=>Object.values(O([m]))[0]);break;default:t[n]=r}return t},{})}a(O,"inputDefinitionsToObject");var B=a((e,t)=>String(t??"").split(".").filter(Boolean).reduce((r,l)=>{try{return r&&typeof r=="object"?r[l]:void 0}catch{return null}},e),"deepValue");var A=a((e,t)=>{let n=null;for(;(n=/{{([a-z0-9.$_]+)}}/gim.exec(e))!==null;){let[r,l]=n,c=B(t,l);e=e.replace(r,String(c))}return e},"replaceStringValue");var T=a((e,t={})=>Object.entries(e).map(([n,r])=>(typeof r=="string"&&(r=A(r,t)),`${n}="${r}"`)).join(" "),"attributeToString");var F=new Map;async function N(e,t={},n,r=k){let{name:l,children:c,...m}=e;if(e["data-render-id"]=e["data-render-id"]||Math.random().toString(36).substring(2,15),{name:l,children:c,...m}=e,m.id){let o=F.get(m.id)||await r.fetchWidget?.(m.id);if(o){let i={...O(o?.inputs??[]),...m,env:{...t,assetsOrigin:r.assetsOrigin,prod:r.prod}};if(typeof o.render=="function"?c=[o.render(i)]:c=o.content?[o.content]:[],o.style){let d=typeof o.style=="function"?o.style(i):o.style;n.set(o.id||m.id,j(d,o.cssSelector??""))}F.set(m.id,o)}}return r.prod?c.join(""):`<${l} id="${m.id}" data-render-id="${m["data-render-id"]}">${await S(c,t,n,r)}</${l}>`}a(N,"parseWidget");async function S(e,t={},n,r=k){return e?(await Promise.all(e.map(async l=>{if(typeof l=="string")return A(l,t);let{name:c,children:m,...o}=l;if(c==="widget")return N(l,t,n,r);let i=T(o,t);return`<${c}`+(i?` ${i}`:"")+`>${await S(m,t,n,r)}</${c}>`}))).join(""):""}a(S,"parseTemplateContent");var R=new Map,V=a(async(e,t=k)=>{if(t=C(k,t),R.set(e.id,e),e.extends){let s=R.get(e.extends)||await t.fetchTemplate?.(e.extends);if(!s)throw new Error(`Template "${e.extends}" not found`);R.set(e.extends,s),e=C(s,e)}let{metadata:n={},scripts:r=[],stylesheets:l=[],links:c=[],fonts:m=[],favicons:o=[],content:i="",manifest:d,...p}=e??{},$=new Map,f=typeof i=="string"?i:await S(i,p,$,t);n.charset||(n.charset="UTF-8"),n.viewport||(n.viewport="width=device-width, initial-scale=1.0");let g=Object.entries(n).map(([s,u])=>s.startsWith("property:")?`<meta property="${s.replace("property:","")}" content="${u}">`:(s==="msapplication-TileImage"&&(u=`${t.assetsOrigin}${u}`),`<meta name="${s}" content="${u}">`)).join(""),y="";c.forEach(s=>{let u="<link ";Object.entries(s).forEach(([b,P])=>{u+=`${b}="${P}" `}),y+=u+"/>"});let W="";o.forEach(s=>{let u="<link ";Object.entries(s).forEach(([b,P])=>{u+=`${b}="${b==="href"?`${t.assetsOrigin}assets/favicons/`:""}${P}" `}),W+=u+"/>"});let E="";m.forEach(s=>{E+=`<link rel="preload" href="${t.assetsOrigin}assets/fonts/${s}" as="font" crossorigin>`});let h="",L="";[...l,...Array.from($.entries())].forEach(s=>{if(typeof s=="string")s.startsWith("http")?h+=`<link rel="stylesheet" href="${s}" >`:s.endsWith(".css")?h+=`<link rel="stylesheet" href="${t.assetsOrigin}stylesheets/${s}">`:L+=s;else if(Array.isArray(s)){let[u,b]=s;h+=`<style id="${u}">${j(b)}</style>`}else h+="<style",Object.entries(s.attributes).forEach(([u,b])=>{h+=`${u}="${b}" `}),h+="></style>"}),L&&(h=`<style>${L}</style>`+h);let w="";return r.forEach(s=>{typeof s=="string"?s.startsWith("http")?w+=`<script src="${s}"><\/script>`:s.endsWith(".js")?w+=`<script src="${t.assetsOrigin}scripts/${s}"><\/script>`:w+=`<script>${s}<\/script>`:(w+="<script ",Object.entries(s).forEach(([u,b])=>{w+=`${u}="${b}" `}),w+="><\/script>")}),`<!doctype html>
|
|
2
2
|
<html lang="${p.lang??"en"}">
|
|
3
3
|
<head>
|
|
4
4
|
<title>${p.title}</title>
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
${E?`<!-- fonts -->${E}`:""}
|
|
17
17
|
${y?`<!-- links -->${y}`:""}
|
|
18
18
|
${d?`<link rel="manifest" href="${t.assetsOrigin}assets/${d}">`:""}
|
|
19
|
-
${
|
|
19
|
+
${h?`<!-- stylesheets -->${h}`:""}
|
|
20
20
|
</head>
|
|
21
21
|
<body>
|
|
22
22
|
${f}
|
|
23
23
|
${w?"<!-- scripts -->"+w:""}
|
|
24
24
|
</body>
|
|
25
|
-
</html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");var
|
|
25
|
+
</html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");var z=a(e=>{switch(typeof e){case"number":return"number";case"boolean":return"boolean";case"object":return Array.isArray(e)?"list":"group";default:return"text"}},"dataTypeToInputType");function M(e,t){switch(t.type){case"group":return{...t,definitions:Object.entries(e??{}).map(([n,r])=>M(r,(t.definitions??[]).find(l=>l.name===n)??{name:n,type:z(r),value:r}))};case"list":return{...t,definitions:(e??[]).map((n,r)=>M(n,(t.definitions??[])[r]??{name:String(r),type:z(n),value:n}))};default:return{...t,value:e}}}a(M,"mergeDataIntoInputDefinition");window&&(window.BFS={...window.BFS||{},SITE_BUILDER:{inputDefinitionsToObject:O,mergeDataIntoInputDefinition:M,attributeToString:T,parseTemplate:V,parseTemplateContent:S,parseWidget:N,parseStyle:j}});})();
|
|
26
26
|
//# 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-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\nfunction startsWithPrefix(sel: string, prefix: string) {\n return prefix && sel.trim().startsWith(prefix)\n}\n\nexport function parseStyle(style: Style, prefix = '', atRule = ''): 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(node: Style, sel: string, at: string) {\n for (const [key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n if (key.startsWith('@')) {\n walk(value, sel, key)\n } else {\n let nextSel: string\n if (key.startsWith('&')) {\n nextSel = sel\n ? key.replace(/&/g, sel)\n : key.replace(/&/g, '')\n } else {\n const kebabKey = turnCamelToKebabCasing(key)\n if (sel && !startsWithPrefix(kebabKey, prefix)) {\n nextSel = `${sel} ${kebabKey}`\n } else if (sel) {\n nextSel = `${sel} ${kebabKey}`\n } else if (\n prefix &&\n !startsWithPrefix(kebabKey, prefix)\n ) {\n nextSel = `${prefix} ${kebabKey}`\n } else {\n nextSel = kebabKey\n }\n nextSel = nextSel.trim()\n }\n walk(value, nextSel, at)\n }\n } else if (value != null) {\n const finalSel =\n sel && prefix && !startsWithPrefix(sel, prefix)\n ? `${prefix} ${sel}`.trim()\n : sel || prefix\n if (!finalSel) continue // skip empty selectors\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, '', atRule)\n\n const blocks: string[] = []\n\n for (const [sel, props] of selectorMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n blocks.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n\n for (const [at, selMap] of atRuleMap) {\n const inner: string[] = []\n for (const [sel, props] of selMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n inner.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n if (inner.length) blocks.push(`${at} { ${inner.join(' ')} }`)\n }\n\n return blocks.join(' ')\n}\n", "export function mergeObjects(a: unknown, b: unknown) {\n if (a === null || typeof a !== 'object') return b\n if (b === null || typeof b !== 'object') return b\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return Array.from(new Set([...a, ...b]))\n }\n\n const obj = Array.isArray(a) ? [...a] : { ...a }\n\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n // @ts-expect-error a or b in unknown\n if (Array.isArray(a[key]) && Array.isArray(b[key])) {\n // @ts-expect-error a or b in unknown\n obj[key] = Array.from(new Set([...a[key], ...b[key]]))\n } else {\n // @ts-expect-error a or b in unknown\n obj[key] = mergeObjects(obj[key], b[key])\n }\n }\n }\n\n return obj\n}\n", "import { parseOptions } from './types.ts'\n\nexport const defaultOptions: parseOptions = {\n fetchWidget: async () => null,\n fetchTemplate: async () => null,\n prod: false,\n assetsOrigin: '/',\n}\n", "import { ObjectLiteral, InputDefinition } from '../types.ts'\n\nexport function inputDefinitionsToObject(inputDefinitions: InputDefinition[]) {\n return inputDefinitions.reduce(\n (acc, { name = '', value, type, definitions = [] }) => {\n switch (type) {\n case 'group':\n acc[name] = inputDefinitionsToObject(definitions)\n break\n case 'options':\n acc[name] = {\n value,\n options: definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n }),\n }\n break\n case 'list':\n acc[name] = definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n })\n break\n default:\n acc[name] = value\n }\n\n return acc\n },\n {} as ObjectLiteral\n )\n}\n", "import { ObjectLiteral } from '../types.ts'\n\nexport const deepValue = (obj: ObjectLiteral | unknown[], key: string) => {\n const keyParts = String(key ?? '')\n .split('.')\n .filter(Boolean)\n\n return keyParts.reduce((acc, k) => {\n try {\n // @ts-expect-error No index signature with a parameter of type string\n return acc && typeof acc === 'object' ? acc[k] : undefined\n } catch (e) {\n return null\n }\n }, obj) as unknown\n}\n", "import { deepValue } from './deep-value.ts'\n\nexport const replaceStringValue = (\n value: string,\n data: Record<string, unknown>\n) => {\n let match = null\n\n while ((match = /{{([a-z0-9.$_]+)}}/gim.exec(value)) !== null) {\n const [full, key] = match\n const dv = deepValue(data, key)\n\n value = value.replace(full, String(dv))\n }\n\n return value\n}\n", "import { replaceStringValue } from './replace-string-value.ts'\n\nexport const attributeToString = (\n attributes: Record<string, unknown>,\n data = {}\n) => {\n return Object.entries(attributes)\n .map(([name, value]) => {\n if (typeof value === 'string') {\n value = replaceStringValue(value, data)\n }\n\n return `${name}=\"${value}\"`\n })\n .join(' ')\n}\n", "import {\n parseOptions,\n TemplateContentNode,\n Widget,\n Style,\n TemplateContent,\n} from './types.js'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { parseStyle } from './parse-style.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\nexport async function parseWidget(\n node: TemplateContentNode,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n) {\n let { name, children, ...attributes } = node\n\n node['data-render-id'] =\n node['data-render-id'] || Math.random().toString(36).substring(2, 15)\n ;({ name, children, ...attributes } = node)\n\n if (attributes.id) {\n const widget =\n widgetCache.get(attributes.id) ||\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n },\n }\n\n if (typeof widget.render === 'function') {\n children = [widget.render(props)]\n } else {\n children = widget.content ? [widget.content] : []\n }\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n widgetStyles.set(\n widget.id || attributes.id,\n parseStyle(styleContent, widget.cssSelector ?? '')\n )\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n\n return (\n `<${name} id=\"${attributes.id}\" data-render-id=\"${attributes['data-render-id']}\"` +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n}\n\nexport async function parseTemplateContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n): Promise<string> {\n if (!content) {\n return ''\n }\n\n return (\n await Promise.all(\n content.map(async (node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n if (name === 'widget') {\n return parseWidget(\n node as TemplateContentNode,\n data,\n widgetStyles,\n opt\n )\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import { parseOptions, Template, TemplateContent } from './types.ts'\nimport { mergeObjects } from './utils/merge-objects.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { parseTemplateContent } from './parse-widget.ts'\nimport { parseStyle } from './parse-style.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nexport const parseTemplate = async (\n temp: Template,\n opt: parseOptions = defaultOptions\n) => {\n opt = mergeObjects(defaultOptions, opt) as parseOptions\n tempCache.set(temp.id, temp)\n\n if (temp.extends) {\n const base =\n tempCache.get(temp.extends) ||\n (await opt.fetchTemplate?.(temp.extends))\n\n if (!base) {\n throw new Error(`Template \"${temp.extends}\" not found`)\n }\n\n tempCache.set(temp.extends, base)\n temp = mergeObjects(base, temp) as Template\n }\n\n const {\n metadata = {},\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n ...data\n } = temp ?? {}\n\n const widgetStyles = new Map()\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseTemplateContent(\n content as TemplateContent,\n data,\n widgetStyles,\n opt\n )\n\n if (!metadata['charset']) {\n metadata['charset'] = 'UTF-8'\n }\n\n if (!metadata['viewport']) {\n metadata['viewport'] = 'width=device-width, initial-scale=1.0'\n }\n\n const metas = Object.entries(metadata)\n .map(([key, value]) => {\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n\n let ls = ''\n\n links.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${value}\" `\n })\n\n ls += l + '/>'\n })\n\n let fi = ''\n\n favicons.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${key === 'href' ? `${opt.assetsOrigin}assets/favicons/` : ''}${value}\" `\n })\n\n fi += l + '/>'\n })\n\n let ft = ''\n\n fonts.forEach((font) => {\n ft += `<link rel=\"preload\" href=\"${opt.assetsOrigin}assets/fonts/${font}\" as=\"font\" crossorigin>`\n })\n\n let st = ''\n\n ;[...stylesheets, ...Array.from(widgetStyles.entries())].forEach(\n (stylesheet) => {\n if (typeof stylesheet === 'string') {\n if (stylesheet.startsWith('http')) {\n st += `<link rel=\"stylesheet\" href=\"${stylesheet}\" >`\n } else if (stylesheet.endsWith('.css')) {\n st += `<link rel=\"stylesheet\" href=\"${opt.assetsOrigin}stylesheets/${stylesheet}\">`\n } else {\n st += `<style>${stylesheet}</style>`\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n Object.entries(stylesheet.attributes).forEach(\n ([key, value]) => {\n st += `${key}=\"${value}\" `\n }\n )\n\n st += '></style>'\n }\n }\n )\n\n let sc = ''\n\n scripts.forEach((script) => {\n if (typeof script === 'string') {\n if (script.startsWith('http')) {\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n sc += `<script>${script}</script>`\n }\n } else {\n sc += '<script '\n\n Object.entries(script).forEach(([key, value]) => {\n sc += `${key}=\"${value}\" `\n })\n\n sc += `></script>`\n }\n })\n\n return `<!doctype html>\n<html lang=\"${data.lang ?? 'en'}\">\n<head>\n <title>${data.title}</title>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <!-- og -->\n <meta property=\"og:title\" content=\"${data.title}\">\n <meta property=\"og:type\" content=\"website\">\n <meta property=\"og:description\" content=\"${data.description}\">\n <meta property=\"og:image\" content=\"${data.image}\">\n <meta property=\"og:url\" content=\"${data.domain}\">\n <meta property=\"og:site_name\" content=\"${data.title}\">\n ${metas ? `<!-- metas -->${metas}` : ''}\n ${fi ? `<!-- favicons -->${fi}` : ''}\n ${ft ? `<!-- fonts -->${ft}` : ''}\n ${ls ? `<!-- links -->${ls}` : ''}\n ${manifest ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">` : ''}\n ${st ? `<!-- stylesheets -->${st}` : ''}\n</head>\n<body>\n${bodyContent}\n${sc ? '<!-- scripts -->' + sc : ''}\n</body>\n</html>`\n .replace(/\\s{2,}/g, ' ')\n .replace(/[\\t\\n]+/g, '')\n}\n", "import {\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 { 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 },\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["turnCamelToKebabCasing", "str", "__name", "startsWithPrefix", "sel", "prefix", "__name", "parseStyle", "style", "atRule", "selectorMap", "atRuleMap", "walk", "node", "at", "key", "value", "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", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "opt", "defaultOptions", "name", "children", "attributes", "widget", "props", "inputDefinitionsToObject", "styleContent", "parseStyle", "parseTemplateContent", "__name", "content", "replaceStringValue", "attrs", "attributeToString", "tempCache", "parseTemplate", "__name", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "bodyContent", "parseTemplateContent", "metas", "key", "value", "ls", "link", "l", "fi", "ft", "font", "st", "stylesheet", "id", "style", "parseStyle", "sc", "script", "dataTypeToInputType", "__name", "data", "mergeDataIntoInputDefinition", "def", "k", "v", "item", "idx", "inputDefinitionsToObject", "mergeDataIntoInputDefinition", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle"]
|
|
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\nfunction startsWithPrefix(sel: string, prefix: string) {\n return prefix && sel.trim().startsWith(prefix)\n}\n\nexport function parseStyle(style: Style, prefix = '', atRule = ''): 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(node: Style, sel: string, at: string) {\n for (const [key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n if (key.startsWith('@')) {\n walk(value, sel, key)\n } else {\n let nextSel: string\n if (key.startsWith('&')) {\n nextSel = sel\n ? key.replace(/&/g, sel)\n : key.replace(/&/g, '')\n } else {\n const kebabKey = turnCamelToKebabCasing(key)\n if (sel && !startsWithPrefix(kebabKey, prefix)) {\n nextSel = `${sel} ${kebabKey}`\n } else if (sel) {\n nextSel = `${sel} ${kebabKey}`\n } else if (\n prefix &&\n !startsWithPrefix(kebabKey, prefix)\n ) {\n nextSel = `${prefix} ${kebabKey}`\n } else {\n nextSel = kebabKey\n }\n nextSel = nextSel.trim()\n }\n walk(value, nextSel, at)\n }\n } else if (value != null) {\n const finalSel =\n sel && prefix && !startsWithPrefix(sel, prefix)\n ? `${prefix} ${sel}`.trim()\n : sel || prefix\n if (!finalSel) continue // skip empty selectors\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, '', atRule)\n\n const blocks: string[] = []\n\n for (const [sel, props] of selectorMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n blocks.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n\n for (const [at, selMap] of atRuleMap) {\n const inner: string[] = []\n for (const [sel, props] of selMap) {\n if (sel && props.size) {\n const propStrs: string[] = []\n for (const [k, v] of props) propStrs.push(`${k}: ${v};`)\n inner.push(`${sel} { ${propStrs.join(' ')} }`)\n }\n }\n if (inner.length) blocks.push(`${at} { ${inner.join(' ')} }`)\n }\n\n return blocks.join(' ')\n}\n", "export function mergeObjects(a: unknown, b: unknown) {\n if (a === null || typeof a !== 'object') return b\n if (b === null || typeof b !== 'object') return b\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return Array.from(new Set([...a, ...b]))\n }\n\n const obj = Array.isArray(a) ? [...a] : { ...a }\n\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n // @ts-expect-error a or b in unknown\n if (Array.isArray(a[key]) && Array.isArray(b[key])) {\n // @ts-expect-error a or b in unknown\n obj[key] = Array.from(new Set([...a[key], ...b[key]]))\n } else {\n // @ts-expect-error a or b in unknown\n obj[key] = mergeObjects(obj[key], b[key])\n }\n }\n }\n\n return obj\n}\n", "import { parseOptions } from './types.ts'\n\nexport const defaultOptions: parseOptions = {\n fetchWidget: async () => null,\n fetchTemplate: async () => null,\n prod: false,\n assetsOrigin: '/',\n}\n", "import { ObjectLiteral, InputDefinition } from '../types.ts'\n\nexport function inputDefinitionsToObject(inputDefinitions: InputDefinition[]) {\n return inputDefinitions.reduce(\n (acc, { name = '', value, type, definitions = [] }) => {\n switch (type) {\n case 'group':\n acc[name] = inputDefinitionsToObject(definitions)\n break\n case 'options':\n acc[name] = {\n value,\n options: definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n }),\n }\n break\n case 'list':\n acc[name] = definitions.map((item) => {\n return Object.values(\n inputDefinitionsToObject([item])\n )[0]\n })\n break\n default:\n acc[name] = value\n }\n\n return acc\n },\n {} as ObjectLiteral\n )\n}\n", "import { ObjectLiteral } from '../types.ts'\n\nexport const deepValue = (obj: ObjectLiteral | unknown[], key: string) => {\n const keyParts = String(key ?? '')\n .split('.')\n .filter(Boolean)\n\n return keyParts.reduce((acc, k) => {\n try {\n // @ts-expect-error No index signature with a parameter of type string\n return acc && typeof acc === 'object' ? acc[k] : undefined\n } catch (e) {\n return null\n }\n }, obj) as unknown\n}\n", "import { deepValue } from './deep-value.ts'\n\nexport const replaceStringValue = (\n value: string,\n data: Record<string, unknown>\n) => {\n let match = null\n\n while ((match = /{{([a-z0-9.$_]+)}}/gim.exec(value)) !== null) {\n const [full, key] = match\n const dv = deepValue(data, key)\n\n value = value.replace(full, String(dv))\n }\n\n return value\n}\n", "import { replaceStringValue } from './replace-string-value.ts'\n\nexport const attributeToString = (\n attributes: Record<string, unknown>,\n data = {}\n) => {\n return Object.entries(attributes)\n .map(([name, value]) => {\n if (typeof value === 'string') {\n value = replaceStringValue(value, data)\n }\n\n return `${name}=\"${value}\"`\n })\n .join(' ')\n}\n", "import {\n parseOptions,\n TemplateContentNode,\n Widget,\n Style,\n TemplateContent,\n} from './types.js'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { inputDefinitionsToObject } from './utils/input-definitions-to-object.ts'\nimport { parseStyle } from './parse-style.ts'\nimport { attributeToString } from './utils/attributes-to-string.ts'\nimport { replaceStringValue } from './utils/replace-string-value.ts'\n\nconst widgetCache: Map<string, Widget> = new Map()\n\nexport async function parseWidget(\n node: TemplateContentNode,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n) {\n let { name, children, ...attributes } = node\n\n node['data-render-id'] =\n node['data-render-id'] || Math.random().toString(36).substring(2, 15)\n ;({ name, children, ...attributes } = node)\n\n if (attributes.id) {\n const widget =\n widgetCache.get(attributes.id) ||\n (await opt.fetchWidget?.(attributes.id))\n\n if (widget) {\n const props = {\n ...inputDefinitionsToObject(widget?.inputs ?? []),\n ...attributes,\n env: {\n ...data,\n assetsOrigin: opt.assetsOrigin,\n prod: opt.prod,\n },\n }\n\n if (typeof widget.render === 'function') {\n children = [widget.render(props)]\n } else {\n children = widget.content ? [widget.content] : []\n }\n\n if (widget.style) {\n const styleContent =\n typeof widget.style === 'function'\n ? widget.style(props)\n : widget.style\n widgetStyles.set(\n widget.id || attributes.id,\n parseStyle(styleContent, widget.cssSelector ?? '')\n )\n }\n\n widgetCache.set(attributes.id, widget)\n }\n }\n\n if (opt.prod) {\n return children.join('')\n }\n\n return (\n `<${name} id=\"${attributes.id}\" data-render-id=\"${attributes['data-render-id']}\"` +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n}\n\nexport async function parseTemplateContent(\n content: TemplateContent,\n data = {},\n widgetStyles: Map<string, Style>,\n opt: parseOptions = defaultOptions\n): Promise<string> {\n if (!content) {\n return ''\n }\n\n return (\n await Promise.all(\n content.map(async (node) => {\n if (typeof node === 'string') {\n return replaceStringValue(node, data)\n }\n\n const { name, children, ...attributes } = node\n\n if (name === 'widget') {\n return parseWidget(\n node as TemplateContentNode,\n data,\n widgetStyles,\n opt\n )\n }\n\n const attrs = attributeToString(attributes, data)\n\n return (\n `<${name}` +\n (attrs ? ` ${attrs}` : '') +\n `>${await parseTemplateContent(children, data, widgetStyles, opt)}</${name}>`\n )\n })\n )\n ).join('')\n}\n", "import { parseOptions, Template, TemplateContent } from './types.ts'\nimport { mergeObjects } from './utils/merge-objects.ts'\nimport { defaultOptions } from './default-parse-options.ts'\nimport { parseTemplateContent } from './parse-widget.ts'\nimport { parseStyle } from './parse-style.ts'\n\nconst tempCache: Map<string, Template> = new Map()\n\nexport const parseTemplate = async (\n temp: Template,\n opt: parseOptions = defaultOptions\n) => {\n opt = mergeObjects(defaultOptions, opt) as parseOptions\n tempCache.set(temp.id, temp)\n\n if (temp.extends) {\n const base =\n tempCache.get(temp.extends) ||\n (await opt.fetchTemplate?.(temp.extends))\n\n if (!base) {\n throw new Error(`Template \"${temp.extends}\" not found`)\n }\n\n tempCache.set(temp.extends, base)\n temp = mergeObjects(base, temp) as Template\n }\n\n const {\n metadata = {},\n scripts = [],\n stylesheets = [],\n links = [],\n fonts = [],\n favicons = [],\n content = '',\n manifest,\n ...data\n } = temp ?? {}\n\n const widgetStyles = new Map()\n\n const bodyContent =\n typeof content === 'string'\n ? content\n : await parseTemplateContent(\n content as TemplateContent,\n data,\n widgetStyles,\n opt\n )\n\n if (!metadata['charset']) {\n metadata['charset'] = 'UTF-8'\n }\n\n if (!metadata['viewport']) {\n metadata['viewport'] = 'width=device-width, initial-scale=1.0'\n }\n\n const metas = Object.entries(metadata)\n .map(([key, value]) => {\n if (key.startsWith('property:')) {\n return `<meta property=\"${key.replace('property:', '')}\" content=\"${value}\">`\n }\n\n if (key === 'msapplication-TileImage') {\n value = `${opt.assetsOrigin}${value}`\n }\n\n return `<meta name=\"${key}\" content=\"${value}\">`\n })\n .join('')\n\n let ls = ''\n\n links.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${value}\" `\n })\n\n ls += l + '/>'\n })\n\n let fi = ''\n\n favicons.forEach((link) => {\n let l = '<link '\n\n Object.entries(link).forEach(([key, value]) => {\n l += `${key}=\"${key === 'href' ? `${opt.assetsOrigin}assets/favicons/` : ''}${value}\" `\n })\n\n fi += l + '/>'\n })\n\n let ft = ''\n\n fonts.forEach((font) => {\n ft += `<link rel=\"preload\" href=\"${opt.assetsOrigin}assets/fonts/${font}\" as=\"font\" crossorigin>`\n })\n\n let st = ''\n let loseInlineStyles = ''\n\n ;[...stylesheets, ...Array.from(widgetStyles.entries())].forEach(\n (stylesheet) => {\n if (typeof stylesheet === 'string') {\n if (stylesheet.startsWith('http')) {\n st += `<link rel=\"stylesheet\" href=\"${stylesheet}\" >`\n } else if (stylesheet.endsWith('.css')) {\n st += `<link rel=\"stylesheet\" href=\"${opt.assetsOrigin}stylesheets/${stylesheet}\">`\n } else {\n loseInlineStyles += stylesheet\n }\n } else if (Array.isArray(stylesheet)) {\n const [id, style] = stylesheet\n st += `<style id=\"${id}\">${parseStyle(style)}</style>`\n } else {\n st += `<style`\n\n Object.entries(stylesheet.attributes).forEach(\n ([key, value]) => {\n st += `${key}=\"${value}\" `\n }\n )\n\n st += '></style>'\n }\n }\n )\n\n 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 scripts.forEach((script) => {\n if (typeof script === 'string') {\n if (script.startsWith('http')) {\n sc += `<script src=\"${script}\"></script>`\n } else if (script.endsWith('.js')) {\n sc += `<script src=\"${opt.assetsOrigin}scripts/${script}\"></script>`\n } else {\n sc += `<script>${script}</script>`\n }\n } else {\n sc += '<script '\n\n Object.entries(script).forEach(([key, value]) => {\n sc += `${key}=\"${value}\" `\n })\n\n sc += `></script>`\n }\n })\n\n return `<!doctype html>\n<html lang=\"${data.lang ?? 'en'}\">\n<head>\n <title>${data.title}</title>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <!-- og -->\n <meta property=\"og:title\" content=\"${data.title}\">\n <meta property=\"og:type\" content=\"website\">\n <meta property=\"og:description\" content=\"${data.description}\">\n <meta property=\"og:image\" content=\"${data.image}\">\n <meta property=\"og:url\" content=\"${data.domain}\">\n <meta property=\"og:site_name\" content=\"${data.title}\">\n ${metas ? `<!-- metas -->${metas}` : ''}\n ${fi ? `<!-- favicons -->${fi}` : ''}\n ${ft ? `<!-- fonts -->${ft}` : ''}\n ${ls ? `<!-- links -->${ls}` : ''}\n ${manifest ? `<link rel=\"manifest\" href=\"${opt.assetsOrigin}assets/${manifest}\">` : ''}\n ${st ? `<!-- stylesheets -->${st}` : ''}\n</head>\n<body>\n${bodyContent}\n${sc ? '<!-- scripts -->' + sc : ''}\n</body>\n</html>`\n .replace(/\\s{2,}/g, ' ')\n .replace(/[\\t\\n]+/g, '')\n}\n", "import {\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 { 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 },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["turnCamelToKebabCasing", "str", "__name", "startsWithPrefix", "sel", "prefix", "__name", "parseStyle", "style", "atRule", "selectorMap", "atRuleMap", "walk", "node", "at", "key", "value", "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", "widgetCache", "parseWidget", "node", "data", "widgetStyles", "opt", "defaultOptions", "name", "children", "attributes", "widget", "props", "inputDefinitionsToObject", "styleContent", "parseStyle", "parseTemplateContent", "__name", "content", "replaceStringValue", "attrs", "attributeToString", "tempCache", "parseTemplate", "__name", "temp", "opt", "defaultOptions", "mergeObjects", "base", "metadata", "scripts", "stylesheets", "links", "fonts", "favicons", "content", "manifest", "data", "widgetStyles", "bodyContent", "parseTemplateContent", "metas", "key", "value", "ls", "link", "l", "fi", "ft", "font", "st", "loseInlineStyles", "stylesheet", "id", "style", "parseStyle", "sc", "script", "dataTypeToInputType", "__name", "data", "mergeDataIntoInputDefinition", "def", "k", "v", "item", "idx", "inputDefinitionsToObject", "mergeDataIntoInputDefinition", "attributeToString", "parseTemplate", "parseTemplateContent", "parseWidget", "parseStyle"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var k=Object.defineProperty;var w=(s,i)=>k(s,"name",{value:i,configurable:!0});import{mergeObjects as T}from"./utils/merge-objects.js";import{defaultOptions as b}from"./default-parse-options.js";import{parseTemplateContent as u}from"./parse-widget.js";import{parseStyle as A}from"./parse-style.js";const d=new Map,D=w(async(s,i=b)=>{if(i=T(b,i),d.set(s.id,s),s.extends){const t=d.get(s.extends)||await i.fetchTemplate?.(s.extends);if(!t)throw new Error(`Template "${s.extends}" not found`);d.set(s.extends,t),s=T(t,s)}const{metadata:l={},scripts:E=[],stylesheets:j=[],links:x=[],fonts:v=[],favicons:C=[],content:c="",manifest:g,...a}=s??{},y=new Map,W=typeof c=="string"?c:await u(c,a,y,i);l.charset||(l.charset="UTF-8"),l.viewport||(l.viewport="width=device-width, initial-scale=1.0");const O=Object.entries(l).map(([t,e])=>t.startsWith("property:")?`<meta property="${t.replace("property:","")}" content="${e}">`:(t==="msapplication-TileImage"&&(e=`${i.assetsOrigin}${e}`),`<meta name="${t}" content="${e}">`)).join("");let p="";x.forEach(t=>{let e="<link ";Object.entries(t).forEach(([n,h])=>{e+=`${n}="${h}" `}),p+=e+"/>"});let f="";C.forEach(t=>{let e="<link ";Object.entries(t).forEach(([n,h])=>{e+=`${n}="${n==="href"?`${i.assetsOrigin}assets/favicons/`:""}${h}" `}),f+=e+"/>"});let $="";v.forEach(t=>{$+=`<link rel="preload" href="${i.assetsOrigin}assets/fonts/${t}" as="font" crossorigin>`});let r="",m="";[...j,...Array.from(y.entries())].forEach(t=>{if(typeof t=="string")t.startsWith("http")?r+=`<link rel="stylesheet" href="${t}" >`:t.endsWith(".css")?r+=`<link rel="stylesheet" href="${i.assetsOrigin}stylesheets/${t}">`:m+=t;else if(Array.isArray(t)){const[e,n]=t;r+=`<style id="${e}">${A(n)}</style>`}else r+="<style",Object.entries(t.attributes).forEach(([e,n])=>{r+=`${e}="${n}" `}),r+="></style>"}),m&&(r=`<style>${m}</style>`+r);let o="";return E.forEach(t=>{typeof t=="string"?t.startsWith("http")?o+=`<script src="${t}"></script>`:t.endsWith(".js")?o+=`<script src="${i.assetsOrigin}scripts/${t}"></script>`:o+=`<script>${t}</script>`:(o+="<script ",Object.entries(t).forEach(([e,n])=>{o+=`${e}="${n}" `}),o+="></script>")}),`<!doctype html>
|
|
2
2
|
<html lang="${a.lang??"en"}">
|
|
3
3
|
<head>
|
|
4
4
|
<title>${a.title}</title>
|
|
@@ -11,15 +11,15 @@ var W=Object.defineProperty;var O=(s,r)=>W(s,"name",{value:r,configurable:!0});i
|
|
|
11
11
|
<meta property="og:image" content="${a.image}">
|
|
12
12
|
<meta property="og:url" content="${a.domain}">
|
|
13
13
|
<meta property="og:site_name" content="${a.title}">
|
|
14
|
-
${
|
|
15
|
-
${
|
|
16
|
-
${
|
|
14
|
+
${O?`<!-- metas -->${O}`:""}
|
|
15
|
+
${f?`<!-- favicons -->${f}`:""}
|
|
16
|
+
${$?`<!-- fonts -->${$}`:""}
|
|
17
17
|
${p?`<!-- links -->${p}`:""}
|
|
18
|
-
${
|
|
19
|
-
${
|
|
18
|
+
${g?`<link rel="manifest" href="${i.assetsOrigin}assets/${g}">`:""}
|
|
19
|
+
${r?`<!-- stylesheets -->${r}`:""}
|
|
20
20
|
</head>
|
|
21
21
|
<body>
|
|
22
|
-
${
|
|
22
|
+
${W}
|
|
23
23
|
${o?"<!-- scripts -->"+o:""}
|
|
24
24
|
</body>
|
|
25
|
-
</html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");export{
|
|
25
|
+
</html>`.replace(/\s{2,}/g," ").replace(/[\t\n]+/g,"")},"parseTemplate");export{D as parseTemplate};
|