preact-render-to-string
Version:
Render JSX to an HTML string, with support for Preact components.
3 lines (2 loc) • 10.4 kB
JavaScript
import{options as t,Fragment as e}from"preact";if("function"!=typeof Symbol){let t=0;Symbol=function(e){return`@@${e}${++t}`},Symbol.for=t=>`@@${t}`}const n=/^(?:area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/,r=/[\s\n\\/='"\0<>]/,o=/^xlink:?./,i=/["&<]/;function l(t){if(0===t.length||!1===i.test(t))return t;let e=0,n=0,r="",o="";for(;n<t.length;n++){switch(t.charCodeAt(n)){case 34:o=""";break;case 38:o="&";break;case 60:o="<";break;default:continue}n!==e&&(r+=t.slice(e,n)),r+=o,e=n+1}return n!==e&&(r+=t.slice(e,n)),r}let c=(t,e)=>String(t).replace(/(\n+)/g,"$1"+(e||"\t")),s=(t,e,n)=>String(t).length>(e||40)||!n&&-1!==String(t).indexOf("\n")||-1!==String(t).indexOf("<");const u={},f=new Set(["animation-iteration-count","border-image-outset","border-image-slice","border-image-width","box-flex","box-flex-group","box-ordinal-group","column-count","fill-opacity","flex","flex-grow","flex-negative","flex-order","flex-positive","flex-shrink","flood-opacity","font-weight","grid-column","grid-row","line-clamp","line-height","opacity","order","orphans","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","widows","z-index","zoom"]),a=/[A-Z]/g;function p(t){let e="";for(let n in t){let r=t[n];if(null!=r&&""!==r){const t="-"==n[0]?n:u[n]||(u[n]=n.replace(a,"-$&").toLowerCase());let o=";";"number"!=typeof r||t.startsWith("--")||f.has(t)||(o="px;"),e=e+t+":"+r+o}}return e||void 0}function d(t,e){return Array.isArray(e)?e.reduce(d,t):null!=e&&!1!==e&&t.push(e),t}function g(){this.__d=!0}const y=[],b=[];function m(e,n,r,o){const i=t.__s;t.__s=!0;try{return h(e,n||{},r,o)}finally{t.__c&&t.__c(e,b),t.__s=i,b.length=0}}function h(i,u,f,a,b,m){if(null==i||"boolean"==typeof i)return"";if("object"!=typeof i)return"function"==typeof i?"":l(i+"");let _=f.pretty,x=_&&"string"==typeof _?_:"\t";if(Array.isArray(i)){let t="";for(let e=0;e<i.length;e++)_&&e>0&&(t+="\n"),t+=h(i[e],u,f,a,b,m);return t}if(void 0!==i.constructor)return"";t.__b&&t.__b(i);let j=i.type,S=i.props,k=!1;if("function"==typeof j){if(k=!0,!f.shallow||!a&&!1!==f.renderRootComponent){if(j===e){const t=[];return d(t,i.props.children),h(t,u,f,!1!==f.shallowHighOrder,b,m)}{let e,n=i.__c=function(t,e){return{__v:t,context:e,props:t.props,setState:g,forceUpdate:g,__d:!0,__h:[]}}(i,u),r=t.__r,o=u,l=j.contextType;if(null!=l){let t=u[l.__c];o=t?t.props.value:l.__}if(j.prototype&&"function"==typeof j.prototype.render)n=i.__c=new j(S,o),n.__v=i,n._dirty=n.__d=!0,n.props=S,null==n.state&&(n.state={}),null==n._nextState&&null==n.__s&&(n._nextState=n.__s=n.state),n.context=o,j.getDerivedStateFromProps?n.state=Object.assign({},n.state,j.getDerivedStateFromProps(n.props,n.state)):n.componentWillMount&&(n.componentWillMount(),n.state=n._nextState!==n.state?n._nextState:n.__s!==n.state?n.__s:n.state),r&&r(i),e=n.render(n.props,n.state,n.context);else{let t=0;for(;n.__d&&t++<25;)n.__d=!1,r&&r(i),e=j.call(i.__c,S,o)}n.getChildContext&&(u=Object.assign({},u,n.getChildContext()));const c=h(e,u,f,!1!==f.shallowHighOrder,b,m);return t.diffed&&t.diffed(i),c}}j=(O=j).displayName||O!==Function&&O.name||function(t){let e=(Function.prototype.toString.call(t).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!e){let n=-1;for(let e=y.length;e--;)if(y[e]===t){n=e;break}n<0&&(n=y.push(t)-1),e=`UnnamedComponent${n}`}return e}(O)}var O;let w,A,v="<"+j;if(S){let t=Object.keys(S);f&&!0===f.sortAttributes&&t.sort();for(let e=0;e<t.length;e++){let n=t[e],i=S[n];if("children"===n){w=i;continue}if(r.test(n))continue;if(!(f&&f.allAttributes||"key"!==n&&"ref"!==n&&"__self"!==n&&"__source"!==n))continue;if("defaultValue"===n)n="value";else if("defaultChecked"===n)n="checked";else if("defaultSelected"===n)n="selected";else if("className"===n){if(void 0!==S.class)continue;n="class"}else b&&o.test(n)&&(n=n.toLowerCase().replace(/^xlink:?/,"xlink:"));if("htmlFor"===n){if(S.for)continue;n="for"}"style"===n&&i&&"object"==typeof i&&(i=p(i)),"a"===n[0]&&"r"===n[1]&&"boolean"==typeof i&&(i=String(i));let c=f.attributeHook&&f.attributeHook(n,i,u,f,k);if(c||""===c)v+=c;else if("dangerouslySetInnerHTML"===n)A=i&&i.__html;else if("textarea"===j&&"value"===n)w=i;else if((i||0===i||""===i)&&"function"!=typeof i){if(!(!0!==i&&""!==i||(i=n,f&&f.xml))){v=v+" "+n;continue}if("value"===n){if("select"===j){m=i;continue}"option"===j&&m==i&&void 0===S.selected&&(v+=" selected")}v+=` ${n}="${l(i+"")}"`}}}if(_){let t=v.replace(/\n\s*/," ");t===v||~t.indexOf("\n")?_&&~v.indexOf("\n")&&(v+="\n"):v=t}if(v+=">",r.test(j))throw new Error(`${j} is not a valid HTML tag name in ${v}`);let $,F=n.test(j)||f.voidElements&&f.voidElements.test(j),C=[];if(A)_&&s(A)&&(A="\n"+x+c(A,x)),v+=A;else if(null!=w&&d($=[],w).length){let t=_&&~v.indexOf("\n"),e=!1;for(let n=0;n<$.length;n++){let r=$[n];if(null!=r&&!1!==r){let n=h(r,u,f,!0,"svg"===j||"foreignObject"!==j&&b,m);if(_&&!t&&s(n)&&(t=!0),n)if(_){let t=n.length>0&&"<"!=n[0];e&&t?C[C.length-1]+=n:C.push(n),e=t}else C.push(n)}}if(_&&t)for(let t=C.length;t--;)C[t]="\n"+x+c(C[t],x)}if(t.diffed&&t.diffed(i),C.length||A)v+=C.join("");else if(f&&f.xml)return v.substring(0,v.length-1)+" />";return!F||$||A?(_&&~v.indexOf("\n")&&(v+="\n"),v+=`</${j}>`):v=v.replace(/>$/," />"),v}const _=/(\\|\"|\')/g,x=Object.prototype.toString,j=Date.prototype.toISOString,S=Error.prototype.toString,k=RegExp.prototype.toString,O=Symbol.prototype.toString,w=/^Symbol\((.*)\)(.*)$/,A=/\n/gi,v=Object.getOwnPropertySymbols||(t=>[]);function $(t){return"[object Array]"===t||"[object ArrayBuffer]"===t||"[object DataView]"===t||"[object Float32Array]"===t||"[object Float64Array]"===t||"[object Int8Array]"===t||"[object Int16Array]"===t||"[object Int32Array]"===t||"[object Uint8Array]"===t||"[object Uint8ClampedArray]"===t||"[object Uint16Array]"===t||"[object Uint32Array]"===t}function F(t){return""===t.name?"[Function anonymous]":"[Function "+t.name+"]"}function C(t){return O.call(t).replace(w,"Symbol($1)")}function E(t){return"["+S.call(t)+"]"}function M(t){if(!0===t||!1===t)return""+t;if(void 0===t)return"undefined";if(null===t)return"null";const e=typeof t;if("number"===e)return function(t){return t!=+t?"NaN":0===t&&1/t<0?"-0":""+t}(t);if("string"===e)return'"'+function(t){return t.replace(_,"\\$1")}(t)+'"';if("function"===e)return F(t);if("symbol"===e)return C(t);const n=x.call(t);return"[object WeakMap]"===n?"WeakMap {}":"[object WeakSet]"===n?"WeakSet {}":"[object Function]"===n||"[object GeneratorFunction]"===n?F(t,min):"[object Symbol]"===n?C(t):"[object Date]"===n?j.call(t):"[object Error]"===n?E(t):"[object RegExp]"===n?k.call(t):"[object Arguments]"===n&&0===t.length?"Arguments []":$(n)&&0===t.length?t.constructor.name+" []":t instanceof Error&&E(t)}function H(t,e,n,r,o,i,l,c,s,u){let f="";if(t.length){f+=o;const a=n+e;for(let n=0;n<t.length;n++)f+=a+I(t[n],e,a,r,o,i,l,c,s,u),n<t.length-1&&(f+=","+r);f+=o+n}return"["+f+"]"}function N(t,e,n,r,o,i,l,c,s,u){if((i=i.slice()).indexOf(t)>-1)return"[Circular]";i.push(t);const f=++c>l;if(!f&&t.toJSON&&"function"==typeof t.toJSON)return I(t.toJSON(),e,n,r,o,i,l,c,s,u);const a=x.call(t);return"[object Arguments]"===a?f?"[Arguments]":function(t,e,n,r,o,i,l,c,s,u){return(u?"":"Arguments ")+H(t,e,n,r,o,i,l,c,s,u)}(t,e,n,r,o,i,l,c,s,u):$(a)?f?"[Array]":function(t,e,n,r,o,i,l,c,s,u){return(u?"":t.constructor.name+" ")+H(t,e,n,r,o,i,l,c,s,u)}(t,e,n,r,o,i,l,c,s,u):"[object Map]"===a?f?"[Map]":function(t,e,n,r,o,i,l,c,s,u){let f="Map {";const a=t.entries();let p=a.next();if(!p.done){f+=o;const t=n+e;for(;!p.done;)f+=t+I(p.value[0],e,t,r,o,i,l,c,s,u)+" => "+I(p.value[1],e,t,r,o,i,l,c,s,u),p=a.next(),p.done||(f+=","+r);f+=o+n}return f+"}"}(t,e,n,r,o,i,l,c,s,u):"[object Set]"===a?f?"[Set]":function(t,e,n,r,o,i,l,c,s,u){let f="Set {";const a=t.entries();let p=a.next();if(!p.done){f+=o;const t=n+e;for(;!p.done;)f+=t+I(p.value[1],e,t,r,o,i,l,c,s,u),p=a.next(),p.done||(f+=","+r);f+=o+n}return f+"}"}(t,e,n,r,o,i,l,c,s,u):"object"==typeof t?f?"[Object]":function(t,e,n,r,o,i,l,c,s,u){let f=(u?"":t.constructor?t.constructor.name+" ":"Object ")+"{",a=Object.keys(t).sort();const p=v(t);if(p.length&&(a=a.filter(t=>!("symbol"==typeof t||"[object Symbol]"===x.call(t))).concat(p)),a.length){f+=o;const p=n+e;for(let n=0;n<a.length;n++){const d=a[n];f+=p+I(d,e,p,r,o,i,l,c,s,u)+": "+I(t[d],e,p,r,o,i,l,c,s,u),n<a.length-1&&(f+=","+r)}f+=o+n}return f+"}"}(t,e,n,r,o,i,l,c,s,u):void 0}function D(t,e,n,r,o,i,l,c,s,u){let f,a=!1;for(let e=0;e<s.length;e++)if(f=s[e],f.test(t)){a=!0;break}return!!a&&f.print(t,function(t){return I(t,e,n,r,o,i,l,c,s,u)},function(t){const r=n+e;return r+t.replace(A,"\n"+r)},{edgeSpacing:o,spacing:r})}function I(t,e,n,r,o,i,l,c,s,u){return M(t)||D(t,e,n,r,o,i,l,c,s,u)||N(t,e,n,r,o,i,l,c,s,u)}const W={indent:2,min:!1,maxDepth:Infinity,plugins:[]};function U(t){return new Array(t+1).join(" ")}let L={test:t=>t&&"object"==typeof t&&"type"in t&&"props"in t&&"key"in t,print:(t,e,n)=>m(t,L.context,L.opts,!0)},P={plugins:[L]},T={attributeHook:function(t,e,n,r,o){let i=typeof e;if("dangerouslySetInnerHTML"===t)return!1;if(null==e||"function"===i&&!r.functions)return"";if(r.skipFalseAttributes&&!o&&(!1===e||("class"===t||"style"===t)&&""===e))return"";let s="string"==typeof r.pretty?r.pretty:"\t";return"string"!==i?("function"!==i||r.functionNames?(L.context=n,L.opts=r,~(e=function(t,e){let n,r;e?(function(t){if(Object.keys(t).forEach(t=>{if(!W.hasOwnProperty(t))throw new Error("prettyFormat: Invalid option: "+t)}),t.min&&void 0!==t.indent&&0!==t.indent)throw new Error("prettyFormat: Cannot run with min option and indent")}(e),e=function(t){const e={};return Object.keys(W).forEach(n=>e[n]=t.hasOwnProperty(n)?t[n]:W[n]),e.min&&(e.indent=0),e}(e)):e=W;const o=e.min?" ":"\n",i=e.min?"":"\n";if(e&&e.plugins.length){n=U(e.indent),r=[];var l=D(t,n,"",o,i,r,e.maxDepth,0,e.plugins,e.min);if(l)return l}return M(t)||(n||(n=U(e.indent)),r||(r=[]),N(t,n,"",o,i,r,e.maxDepth,0,e.plugins,e.min))}(e,P)).indexOf("\n")&&(e=`${c("\n"+e,s)}\n`)):e="Function",c(`\n${t}={${e}}`,s)):`\n${s}${t}="${l(e)}"`},jsx:!0,xml:!1,functions:!0,functionNames:!0,skipFalseAttributes:!0,pretty:" "};function z(t,e,n){const r=Object.assign({},T,n||{});return r.jsx||(r.attributeHook=null),m(t,e,r)}const J={shallow:!0};function R(t,e,n){return z(t,e,Object.assign({},J,n||{}))}export default z;export{z as render,R as shallowRender};
//# sourceMappingURL=jsx.modern.js.map