preact-render-to-string 5.2.3 → 5.2.5
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/commonjs.js +1 -1
- package/dist/commonjs.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.module.js +1 -1
- package/dist/index.module.js.map +1 -1
- package/dist/jsx-entry.js +1 -1
- package/dist/jsx-entry.js.map +1 -1
- package/dist/jsx.js.map +1 -1
- package/dist/jsx.mjs +1 -1
- package/dist/jsx.modern.js +1 -1
- package/dist/jsx.modern.js.map +1 -1
- package/dist/jsx.module.js +1 -1
- package/dist/jsx.module.js.map +1 -1
- package/package.json +2 -2
- package/src/constants.js +2 -0
- package/src/index.js +65 -25
- package/src/pretty.js +4 -0
package/dist/jsx.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.module.js","sources":["../src/polyfills.js","../src/util.js","../src/pretty.js","../src/index.js","../node_modules/pretty-format/printString.js","../node_modules/pretty-format/index.js","../src/jsx.js"],"sourcesContent":["if (typeof Symbol !== 'function') {\n\tlet c = 0;\n\t// eslint-disable-next-line\n\tSymbol = function (s) {\n\t\treturn `@@${s}${++c}`;\n\t};\n\tSymbol.for = (s) => `@@${s}`;\n}\n","// DOM properties that should NOT have \"px\" added when numeric\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i;\nexport const VOID_ELEMENTS = /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;\nexport const UNSAFE_NAME = /[\\s\\n\\\\/='\"\\0<>]/;\nexport const XLINK = /^xlink:?./;\n\nconst ENCODED_ENTITIES = /[\"&<]/;\n\nexport function encodeEntities(str) {\n\t// Ensure we're always parsing and returning a string:\n\tstr += '';\n\n\t// Skip all work for strings with no entities needing encoding:\n\tif (ENCODED_ENTITIES.test(str) === false) return str;\n\n\tlet last = 0,\n\t\ti = 0,\n\t\tout = '',\n\t\tch = '';\n\n\t// Seek forward in str until the next entity char:\n\tfor (; i < str.length; i++) {\n\t\tswitch (str.charCodeAt(i)) {\n\t\t\tcase 34:\n\t\t\t\tch = '"';\n\t\t\t\tbreak;\n\t\t\tcase 38:\n\t\t\t\tch = '&';\n\t\t\t\tbreak;\n\t\t\tcase 60:\n\t\t\t\tch = '<';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcontinue;\n\t\t}\n\t\t// Append skipped/buffered characters and the encoded entity:\n\t\tif (i !== last) out += str.slice(last, i);\n\t\tout += ch;\n\t\t// Start the next seek/buffer after the entity's offset:\n\t\tlast = i + 1;\n\t}\n\tif (i !== last) out += str.slice(last, i);\n\treturn out;\n}\n\nexport let indent = (s, char) =>\n\tString(s).replace(/(\\n+)/g, '$1' + (char || '\\t'));\n\nexport let isLargeString = (s, length, ignoreLines) =>\n\tString(s).length > (length || 40) ||\n\t(!ignoreLines && String(s).indexOf('\\n') !== -1) ||\n\tString(s).indexOf('<') !== -1;\n\nconst JS_TO_CSS = {};\n\nconst CSS_REGEX = /([A-Z])/g;\n// Convert an Object style to a CSSText string\nexport function styleObjToCss(s) {\n\tlet str = '';\n\tfor (let prop in s) {\n\t\tlet val = s[prop];\n\t\tif (val != null && val !== '') {\n\t\t\tif (str) str += ' ';\n\t\t\t// str += jsToCss(prop);\n\t\t\tstr +=\n\t\t\t\tprop[0] == '-'\n\t\t\t\t\t? prop\n\t\t\t\t\t: JS_TO_CSS[prop] ||\n\t\t\t\t\t (JS_TO_CSS[prop] = prop.replace(CSS_REGEX, '-$1').toLowerCase());\n\n\t\t\tif (typeof val === 'number' && IS_NON_DIMENSIONAL.test(prop) === false) {\n\t\t\t\tstr = str + ': ' + val + 'px;';\n\t\t\t} else {\n\t\t\t\tstr = str + ': ' + val + ';';\n\t\t\t}\n\t\t}\n\t}\n\treturn str || undefined;\n}\n\n/**\n * Get flattened children from the children prop\n * @param {Array} accumulator\n * @param {any} children A `props.children` opaque object.\n * @returns {Array} accumulator\n * @private\n */\nexport function getChildren(accumulator, children) {\n\tif (Array.isArray(children)) {\n\t\tchildren.reduce(getChildren, accumulator);\n\t} else if (children != null && children !== false) {\n\t\taccumulator.push(children);\n\t}\n\treturn accumulator;\n}\n\nfunction markAsDirty() {\n\tthis.__d = true;\n}\n\nexport function createComponent(vnode, context) {\n\treturn {\n\t\t__v: vnode,\n\t\tcontext,\n\t\tprops: vnode.props,\n\t\t// silently drop state updates\n\t\tsetState: markAsDirty,\n\t\tforceUpdate: markAsDirty,\n\t\t__d: true,\n\t\t// hooks\n\t\t__h: []\n\t};\n}\n\n// Necessary for createContext api. Setting this property will pass\n// the context value as `this.context` just for this component.\nexport function getContext(nodeName, context) {\n\tlet cxType = nodeName.contextType;\n\tlet provider = cxType && context[cxType.__c];\n\treturn cxType != null\n\t\t? provider\n\t\t\t? provider.props.value\n\t\t\t: cxType.__\n\t\t: context;\n}\n","import {\n\tencodeEntities,\n\tindent,\n\tisLargeString,\n\tstyleObjToCss,\n\tgetChildren,\n\tcreateComponent,\n\tgetContext,\n\tUNSAFE_NAME,\n\tXLINK,\n\tVOID_ELEMENTS\n} from './util';\nimport { options, Fragment } from 'preact';\n\n// components without names, kept as a hash for later comparison to return consistent UnnamedComponentXX names.\nconst UNNAMED = [];\n\nexport function _renderToStringPretty(\n\tvnode,\n\tcontext,\n\topts,\n\tinner,\n\tisSvgMode,\n\tselectValue\n) {\n\tif (vnode == null || typeof vnode === 'boolean') {\n\t\treturn '';\n\t}\n\n\t// #text nodes\n\tif (typeof vnode !== 'object') {\n\t\treturn encodeEntities(vnode);\n\t}\n\n\tlet pretty = opts.pretty,\n\t\tindentChar = pretty && typeof pretty === 'string' ? pretty : '\\t';\n\n\tif (Array.isArray(vnode)) {\n\t\tlet rendered = '';\n\t\tfor (let i = 0; i < vnode.length; i++) {\n\t\t\tif (pretty && i > 0) rendered = rendered + '\\n';\n\t\t\trendered =\n\t\t\t\trendered +\n\t\t\t\t_renderToStringPretty(\n\t\t\t\t\tvnode[i],\n\t\t\t\t\tcontext,\n\t\t\t\t\topts,\n\t\t\t\t\tinner,\n\t\t\t\t\tisSvgMode,\n\t\t\t\t\tselectValue\n\t\t\t\t);\n\t\t}\n\t\treturn rendered;\n\t}\n\n\tlet nodeName = vnode.type,\n\t\tprops = vnode.props,\n\t\tisComponent = false;\n\n\t// components\n\tif (typeof nodeName === 'function') {\n\t\tisComponent = true;\n\t\tif (opts.shallow && (inner || opts.renderRootComponent === false)) {\n\t\t\tnodeName = getComponentName(nodeName);\n\t\t} else if (nodeName === Fragment) {\n\t\t\tconst children = [];\n\t\t\tgetChildren(children, vnode.props.children);\n\t\t\treturn _renderToStringPretty(\n\t\t\t\tchildren,\n\t\t\t\tcontext,\n\t\t\t\topts,\n\t\t\t\topts.shallowHighOrder !== false,\n\t\t\t\tisSvgMode,\n\t\t\t\tselectValue\n\t\t\t);\n\t\t} else {\n\t\t\tlet rendered;\n\n\t\t\tlet c = (vnode.__c = createComponent(vnode, context));\n\n\t\t\t// options._diff\n\t\t\tif (options.__b) options.__b(vnode);\n\n\t\t\t// options._render\n\t\t\tlet renderHook = options.__r;\n\n\t\t\tif (\n\t\t\t\t!nodeName.prototype ||\n\t\t\t\ttypeof nodeName.prototype.render !== 'function'\n\t\t\t) {\n\t\t\t\tlet cctx = getContext(nodeName, context);\n\n\t\t\t\t// If a hook invokes setState() to invalidate the component during rendering,\n\t\t\t\t// re-render it up to 25 times to allow \"settling\" of memoized states.\n\t\t\t\t// Note:\n\t\t\t\t// This will need to be updated for Preact 11 to use internal.flags rather than component._dirty:\n\t\t\t\t// https://github.com/preactjs/preact/blob/d4ca6fdb19bc715e49fd144e69f7296b2f4daa40/src/diff/component.js#L35-L44\n\t\t\t\tlet count = 0;\n\t\t\t\twhile (c.__d && count++ < 25) {\n\t\t\t\t\tc.__d = false;\n\n\t\t\t\t\tif (renderHook) renderHook(vnode);\n\n\t\t\t\t\t// stateless functional components\n\t\t\t\t\trendered = nodeName.call(vnode.__c, props, cctx);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet cctx = getContext(nodeName, context);\n\n\t\t\t\t// c = new nodeName(props, context);\n\t\t\t\tc = vnode.__c = new nodeName(props, cctx);\n\t\t\t\tc.__v = vnode;\n\t\t\t\t// turn off stateful re-rendering:\n\t\t\t\tc._dirty = c.__d = true;\n\t\t\t\tc.props = props;\n\t\t\t\tif (c.state == null) c.state = {};\n\n\t\t\t\tif (c._nextState == null && c.__s == null) {\n\t\t\t\t\tc._nextState = c.__s = c.state;\n\t\t\t\t}\n\n\t\t\t\tc.context = cctx;\n\t\t\t\tif (nodeName.getDerivedStateFromProps)\n\t\t\t\t\tc.state = Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tc.state,\n\t\t\t\t\t\tnodeName.getDerivedStateFromProps(c.props, c.state)\n\t\t\t\t\t);\n\t\t\t\telse if (c.componentWillMount) {\n\t\t\t\t\tc.componentWillMount();\n\n\t\t\t\t\t// If the user called setState in cWM we need to flush pending,\n\t\t\t\t\t// state updates. This is the same behaviour in React.\n\t\t\t\t\tc.state =\n\t\t\t\t\t\tc._nextState !== c.state\n\t\t\t\t\t\t\t? c._nextState\n\t\t\t\t\t\t\t: c.__s !== c.state\n\t\t\t\t\t\t\t? c.__s\n\t\t\t\t\t\t\t: c.state;\n\t\t\t\t}\n\n\t\t\t\tif (renderHook) renderHook(vnode);\n\n\t\t\t\trendered = c.render(c.props, c.state, c.context);\n\t\t\t}\n\n\t\t\tif (c.getChildContext) {\n\t\t\t\tcontext = Object.assign({}, context, c.getChildContext());\n\t\t\t}\n\n\t\t\tif (options.diffed) options.diffed(vnode);\n\t\t\treturn _renderToStringPretty(\n\t\t\t\trendered,\n\t\t\t\tcontext,\n\t\t\t\topts,\n\t\t\t\topts.shallowHighOrder !== false,\n\t\t\t\tisSvgMode,\n\t\t\t\tselectValue\n\t\t\t);\n\t\t}\n\t}\n\n\t// render JSX to HTML\n\tlet s = '<' + nodeName,\n\t\tpropChildren,\n\t\thtml;\n\n\tif (props) {\n\t\tlet attrs = Object.keys(props);\n\n\t\t// allow sorting lexicographically for more determinism (useful for tests, such as via preact-jsx-chai)\n\t\tif (opts && opts.sortAttributes === true) attrs.sort();\n\n\t\tfor (let i = 0; i < attrs.length; i++) {\n\t\t\tlet name = attrs[i],\n\t\t\t\tv = props[name];\n\t\t\tif (name === 'children') {\n\t\t\t\tpropChildren = v;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (UNSAFE_NAME.test(name)) continue;\n\n\t\t\tif (\n\t\t\t\t!(opts && opts.allAttributes) &&\n\t\t\t\t(name === 'key' ||\n\t\t\t\t\tname === 'ref' ||\n\t\t\t\t\tname === '__self' ||\n\t\t\t\t\tname === '__source')\n\t\t\t)\n\t\t\t\tcontinue;\n\n\t\t\tif (name === 'defaultValue') {\n\t\t\t\tname = 'value';\n\t\t\t} else if (name === 'defaultChecked') {\n\t\t\t\tname = 'checked';\n\t\t\t} else if (name === 'defaultSelected') {\n\t\t\t\tname = 'selected';\n\t\t\t} else if (name === 'className') {\n\t\t\t\tif (typeof props.class !== 'undefined') continue;\n\t\t\t\tname = 'class';\n\t\t\t} else if (isSvgMode && XLINK.test(name)) {\n\t\t\t\tname = name.toLowerCase().replace(/^xlink:?/, 'xlink:');\n\t\t\t}\n\n\t\t\tif (name === 'htmlFor') {\n\t\t\t\tif (props.for) continue;\n\t\t\t\tname = 'for';\n\t\t\t}\n\n\t\t\tif (name === 'style' && v && typeof v === 'object') {\n\t\t\t\tv = styleObjToCss(v);\n\t\t\t}\n\n\t\t\t// always use string values instead of booleans for aria attributes\n\t\t\t// also see https://github.com/preactjs/preact/pull/2347/files\n\t\t\tif (name[0] === 'a' && name['1'] === 'r' && typeof v === 'boolean') {\n\t\t\t\tv = String(v);\n\t\t\t}\n\n\t\t\tlet hooked =\n\t\t\t\topts.attributeHook &&\n\t\t\t\topts.attributeHook(name, v, context, opts, isComponent);\n\t\t\tif (hooked || hooked === '') {\n\t\t\t\ts = s + hooked;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (name === 'dangerouslySetInnerHTML') {\n\t\t\t\thtml = v && v.__html;\n\t\t\t} else if (nodeName === 'textarea' && name === 'value') {\n\t\t\t\t// <textarea value=\"a&b\"> --> <textarea>a&b</textarea>\n\t\t\t\tpropChildren = v;\n\t\t\t} else if ((v || v === 0 || v === '') && typeof v !== 'function') {\n\t\t\t\tif (v === true || v === '') {\n\t\t\t\t\tv = name;\n\t\t\t\t\t// in non-xml mode, allow boolean attributes\n\t\t\t\t\tif (!opts || !opts.xml) {\n\t\t\t\t\t\ts = s + ' ' + name;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (name === 'value') {\n\t\t\t\t\tif (nodeName === 'select') {\n\t\t\t\t\t\tselectValue = v;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t// If we're looking at an <option> and it's the currently selected one\n\t\t\t\t\t\tnodeName === 'option' &&\n\t\t\t\t\t\tselectValue == v &&\n\t\t\t\t\t\t// and the <option> doesn't already have a selected attribute on it\n\t\t\t\t\t\ttypeof props.selected === 'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\ts = s + ` selected`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts = s + ` ${name}=\"${encodeEntities(v)}\"`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// account for >1 multiline attribute\n\tif (pretty) {\n\t\tlet sub = s.replace(/\\n\\s*/, ' ');\n\t\tif (sub !== s && !~sub.indexOf('\\n')) s = sub;\n\t\telse if (pretty && ~s.indexOf('\\n')) s = s + '\\n';\n\t}\n\n\ts = s + '>';\n\n\tif (UNSAFE_NAME.test(nodeName))\n\t\tthrow new Error(`${nodeName} is not a valid HTML tag name in ${s}`);\n\n\tlet isVoid =\n\t\tVOID_ELEMENTS.test(nodeName) ||\n\t\t(opts.voidElements && opts.voidElements.test(nodeName));\n\tlet pieces = [];\n\n\tlet children;\n\tif (html) {\n\t\t// if multiline, indent.\n\t\tif (pretty && isLargeString(html)) {\n\t\t\thtml = '\\n' + indentChar + indent(html, indentChar);\n\t\t}\n\t\ts = s + html;\n\t} else if (\n\t\tpropChildren != null &&\n\t\tgetChildren((children = []), propChildren).length\n\t) {\n\t\tlet hasLarge = pretty && ~s.indexOf('\\n');\n\t\tlet lastWasText = false;\n\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tlet child = children[i];\n\n\t\t\tif (child != null && child !== false) {\n\t\t\t\tlet childSvgMode =\n\t\t\t\t\t\tnodeName === 'svg'\n\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t: nodeName === 'foreignObject'\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: isSvgMode,\n\t\t\t\t\tret = _renderToStringPretty(\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tchildSvgMode,\n\t\t\t\t\t\tselectValue\n\t\t\t\t\t);\n\n\t\t\t\tif (pretty && !hasLarge && isLargeString(ret)) hasLarge = true;\n\n\t\t\t\t// Skip if we received an empty string\n\t\t\t\tif (ret) {\n\t\t\t\t\tif (pretty) {\n\t\t\t\t\t\tlet isText = ret.length > 0 && ret[0] != '<';\n\n\t\t\t\t\t\t// We merge adjacent text nodes, otherwise each piece would be printed\n\t\t\t\t\t\t// on a new line.\n\t\t\t\t\t\tif (lastWasText && isText) {\n\t\t\t\t\t\t\tpieces[pieces.length - 1] += ret;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpieces.push(ret);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastWasText = isText;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpieces.push(ret);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pretty && hasLarge) {\n\t\t\tfor (let i = pieces.length; i--; ) {\n\t\t\t\tpieces[i] = '\\n' + indentChar + indent(pieces[i], indentChar);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pieces.length || html) {\n\t\ts = s + pieces.join('');\n\t} else if (opts && opts.xml) {\n\t\treturn s.substring(0, s.length - 1) + ' />';\n\t}\n\n\tif (isVoid && !children && !html) {\n\t\ts = s.replace(/>$/, ' />');\n\t} else {\n\t\tif (pretty && ~s.indexOf('\\n')) s = s + '\\n';\n\t\ts = s + `</${nodeName}>`;\n\t}\n\n\treturn s;\n}\n\nfunction getComponentName(component) {\n\treturn (\n\t\tcomponent.displayName ||\n\t\t(component !== Function && component.name) ||\n\t\tgetFallbackComponentName(component)\n\t);\n}\n\nfunction getFallbackComponentName(component) {\n\tlet str = Function.prototype.toString.call(component),\n\t\tname = (str.match(/^\\s*function\\s+([^( ]+)/) || '')[1];\n\tif (!name) {\n\t\t// search for an existing indexed name for the given component:\n\t\tlet index = -1;\n\t\tfor (let i = UNNAMED.length; i--; ) {\n\t\t\tif (UNNAMED[i] === component) {\n\t\t\t\tindex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// not found, create a new indexed name:\n\t\tif (index < 0) {\n\t\t\tindex = UNNAMED.push(component) - 1;\n\t\t}\n\t\tname = `UnnamedComponent${index}`;\n\t}\n\treturn name;\n}\n","import {\n\tencodeEntities,\n\tstyleObjToCss,\n\tgetContext,\n\tcreateComponent,\n\tUNSAFE_NAME,\n\tXLINK,\n\tVOID_ELEMENTS\n} from './util';\nimport { options, Fragment } from 'preact';\nimport { _renderToStringPretty } from './pretty';\nimport {\n\tCOMMIT,\n\tCOMPONENT,\n\tDIFF,\n\tDIFFED,\n\tDIRTY,\n\tNEXT_STATE,\n\tRENDER,\n\tSKIP_EFFECTS,\n\tVNODE\n} from './constants';\n\n/** @typedef {import('preact').VNode} VNode */\n\nconst SHALLOW = { shallow: true };\n\n/** Render Preact JSX + Components to an HTML string.\n *\t@name render\n *\t@function\n *\t@param {VNode} vnode\tJSX VNode to render.\n *\t@param {Object} [context={}]\tOptionally pass an initial context object through the render path.\n *\t@param {Object} [options={}]\tRendering options\n *\t@param {Boolean} [options.shallow=false]\tIf `true`, renders nested Components as HTML elements (`<Foo a=\"b\" />`).\n *\t@param {Boolean} [options.xml=false]\t\tIf `true`, uses self-closing tags for elements without children.\n *\t@param {Boolean} [options.pretty=false]\t\tIf `true`, adds whitespace for readability\n *\t@param {RegExp|undefined} [options.voidElements] RegeEx that matches elements that are considered void (self-closing)\n */\nrenderToString.render = renderToString;\n\n/** Only render elements, leaving Components inline as `<ComponentName ... />`.\n *\tThis method is just a convenience alias for `render(vnode, context, { shallow:true })`\n *\t@name shallow\n *\t@function\n *\t@param {VNode} vnode\tJSX VNode to render.\n *\t@param {Object} [context={}]\tOptionally pass an initial context object through the render path.\n */\nlet shallowRender = (vnode, context) => renderToString(vnode, context, SHALLOW);\n\nconst EMPTY_ARR = [];\nfunction renderToString(vnode, context, opts) {\n\tcontext = context || {};\n\n\t// Performance optimization: `renderToString` is synchronous and we\n\t// therefore don't execute any effects. To do that we pass an empty\n\t// array to `options._commit` (`__c`). But we can go one step further\n\t// and avoid a lot of dirty checks and allocations by setting\n\t// `options._skipEffects` (`__s`) too.\n\tconst previousSkipEffects = options[SKIP_EFFECTS];\n\toptions[SKIP_EFFECTS] = true;\n\n\tlet res;\n\tif (\n\t\topts &&\n\t\t(opts.pretty ||\n\t\t\topts.voidElements ||\n\t\t\topts.sortAttributes ||\n\t\t\topts.shallow ||\n\t\t\topts.allAttributes ||\n\t\t\topts.xml ||\n\t\t\topts.attributeHook)\n\t) {\n\t\tres = _renderToStringPretty(vnode, context, opts);\n\t} else {\n\t\tres = _renderToString(vnode, context, false, undefined);\n\t}\n\n\t// options._commit, we don't schedule any effects in this library right now,\n\t// so we can pass an empty queue to this hook.\n\tif (options[COMMIT]) options[COMMIT](vnode, EMPTY_ARR);\n\toptions[SKIP_EFFECTS] = previousSkipEffects;\n\tEMPTY_ARR.length = 0;\n\treturn res;\n}\n\nfunction renderFunctionComponent(vnode, context) {\n\tlet rendered,\n\t\tc = createComponent(vnode, context),\n\t\tcctx = getContext(vnode.type, context);\n\n\tvnode[COMPONENT] = c;\n\n\t// If a hook invokes setState() to invalidate the component during rendering,\n\t// re-render it up to 25 times to allow \"settling\" of memoized states.\n\t// Note:\n\t// This will need to be updated for Preact 11 to use internal.flags rather than component._dirty:\n\t// https://github.com/preactjs/preact/blob/d4ca6fdb19bc715e49fd144e69f7296b2f4daa40/src/diff/component.js#L35-L44\n\tlet renderHook = options[RENDER];\n\tlet count = 0;\n\twhile (c[DIRTY] && count++ < 25) {\n\t\tc[DIRTY] = false;\n\n\t\tif (renderHook) renderHook(vnode);\n\n\t\t// stateless functional components\n\t\trendered = vnode.type.call(c, vnode.props, cctx);\n\t}\n\n\treturn rendered;\n}\n\nfunction renderClassComponent(vnode, context) {\n\tlet nodeName = vnode.type,\n\t\tcctx = getContext(nodeName, context);\n\n\t// c = new nodeName(props, context);\n\tlet c = new nodeName(vnode.props, cctx);\n\tvnode[COMPONENT] = c;\n\tc[VNODE] = vnode;\n\t// turn off stateful re-rendering:\n\tc[DIRTY] = true;\n\tc.props = vnode.props;\n\tif (c.state == null) c.state = {};\n\n\tif (c[NEXT_STATE] == null) {\n\t\tc[NEXT_STATE] = c.state;\n\t}\n\n\tc.context = cctx;\n\tif (nodeName.getDerivedStateFromProps) {\n\t\tc.state = assign(\n\t\t\t{},\n\t\t\tc.state,\n\t\t\tnodeName.getDerivedStateFromProps(c.props, c.state)\n\t\t);\n\t} else if (c.componentWillMount) {\n\t\tc.componentWillMount();\n\n\t\t// If the user called setState in cWM we need to flush pending,\n\t\t// state updates. This is the same behaviour in React.\n\t\tc.state = c[NEXT_STATE] !== c.state ? c[NEXT_STATE] : c.state;\n\t}\n\n\tlet renderHook = options[RENDER];\n\tif (renderHook) renderHook(vnode);\n\n\treturn c.render(c.props, c.state, c.context);\n}\n\nfunction normalizePropName(name, isSvgMode) {\n\tif (name === 'className') {\n\t\treturn 'class';\n\t} else if (name === 'htmlFor') {\n\t\treturn 'for';\n\t} else if (name === 'defaultValue') {\n\t\treturn 'value';\n\t} else if (name === 'defaultChecked') {\n\t\treturn 'checked';\n\t} else if (name === 'defaultSelected') {\n\t\treturn 'selected';\n\t} else if (isSvgMode && XLINK.test(name)) {\n\t\treturn name.toLowerCase().replace(/^xlink:?/, 'xlink:');\n\t}\n\n\treturn name;\n}\n\nfunction normalizePropValue(name, v) {\n\tif (name === 'style' && v != null && typeof v === 'object') {\n\t\treturn styleObjToCss(v);\n\t} else if (name[0] === 'a' && name[1] === 'r' && typeof v === 'boolean') {\n\t\t// always use string values instead of booleans for aria attributes\n\t\t// also see https://github.com/preactjs/preact/pull/2347/files\n\t\treturn String(v);\n\t}\n\n\treturn v;\n}\n\nconst isArray = Array.isArray;\nconst assign = Object.assign;\n\n/** The default export is an alias of `render()`. */\nfunction _renderToString(vnode, context, isSvgMode, selectValue) {\n\t// Ignore non-rendered VNodes/values\n\tif (vnode == null || vnode === true || vnode === false || vnode === '') {\n\t\treturn '';\n\t}\n\n\t// Text VNodes: escape as HTML\n\tif (typeof vnode !== 'object') {\n\t\treturn encodeEntities(vnode);\n\t}\n\n\t// Recurse into children / Arrays\n\tif (isArray(vnode)) {\n\t\tlet rendered = '';\n\t\tfor (let i = 0; i < vnode.length; i++) {\n\t\t\trendered =\n\t\t\t\trendered + _renderToString(vnode[i], context, isSvgMode, selectValue);\n\t\t}\n\t\treturn rendered;\n\t}\n\n\tif (options[DIFF]) options[DIFF](vnode);\n\n\tlet type = vnode.type,\n\t\tprops = vnode.props;\n\n\t// Invoke rendering on Components\n\tconst isComponent = typeof type === 'function';\n\tif (isComponent) {\n\t\tif (type === Fragment) {\n\t\t\treturn _renderToString(\n\t\t\t\tvnode.props.children,\n\t\t\t\tcontext,\n\t\t\t\tisSvgMode,\n\t\t\t\tselectValue\n\t\t\t);\n\t\t}\n\n\t\tlet rendered;\n\t\tif (type.prototype && typeof type.prototype.render === 'function') {\n\t\t\trendered = renderClassComponent(vnode, context);\n\t\t} else {\n\t\t\trendered = renderFunctionComponent(vnode, context);\n\t\t}\n\n\t\tlet component = vnode[COMPONENT];\n\t\tif (component.getChildContext) {\n\t\t\tcontext = assign({}, context, component.getChildContext());\n\t\t}\n\n\t\t// Recurse into children before invoking the after-diff hook\n\t\tconst str = _renderToString(rendered, context, isSvgMode, selectValue);\n\t\tif (options[DIFFED]) options[DIFFED](vnode);\n\t\treturn str;\n\t}\n\n\t// Serialize Element VNodes to HTML\n\tlet s = '<',\n\t\tchildren,\n\t\thtml;\n\n\ts = s + type;\n\n\tif (props) {\n\t\tchildren = props.children;\n\t\tfor (let name in props) {\n\t\t\tlet v = props[name];\n\n\t\t\tif (\n\t\t\t\tname === 'key' ||\n\t\t\t\tname === 'ref' ||\n\t\t\t\tname === '__self' ||\n\t\t\t\tname === '__source' ||\n\t\t\t\tname === 'children' ||\n\t\t\t\t(name === 'className' && 'class' in props) ||\n\t\t\t\t(name === 'htmlFor' && 'for' in props)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (UNSAFE_NAME.test(name)) continue;\n\n\t\t\tname = normalizePropName(name, isSvgMode);\n\t\t\tv = normalizePropValue(name, v);\n\n\t\t\tif (name === 'dangerouslySetInnerHTML') {\n\t\t\t\thtml = v && v.__html;\n\t\t\t} else if (type === 'textarea' && name === 'value') {\n\t\t\t\t// <textarea value=\"a&b\"> --> <textarea>a&b</textarea>\n\t\t\t\tchildren = v;\n\t\t\t} else if ((v || v === 0 || v === '') && typeof v !== 'function') {\n\t\t\t\tif (v === true || v === '') {\n\t\t\t\t\tv = name;\n\t\t\t\t\ts = s + ' ' + name;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (name === 'value') {\n\t\t\t\t\tif (type === 'select') {\n\t\t\t\t\t\tselectValue = v;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t// If we're looking at an <option> and it's the currently selected one\n\t\t\t\t\t\ttype === 'option' &&\n\t\t\t\t\t\tselectValue == v &&\n\t\t\t\t\t\t// and the <option> doesn't already have a selected attribute on it\n\t\t\t\t\t\t!('selected' in props)\n\t\t\t\t\t) {\n\t\t\t\t\t\ts = s + ' selected';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts = s + ' ' + name + '=\"' + encodeEntities(v) + '\"';\n\t\t\t}\n\t\t}\n\t}\n\n\tlet startElement = s;\n\ts = s + '>';\n\n\tif (UNSAFE_NAME.test(type)) {\n\t\tthrow new Error(`${type} is not a valid HTML tag name in ${s}`);\n\t}\n\n\tlet pieces = '';\n\tlet hasChildren = false;\n\n\tif (html) {\n\t\tpieces = pieces + html;\n\t\thasChildren = true;\n\t} else if (typeof children === 'string') {\n\t\tpieces = pieces + encodeEntities(children);\n\t\thasChildren = true;\n\t} else if (isArray(children)) {\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tlet child = children[i];\n\n\t\t\tif (child != null && child !== false) {\n\t\t\t\tlet childSvgMode =\n\t\t\t\t\ttype === 'svg' || (type !== 'foreignObject' && isSvgMode);\n\t\t\t\tlet ret = _renderToString(child, context, childSvgMode, selectValue);\n\n\t\t\t\t// Skip if we received an empty string\n\t\t\t\tif (ret) {\n\t\t\t\t\tpieces = pieces + ret;\n\t\t\t\t\thasChildren = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (children != null && children !== false && children !== true) {\n\t\tlet childSvgMode =\n\t\t\ttype === 'svg' || (type !== 'foreignObject' && isSvgMode);\n\t\tlet ret = _renderToString(children, context, childSvgMode, selectValue);\n\n\t\t// Skip if we received an empty string\n\t\tif (ret) {\n\t\t\tpieces = pieces + ret;\n\t\t\thasChildren = true;\n\t\t}\n\t}\n\n\tif (options[DIFFED]) options[DIFFED](vnode);\n\n\tif (hasChildren) {\n\t\ts = s + pieces;\n\t} else if (VOID_ELEMENTS.test(type)) {\n\t\treturn startElement + ' />';\n\t}\n\n\treturn s + '</' + type + '>';\n}\n\n/** The default export is an alias of `render()`. */\n\nrenderToString.shallowRender = shallowRender;\n\nexport default renderToString;\n\nexport {\n\trenderToString as render,\n\trenderToString as renderToStaticMarkup,\n\trenderToString,\n\tshallowRender\n};\n","'use strict';\n\nconst ESCAPED_CHARACTERS = /(\\\\|\\\"|\\')/g;\n\nmodule.exports = function printString(val) {\n return val.replace(ESCAPED_CHARACTERS, '\\\\$1');\n}\n","'use strict';\n\nconst printString = require('./printString');\n\nconst toString = Object.prototype.toString;\nconst toISOString = Date.prototype.toISOString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = Symbol.prototype.toString;\n\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nconst NEWLINE_REGEXP = /\\n/ig;\n\nconst getSymbols = Object.getOwnPropertySymbols || (obj => []);\n\nfunction isToStringedArrayType(toStringed) {\n return (\n toStringed === '[object Array]' ||\n toStringed === '[object ArrayBuffer]' ||\n toStringed === '[object DataView]' ||\n toStringed === '[object Float32Array]' ||\n toStringed === '[object Float64Array]' ||\n toStringed === '[object Int8Array]' ||\n toStringed === '[object Int16Array]' ||\n toStringed === '[object Int32Array]' ||\n toStringed === '[object Uint8Array]' ||\n toStringed === '[object Uint8ClampedArray]' ||\n toStringed === '[object Uint16Array]' ||\n toStringed === '[object Uint32Array]'\n );\n}\n\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && (1 / val) < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\n\nfunction printFunction(val) {\n if (val.name === '') {\n return '[Function anonymous]'\n } else {\n return '[Function ' + val.name + ']';\n }\n}\n\nfunction printSymbol(val) {\n return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n}\n\nfunction printError(val) {\n return '[' + errorToString.call(val) + ']';\n}\n\nfunction printBasicValue(val) {\n if (val === true || val === false) return '' + val;\n if (val === undefined) return 'undefined';\n if (val === null) return 'null';\n\n const typeOf = typeof val;\n\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return '\"' + printString(val) + '\"';\n if (typeOf === 'function') return printFunction(val);\n if (typeOf === 'symbol') return printSymbol(val);\n\n const toStringed = toString.call(val);\n\n if (toStringed === '[object WeakMap]') return 'WeakMap {}';\n if (toStringed === '[object WeakSet]') return 'WeakSet {}';\n if (toStringed === '[object Function]' || toStringed === '[object GeneratorFunction]') return printFunction(val, min);\n if (toStringed === '[object Symbol]') return printSymbol(val);\n if (toStringed === '[object Date]') return toISOString.call(val);\n if (toStringed === '[object Error]') return printError(val);\n if (toStringed === '[object RegExp]') return regExpToString.call(val);\n if (toStringed === '[object Arguments]' && val.length === 0) return 'Arguments []';\n if (isToStringedArrayType(toStringed) && val.length === 0) return val.constructor.name + ' []';\n\n if (val instanceof Error) return printError(val);\n\n return false;\n}\n\nfunction printList(list, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let body = '';\n\n if (list.length) {\n body += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n for (let i = 0; i < list.length; i++) {\n body += innerIndent + print(list[i], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n if (i < list.length - 1) {\n body += ',' + spacing;\n }\n }\n\n body += edgeSpacing + prevIndent;\n }\n\n return '[' + body + ']';\n}\n\nfunction printArguments(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n return (min ? '' : 'Arguments ') + printList(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nfunction printArray(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n return (min ? '' : val.constructor.name + ' ') + printList(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nfunction printMap(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let result = 'Map {';\n const iterator = val.entries();\n let current = iterator.next();\n\n if (!current.done) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n while (!current.done) {\n const key = print(current.value[0], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n const value = print(current.value[1], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n result += innerIndent + key + ' => ' + value;\n\n current = iterator.next();\n\n if (!current.done) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printObject(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n const constructor = min ? '' : (val.constructor ? val.constructor.name + ' ' : 'Object ');\n let result = constructor + '{';\n let keys = Object.keys(val).sort();\n const symbols = getSymbols(val);\n\n if (symbols.length) {\n keys = keys\n .filter(key => !(typeof key === 'symbol' || toString.call(key) === '[object Symbol]'))\n .concat(symbols);\n }\n\n if (keys.length) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const name = print(key, indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n const value = print(val[key], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n result += innerIndent + name + ': ' + value;\n\n if (i < keys.length - 1) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printSet(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let result = 'Set {';\n const iterator = val.entries();\n let current = iterator.next();\n\n if (!current.done) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n while (!current.done) {\n result += innerIndent + print(current.value[1], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n current = iterator.next();\n\n if (!current.done) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n refs = refs.slice();\n if (refs.indexOf(val) > -1) {\n return '[Circular]';\n } else {\n refs.push(val);\n }\n\n currentDepth++;\n\n const hitMaxDepth = currentDepth > maxDepth;\n\n if (!hitMaxDepth && val.toJSON && typeof val.toJSON === 'function') {\n return print(val.toJSON(), indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n\n const toStringed = toString.call(val);\n if (toStringed === '[object Arguments]') {\n return hitMaxDepth ? '[Arguments]' : printArguments(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (isToStringedArrayType(toStringed)) {\n return hitMaxDepth ? '[Array]' : printArray(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (toStringed === '[object Map]') {\n return hitMaxDepth ? '[Map]' : printMap(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (toStringed === '[object Set]') {\n return hitMaxDepth ? '[Set]' : printSet(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (typeof val === 'object') {\n return hitMaxDepth ? '[Object]' : printObject(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n}\n\nfunction printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let match = false;\n let plugin;\n\n for (let p = 0; p < plugins.length; p++) {\n plugin = plugins[p];\n\n if (plugin.test(val)) {\n match = true;\n break;\n }\n }\n\n if (!match) {\n return false;\n }\n\n function boundPrint(val) {\n return print(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n\n function boundIndent(str) {\n const indentation = prevIndent + indent;\n return indentation + str.replace(NEWLINE_REGEXP, '\\n' + indentation);\n }\n\n return plugin.print(val, boundPrint, boundIndent, {\n edgeSpacing: edgeSpacing,\n spacing: spacing\n });\n}\n\nfunction print(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n const basic = printBasicValue(val);\n if (basic) return basic;\n\n const plugin = printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n if (plugin) return plugin;\n\n return printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nconst DEFAULTS = {\n indent: 2,\n min: false,\n maxDepth: Infinity,\n plugins: []\n};\n\nfunction validateOptions(opts) {\n Object.keys(opts).forEach(key => {\n if (!DEFAULTS.hasOwnProperty(key)) {\n throw new Error('prettyFormat: Invalid option: ' + key);\n }\n });\n\n if (opts.min && opts.indent !== undefined && opts.indent !== 0) {\n throw new Error('prettyFormat: Cannot run with min option and indent');\n }\n}\n\nfunction normalizeOptions(opts) {\n const result = {};\n\n Object.keys(DEFAULTS).forEach(key =>\n result[key] = opts.hasOwnProperty(key) ? opts[key] : DEFAULTS[key]\n );\n\n if (result.min) {\n result.indent = 0;\n }\n\n return result;\n}\n\nfunction createIndent(indent) {\n return new Array(indent + 1).join(' ');\n}\n\nfunction prettyFormat(val, opts) {\n if (!opts) {\n opts = DEFAULTS;\n } else {\n validateOptions(opts)\n opts = normalizeOptions(opts);\n }\n\n let indent;\n let refs;\n const prevIndent = '';\n const currentDepth = 0;\n const spacing = opts.min ? ' ' : '\\n';\n const edgeSpacing = opts.min ? '' : '\\n';\n\n if (opts && opts.plugins.length) {\n indent = createIndent(opts.indent);\n refs = [];\n var pluginsResult = printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, opts.maxDepth, currentDepth, opts.plugins, opts.min);\n if (pluginsResult) return pluginsResult;\n }\n\n var basicResult = printBasicValue(val);\n if (basicResult) return basicResult;\n\n if (!indent) indent = createIndent(opts.indent);\n if (!refs) refs = [];\n return printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, opts.maxDepth, currentDepth, opts.plugins, opts.min);\n}\n\nmodule.exports = prettyFormat;\n","import './polyfills';\nimport renderToString from './index';\nimport { indent, encodeEntities } from './util';\nimport prettyFormat from 'pretty-format';\n\n// we have to patch in Array support, Possible issue in npm.im/pretty-format\nlet preactPlugin = {\n\ttest(object) {\n\t\treturn (\n\t\t\tobject &&\n\t\t\ttypeof object === 'object' &&\n\t\t\t'type' in object &&\n\t\t\t'props' in object &&\n\t\t\t'key' in object\n\t\t);\n\t},\n\tprint(val, print, indent) {\n\t\treturn renderToString(val, preactPlugin.context, preactPlugin.opts, true);\n\t}\n};\n\nlet prettyFormatOpts = {\n\tplugins: [preactPlugin]\n};\n\nfunction attributeHook(name, value, context, opts, isComponent) {\n\tlet type = typeof value;\n\n\t// Use render-to-string's built-in handling for these properties\n\tif (name === 'dangerouslySetInnerHTML') return false;\n\n\t// always skip null & undefined values, skip false DOM attributes, skip functions if told to\n\tif (value == null || (type === 'function' && !opts.functions)) return '';\n\n\tif (\n\t\topts.skipFalseAttributes &&\n\t\t!isComponent &&\n\t\t(value === false ||\n\t\t\t((name === 'class' || name === 'style') && value === ''))\n\t)\n\t\treturn '';\n\n\tlet indentChar = typeof opts.pretty === 'string' ? opts.pretty : '\\t';\n\tif (type !== 'string') {\n\t\tif (type === 'function' && !opts.functionNames) {\n\t\t\tvalue = 'Function';\n\t\t} else {\n\t\t\tpreactPlugin.context = context;\n\t\t\tpreactPlugin.opts = opts;\n\t\t\tvalue = prettyFormat(value, prettyFormatOpts);\n\t\t\tif (~value.indexOf('\\n')) {\n\t\t\t\tvalue = `${indent('\\n' + value, indentChar)}\\n`;\n\t\t\t}\n\t\t}\n\t\treturn indent(`\\n${name}={${value}}`, indentChar);\n\t}\n\treturn `\\n${indentChar}${name}=\"${encodeEntities(value)}\"`;\n}\n\nlet defaultOpts = {\n\tattributeHook,\n\tjsx: true,\n\txml: false,\n\tfunctions: true,\n\tfunctionNames: true,\n\tskipFalseAttributes: true,\n\tpretty: ' '\n};\n\nfunction renderToJsxString(vnode, context, opts, inner) {\n\topts = Object.assign({}, defaultOpts, opts || {});\n\treturn renderToString(vnode, context, opts, inner);\n}\n\nexport default renderToJsxString;\nexport { renderToJsxString as render };\n"],"names":["Symbol","c","s","IS_NON_DIMENSIONAL","VOID_ELEMENTS","UNSAFE_NAME","XLINK","ENCODED_ENTITIES","encodeEntities","str","test","last","i","out","ch","length","charCodeAt","slice","indent","char","String","replace","isLargeString","ignoreLines","indexOf","JS_TO_CSS","CSS_REGEX","styleObjToCss","prop","val","toLowerCase","undefined","getChildren","accumulator","children","Array","isArray","reduce","push","markAsDirty","this","__d","createComponent","vnode","context","__v","props","setState","forceUpdate","__h","getContext","nodeName","cxType","contextType","provider","__c","value","__","UNNAMED","_renderToStringPretty","opts","inner","isSvgMode","selectValue","pretty","indentChar","rendered","component","type","isComponent","shallow","renderRootComponent","Fragment","shallowHighOrder","options","__b","renderHook","__r","prototype","render","cctx","_dirty","state","_nextState","__s","getDerivedStateFromProps","Object","assign","componentWillMount","count","call","getChildContext","diffed","displayName","Function","name","toString","match","index","getFallbackComponentName","propChildren","html","attrs","keys","sortAttributes","sort","v","allAttributes","hooked","attributeHook","__html","xml","selected","sub","Error","isVoid","voidElements","pieces","hasLarge","lastWasText","child","ret","isText","join","substring","SHALLOW","renderToString","EMPTY_ARR","res","previousSkipEffects","_renderToString","normalizePropName","normalizePropValue","renderClassComponent","renderFunctionComponent","startElement","hasChildren","shallowRender","ESCAPED_CHARACTERS","toISOString","Date","errorToString","regExpToString","RegExp","symbolToString","SYMBOL_REGEXP","NEWLINE_REGEXP","getSymbols","getOwnPropertySymbols","obj","isToStringedArrayType","toStringed","printFunction","printSymbol","printError","printBasicValue","typeOf","printNumber","printString","min","constructor","printList","list","prevIndent","spacing","edgeSpacing","refs","maxDepth","currentDepth","plugins","body","innerIndent","print","printComplexValue","hitMaxDepth","toJSON","printArguments","printArray","result","iterator","entries","current","next","done","printMap","printSet","symbols","filter","key","concat","printObject","printPlugin","plugin","p","indentation","DEFAULTS","Infinity","createIndent","preactPlugin","object","prettyFormatOpts","defaultOpts","functions","skipFalseAttributes","functionNames","forEach","hasOwnProperty","validateOptions","normalizeOptions","pluginsResult","prettyFormat","jsx","renderToJsxString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jsx.module.js","sources":["../src/polyfills.js","../src/util.js","../src/pretty.js","../src/index.js","../node_modules/pretty-format/printString.js","../node_modules/pretty-format/index.js","../src/jsx.js"],"sourcesContent":["if (typeof Symbol !== 'function') {\n\tlet c = 0;\n\t// eslint-disable-next-line\n\tSymbol = function (s) {\n\t\treturn `@@${s}${++c}`;\n\t};\n\tSymbol.for = (s) => `@@${s}`;\n}\n","// DOM properties that should NOT have \"px\" added when numeric\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i;\nexport const VOID_ELEMENTS = /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;\nexport const UNSAFE_NAME = /[\\s\\n\\\\/='\"\\0<>]/;\nexport const XLINK = /^xlink:?./;\n\nconst ENCODED_ENTITIES = /[\"&<]/;\n\nexport function encodeEntities(str) {\n\t// Ensure we're always parsing and returning a string:\n\tstr += '';\n\n\t// Skip all work for strings with no entities needing encoding:\n\tif (ENCODED_ENTITIES.test(str) === false) return str;\n\n\tlet last = 0,\n\t\ti = 0,\n\t\tout = '',\n\t\tch = '';\n\n\t// Seek forward in str until the next entity char:\n\tfor (; i < str.length; i++) {\n\t\tswitch (str.charCodeAt(i)) {\n\t\t\tcase 34:\n\t\t\t\tch = '"';\n\t\t\t\tbreak;\n\t\t\tcase 38:\n\t\t\t\tch = '&';\n\t\t\t\tbreak;\n\t\t\tcase 60:\n\t\t\t\tch = '<';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcontinue;\n\t\t}\n\t\t// Append skipped/buffered characters and the encoded entity:\n\t\tif (i !== last) out += str.slice(last, i);\n\t\tout += ch;\n\t\t// Start the next seek/buffer after the entity's offset:\n\t\tlast = i + 1;\n\t}\n\tif (i !== last) out += str.slice(last, i);\n\treturn out;\n}\n\nexport let indent = (s, char) =>\n\tString(s).replace(/(\\n+)/g, '$1' + (char || '\\t'));\n\nexport let isLargeString = (s, length, ignoreLines) =>\n\tString(s).length > (length || 40) ||\n\t(!ignoreLines && String(s).indexOf('\\n') !== -1) ||\n\tString(s).indexOf('<') !== -1;\n\nconst JS_TO_CSS = {};\n\nconst CSS_REGEX = /([A-Z])/g;\n// Convert an Object style to a CSSText string\nexport function styleObjToCss(s) {\n\tlet str = '';\n\tfor (let prop in s) {\n\t\tlet val = s[prop];\n\t\tif (val != null && val !== '') {\n\t\t\tif (str) str += ' ';\n\t\t\t// str += jsToCss(prop);\n\t\t\tstr +=\n\t\t\t\tprop[0] == '-'\n\t\t\t\t\t? prop\n\t\t\t\t\t: JS_TO_CSS[prop] ||\n\t\t\t\t\t (JS_TO_CSS[prop] = prop.replace(CSS_REGEX, '-$1').toLowerCase());\n\n\t\t\tif (typeof val === 'number' && IS_NON_DIMENSIONAL.test(prop) === false) {\n\t\t\t\tstr = str + ': ' + val + 'px;';\n\t\t\t} else {\n\t\t\t\tstr = str + ': ' + val + ';';\n\t\t\t}\n\t\t}\n\t}\n\treturn str || undefined;\n}\n\n/**\n * Get flattened children from the children prop\n * @param {Array} accumulator\n * @param {any} children A `props.children` opaque object.\n * @returns {Array} accumulator\n * @private\n */\nexport function getChildren(accumulator, children) {\n\tif (Array.isArray(children)) {\n\t\tchildren.reduce(getChildren, accumulator);\n\t} else if (children != null && children !== false) {\n\t\taccumulator.push(children);\n\t}\n\treturn accumulator;\n}\n\nfunction markAsDirty() {\n\tthis.__d = true;\n}\n\nexport function createComponent(vnode, context) {\n\treturn {\n\t\t__v: vnode,\n\t\tcontext,\n\t\tprops: vnode.props,\n\t\t// silently drop state updates\n\t\tsetState: markAsDirty,\n\t\tforceUpdate: markAsDirty,\n\t\t__d: true,\n\t\t// hooks\n\t\t__h: []\n\t};\n}\n\n// Necessary for createContext api. Setting this property will pass\n// the context value as `this.context` just for this component.\nexport function getContext(nodeName, context) {\n\tlet cxType = nodeName.contextType;\n\tlet provider = cxType && context[cxType.__c];\n\treturn cxType != null\n\t\t? provider\n\t\t\t? provider.props.value\n\t\t\t: cxType.__\n\t\t: context;\n}\n","import {\n\tencodeEntities,\n\tindent,\n\tisLargeString,\n\tstyleObjToCss,\n\tgetChildren,\n\tcreateComponent,\n\tgetContext,\n\tUNSAFE_NAME,\n\tXLINK,\n\tVOID_ELEMENTS\n} from './util';\nimport { options, Fragment } from 'preact';\n\n// components without names, kept as a hash for later comparison to return consistent UnnamedComponentXX names.\nconst UNNAMED = [];\n\nexport function _renderToStringPretty(\n\tvnode,\n\tcontext,\n\topts,\n\tinner,\n\tisSvgMode,\n\tselectValue\n) {\n\tif (vnode == null || typeof vnode === 'boolean') {\n\t\treturn '';\n\t}\n\n\t// #text nodes\n\tif (typeof vnode !== 'object') {\n\t\tif (typeof vnode === 'function') return '';\n\t\treturn encodeEntities(vnode);\n\t}\n\n\tlet pretty = opts.pretty,\n\t\tindentChar = pretty && typeof pretty === 'string' ? pretty : '\\t';\n\n\tif (Array.isArray(vnode)) {\n\t\tlet rendered = '';\n\t\tfor (let i = 0; i < vnode.length; i++) {\n\t\t\tif (pretty && i > 0) rendered = rendered + '\\n';\n\t\t\trendered =\n\t\t\t\trendered +\n\t\t\t\t_renderToStringPretty(\n\t\t\t\t\tvnode[i],\n\t\t\t\t\tcontext,\n\t\t\t\t\topts,\n\t\t\t\t\tinner,\n\t\t\t\t\tisSvgMode,\n\t\t\t\t\tselectValue\n\t\t\t\t);\n\t\t}\n\t\treturn rendered;\n\t}\n\n\t// VNodes have {constructor:undefined} to prevent JSON injection:\n\tif (vnode.constructor !== undefined) return '';\n\n\tlet nodeName = vnode.type,\n\t\tprops = vnode.props,\n\t\tisComponent = false;\n\n\t// components\n\tif (typeof nodeName === 'function') {\n\t\tisComponent = true;\n\t\tif (opts.shallow && (inner || opts.renderRootComponent === false)) {\n\t\t\tnodeName = getComponentName(nodeName);\n\t\t} else if (nodeName === Fragment) {\n\t\t\tconst children = [];\n\t\t\tgetChildren(children, vnode.props.children);\n\t\t\treturn _renderToStringPretty(\n\t\t\t\tchildren,\n\t\t\t\tcontext,\n\t\t\t\topts,\n\t\t\t\topts.shallowHighOrder !== false,\n\t\t\t\tisSvgMode,\n\t\t\t\tselectValue\n\t\t\t);\n\t\t} else {\n\t\t\tlet rendered;\n\n\t\t\tlet c = (vnode.__c = createComponent(vnode, context));\n\n\t\t\t// options._diff\n\t\t\tif (options.__b) options.__b(vnode);\n\n\t\t\t// options._render\n\t\t\tlet renderHook = options.__r;\n\n\t\t\tif (\n\t\t\t\t!nodeName.prototype ||\n\t\t\t\ttypeof nodeName.prototype.render !== 'function'\n\t\t\t) {\n\t\t\t\tlet cctx = getContext(nodeName, context);\n\n\t\t\t\t// If a hook invokes setState() to invalidate the component during rendering,\n\t\t\t\t// re-render it up to 25 times to allow \"settling\" of memoized states.\n\t\t\t\t// Note:\n\t\t\t\t// This will need to be updated for Preact 11 to use internal.flags rather than component._dirty:\n\t\t\t\t// https://github.com/preactjs/preact/blob/d4ca6fdb19bc715e49fd144e69f7296b2f4daa40/src/diff/component.js#L35-L44\n\t\t\t\tlet count = 0;\n\t\t\t\twhile (c.__d && count++ < 25) {\n\t\t\t\t\tc.__d = false;\n\n\t\t\t\t\tif (renderHook) renderHook(vnode);\n\n\t\t\t\t\t// stateless functional components\n\t\t\t\t\trendered = nodeName.call(vnode.__c, props, cctx);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet cctx = getContext(nodeName, context);\n\n\t\t\t\t// c = new nodeName(props, context);\n\t\t\t\tc = vnode.__c = new nodeName(props, cctx);\n\t\t\t\tc.__v = vnode;\n\t\t\t\t// turn off stateful re-rendering:\n\t\t\t\tc._dirty = c.__d = true;\n\t\t\t\tc.props = props;\n\t\t\t\tif (c.state == null) c.state = {};\n\n\t\t\t\tif (c._nextState == null && c.__s == null) {\n\t\t\t\t\tc._nextState = c.__s = c.state;\n\t\t\t\t}\n\n\t\t\t\tc.context = cctx;\n\t\t\t\tif (nodeName.getDerivedStateFromProps)\n\t\t\t\t\tc.state = Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tc.state,\n\t\t\t\t\t\tnodeName.getDerivedStateFromProps(c.props, c.state)\n\t\t\t\t\t);\n\t\t\t\telse if (c.componentWillMount) {\n\t\t\t\t\tc.componentWillMount();\n\n\t\t\t\t\t// If the user called setState in cWM we need to flush pending,\n\t\t\t\t\t// state updates. This is the same behaviour in React.\n\t\t\t\t\tc.state =\n\t\t\t\t\t\tc._nextState !== c.state\n\t\t\t\t\t\t\t? c._nextState\n\t\t\t\t\t\t\t: c.__s !== c.state\n\t\t\t\t\t\t\t? c.__s\n\t\t\t\t\t\t\t: c.state;\n\t\t\t\t}\n\n\t\t\t\tif (renderHook) renderHook(vnode);\n\n\t\t\t\trendered = c.render(c.props, c.state, c.context);\n\t\t\t}\n\n\t\t\tif (c.getChildContext) {\n\t\t\t\tcontext = Object.assign({}, context, c.getChildContext());\n\t\t\t}\n\n\t\t\tif (options.diffed) options.diffed(vnode);\n\t\t\treturn _renderToStringPretty(\n\t\t\t\trendered,\n\t\t\t\tcontext,\n\t\t\t\topts,\n\t\t\t\topts.shallowHighOrder !== false,\n\t\t\t\tisSvgMode,\n\t\t\t\tselectValue\n\t\t\t);\n\t\t}\n\t}\n\n\t// render JSX to HTML\n\tlet s = '<' + nodeName,\n\t\tpropChildren,\n\t\thtml;\n\n\tif (props) {\n\t\tlet attrs = Object.keys(props);\n\n\t\t// allow sorting lexicographically for more determinism (useful for tests, such as via preact-jsx-chai)\n\t\tif (opts && opts.sortAttributes === true) attrs.sort();\n\n\t\tfor (let i = 0; i < attrs.length; i++) {\n\t\t\tlet name = attrs[i],\n\t\t\t\tv = props[name];\n\t\t\tif (name === 'children') {\n\t\t\t\tpropChildren = v;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (UNSAFE_NAME.test(name)) continue;\n\n\t\t\tif (\n\t\t\t\t!(opts && opts.allAttributes) &&\n\t\t\t\t(name === 'key' ||\n\t\t\t\t\tname === 'ref' ||\n\t\t\t\t\tname === '__self' ||\n\t\t\t\t\tname === '__source')\n\t\t\t)\n\t\t\t\tcontinue;\n\n\t\t\tif (name === 'defaultValue') {\n\t\t\t\tname = 'value';\n\t\t\t} else if (name === 'defaultChecked') {\n\t\t\t\tname = 'checked';\n\t\t\t} else if (name === 'defaultSelected') {\n\t\t\t\tname = 'selected';\n\t\t\t} else if (name === 'className') {\n\t\t\t\tif (typeof props.class !== 'undefined') continue;\n\t\t\t\tname = 'class';\n\t\t\t} else if (isSvgMode && XLINK.test(name)) {\n\t\t\t\tname = name.toLowerCase().replace(/^xlink:?/, 'xlink:');\n\t\t\t}\n\n\t\t\tif (name === 'htmlFor') {\n\t\t\t\tif (props.for) continue;\n\t\t\t\tname = 'for';\n\t\t\t}\n\n\t\t\tif (name === 'style' && v && typeof v === 'object') {\n\t\t\t\tv = styleObjToCss(v);\n\t\t\t}\n\n\t\t\t// always use string values instead of booleans for aria attributes\n\t\t\t// also see https://github.com/preactjs/preact/pull/2347/files\n\t\t\tif (name[0] === 'a' && name['1'] === 'r' && typeof v === 'boolean') {\n\t\t\t\tv = String(v);\n\t\t\t}\n\n\t\t\tlet hooked =\n\t\t\t\topts.attributeHook &&\n\t\t\t\topts.attributeHook(name, v, context, opts, isComponent);\n\t\t\tif (hooked || hooked === '') {\n\t\t\t\ts = s + hooked;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (name === 'dangerouslySetInnerHTML') {\n\t\t\t\thtml = v && v.__html;\n\t\t\t} else if (nodeName === 'textarea' && name === 'value') {\n\t\t\t\t// <textarea value=\"a&b\"> --> <textarea>a&b</textarea>\n\t\t\t\tpropChildren = v;\n\t\t\t} else if ((v || v === 0 || v === '') && typeof v !== 'function') {\n\t\t\t\tif (v === true || v === '') {\n\t\t\t\t\tv = name;\n\t\t\t\t\t// in non-xml mode, allow boolean attributes\n\t\t\t\t\tif (!opts || !opts.xml) {\n\t\t\t\t\t\ts = s + ' ' + name;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (name === 'value') {\n\t\t\t\t\tif (nodeName === 'select') {\n\t\t\t\t\t\tselectValue = v;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t// If we're looking at an <option> and it's the currently selected one\n\t\t\t\t\t\tnodeName === 'option' &&\n\t\t\t\t\t\tselectValue == v &&\n\t\t\t\t\t\t// and the <option> doesn't already have a selected attribute on it\n\t\t\t\t\t\ttypeof props.selected === 'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\ts = s + ` selected`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts = s + ` ${name}=\"${encodeEntities(v)}\"`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// account for >1 multiline attribute\n\tif (pretty) {\n\t\tlet sub = s.replace(/\\n\\s*/, ' ');\n\t\tif (sub !== s && !~sub.indexOf('\\n')) s = sub;\n\t\telse if (pretty && ~s.indexOf('\\n')) s = s + '\\n';\n\t}\n\n\ts = s + '>';\n\n\tif (UNSAFE_NAME.test(nodeName))\n\t\tthrow new Error(`${nodeName} is not a valid HTML tag name in ${s}`);\n\n\tlet isVoid =\n\t\tVOID_ELEMENTS.test(nodeName) ||\n\t\t(opts.voidElements && opts.voidElements.test(nodeName));\n\tlet pieces = [];\n\n\tlet children;\n\tif (html) {\n\t\t// if multiline, indent.\n\t\tif (pretty && isLargeString(html)) {\n\t\t\thtml = '\\n' + indentChar + indent(html, indentChar);\n\t\t}\n\t\ts = s + html;\n\t} else if (\n\t\tpropChildren != null &&\n\t\tgetChildren((children = []), propChildren).length\n\t) {\n\t\tlet hasLarge = pretty && ~s.indexOf('\\n');\n\t\tlet lastWasText = false;\n\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tlet child = children[i];\n\n\t\t\tif (child != null && child !== false) {\n\t\t\t\tlet childSvgMode =\n\t\t\t\t\t\tnodeName === 'svg'\n\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t: nodeName === 'foreignObject'\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: isSvgMode,\n\t\t\t\t\tret = _renderToStringPretty(\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tchildSvgMode,\n\t\t\t\t\t\tselectValue\n\t\t\t\t\t);\n\n\t\t\t\tif (pretty && !hasLarge && isLargeString(ret)) hasLarge = true;\n\n\t\t\t\t// Skip if we received an empty string\n\t\t\t\tif (ret) {\n\t\t\t\t\tif (pretty) {\n\t\t\t\t\t\tlet isText = ret.length > 0 && ret[0] != '<';\n\n\t\t\t\t\t\t// We merge adjacent text nodes, otherwise each piece would be printed\n\t\t\t\t\t\t// on a new line.\n\t\t\t\t\t\tif (lastWasText && isText) {\n\t\t\t\t\t\t\tpieces[pieces.length - 1] += ret;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpieces.push(ret);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastWasText = isText;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpieces.push(ret);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pretty && hasLarge) {\n\t\t\tfor (let i = pieces.length; i--; ) {\n\t\t\t\tpieces[i] = '\\n' + indentChar + indent(pieces[i], indentChar);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pieces.length || html) {\n\t\ts = s + pieces.join('');\n\t} else if (opts && opts.xml) {\n\t\treturn s.substring(0, s.length - 1) + ' />';\n\t}\n\n\tif (isVoid && !children && !html) {\n\t\ts = s.replace(/>$/, ' />');\n\t} else {\n\t\tif (pretty && ~s.indexOf('\\n')) s = s + '\\n';\n\t\ts = s + `</${nodeName}>`;\n\t}\n\n\treturn s;\n}\n\nfunction getComponentName(component) {\n\treturn (\n\t\tcomponent.displayName ||\n\t\t(component !== Function && component.name) ||\n\t\tgetFallbackComponentName(component)\n\t);\n}\n\nfunction getFallbackComponentName(component) {\n\tlet str = Function.prototype.toString.call(component),\n\t\tname = (str.match(/^\\s*function\\s+([^( ]+)/) || '')[1];\n\tif (!name) {\n\t\t// search for an existing indexed name for the given component:\n\t\tlet index = -1;\n\t\tfor (let i = UNNAMED.length; i--; ) {\n\t\t\tif (UNNAMED[i] === component) {\n\t\t\t\tindex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// not found, create a new indexed name:\n\t\tif (index < 0) {\n\t\t\tindex = UNNAMED.push(component) - 1;\n\t\t}\n\t\tname = `UnnamedComponent${index}`;\n\t}\n\treturn name;\n}\n","import {\n\tencodeEntities,\n\tstyleObjToCss,\n\tgetContext,\n\tcreateComponent,\n\tUNSAFE_NAME,\n\tXLINK,\n\tVOID_ELEMENTS\n} from './util';\nimport { options, h, Fragment } from 'preact';\nimport { _renderToStringPretty } from './pretty';\nimport {\n\tCOMMIT,\n\tCOMPONENT,\n\tDIFF,\n\tDIFFED,\n\tDIRTY,\n\tNEXT_STATE,\n\tPARENT,\n\tRENDER,\n\tSKIP_EFFECTS,\n\tVNODE,\n\tCHILDREN\n} from './constants';\n\n/** @typedef {import('preact').VNode} VNode */\n\nconst SHALLOW = { shallow: true };\n\n/** Render Preact JSX + Components to an HTML string.\n *\t@name render\n *\t@function\n *\t@param {VNode} vnode\tJSX VNode to render.\n *\t@param {Object} [context={}]\tOptionally pass an initial context object through the render path.\n *\t@param {Object} [options={}]\tRendering options\n *\t@param {Boolean} [options.shallow=false]\tIf `true`, renders nested Components as HTML elements (`<Foo a=\"b\" />`).\n *\t@param {Boolean} [options.xml=false]\t\tIf `true`, uses self-closing tags for elements without children.\n *\t@param {Boolean} [options.pretty=false]\t\tIf `true`, adds whitespace for readability\n *\t@param {RegExp|undefined} [options.voidElements] RegeEx that matches elements that are considered void (self-closing)\n */\nrenderToString.render = renderToString;\n\n/** Only render elements, leaving Components inline as `<ComponentName ... />`.\n *\tThis method is just a convenience alias for `render(vnode, context, { shallow:true })`\n *\t@name shallow\n *\t@function\n *\t@param {VNode} vnode\tJSX VNode to render.\n *\t@param {Object} [context={}]\tOptionally pass an initial context object through the render path.\n */\nlet shallowRender = (vnode, context) => renderToString(vnode, context, SHALLOW);\n\nconst EMPTY_ARR = [];\nfunction renderToString(vnode, context, opts) {\n\tcontext = context || {};\n\n\t// Performance optimization: `renderToString` is synchronous and we\n\t// therefore don't execute any effects. To do that we pass an empty\n\t// array to `options._commit` (`__c`). But we can go one step further\n\t// and avoid a lot of dirty checks and allocations by setting\n\t// `options._skipEffects` (`__s`) too.\n\tconst previousSkipEffects = options[SKIP_EFFECTS];\n\toptions[SKIP_EFFECTS] = true;\n\n\tconst parent = h(Fragment, null);\n\tparent[CHILDREN] = [vnode];\n\n\tlet res;\n\tif (\n\t\topts &&\n\t\t(opts.pretty ||\n\t\t\topts.voidElements ||\n\t\t\topts.sortAttributes ||\n\t\t\topts.shallow ||\n\t\t\topts.allAttributes ||\n\t\t\topts.xml ||\n\t\t\topts.attributeHook)\n\t) {\n\t\tres = _renderToStringPretty(vnode, context, opts);\n\t} else {\n\t\tres = _renderToString(vnode, context, false, undefined, parent);\n\t}\n\n\t// options._commit, we don't schedule any effects in this library right now,\n\t// so we can pass an empty queue to this hook.\n\tif (options[COMMIT]) options[COMMIT](vnode, EMPTY_ARR);\n\toptions[SKIP_EFFECTS] = previousSkipEffects;\n\tEMPTY_ARR.length = 0;\n\n\treturn res;\n}\n\nfunction renderFunctionComponent(vnode, context) {\n\tlet rendered,\n\t\tc = createComponent(vnode, context),\n\t\tcctx = getContext(vnode.type, context);\n\n\tvnode[COMPONENT] = c;\n\n\t// If a hook invokes setState() to invalidate the component during rendering,\n\t// re-render it up to 25 times to allow \"settling\" of memoized states.\n\t// Note:\n\t// This will need to be updated for Preact 11 to use internal.flags rather than component._dirty:\n\t// https://github.com/preactjs/preact/blob/d4ca6fdb19bc715e49fd144e69f7296b2f4daa40/src/diff/component.js#L35-L44\n\tlet renderHook = options[RENDER];\n\tlet count = 0;\n\twhile (c[DIRTY] && count++ < 25) {\n\t\tc[DIRTY] = false;\n\n\t\tif (renderHook) renderHook(vnode);\n\n\t\t// stateless functional components\n\t\trendered = vnode.type.call(c, vnode.props, cctx);\n\t}\n\n\treturn rendered;\n}\n\nfunction renderClassComponent(vnode, context) {\n\tlet nodeName = vnode.type,\n\t\tcctx = getContext(nodeName, context);\n\n\t// c = new nodeName(props, context);\n\tlet c = new nodeName(vnode.props, cctx);\n\tvnode[COMPONENT] = c;\n\tc[VNODE] = vnode;\n\t// turn off stateful re-rendering:\n\tc[DIRTY] = true;\n\tc.props = vnode.props;\n\tif (c.state == null) c.state = {};\n\n\tif (c[NEXT_STATE] == null) {\n\t\tc[NEXT_STATE] = c.state;\n\t}\n\n\tc.context = cctx;\n\tif (nodeName.getDerivedStateFromProps) {\n\t\tc.state = assign(\n\t\t\t{},\n\t\t\tc.state,\n\t\t\tnodeName.getDerivedStateFromProps(c.props, c.state)\n\t\t);\n\t} else if (c.componentWillMount) {\n\t\tc.componentWillMount();\n\n\t\t// If the user called setState in cWM we need to flush pending,\n\t\t// state updates. This is the same behaviour in React.\n\t\tc.state = c[NEXT_STATE] !== c.state ? c[NEXT_STATE] : c.state;\n\t}\n\n\tlet renderHook = options[RENDER];\n\tif (renderHook) renderHook(vnode);\n\n\treturn c.render(c.props, c.state, c.context);\n}\n\nfunction normalizePropName(name, isSvgMode) {\n\tif (name === 'className') {\n\t\treturn 'class';\n\t} else if (name === 'htmlFor') {\n\t\treturn 'for';\n\t} else if (name === 'defaultValue') {\n\t\treturn 'value';\n\t} else if (name === 'defaultChecked') {\n\t\treturn 'checked';\n\t} else if (name === 'defaultSelected') {\n\t\treturn 'selected';\n\t} else if (isSvgMode && XLINK.test(name)) {\n\t\treturn name.toLowerCase().replace(/^xlink:?/, 'xlink:');\n\t}\n\n\treturn name;\n}\n\nfunction normalizePropValue(name, v) {\n\tif (name === 'style' && v != null && typeof v === 'object') {\n\t\treturn styleObjToCss(v);\n\t} else if (name[0] === 'a' && name[1] === 'r' && typeof v === 'boolean') {\n\t\t// always use string values instead of booleans for aria attributes\n\t\t// also see https://github.com/preactjs/preact/pull/2347/files\n\t\treturn String(v);\n\t}\n\n\treturn v;\n}\n\nconst isArray = Array.isArray;\nconst assign = Object.assign;\n\n/** The default export is an alias of `render()`. */\nfunction _renderToString(vnode, context, isSvgMode, selectValue, parent) {\n\t// Ignore non-rendered VNodes/values\n\tif (vnode == null || vnode === true || vnode === false || vnode === '') {\n\t\treturn '';\n\t}\n\n\t// Text VNodes: escape as HTML\n\tif (typeof vnode !== 'object') {\n\t\tif (typeof vnode === 'function') return '';\n\t\treturn encodeEntities(vnode);\n\t}\n\n\t// Recurse into children / Arrays\n\tif (isArray(vnode)) {\n\t\tlet rendered = '';\n\t\tparent[CHILDREN] = vnode;\n\t\tfor (let i = 0; i < vnode.length; i++) {\n\t\t\trendered =\n\t\t\t\trendered +\n\t\t\t\t_renderToString(vnode[i], context, isSvgMode, selectValue, parent);\n\t\t}\n\t\treturn rendered;\n\t}\n\n\t// VNodes have {constructor:undefined} to prevent JSON injection:\n\tif (vnode.constructor !== undefined) return '';\n\n\tvnode[PARENT] = parent;\n\tif (options[DIFF]) options[DIFF](vnode);\n\n\tlet type = vnode.type,\n\t\tprops = vnode.props;\n\n\t// Invoke rendering on Components\n\tconst isComponent = typeof type === 'function';\n\tif (isComponent) {\n\t\tlet rendered;\n\t\tif (type === Fragment) {\n\t\t\trendered = props.children;\n\t\t} else {\n\t\t\tif (type.prototype && typeof type.prototype.render === 'function') {\n\t\t\t\trendered = renderClassComponent(vnode, context);\n\t\t\t} else {\n\t\t\t\trendered = renderFunctionComponent(vnode, context);\n\t\t\t}\n\n\t\t\tlet component = vnode[COMPONENT];\n\t\t\tif (component.getChildContext) {\n\t\t\t\tcontext = assign({}, context, component.getChildContext());\n\t\t\t}\n\t\t}\n\n\t\t// When a component returns a Fragment node we flatten it in core, so we\n\t\t// need to mirror that logic here too\n\t\tlet isTopLevelFragment =\n\t\t\trendered != null && rendered.type === Fragment && rendered.key == null;\n\t\trendered = isTopLevelFragment ? rendered.props.children : rendered;\n\n\t\t// Recurse into children before invoking the after-diff hook\n\t\tconst str = _renderToString(\n\t\t\trendered,\n\t\t\tcontext,\n\t\t\tisSvgMode,\n\t\t\tselectValue,\n\t\t\tvnode\n\t\t);\n\n\t\tif (options[DIFFED]) options[DIFFED](vnode);\n\t\tvnode[PARENT] = undefined;\n\n\t\tif (options.unmount) options.unmount(vnode);\n\n\t\treturn str;\n\t}\n\n\t// Serialize Element VNodes to HTML\n\tlet s = '<',\n\t\tchildren,\n\t\thtml;\n\n\ts = s + type;\n\n\tif (props) {\n\t\tchildren = props.children;\n\t\tfor (let name in props) {\n\t\t\tlet v = props[name];\n\n\t\t\tif (\n\t\t\t\tname === 'key' ||\n\t\t\t\tname === 'ref' ||\n\t\t\t\tname === '__self' ||\n\t\t\t\tname === '__source' ||\n\t\t\t\tname === 'children' ||\n\t\t\t\t(name === 'className' && 'class' in props) ||\n\t\t\t\t(name === 'htmlFor' && 'for' in props)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (UNSAFE_NAME.test(name)) continue;\n\n\t\t\tname = normalizePropName(name, isSvgMode);\n\t\t\tv = normalizePropValue(name, v);\n\n\t\t\tif (name === 'dangerouslySetInnerHTML') {\n\t\t\t\thtml = v && v.__html;\n\t\t\t} else if (type === 'textarea' && name === 'value') {\n\t\t\t\t// <textarea value=\"a&b\"> --> <textarea>a&b</textarea>\n\t\t\t\tchildren = v;\n\t\t\t} else if ((v || v === 0 || v === '') && typeof v !== 'function') {\n\t\t\t\tif (v === true || v === '') {\n\t\t\t\t\tv = name;\n\t\t\t\t\ts = s + ' ' + name;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (name === 'value') {\n\t\t\t\t\tif (type === 'select') {\n\t\t\t\t\t\tselectValue = v;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t// If we're looking at an <option> and it's the currently selected one\n\t\t\t\t\t\ttype === 'option' &&\n\t\t\t\t\t\tselectValue == v &&\n\t\t\t\t\t\t// and the <option> doesn't already have a selected attribute on it\n\t\t\t\t\t\t!('selected' in props)\n\t\t\t\t\t) {\n\t\t\t\t\t\ts = s + ' selected';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts = s + ' ' + name + '=\"' + encodeEntities(v) + '\"';\n\t\t\t}\n\t\t}\n\t}\n\n\tlet startElement = s;\n\ts = s + '>';\n\n\tif (UNSAFE_NAME.test(type)) {\n\t\tthrow new Error(`${type} is not a valid HTML tag name in ${s}`);\n\t}\n\n\tlet pieces = '';\n\tlet hasChildren = false;\n\n\tif (html) {\n\t\tpieces = pieces + html;\n\t\thasChildren = true;\n\t} else if (typeof children === 'string') {\n\t\tpieces = pieces + encodeEntities(children);\n\t\thasChildren = true;\n\t} else if (isArray(children)) {\n\t\tvnode[CHILDREN] = children;\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tlet child = children[i];\n\t\t\tif (child != null && child !== false) {\n\t\t\t\tlet childSvgMode =\n\t\t\t\t\ttype === 'svg' || (type !== 'foreignObject' && isSvgMode);\n\t\t\t\tlet ret = _renderToString(\n\t\t\t\t\tchild,\n\t\t\t\t\tcontext,\n\t\t\t\t\tchildSvgMode,\n\t\t\t\t\tselectValue,\n\t\t\t\t\tvnode\n\t\t\t\t);\n\n\t\t\t\t// Skip if we received an empty string\n\t\t\t\tif (ret) {\n\t\t\t\t\tpieces = pieces + ret;\n\t\t\t\t\thasChildren = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (children != null && children !== false && children !== true) {\n\t\tvnode[CHILDREN] = [children];\n\t\tlet childSvgMode =\n\t\t\ttype === 'svg' || (type !== 'foreignObject' && isSvgMode);\n\t\tlet ret = _renderToString(\n\t\t\tchildren,\n\t\t\tcontext,\n\t\t\tchildSvgMode,\n\t\t\tselectValue,\n\t\t\tvnode\n\t\t);\n\n\t\t// Skip if we received an empty string\n\t\tif (ret) {\n\t\t\tpieces = pieces + ret;\n\t\t\thasChildren = true;\n\t\t}\n\t}\n\n\tif (options[DIFFED]) options[DIFFED](vnode);\n\tvnode[PARENT] = undefined;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif (hasChildren) {\n\t\ts = s + pieces;\n\t} else if (VOID_ELEMENTS.test(type)) {\n\t\treturn startElement + ' />';\n\t}\n\n\treturn s + '</' + type + '>';\n}\n\n/** The default export is an alias of `render()`. */\n\nrenderToString.shallowRender = shallowRender;\n\nexport default renderToString;\n\nexport {\n\trenderToString as render,\n\trenderToString as renderToStaticMarkup,\n\trenderToString,\n\tshallowRender\n};\n","'use strict';\n\nconst ESCAPED_CHARACTERS = /(\\\\|\\\"|\\')/g;\n\nmodule.exports = function printString(val) {\n return val.replace(ESCAPED_CHARACTERS, '\\\\$1');\n}\n","'use strict';\n\nconst printString = require('./printString');\n\nconst toString = Object.prototype.toString;\nconst toISOString = Date.prototype.toISOString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = Symbol.prototype.toString;\n\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nconst NEWLINE_REGEXP = /\\n/ig;\n\nconst getSymbols = Object.getOwnPropertySymbols || (obj => []);\n\nfunction isToStringedArrayType(toStringed) {\n return (\n toStringed === '[object Array]' ||\n toStringed === '[object ArrayBuffer]' ||\n toStringed === '[object DataView]' ||\n toStringed === '[object Float32Array]' ||\n toStringed === '[object Float64Array]' ||\n toStringed === '[object Int8Array]' ||\n toStringed === '[object Int16Array]' ||\n toStringed === '[object Int32Array]' ||\n toStringed === '[object Uint8Array]' ||\n toStringed === '[object Uint8ClampedArray]' ||\n toStringed === '[object Uint16Array]' ||\n toStringed === '[object Uint32Array]'\n );\n}\n\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && (1 / val) < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\n\nfunction printFunction(val) {\n if (val.name === '') {\n return '[Function anonymous]'\n } else {\n return '[Function ' + val.name + ']';\n }\n}\n\nfunction printSymbol(val) {\n return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n}\n\nfunction printError(val) {\n return '[' + errorToString.call(val) + ']';\n}\n\nfunction printBasicValue(val) {\n if (val === true || val === false) return '' + val;\n if (val === undefined) return 'undefined';\n if (val === null) return 'null';\n\n const typeOf = typeof val;\n\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return '\"' + printString(val) + '\"';\n if (typeOf === 'function') return printFunction(val);\n if (typeOf === 'symbol') return printSymbol(val);\n\n const toStringed = toString.call(val);\n\n if (toStringed === '[object WeakMap]') return 'WeakMap {}';\n if (toStringed === '[object WeakSet]') return 'WeakSet {}';\n if (toStringed === '[object Function]' || toStringed === '[object GeneratorFunction]') return printFunction(val, min);\n if (toStringed === '[object Symbol]') return printSymbol(val);\n if (toStringed === '[object Date]') return toISOString.call(val);\n if (toStringed === '[object Error]') return printError(val);\n if (toStringed === '[object RegExp]') return regExpToString.call(val);\n if (toStringed === '[object Arguments]' && val.length === 0) return 'Arguments []';\n if (isToStringedArrayType(toStringed) && val.length === 0) return val.constructor.name + ' []';\n\n if (val instanceof Error) return printError(val);\n\n return false;\n}\n\nfunction printList(list, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let body = '';\n\n if (list.length) {\n body += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n for (let i = 0; i < list.length; i++) {\n body += innerIndent + print(list[i], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n if (i < list.length - 1) {\n body += ',' + spacing;\n }\n }\n\n body += edgeSpacing + prevIndent;\n }\n\n return '[' + body + ']';\n}\n\nfunction printArguments(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n return (min ? '' : 'Arguments ') + printList(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nfunction printArray(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n return (min ? '' : val.constructor.name + ' ') + printList(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nfunction printMap(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let result = 'Map {';\n const iterator = val.entries();\n let current = iterator.next();\n\n if (!current.done) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n while (!current.done) {\n const key = print(current.value[0], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n const value = print(current.value[1], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n result += innerIndent + key + ' => ' + value;\n\n current = iterator.next();\n\n if (!current.done) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printObject(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n const constructor = min ? '' : (val.constructor ? val.constructor.name + ' ' : 'Object ');\n let result = constructor + '{';\n let keys = Object.keys(val).sort();\n const symbols = getSymbols(val);\n\n if (symbols.length) {\n keys = keys\n .filter(key => !(typeof key === 'symbol' || toString.call(key) === '[object Symbol]'))\n .concat(symbols);\n }\n\n if (keys.length) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const name = print(key, indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n const value = print(val[key], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n result += innerIndent + name + ': ' + value;\n\n if (i < keys.length - 1) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printSet(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let result = 'Set {';\n const iterator = val.entries();\n let current = iterator.next();\n\n if (!current.done) {\n result += edgeSpacing;\n\n const innerIndent = prevIndent + indent;\n\n while (!current.done) {\n result += innerIndent + print(current.value[1], indent, innerIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n\n current = iterator.next();\n\n if (!current.done) {\n result += ',' + spacing;\n }\n }\n\n result += edgeSpacing + prevIndent;\n }\n\n return result + '}';\n}\n\nfunction printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n refs = refs.slice();\n if (refs.indexOf(val) > -1) {\n return '[Circular]';\n } else {\n refs.push(val);\n }\n\n currentDepth++;\n\n const hitMaxDepth = currentDepth > maxDepth;\n\n if (!hitMaxDepth && val.toJSON && typeof val.toJSON === 'function') {\n return print(val.toJSON(), indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n\n const toStringed = toString.call(val);\n if (toStringed === '[object Arguments]') {\n return hitMaxDepth ? '[Arguments]' : printArguments(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (isToStringedArrayType(toStringed)) {\n return hitMaxDepth ? '[Array]' : printArray(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (toStringed === '[object Map]') {\n return hitMaxDepth ? '[Map]' : printMap(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (toStringed === '[object Set]') {\n return hitMaxDepth ? '[Set]' : printSet(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n } else if (typeof val === 'object') {\n return hitMaxDepth ? '[Object]' : printObject(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n}\n\nfunction printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n let match = false;\n let plugin;\n\n for (let p = 0; p < plugins.length; p++) {\n plugin = plugins[p];\n\n if (plugin.test(val)) {\n match = true;\n break;\n }\n }\n\n if (!match) {\n return false;\n }\n\n function boundPrint(val) {\n return print(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n }\n\n function boundIndent(str) {\n const indentation = prevIndent + indent;\n return indentation + str.replace(NEWLINE_REGEXP, '\\n' + indentation);\n }\n\n return plugin.print(val, boundPrint, boundIndent, {\n edgeSpacing: edgeSpacing,\n spacing: spacing\n });\n}\n\nfunction print(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min) {\n const basic = printBasicValue(val);\n if (basic) return basic;\n\n const plugin = printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n if (plugin) return plugin;\n\n return printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, maxDepth, currentDepth, plugins, min);\n}\n\nconst DEFAULTS = {\n indent: 2,\n min: false,\n maxDepth: Infinity,\n plugins: []\n};\n\nfunction validateOptions(opts) {\n Object.keys(opts).forEach(key => {\n if (!DEFAULTS.hasOwnProperty(key)) {\n throw new Error('prettyFormat: Invalid option: ' + key);\n }\n });\n\n if (opts.min && opts.indent !== undefined && opts.indent !== 0) {\n throw new Error('prettyFormat: Cannot run with min option and indent');\n }\n}\n\nfunction normalizeOptions(opts) {\n const result = {};\n\n Object.keys(DEFAULTS).forEach(key =>\n result[key] = opts.hasOwnProperty(key) ? opts[key] : DEFAULTS[key]\n );\n\n if (result.min) {\n result.indent = 0;\n }\n\n return result;\n}\n\nfunction createIndent(indent) {\n return new Array(indent + 1).join(' ');\n}\n\nfunction prettyFormat(val, opts) {\n if (!opts) {\n opts = DEFAULTS;\n } else {\n validateOptions(opts)\n opts = normalizeOptions(opts);\n }\n\n let indent;\n let refs;\n const prevIndent = '';\n const currentDepth = 0;\n const spacing = opts.min ? ' ' : '\\n';\n const edgeSpacing = opts.min ? '' : '\\n';\n\n if (opts && opts.plugins.length) {\n indent = createIndent(opts.indent);\n refs = [];\n var pluginsResult = printPlugin(val, indent, prevIndent, spacing, edgeSpacing, refs, opts.maxDepth, currentDepth, opts.plugins, opts.min);\n if (pluginsResult) return pluginsResult;\n }\n\n var basicResult = printBasicValue(val);\n if (basicResult) return basicResult;\n\n if (!indent) indent = createIndent(opts.indent);\n if (!refs) refs = [];\n return printComplexValue(val, indent, prevIndent, spacing, edgeSpacing, refs, opts.maxDepth, currentDepth, opts.plugins, opts.min);\n}\n\nmodule.exports = prettyFormat;\n","import './polyfills';\nimport renderToString from './index';\nimport { indent, encodeEntities } from './util';\nimport prettyFormat from 'pretty-format';\n\n// we have to patch in Array support, Possible issue in npm.im/pretty-format\nlet preactPlugin = {\n\ttest(object) {\n\t\treturn (\n\t\t\tobject &&\n\t\t\ttypeof object === 'object' &&\n\t\t\t'type' in object &&\n\t\t\t'props' in object &&\n\t\t\t'key' in object\n\t\t);\n\t},\n\tprint(val, print, indent) {\n\t\treturn renderToString(val, preactPlugin.context, preactPlugin.opts, true);\n\t}\n};\n\nlet prettyFormatOpts = {\n\tplugins: [preactPlugin]\n};\n\nfunction attributeHook(name, value, context, opts, isComponent) {\n\tlet type = typeof value;\n\n\t// Use render-to-string's built-in handling for these properties\n\tif (name === 'dangerouslySetInnerHTML') return false;\n\n\t// always skip null & undefined values, skip false DOM attributes, skip functions if told to\n\tif (value == null || (type === 'function' && !opts.functions)) return '';\n\n\tif (\n\t\topts.skipFalseAttributes &&\n\t\t!isComponent &&\n\t\t(value === false ||\n\t\t\t((name === 'class' || name === 'style') && value === ''))\n\t)\n\t\treturn '';\n\n\tlet indentChar = typeof opts.pretty === 'string' ? opts.pretty : '\\t';\n\tif (type !== 'string') {\n\t\tif (type === 'function' && !opts.functionNames) {\n\t\t\tvalue = 'Function';\n\t\t} else {\n\t\t\tpreactPlugin.context = context;\n\t\t\tpreactPlugin.opts = opts;\n\t\t\tvalue = prettyFormat(value, prettyFormatOpts);\n\t\t\tif (~value.indexOf('\\n')) {\n\t\t\t\tvalue = `${indent('\\n' + value, indentChar)}\\n`;\n\t\t\t}\n\t\t}\n\t\treturn indent(`\\n${name}={${value}}`, indentChar);\n\t}\n\treturn `\\n${indentChar}${name}=\"${encodeEntities(value)}\"`;\n}\n\nlet defaultOpts = {\n\tattributeHook,\n\tjsx: true,\n\txml: false,\n\tfunctions: true,\n\tfunctionNames: true,\n\tskipFalseAttributes: true,\n\tpretty: ' '\n};\n\nfunction renderToJsxString(vnode, context, opts, inner) {\n\topts = Object.assign({}, defaultOpts, opts || {});\n\treturn renderToString(vnode, context, opts, inner);\n}\n\nexport default renderToJsxString;\nexport { renderToJsxString as render };\n"],"names":["Symbol","c","s","IS_NON_DIMENSIONAL","VOID_ELEMENTS","UNSAFE_NAME","XLINK","ENCODED_ENTITIES","encodeEntities","str","test","last","i","out","ch","length","charCodeAt","slice","indent","char","String","replace","isLargeString","ignoreLines","indexOf","JS_TO_CSS","CSS_REGEX","styleObjToCss","prop","val","toLowerCase","undefined","getChildren","accumulator","children","Array","isArray","reduce","push","markAsDirty","this","__d","createComponent","vnode","context","__v","props","setState","forceUpdate","__h","getContext","nodeName","cxType","contextType","provider","__c","value","__","UNNAMED","_renderToStringPretty","opts","inner","isSvgMode","selectValue","pretty","indentChar","rendered","constructor","component","type","isComponent","shallow","renderRootComponent","Fragment","shallowHighOrder","options","__b","renderHook","__r","prototype","render","cctx","_dirty","state","_nextState","__s","getDerivedStateFromProps","Object","assign","componentWillMount","count","call","getChildContext","diffed","displayName","Function","name","toString","match","index","getFallbackComponentName","propChildren","html","attrs","keys","sortAttributes","sort","v","allAttributes","hooked","attributeHook","__html","xml","selected","sub","Error","isVoid","voidElements","pieces","hasLarge","lastWasText","child","ret","isText","join","substring","SHALLOW","renderToString","EMPTY_ARR","previousSkipEffects","res","parent","h","_renderToString","normalizePropName","normalizePropValue","renderClassComponent","renderFunctionComponent","key","unmount","startElement","hasChildren","shallowRender","ESCAPED_CHARACTERS","toISOString","Date","errorToString","regExpToString","RegExp","symbolToString","SYMBOL_REGEXP","NEWLINE_REGEXP","getSymbols","getOwnPropertySymbols","obj","isToStringedArrayType","toStringed","printFunction","printSymbol","printError","printBasicValue","typeOf","printNumber","printString","min","printList","list","prevIndent","spacing","edgeSpacing","refs","maxDepth","currentDepth","plugins","body","innerIndent","print","printComplexValue","hitMaxDepth","toJSON","printArguments","printArray","result","iterator","entries","current","next","done","printMap","printSet","symbols","filter","concat","printObject","printPlugin","plugin","p","indentation","DEFAULTS","Infinity","createIndent","preactPlugin","object","prettyFormatOpts","defaultOpts","functions","skipFalseAttributes","functionNames","forEach","hasOwnProperty","validateOptions","normalizeOptions","pluginsResult","prettyFormat","jsx","renderToJsxString"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "preact-render-to-string",
|
|
3
3
|
"amdName": "preactRenderToString",
|
|
4
|
-
"version": "5.2.
|
|
4
|
+
"version": "5.2.5",
|
|
5
5
|
"description": "Render JSX to an HTML string, with support for Preact components.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"umd:main": "dist/index.js",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"lint-staged": "^10.5.3",
|
|
116
116
|
"microbundle": "^0.13.0",
|
|
117
117
|
"mocha": "^8.2.1",
|
|
118
|
-
"preact": "^10.
|
|
118
|
+
"preact": "^10.11.1",
|
|
119
119
|
"prettier": "^2.2.1",
|
|
120
120
|
"sinon": "^9.2.2",
|
|
121
121
|
"sinon-chai": "^3.5.0",
|
package/src/constants.js
CHANGED
package/src/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
XLINK,
|
|
8
8
|
VOID_ELEMENTS
|
|
9
9
|
} from './util';
|
|
10
|
-
import { options, Fragment } from 'preact';
|
|
10
|
+
import { options, h, Fragment } from 'preact';
|
|
11
11
|
import { _renderToStringPretty } from './pretty';
|
|
12
12
|
import {
|
|
13
13
|
COMMIT,
|
|
@@ -16,9 +16,11 @@ import {
|
|
|
16
16
|
DIFFED,
|
|
17
17
|
DIRTY,
|
|
18
18
|
NEXT_STATE,
|
|
19
|
+
PARENT,
|
|
19
20
|
RENDER,
|
|
20
21
|
SKIP_EFFECTS,
|
|
21
|
-
VNODE
|
|
22
|
+
VNODE,
|
|
23
|
+
CHILDREN
|
|
22
24
|
} from './constants';
|
|
23
25
|
|
|
24
26
|
/** @typedef {import('preact').VNode} VNode */
|
|
@@ -59,6 +61,9 @@ function renderToString(vnode, context, opts) {
|
|
|
59
61
|
const previousSkipEffects = options[SKIP_EFFECTS];
|
|
60
62
|
options[SKIP_EFFECTS] = true;
|
|
61
63
|
|
|
64
|
+
const parent = h(Fragment, null);
|
|
65
|
+
parent[CHILDREN] = [vnode];
|
|
66
|
+
|
|
62
67
|
let res;
|
|
63
68
|
if (
|
|
64
69
|
opts &&
|
|
@@ -72,7 +77,7 @@ function renderToString(vnode, context, opts) {
|
|
|
72
77
|
) {
|
|
73
78
|
res = _renderToStringPretty(vnode, context, opts);
|
|
74
79
|
} else {
|
|
75
|
-
res = _renderToString(vnode, context, false, undefined);
|
|
80
|
+
res = _renderToString(vnode, context, false, undefined, parent);
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
// options._commit, we don't schedule any effects in this library right now,
|
|
@@ -80,6 +85,7 @@ function renderToString(vnode, context, opts) {
|
|
|
80
85
|
if (options[COMMIT]) options[COMMIT](vnode, EMPTY_ARR);
|
|
81
86
|
options[SKIP_EFFECTS] = previousSkipEffects;
|
|
82
87
|
EMPTY_ARR.length = 0;
|
|
88
|
+
|
|
83
89
|
return res;
|
|
84
90
|
}
|
|
85
91
|
|
|
@@ -181,7 +187,7 @@ const isArray = Array.isArray;
|
|
|
181
187
|
const assign = Object.assign;
|
|
182
188
|
|
|
183
189
|
/** The default export is an alias of `render()`. */
|
|
184
|
-
function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
190
|
+
function _renderToString(vnode, context, isSvgMode, selectValue, parent) {
|
|
185
191
|
// Ignore non-rendered VNodes/values
|
|
186
192
|
if (vnode == null || vnode === true || vnode === false || vnode === '') {
|
|
187
193
|
return '';
|
|
@@ -189,19 +195,26 @@ function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
|
189
195
|
|
|
190
196
|
// Text VNodes: escape as HTML
|
|
191
197
|
if (typeof vnode !== 'object') {
|
|
198
|
+
if (typeof vnode === 'function') return '';
|
|
192
199
|
return encodeEntities(vnode);
|
|
193
200
|
}
|
|
194
201
|
|
|
195
202
|
// Recurse into children / Arrays
|
|
196
203
|
if (isArray(vnode)) {
|
|
197
204
|
let rendered = '';
|
|
205
|
+
parent[CHILDREN] = vnode;
|
|
198
206
|
for (let i = 0; i < vnode.length; i++) {
|
|
199
207
|
rendered =
|
|
200
|
-
rendered +
|
|
208
|
+
rendered +
|
|
209
|
+
_renderToString(vnode[i], context, isSvgMode, selectValue, parent);
|
|
201
210
|
}
|
|
202
211
|
return rendered;
|
|
203
212
|
}
|
|
204
213
|
|
|
214
|
+
// VNodes have {constructor:undefined} to prevent JSON injection:
|
|
215
|
+
if (vnode.constructor !== undefined) return '';
|
|
216
|
+
|
|
217
|
+
vnode[PARENT] = parent;
|
|
205
218
|
if (options[DIFF]) options[DIFF](vnode);
|
|
206
219
|
|
|
207
220
|
let type = vnode.type,
|
|
@@ -210,30 +223,42 @@ function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
|
210
223
|
// Invoke rendering on Components
|
|
211
224
|
const isComponent = typeof type === 'function';
|
|
212
225
|
if (isComponent) {
|
|
213
|
-
if (type === Fragment) {
|
|
214
|
-
return _renderToString(
|
|
215
|
-
vnode.props.children,
|
|
216
|
-
context,
|
|
217
|
-
isSvgMode,
|
|
218
|
-
selectValue
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
226
|
let rendered;
|
|
223
|
-
if (type
|
|
224
|
-
rendered =
|
|
227
|
+
if (type === Fragment) {
|
|
228
|
+
rendered = props.children;
|
|
225
229
|
} else {
|
|
226
|
-
|
|
227
|
-
|
|
230
|
+
if (type.prototype && typeof type.prototype.render === 'function') {
|
|
231
|
+
rendered = renderClassComponent(vnode, context);
|
|
232
|
+
} else {
|
|
233
|
+
rendered = renderFunctionComponent(vnode, context);
|
|
234
|
+
}
|
|
228
235
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
236
|
+
let component = vnode[COMPONENT];
|
|
237
|
+
if (component.getChildContext) {
|
|
238
|
+
context = assign({}, context, component.getChildContext());
|
|
239
|
+
}
|
|
232
240
|
}
|
|
233
241
|
|
|
242
|
+
// When a component returns a Fragment node we flatten it in core, so we
|
|
243
|
+
// need to mirror that logic here too
|
|
244
|
+
let isTopLevelFragment =
|
|
245
|
+
rendered != null && rendered.type === Fragment && rendered.key == null;
|
|
246
|
+
rendered = isTopLevelFragment ? rendered.props.children : rendered;
|
|
247
|
+
|
|
234
248
|
// Recurse into children before invoking the after-diff hook
|
|
235
|
-
const str = _renderToString(
|
|
249
|
+
const str = _renderToString(
|
|
250
|
+
rendered,
|
|
251
|
+
context,
|
|
252
|
+
isSvgMode,
|
|
253
|
+
selectValue,
|
|
254
|
+
vnode
|
|
255
|
+
);
|
|
256
|
+
|
|
236
257
|
if (options[DIFFED]) options[DIFFED](vnode);
|
|
258
|
+
vnode[PARENT] = undefined;
|
|
259
|
+
|
|
260
|
+
if (options.unmount) options.unmount(vnode);
|
|
261
|
+
|
|
237
262
|
return str;
|
|
238
263
|
}
|
|
239
264
|
|
|
@@ -314,13 +339,19 @@ function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
|
314
339
|
pieces = pieces + encodeEntities(children);
|
|
315
340
|
hasChildren = true;
|
|
316
341
|
} else if (isArray(children)) {
|
|
342
|
+
vnode[CHILDREN] = children;
|
|
317
343
|
for (let i = 0; i < children.length; i++) {
|
|
318
344
|
let child = children[i];
|
|
319
|
-
|
|
320
345
|
if (child != null && child !== false) {
|
|
321
346
|
let childSvgMode =
|
|
322
347
|
type === 'svg' || (type !== 'foreignObject' && isSvgMode);
|
|
323
|
-
let ret = _renderToString(
|
|
348
|
+
let ret = _renderToString(
|
|
349
|
+
child,
|
|
350
|
+
context,
|
|
351
|
+
childSvgMode,
|
|
352
|
+
selectValue,
|
|
353
|
+
vnode
|
|
354
|
+
);
|
|
324
355
|
|
|
325
356
|
// Skip if we received an empty string
|
|
326
357
|
if (ret) {
|
|
@@ -330,9 +361,16 @@ function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
|
330
361
|
}
|
|
331
362
|
}
|
|
332
363
|
} else if (children != null && children !== false && children !== true) {
|
|
364
|
+
vnode[CHILDREN] = [children];
|
|
333
365
|
let childSvgMode =
|
|
334
366
|
type === 'svg' || (type !== 'foreignObject' && isSvgMode);
|
|
335
|
-
let ret = _renderToString(
|
|
367
|
+
let ret = _renderToString(
|
|
368
|
+
children,
|
|
369
|
+
context,
|
|
370
|
+
childSvgMode,
|
|
371
|
+
selectValue,
|
|
372
|
+
vnode
|
|
373
|
+
);
|
|
336
374
|
|
|
337
375
|
// Skip if we received an empty string
|
|
338
376
|
if (ret) {
|
|
@@ -342,6 +380,8 @@ function _renderToString(vnode, context, isSvgMode, selectValue) {
|
|
|
342
380
|
}
|
|
343
381
|
|
|
344
382
|
if (options[DIFFED]) options[DIFFED](vnode);
|
|
383
|
+
vnode[PARENT] = undefined;
|
|
384
|
+
if (options.unmount) options.unmount(vnode);
|
|
345
385
|
|
|
346
386
|
if (hasChildren) {
|
|
347
387
|
s = s + pieces;
|
package/src/pretty.js
CHANGED
|
@@ -29,6 +29,7 @@ export function _renderToStringPretty(
|
|
|
29
29
|
|
|
30
30
|
// #text nodes
|
|
31
31
|
if (typeof vnode !== 'object') {
|
|
32
|
+
if (typeof vnode === 'function') return '';
|
|
32
33
|
return encodeEntities(vnode);
|
|
33
34
|
}
|
|
34
35
|
|
|
@@ -53,6 +54,9 @@ export function _renderToStringPretty(
|
|
|
53
54
|
return rendered;
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
// VNodes have {constructor:undefined} to prevent JSON injection:
|
|
58
|
+
if (vnode.constructor !== undefined) return '';
|
|
59
|
+
|
|
56
60
|
let nodeName = vnode.type,
|
|
57
61
|
props = vnode.props,
|
|
58
62
|
isComponent = false;
|