/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/page-helper@2.0.0/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";const path=require("path"),gulp=require("gulp"),minify=require("babel-minify"),Handlebars=require("handlebars"),jsdom=require("jsdom"),glob=require("glob"),read=require("read-file"),reload=require("reload"),jsonfile=require("jsonfile"),fs=require("fs"),crypto=require("crypto"),copydir=require("copy-dir"),request=require("request-json"),babel=require("@babel/core"),regex=/{([^\/]*)}/gm,whiteSpaceRegex=/\s{2,}/gm,newLineRegex=/\n/gm,subst=":$1";function mkDirByPathSync(e,{isRelativeToScript:t=!1}={}){const r=path.sep,n=path.isAbsolute(e)?r:"",s=t?__dirname:".";e.split(r).reduce(((e,t)=>{const r=path.resolve(s,e,t);try{fs.mkdirSync(r)}catch(e){if("EEXIST"!==e.code)throw e}return r}),n)}module.exports.Helper=class{constructor(e){this.defaultLocale=e.defaultLocale||"",this.locales=[],this.useBabel=e.useBabel||!1,this.watchable=[],this.workingDir=e.workingDir||".",this.components=e.components||{},this.routes=e.routes||{},this.layouts=e.layouts||{},this.resources={translations:{}};for(let e in this.resources.translations)this.resources.translations.hasOwnProperty(e)&&this.locales.push(e);this.componentsId=crypto.randomBytes(12).toString("hex"),this.regex=/\$(\w+)/g,e.hasOwnProperty("imports")&&(console.log("got imports",e.imports),e.imports.forEach((e=>{if(e&&e.hasOwnProperty("registerComponent")){const t=e.registerComponent();if(t){const e=this.createComponent(t.filepath),r="./tmp/components/"+e.name+".js";fs.mkdirSync("./tmp/components",{recursive:!0}),fs.writeFileSync(r,e.minifiedScript);require(path.resolve(r))}}})))}getLayout(e,t){if(this.layouts.hasOwnProperty(e)){const r=this.layouts[e];return t&&(r.template=read.sync(r.file,"utf8")),r}}getComponent(e,t){if(this.components.hasOwnProperty(e)){const r=this.components[e];return t&&this.createComponent(r.file),this.components[e]}}createComponent(e,t){const r={file:e,name:path.basename(e,".html"),template:"",skipWrite:t,render:!0},n=read.sync(r.file,"utf8"),s=new jsdom.JSDOM(n,{includeNodeLocations:!0}),o=s.window.document.head;for(let e=0;e<o.children.length;e++){let t=o.children[e];if("TEMPLATE"===t.nodeName){const e=s.nodeLocation(t),o=e.startTag.endOffset,a=e.endOffset-o-11;r.template=n.substr(o,a),r.template=r.template.replace(newLineRegex,""),r.template=r.template.replace(whiteSpaceRegex," "),r.render="false"!==t.getAttribute("render")}else if("SCRIPT"===t.nodeName){const{code:e,map:n}=minify(t.innerHTML,{mangle:{keepClassName:!0}});this.useBabel?(r.minifiedScript=babel.transformSync(e,{presets:["@babel/env"]}).code,r.script=babel.transformSync(t.innerHTML,{presets:["@babel/env"]}).code):(r.minifiedScript=e,r.script=t.innerHTML)}}return Handlebars.registerPartial(r.name,"<"+r.name+">"+(r.render?r.template:"")+"</"+r.name+">"),r.precompiledTemplate=Handlebars.precompile(r.template),r.precompiled=Handlebars.precompile("<"+r.name+">{{> _"+r.name+"}}</"+r.name+">"),this.components[r.name]=r,r}createLayout(e){const t={file:e,name:path.basename(e,".html")};t.template=read.sync(t.file,"utf8"),t.template=t.template.replace(newLineRegex,""),t.template=t.template.replace(whiteSpaceRegex," "),t.compiled=Handlebars.compile(t.template),this.layouts[t.name]=t}createResource(e){const t=read.sync(e,"utf8"),r=JSON.parse(t);r&&(this.resources=Object.assign(this.resources||{},r))}parseLayout(e){this.watchable.push({pattern:e,type:"layout"});const t=glob.sync(e);for(let e=0;e<t.length;e++)this.createLayout(t[e])}parse(e,t){this.watchable.push({pattern:e,type:"component"});const r=glob.sync(e);for(let e=0;e<r.length;e++)this.createComponent(r[e],t)}parseResource(e){this.watchable.push({pattern:e,type:"resource"});const t=glob.sync(e);for(let e=0;e<t.length;e++)this.createResource(t[e])}buildRoute(e,t,r,n){this.routeCount+=1,t.parents=n,t.id=this.routeCount;let s=path.posix.join(r,t.path);if(s=s.replace(regex,":$1"),"/"===s.slice(-1)||"/"!==t.path&&"/"!==t.path.slice(-1)||(s+="/"),e.hasOwnProperty(s)||(e[s]=[]),n&&(e[s]=e[s].concat(n)),t.children&&0!==t.children.length||e[s].push(t),t.children&&t.children.length>0){let r=n||[];r.push(t);for(let n=0;n<t.children.length;n++)e=this.buildRoute(e,t.children[n],s,r)}return e}changeDetected(e){return(t,r)=>{r&&("component"===e.type?this.createComponent(r):"layout"===e.type?this.createLayout(r):"resource"===e.type&&this.createResource(r),this.reload&&this.reload.reload())}}definitionsPartial(e){return`<script>(function(){'use strict';window.context={{{contextObject}}} })()<\/script><script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.2.9/webcomponents-bundle.js"><\/script><script src="/${e}.js"><\/script>`}setupForLayoutBuild(){Handlebars.registerPartial("definitions",this.definitionsPartial(this.componentsId)),Handlebars.registerHelper("stringify",(e=>JSON.stringify(e)));const e=(...e)=>{e.pop();let t=e[0];switch(typeof t){case"string":return e.join("");case"object":return Array.isArray(t)?[].concat.apply([],e):Object.assign({},...e);case"bigint":case"number":return e.reduce(((e,t)=>e+t),0)}};Handlebars.registerHelper("append",e),Handlebars.registerHelper("append3",e),Handlebars.registerHelper("trans",((e,t)=>this.resources.translations[e][t])),Handlebars.registerHelper("i18n",(e=>this.resources.translations[this.defaultLocale][e])),this.routeCount=-1,this.handle={};for(let e=0;e<this.routes.length;e++)this.handle=this.buildRoute(this.handle,this.routes[e],"/",[])}setupExpress(e,t){if(this.setupForLayoutBuild(),e.use("/"+this.componentsId+".js",((e,t,r)=>{e.query.lang||this.defaultLocale;t.type("application/javascript"),t.send(this.packagedHandlebars(!0))})),Object.keys(this.components).map((t=>{const r=this.components[t];e.use("/"+r.name+".component.js",((e,t,n)=>{t.type("application/javascript"),t.send(this.selfContainedComponent(r))}))})),t&&t.hasOwnProperty("liveReload")&&!0===t.liveReload){reload(e).then((e=>this.reload=e));for(let e=0;e<this.watchable.length;e++){const t=this.watchable[e];gulp.watch([t.pattern]).on("all",this.changeDetected(t))}}for(const t in this.handle)if(this.handle.hasOwnProperty(t)){const r=this.handle[t];console.log("serving on path",t,r),e.get(t,this.handleRoute(t,r))}}handleRoute(e,t){return(e,r)=>new Promise(((n,s)=>{let o={storage:this.resources};e.params&&(o.query=e.params),o.query=Object.assign(o.query||{},e.query),e.query.hasOwnProperty("lang")?this.locale=e.query.lang||this.defaultLocale:this.locale=this.defaultLocale;let a="index";if(t&&t.length>0){const e=t[0];e&&e.hasOwnProperty("layout")&&e.layout.length>0&&(a=e.layout)}const i=this.getLayout(a),l=[],c=[],p=[];let h="router-outlet";for(let a=0;a<t.length;a++){const i=t[a];if(i.hasOwnProperty("redirect"))return r.redirect(308,i.redirect),n();i.hasOwnProperty("outlet")&&i.outlet&&i.outlet.length>0&&(h=i.outlet),l.push(h);const u=this.components[i.component];u.skipWrite&&c.push(u),Handlebars.registerPartial(h,"<"+u.name+">"+(u.render?u.template:"")+"</"+u.name+">"),i.hasOwnProperty("requests")&&i.requests.forEach((t=>{const r={url:t.url,method:t.method,headers:t.headers,body:t.body};if(r.hasOwnProperty("url")){r.url=r.url.replace(this.regex,(function(t,r){return t.replace("$"+r,e.params[r])}));let t=r.url.split("?");r.url=t[0];let n="";t.length>1&&(n=t[1]);for(let t in e.query)if(e.query.hasOwnProperty(t))if(n.length>0&&(n+="&"),Array.isArray(e.query[t]))for(let r=0;r<e.query[t].length;r++)n.length>0&&(n+="&"),n+=t+"="+e.query[t][r];else n+=t+"="+e.query[t];r.url+="?"+n}if(r.hasOwnProperty("body")&&"object"==typeof r.body){const t=JSON.stringify(r.body).replace(this.regex,(function(t,r){return t.replace("$"+r,e.params[r])}));r.body=JSON.parse(t)}if(r.hasOwnProperty("method")&&"string"==typeof r.method)switch(r.method=r.method.toUpperCase(),r.method){case"GET":case"POST":break;default:s("method not allowed: "+r.method)}else r.method="GET";p.push(r)})),i.hasOwnProperty("page")&&(o=Object.assign(o,i.page))}let u="";if(c.forEach((e=>{u+=this.selfContainedComponent(e)})),o.locale=this.locale,p.length>0){const e=[];o.data={},p.forEach(((t,r)=>{const n=request.createClient(t.url);if(t.headers)for(let e in t.headers)t.headers.hasOwnProperty(e)&&(n.headers[e]=t.headers[e]);switch(t.method){case"GET":console.log("resolving GET "+t.url),e.push(new Promise(((e,t)=>{n.get("",(function(t,n,s){o.data[r.toString()]=s,e()}))})));break;case"POST":console.log("resolving POST "+t.url),e.push(new Promise(((e,s)=>{n.post("",t.body,(function(t,n,s){o.data[r.toString()]=s,e()}))})))}})),Promise.all(e).then((()=>{o.contextObject=JSON.stringify(o),r.send(i.compiled(o));for(let e=0;e<l.length;e++)Handlebars.unregisterPartial(l[e]);n()}))}else{o.contextObject=JSON.stringify(o),r.send(i.compiled(o));for(let e=0;e<l.length;e++)Handlebars.unregisterPartial(l[e]);n()}}))}packagedHandlebars(e){const t=Object.keys(this.components).filter((e=>{if(!this.components[e].skipWrite)return this.components[e]})).map((e=>this.components[e]));Object.assign({},this.resources||{});return`${handlebarsScript}(function(){'use strict';Handlebars.registerHelper("stringify",function(k){return JSON.stringify(k)});const _appHelp=(...e)=>{e.pop();let r=e[0];switch(typeof r){case"string":return e.join("");case"object":return Array.isArray(r)?[].concat.apply([],e):Object.assign({},...e);case"bigint":case"number":return e.reduce((e,r)=>e+r,0)}};Handlebars.registerHelper("append",_appHelp);Handlebars.registerHelper("append3",_appHelp);Handlebars.registerHelper("trans",function(l,k){l = l || window.context.lang || window.context.locale;return (window.context.storage.translations[l] || {})[k]});Handlebars.registerHelper("i18n",function(k){const l = window.context.lang || window.context.locale;return (window.context.storage.translations[l] || {})[k]});var template=Handlebars.template,templates=Handlebars.templates=Handlebars.templates || {};${t.map((e=>`Handlebars.partials['${e.name}'] = template(${e.precompiled});Handlebars.partials['_${e.name}'] = template(${e.precompiledTemplate});`)).join("")};WebComponents.waitFor=WebComponents.waitFor||function(p){return Promise.all([p].map(function(fn){return fn instanceof Function ? fn() : fn;}))};WebComponents.waitFor(function(){return new Promise(function(res){var cc=new function(){this.define=function(name,module){if(module&&module.hasOwnProperty('exports')){module.exports.prototype.template=function(c,o){return Handlebars.partials["_"+name](c,o)};window.customElements.define(name,module.exports)}}};window['customComponents']=cc;${t.map((e=>e.script?`cc.define('${e.name}',(function(){var module={};${e.script};return module})());`:"")).join("")};res()})})${e?";var r=document.createElement('script');r.setAttribute('src','/reload/reload.js');document.head.appendChild(r)":""}})();`}selfContainedComponent(e){return`(function(){'use strict';WebComponents.waitFor(()=>new Promise(n=>{var cc=new function(){this.define=function(n,e){e&&e.hasOwnProperty("exports")&&(e.exports.prototype.template=function(e,t){return Handlebars.partials[n](e,t)},window.customElements.define(n,e.exports))}};Handlebars.partials['${e.name}']=Handlebars.template(${e.precompiled});cc.define('${e.name}',(function(){const module={};${e.minifiedScript?e.minifiedScript:""};return module})());n()}));})();`}build({dist:e,writeManifest:t=!0}){const r=crypto.randomBytes(6).toString("hex"),n={imports:[],routes:this.routes,defaultLocale:this.defaultLocale,resources:this.resources,componentsVersion:r};for(let t in this.components)if(this.components.hasOwnProperty(t)){const r=this.components[t],s=t+".template.html";fs.writeFileSync(e+"/"+s,r.template);const o=t+".component.js";fs.writeFileSync(e+"/"+o,this.selfContainedComponent(r)),n.imports.push({templatePath:s,componentPath:o,name:t,render:r.render})}const s=r+".js";fs.writeFileSync(e+"/"+s,this.packagedHandlebars()),fs.writeFileSync(e+"/definitions.html",this.definitionsPartial(r)),n.imports.push({templatePath:"definitions.html",name:"definitions",render:!0,omitTags:!0});for(let t in this.layouts)if(this.layouts.hasOwnProperty(t)){const r=t+".layout.html";fs.writeFileSync(e+"/"+r,this.layouts[t].template),n.imports.push({templatePath:r,name:t,layout:!0})}t&&jsonfile.writeFileSync(e+"/manifest.json",n)}buildStatic({dist:e}){this.setupForLayoutBuild();for(const t in this.handle)if(this.handle.hasOwnProperty(t)){const r=this.handle[t];let n;const s={query:{},params:{}},o={redirect:()=>{},send:e=>n=e};this.handleRoute(t,r)(s,o).then((()=>{let r=t&&"/"!==t?t:"index.html";r.endsWith(".html")||(r+=".html"),fs.writeFileSync(path.join(e,r),n)}))}}};const handlebarsScript=read.sync("./node_modules/handlebars/dist/handlebars.min.js");
//# sourceMappingURL=/sm/28f80a6a78c5a8d624ef2f0fb5e49228a39856f8968aa14a4ec463fdf30f7ab9.map