From 92160148b390af2b7c2e2b45850063844a42f049 Mon Sep 17 00:00:00 2001 From: Vladimir Kutepov Date: Mon, 25 Jan 2021 00:21:43 +0300 Subject: [PATCH] 4.0.0 --- CHANGELOG.md | 9 ++++++++- dist/hyperapp-render.js | 8 +++----- dist/hyperapp-render.js.map | 2 +- dist/hyperapp-render.min.js | 4 ++-- dist/hyperapp-render.min.js.map | 2 +- package.json | 32 +++++++++++++++---------------- src/index.js | 6 ++---- test/index.test.js | 34 ++++++--------------------------- 8 files changed, 39 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00872e9..c2125ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [4.0.0] - 2021-01-25 + +- [BREAKING] Drop support for legacy Hyperapp v2.0.0-v2.0.8. +- Add compatibility with Hyperapp [v2.0.9](https://github.com/hyperapp/hyperapp/releases/tag/2.0.9) + after internal VNode schema change. + ## [3.5.0] - 2020-11-06 - Compatibility with Hyperapp [v2.0.6](https://github.com/hyperapp/hyperapp/releases/tag/2.0.6) @@ -66,7 +72,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Initial public release. -[unreleased]: https://github.com/kriasoft/hyperapp-render/compare/v3.5.0...HEAD +[unreleased]: https://github.com/kriasoft/hyperapp-render/compare/v4.0.0...HEAD +[4.0.0]: https://github.com/kriasoft/hyperapp-render/compare/v3.5.0...v4.0.0 [3.5.0]: https://github.com/kriasoft/hyperapp-render/compare/v3.4.0...v3.5.0 [3.4.0]: https://github.com/kriasoft/hyperapp-render/compare/v3.3.0...v3.4.0 [3.3.0]: https://github.com/kriasoft/hyperapp-render/compare/v3.2.0...v3.3.0 diff --git a/dist/hyperapp-render.js b/dist/hyperapp-render.js index 5a5c48a..b1ec113 100644 --- a/dist/hyperapp-render.js +++ b/dist/hyperapp-render.js @@ -1,4 +1,4 @@ -/*! Hyperapp Render v3.5.0 | MIT Licence | https://github.com/kriasoft/hyperapp-render */ +/*! Hyperapp Render v4.0.0 | MIT Licence | https://github.com/kriasoft/hyperapp-render */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : @@ -231,12 +231,10 @@ children: node, footer: '' }); - } else if (node.tag === 3) { - out += escapeHtml(node.type); } else if (node.type === 3) { - out += escapeHtml(node.name); + out += escapeHtml(node.tag || node.name); } else if (typeof node === 'object') { - out += renderFragment(node.name || node.type || node.nodeName, node.props || node.attributes, node.children, stack); + out += renderFragment(node.tag || node.nodeName, node.props || node.attributes, node.children, stack); } else { out += escapeHtml(node); } diff --git a/dist/hyperapp-render.js.map b/dist/hyperapp-render.js.map index ef2bc01..c56a675 100644 --- a/dist/hyperapp-render.js.map +++ b/dist/hyperapp-render.js.map @@ -1 +1 @@ -{"version":3,"file":"hyperapp-render.js","sources":["src/index.js"],"sourcesContent":["const { isArray } = Array\nconst { hasOwnProperty } = Object.prototype\nconst styleNameCache = new Map()\nconst uppercasePattern = /[A-Z]/g\nconst msPattern = /^ms-/\n\n// https://www.w3.org/International/questions/qa-escapes#use\nconst escapeRegExp = /[\"&'<>]/\n\n// https://www.w3.org/TR/html/syntax.html#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// credits to https://github.com/component/escape-html\nexport function escapeHtml(value) {\n const str = '' + value\n if (typeof value === 'number') {\n // better performance for safe values\n return str\n }\n\n const match = escapeRegExp.exec(str)\n if (!match) {\n return str\n }\n\n let { index } = match\n let lastIndex = 0\n let out = ''\n\n for (let escape = ''; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"'\n break\n case 38: // &\n escape = '&'\n break\n case 39: // '\n escape = ''' // shorter than \"'\" and \"'\" plus supports HTML4\n break\n case 60: // <\n escape = '<'\n break\n case 62: // >\n escape = '>'\n break\n default:\n continue\n }\n\n if (lastIndex !== index) {\n out += str.substring(lastIndex, index)\n }\n\n lastIndex = index + 1\n out += escape\n }\n\n return lastIndex !== index ? out + str.substring(lastIndex, index) : out\n}\n\n// credits to https://github.com/jorgebucaran/classcat\nexport function concatClassNames(value) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value || ''\n }\n\n let out = ''\n let delimiter = ''\n\n if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = concatClassNames(value[i])\n if (name !== '') {\n out += delimiter + name\n delimiter = ' '\n }\n }\n } else {\n for (const name in value) {\n if (hasOwnProperty.call(value, name) && value[name]) {\n out += delimiter + name\n delimiter = ' '\n }\n }\n }\n\n return out\n}\n\n// \"backgroundColor\" => \"background-color\"\n// \"MozTransition\" => \"-moz-transition\"\n// \"msTransition\" => \"-ms-transition\"\nfunction hyphenateStyleName(styleName) {\n if (!styleNameCache.has(styleName)) {\n const name = styleName.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-')\n\n // returns 'undefined' instead of the 'Map' object in IE11\n styleNameCache.set(styleName, name)\n }\n return styleNameCache.get(styleName)\n}\n\nexport function stringifyStyles(style) {\n let out = ''\n let delimiter = ''\n\n for (const name in style) {\n if (hasOwnProperty.call(style, name)) {\n const value = style[name]\n\n if (value != null) {\n if (name === 'cssText') {\n out += delimiter + value\n } else {\n out += delimiter + hyphenateStyleName(name) + ':' + value\n }\n delimiter = ';'\n }\n }\n }\n\n return out\n}\n\n// https://www.w3.org/TR/html51/syntax.html#serializing-html-fragments\nfunction renderFragment(name, props, children, stack) {\n let out = ''\n let footer = ''\n\n if (name) {\n out += '<' + name\n\n for (let prop in props) {\n if (hasOwnProperty.call(props, prop)) {\n let value = props[prop]\n\n if (\n value != null &&\n prop !== 'key' &&\n prop !== 'innerHTML' &&\n prop !== '__source' && // babel-plugin-transform-react-jsx-source\n !(prop[0] === 'o' && prop[1] === 'n')\n ) {\n if (prop === 'class' || prop === 'className') {\n prop = 'class'\n value = concatClassNames(value) || false\n } else if (prop === 'style' && typeof value === 'object') {\n value = stringifyStyles(value) || false\n }\n\n if (value !== false) {\n out += ' ' + prop\n\n if (value !== true) {\n out += '=\"' + escapeHtml(value) + '\"'\n }\n }\n }\n }\n }\n\n if (voidElements.has(name)) {\n out += '/>'\n } else {\n out += '>'\n footer = ''\n }\n }\n\n if (children.length > 0) {\n stack.push({\n childIndex: 0,\n children,\n footer,\n })\n } else {\n const { innerHTML } = props\n\n if (innerHTML != null) {\n out += innerHTML\n }\n\n out += footer\n }\n\n return out\n}\n\nfunction resolveNode(node, state, actions) {\n if (typeof node === 'function') {\n return resolveNode(node(state, actions), state, actions)\n }\n if (node && node.type === 2) {\n return resolveNode(node.lazy.view(node.lazy), state, actions)\n }\n return node\n}\n\nexport function renderer(view, state, actions) {\n const stack = [\n {\n childIndex: 0,\n children: [view],\n footer: '',\n },\n ]\n let end = false\n\n return (bytes) => {\n if (end) {\n return null\n }\n\n let out = ''\n\n while (out.length < bytes) {\n if (stack.length === 0) {\n end = true\n break\n }\n\n const frame = stack[stack.length - 1]\n\n if (frame.childIndex >= frame.children.length) {\n out += frame.footer\n stack.pop()\n } else {\n const node = resolveNode(frame.children[frame.childIndex++], state, actions)\n\n if (node != null && typeof node !== 'boolean') {\n if (isArray(node)) {\n stack.push({\n childIndex: 0,\n children: node,\n footer: '',\n })\n } else if (node.tag === 3) {\n out += escapeHtml(node.type)\n } else if (node.type === 3) {\n out += escapeHtml(node.name)\n } else if (typeof node === 'object') {\n out += renderFragment(\n node.name || node.type || node.nodeName,\n node.props || node.attributes,\n node.children,\n stack,\n )\n } else {\n out += escapeHtml(node)\n }\n }\n }\n }\n\n return out\n }\n}\n\nexport function renderToString(view, state, actions) {\n return renderer(view, state, actions)(Infinity)\n}\n"],"names":["isArray","Array","hasOwnProperty","Object","prototype","styleNameCache","Map","uppercasePattern","msPattern","escapeRegExp","voidElements","Set","escapeHtml","value","str","match","exec","index","lastIndex","out","escape","length","charCodeAt","substring","concatClassNames","delimiter","i","name","call","hyphenateStyleName","styleName","has","replace","toLowerCase","set","get","stringifyStyles","style","renderFragment","props","children","stack","footer","prop","push","childIndex","innerHTML","resolveNode","node","state","actions","type","lazy","view","renderer","end","bytes","frame","pop","tag","nodeName","attributes","renderToString","Infinity"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"hyperapp-render.js","sources":["src/index.js"],"sourcesContent":["const { isArray } = Array\nconst { hasOwnProperty } = Object.prototype\nconst styleNameCache = new Map()\nconst uppercasePattern = /[A-Z]/g\nconst msPattern = /^ms-/\n\n// https://www.w3.org/International/questions/qa-escapes#use\nconst escapeRegExp = /[\"&'<>]/\n\n// https://www.w3.org/TR/html/syntax.html#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// credits to https://github.com/component/escape-html\nexport function escapeHtml(value) {\n const str = '' + value\n if (typeof value === 'number') {\n // better performance for safe values\n return str\n }\n\n const match = escapeRegExp.exec(str)\n if (!match) {\n return str\n }\n\n let { index } = match\n let lastIndex = 0\n let out = ''\n\n for (let escape = ''; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"'\n break\n case 38: // &\n escape = '&'\n break\n case 39: // '\n escape = ''' // shorter than \"'\" and \"'\" plus supports HTML4\n break\n case 60: // <\n escape = '<'\n break\n case 62: // >\n escape = '>'\n break\n default:\n continue\n }\n\n if (lastIndex !== index) {\n out += str.substring(lastIndex, index)\n }\n\n lastIndex = index + 1\n out += escape\n }\n\n return lastIndex !== index ? out + str.substring(lastIndex, index) : out\n}\n\n// credits to https://github.com/jorgebucaran/classcat\nexport function concatClassNames(value) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value || ''\n }\n\n let out = ''\n let delimiter = ''\n\n if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = concatClassNames(value[i])\n if (name !== '') {\n out += delimiter + name\n delimiter = ' '\n }\n }\n } else {\n for (const name in value) {\n if (hasOwnProperty.call(value, name) && value[name]) {\n out += delimiter + name\n delimiter = ' '\n }\n }\n }\n\n return out\n}\n\n// \"backgroundColor\" => \"background-color\"\n// \"MozTransition\" => \"-moz-transition\"\n// \"msTransition\" => \"-ms-transition\"\nfunction hyphenateStyleName(styleName) {\n if (!styleNameCache.has(styleName)) {\n const name = styleName.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-')\n\n // returns 'undefined' instead of the 'Map' object in IE11\n styleNameCache.set(styleName, name)\n }\n return styleNameCache.get(styleName)\n}\n\nexport function stringifyStyles(style) {\n let out = ''\n let delimiter = ''\n\n for (const name in style) {\n if (hasOwnProperty.call(style, name)) {\n const value = style[name]\n\n if (value != null) {\n if (name === 'cssText') {\n out += delimiter + value\n } else {\n out += delimiter + hyphenateStyleName(name) + ':' + value\n }\n delimiter = ';'\n }\n }\n }\n\n return out\n}\n\n// https://www.w3.org/TR/html51/syntax.html#serializing-html-fragments\nfunction renderFragment(name, props, children, stack) {\n let out = ''\n let footer = ''\n\n if (name) {\n out += '<' + name\n\n for (let prop in props) {\n if (hasOwnProperty.call(props, prop)) {\n let value = props[prop]\n\n if (\n value != null &&\n prop !== 'key' &&\n prop !== 'innerHTML' &&\n prop !== '__source' && // babel-plugin-transform-react-jsx-source\n !(prop[0] === 'o' && prop[1] === 'n')\n ) {\n if (prop === 'class' || prop === 'className') {\n prop = 'class'\n value = concatClassNames(value) || false\n } else if (prop === 'style' && typeof value === 'object') {\n value = stringifyStyles(value) || false\n }\n\n if (value !== false) {\n out += ' ' + prop\n\n if (value !== true) {\n out += '=\"' + escapeHtml(value) + '\"'\n }\n }\n }\n }\n }\n\n if (voidElements.has(name)) {\n out += '/>'\n } else {\n out += '>'\n footer = ''\n }\n }\n\n if (children.length > 0) {\n stack.push({\n childIndex: 0,\n children,\n footer,\n })\n } else {\n const { innerHTML } = props\n\n if (innerHTML != null) {\n out += innerHTML\n }\n\n out += footer\n }\n\n return out\n}\n\nfunction resolveNode(node, state, actions) {\n if (typeof node === 'function') {\n return resolveNode(node(state, actions), state, actions)\n }\n if (node && node.type === 2) {\n return resolveNode(node.lazy.view(node.lazy), state, actions)\n }\n return node\n}\n\nexport function renderer(view, state, actions) {\n const stack = [\n {\n childIndex: 0,\n children: [view],\n footer: '',\n },\n ]\n let end = false\n\n return (bytes) => {\n if (end) {\n return null\n }\n\n let out = ''\n\n while (out.length < bytes) {\n if (stack.length === 0) {\n end = true\n break\n }\n\n const frame = stack[stack.length - 1]\n\n if (frame.childIndex >= frame.children.length) {\n out += frame.footer\n stack.pop()\n } else {\n const node = resolveNode(frame.children[frame.childIndex++], state, actions)\n\n if (node != null && typeof node !== 'boolean') {\n if (isArray(node)) {\n stack.push({\n childIndex: 0,\n children: node,\n footer: '',\n })\n } else if (node.type === 3) {\n out += escapeHtml(node.tag || node.name)\n } else if (typeof node === 'object') {\n out += renderFragment(\n node.tag || node.nodeName,\n node.props || node.attributes,\n node.children,\n stack,\n )\n } else {\n out += escapeHtml(node)\n }\n }\n }\n }\n\n return out\n }\n}\n\nexport function renderToString(view, state, actions) {\n return renderer(view, state, actions)(Infinity)\n}\n"],"names":["isArray","Array","hasOwnProperty","Object","prototype","styleNameCache","Map","uppercasePattern","msPattern","escapeRegExp","voidElements","Set","escapeHtml","value","str","match","exec","index","lastIndex","out","escape","length","charCodeAt","substring","concatClassNames","delimiter","i","name","call","hyphenateStyleName","styleName","has","replace","toLowerCase","set","get","stringifyStyles","style","renderFragment","props","children","stack","footer","prop","push","childIndex","innerHTML","resolveNode","node","state","actions","type","lazy","view","renderer","end","bytes","frame","pop","tag","nodeName","attributes","renderToString","Infinity"],"mappings":"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"} \ No newline at end of file diff --git a/dist/hyperapp-render.min.js b/dist/hyperapp-render.min.js index 6249e47..36fbdbb 100644 --- a/dist/hyperapp-render.min.js +++ b/dist/hyperapp-render.min.js @@ -1,3 +1,3 @@ -/*! Hyperapp Render v3.5.0 | MIT Licence | https://github.com/kriasoft/hyperapp-render */ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).hyperappRender={})}(this,(function(e){"use strict";var r=Array.isArray,n=Object.prototype.hasOwnProperty,t=new Map,a=/[A-Z]/g,o=/^ms-/,i=/["&'<>]/,l=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function f(e){var r=""+e;if("number"==typeof e)return r;var n=i.exec(r);if(!n)return r;for(var t=n.index,a=0,o="",l="";t":(o+=">",i="")}if(t.length>0)a.push({childIndex:0,children:t,footer:i});else{var d=r.innerHTML;null!=d&&(o+=d),o+=i}return o}function d(e,r,n){return"function"==typeof e?d(e(r,n),r,n):e&&2===e.type?d(e.lazy.view(e.lazy),r,n):e}e.renderToString=function(e,n,t){return function(e,n,t){var a=[{childIndex:0,children:[e],footer:""}],o=!1;return function(e){if(o)return null;for(var i="";i.length=l.children.length)i+=l.footer,a.pop();else{var c=d(l.children[l.childIndex++],n,t);null!=c&&"boolean"!=typeof c&&(r(c)?a.push({childIndex:0,children:c,footer:""}):3===c.tag?i+=f(c.type):3===c.type?i+=f(c.name):i+="object"==typeof c?p(c.name||c.type||c.nodeName,c.props||c.attributes,c.children,a):f(c))}}return i}}(e,n,t)(1/0)},Object.defineProperty(e,"__esModule",{value:!0})})); +/*! Hyperapp Render v4.0.0 | MIT Licence | https://github.com/kriasoft/hyperapp-render */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).hyperappRender={})}(this,(function(e){"use strict";var r=Array.isArray,n=Object.prototype.hasOwnProperty,t=new Map,a=/[A-Z]/g,o=/^ms-/,i=/["&'<>]/,l=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function f(e){var r=""+e;if("number"==typeof e)return r;var n=i.exec(r);if(!n)return r;for(var t=n.index,a=0,o="",l="";t":(o+=">",i="")}if(t.length>0)a.push({childIndex:0,children:t,footer:i});else{var d=r.innerHTML;null!=d&&(o+=d),o+=i}return o}function d(e,r,n){return"function"==typeof e?d(e(r,n),r,n):e&&2===e.type?d(e.lazy.view(e.lazy),r,n):e}e.renderToString=function(e,n,t){return function(e,n,t){var a=[{childIndex:0,children:[e],footer:""}],o=!1;return function(e){if(o)return null;for(var i="";i.length=l.children.length)i+=l.footer,a.pop();else{var c=d(l.children[l.childIndex++],n,t);null!=c&&"boolean"!=typeof c&&(r(c)?a.push({childIndex:0,children:c,footer:""}):3===c.type?i+=f(c.tag||c.name):i+="object"==typeof c?p(c.tag||c.nodeName,c.props||c.attributes,c.children,a):f(c))}}return i}}(e,n,t)(1/0)},Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=hyperapp-render.min.js.map diff --git a/dist/hyperapp-render.min.js.map b/dist/hyperapp-render.min.js.map index 181e8f3..69e0cb9 100644 --- a/dist/hyperapp-render.min.js.map +++ b/dist/hyperapp-render.min.js.map @@ -1 +1 @@ -{"version":3,"file":"hyperapp-render.min.js","sources":["src/index.js"],"sourcesContent":["const { isArray } = Array\nconst { hasOwnProperty } = Object.prototype\nconst styleNameCache = new Map()\nconst uppercasePattern = /[A-Z]/g\nconst msPattern = /^ms-/\n\n// https://www.w3.org/International/questions/qa-escapes#use\nconst escapeRegExp = /[\"&'<>]/\n\n// https://www.w3.org/TR/html/syntax.html#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// credits to https://github.com/component/escape-html\nexport function escapeHtml(value) {\n const str = '' + value\n if (typeof value === 'number') {\n // better performance for safe values\n return str\n }\n\n const match = escapeRegExp.exec(str)\n if (!match) {\n return str\n }\n\n let { index } = match\n let lastIndex = 0\n let out = ''\n\n for (let escape = ''; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"'\n break\n case 38: // &\n escape = '&'\n break\n case 39: // '\n escape = ''' // shorter than \"'\" and \"'\" plus supports HTML4\n break\n case 60: // <\n escape = '<'\n break\n case 62: // >\n escape = '>'\n break\n default:\n continue\n }\n\n if (lastIndex !== index) {\n out += str.substring(lastIndex, index)\n }\n\n lastIndex = index + 1\n out += escape\n }\n\n return lastIndex !== index ? out + str.substring(lastIndex, index) : out\n}\n\n// credits to https://github.com/jorgebucaran/classcat\nexport function concatClassNames(value) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value || ''\n }\n\n let out = ''\n let delimiter = ''\n\n if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = concatClassNames(value[i])\n if (name !== '') {\n out += delimiter + name\n delimiter = ' '\n }\n }\n } else {\n for (const name in value) {\n if (hasOwnProperty.call(value, name) && value[name]) {\n out += delimiter + name\n delimiter = ' '\n }\n }\n }\n\n return out\n}\n\n// \"backgroundColor\" => \"background-color\"\n// \"MozTransition\" => \"-moz-transition\"\n// \"msTransition\" => \"-ms-transition\"\nfunction hyphenateStyleName(styleName) {\n if (!styleNameCache.has(styleName)) {\n const name = styleName.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-')\n\n // returns 'undefined' instead of the 'Map' object in IE11\n styleNameCache.set(styleName, name)\n }\n return styleNameCache.get(styleName)\n}\n\nexport function stringifyStyles(style) {\n let out = ''\n let delimiter = ''\n\n for (const name in style) {\n if (hasOwnProperty.call(style, name)) {\n const value = style[name]\n\n if (value != null) {\n if (name === 'cssText') {\n out += delimiter + value\n } else {\n out += delimiter + hyphenateStyleName(name) + ':' + value\n }\n delimiter = ';'\n }\n }\n }\n\n return out\n}\n\n// https://www.w3.org/TR/html51/syntax.html#serializing-html-fragments\nfunction renderFragment(name, props, children, stack) {\n let out = ''\n let footer = ''\n\n if (name) {\n out += '<' + name\n\n for (let prop in props) {\n if (hasOwnProperty.call(props, prop)) {\n let value = props[prop]\n\n if (\n value != null &&\n prop !== 'key' &&\n prop !== 'innerHTML' &&\n prop !== '__source' && // babel-plugin-transform-react-jsx-source\n !(prop[0] === 'o' && prop[1] === 'n')\n ) {\n if (prop === 'class' || prop === 'className') {\n prop = 'class'\n value = concatClassNames(value) || false\n } else if (prop === 'style' && typeof value === 'object') {\n value = stringifyStyles(value) || false\n }\n\n if (value !== false) {\n out += ' ' + prop\n\n if (value !== true) {\n out += '=\"' + escapeHtml(value) + '\"'\n }\n }\n }\n }\n }\n\n if (voidElements.has(name)) {\n out += '/>'\n } else {\n out += '>'\n footer = ''\n }\n }\n\n if (children.length > 0) {\n stack.push({\n childIndex: 0,\n children,\n footer,\n })\n } else {\n const { innerHTML } = props\n\n if (innerHTML != null) {\n out += innerHTML\n }\n\n out += footer\n }\n\n return out\n}\n\nfunction resolveNode(node, state, actions) {\n if (typeof node === 'function') {\n return resolveNode(node(state, actions), state, actions)\n }\n if (node && node.type === 2) {\n return resolveNode(node.lazy.view(node.lazy), state, actions)\n }\n return node\n}\n\nexport function renderer(view, state, actions) {\n const stack = [\n {\n childIndex: 0,\n children: [view],\n footer: '',\n },\n ]\n let end = false\n\n return (bytes) => {\n if (end) {\n return null\n }\n\n let out = ''\n\n while (out.length < bytes) {\n if (stack.length === 0) {\n end = true\n break\n }\n\n const frame = stack[stack.length - 1]\n\n if (frame.childIndex >= frame.children.length) {\n out += frame.footer\n stack.pop()\n } else {\n const node = resolveNode(frame.children[frame.childIndex++], state, actions)\n\n if (node != null && typeof node !== 'boolean') {\n if (isArray(node)) {\n stack.push({\n childIndex: 0,\n children: node,\n footer: '',\n })\n } else if (node.tag === 3) {\n out += escapeHtml(node.type)\n } else if (node.type === 3) {\n out += escapeHtml(node.name)\n } else if (typeof node === 'object') {\n out += renderFragment(\n node.name || node.type || node.nodeName,\n node.props || node.attributes,\n node.children,\n stack,\n )\n } else {\n out += escapeHtml(node)\n }\n }\n }\n }\n\n return out\n }\n}\n\nexport function renderToString(view, state, actions) {\n return renderer(view, state, actions)(Infinity)\n}\n"],"names":["isArray","Array","hasOwnProperty","Object","prototype","styleNameCache","Map","uppercasePattern","msPattern","escapeRegExp","voidElements","Set","escapeHtml","value","str","match","exec","index","lastIndex","out","escape","length","charCodeAt","substring","concatClassNames","delimiter","i","name","call","hyphenateStyleName","styleName","has","replace","toLowerCase","set","get","stringifyStyles","style","renderFragment","props","children","stack","footer","prop","push","childIndex","innerHTML","resolveNode","node","state","actions","type","lazy","view","end","bytes","frame","pop","tag","nodeName","attributes","renderer","Infinity"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"hyperapp-render.min.js","sources":["src/index.js"],"sourcesContent":["const { isArray } = Array\nconst { hasOwnProperty } = Object.prototype\nconst styleNameCache = new Map()\nconst uppercasePattern = /[A-Z]/g\nconst msPattern = /^ms-/\n\n// https://www.w3.org/International/questions/qa-escapes#use\nconst escapeRegExp = /[\"&'<>]/\n\n// https://www.w3.org/TR/html/syntax.html#void-elements\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// credits to https://github.com/component/escape-html\nexport function escapeHtml(value) {\n const str = '' + value\n if (typeof value === 'number') {\n // better performance for safe values\n return str\n }\n\n const match = escapeRegExp.exec(str)\n if (!match) {\n return str\n }\n\n let { index } = match\n let lastIndex = 0\n let out = ''\n\n for (let escape = ''; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"'\n break\n case 38: // &\n escape = '&'\n break\n case 39: // '\n escape = ''' // shorter than \"'\" and \"'\" plus supports HTML4\n break\n case 60: // <\n escape = '<'\n break\n case 62: // >\n escape = '>'\n break\n default:\n continue\n }\n\n if (lastIndex !== index) {\n out += str.substring(lastIndex, index)\n }\n\n lastIndex = index + 1\n out += escape\n }\n\n return lastIndex !== index ? out + str.substring(lastIndex, index) : out\n}\n\n// credits to https://github.com/jorgebucaran/classcat\nexport function concatClassNames(value) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value || ''\n }\n\n let out = ''\n let delimiter = ''\n\n if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = concatClassNames(value[i])\n if (name !== '') {\n out += delimiter + name\n delimiter = ' '\n }\n }\n } else {\n for (const name in value) {\n if (hasOwnProperty.call(value, name) && value[name]) {\n out += delimiter + name\n delimiter = ' '\n }\n }\n }\n\n return out\n}\n\n// \"backgroundColor\" => \"background-color\"\n// \"MozTransition\" => \"-moz-transition\"\n// \"msTransition\" => \"-ms-transition\"\nfunction hyphenateStyleName(styleName) {\n if (!styleNameCache.has(styleName)) {\n const name = styleName.replace(uppercasePattern, '-$&').toLowerCase().replace(msPattern, '-ms-')\n\n // returns 'undefined' instead of the 'Map' object in IE11\n styleNameCache.set(styleName, name)\n }\n return styleNameCache.get(styleName)\n}\n\nexport function stringifyStyles(style) {\n let out = ''\n let delimiter = ''\n\n for (const name in style) {\n if (hasOwnProperty.call(style, name)) {\n const value = style[name]\n\n if (value != null) {\n if (name === 'cssText') {\n out += delimiter + value\n } else {\n out += delimiter + hyphenateStyleName(name) + ':' + value\n }\n delimiter = ';'\n }\n }\n }\n\n return out\n}\n\n// https://www.w3.org/TR/html51/syntax.html#serializing-html-fragments\nfunction renderFragment(name, props, children, stack) {\n let out = ''\n let footer = ''\n\n if (name) {\n out += '<' + name\n\n for (let prop in props) {\n if (hasOwnProperty.call(props, prop)) {\n let value = props[prop]\n\n if (\n value != null &&\n prop !== 'key' &&\n prop !== 'innerHTML' &&\n prop !== '__source' && // babel-plugin-transform-react-jsx-source\n !(prop[0] === 'o' && prop[1] === 'n')\n ) {\n if (prop === 'class' || prop === 'className') {\n prop = 'class'\n value = concatClassNames(value) || false\n } else if (prop === 'style' && typeof value === 'object') {\n value = stringifyStyles(value) || false\n }\n\n if (value !== false) {\n out += ' ' + prop\n\n if (value !== true) {\n out += '=\"' + escapeHtml(value) + '\"'\n }\n }\n }\n }\n }\n\n if (voidElements.has(name)) {\n out += '/>'\n } else {\n out += '>'\n footer = ''\n }\n }\n\n if (children.length > 0) {\n stack.push({\n childIndex: 0,\n children,\n footer,\n })\n } else {\n const { innerHTML } = props\n\n if (innerHTML != null) {\n out += innerHTML\n }\n\n out += footer\n }\n\n return out\n}\n\nfunction resolveNode(node, state, actions) {\n if (typeof node === 'function') {\n return resolveNode(node(state, actions), state, actions)\n }\n if (node && node.type === 2) {\n return resolveNode(node.lazy.view(node.lazy), state, actions)\n }\n return node\n}\n\nexport function renderer(view, state, actions) {\n const stack = [\n {\n childIndex: 0,\n children: [view],\n footer: '',\n },\n ]\n let end = false\n\n return (bytes) => {\n if (end) {\n return null\n }\n\n let out = ''\n\n while (out.length < bytes) {\n if (stack.length === 0) {\n end = true\n break\n }\n\n const frame = stack[stack.length - 1]\n\n if (frame.childIndex >= frame.children.length) {\n out += frame.footer\n stack.pop()\n } else {\n const node = resolveNode(frame.children[frame.childIndex++], state, actions)\n\n if (node != null && typeof node !== 'boolean') {\n if (isArray(node)) {\n stack.push({\n childIndex: 0,\n children: node,\n footer: '',\n })\n } else if (node.type === 3) {\n out += escapeHtml(node.tag || node.name)\n } else if (typeof node === 'object') {\n out += renderFragment(\n node.tag || node.nodeName,\n node.props || node.attributes,\n node.children,\n stack,\n )\n } else {\n out += escapeHtml(node)\n }\n }\n }\n }\n\n return out\n }\n}\n\nexport function renderToString(view, state, actions) {\n return renderer(view, state, actions)(Infinity)\n}\n"],"names":["isArray","Array","hasOwnProperty","Object","prototype","styleNameCache","Map","uppercasePattern","msPattern","escapeRegExp","voidElements","Set","escapeHtml","value","str","match","exec","index","lastIndex","out","escape","length","charCodeAt","substring","concatClassNames","delimiter","i","name","call","hyphenateStyleName","styleName","has","replace","toLowerCase","set","get","stringifyStyles","style","renderFragment","props","children","stack","footer","prop","push","childIndex","innerHTML","resolveNode","node","state","actions","type","lazy","view","end","bytes","frame","pop","tag","nodeName","attributes","renderer","Infinity"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index f63164e..193b528 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "hyperapp-render", - "version": "3.5.0", + "version": "4.0.0", "description": "Render Hyperapp to an HTML string with SSR and Node.js streaming support", "repository": "kriasoft/hyperapp-render", "author": "Vladimir Kutepov", @@ -40,29 +40,29 @@ "@types/node": "*" }, "devDependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-jsx": "^7.12.5", - "@babel/preset-env": "^7.12.1", - "@babel/register": "^7.12.1", + "@babel/core": "^7.12.10", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/register": "^7.12.10", + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.1.0", "babel-jest": "^26.6.3", "benchr": "^4.3.0", - "eslint": "^7.12.1", - "eslint-config-airbnb": "^18.2.0", - "eslint-config-prettier": "^6.15.0", + "eslint": "^7.18.0", + "eslint-config-airbnb": "^18.2.1", + "eslint-config-prettier": "^7.2.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "fs-extra": "^9.0.1", - "husky": "^4.3.0", + "eslint-plugin-react": "^7.22.0", + "fs-extra": "^9.1.0", + "husky": "^4.3.8", "hyperapp": "^1.2.10", "jest": "^26.6.3", - "prettier": "^2.1.2", - "rollup": "^2.33.1", + "prettier": "^2.2.1", + "rollup": "^2.38.0", "rollup-plugin-babel": "^4.4.0", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.0.5" + "typescript": "^4.1.3" }, "scripts": { "lint": "node tools/lint.js", diff --git a/src/index.js b/src/index.js index 8660c83..23a0f98 100644 --- a/src/index.js +++ b/src/index.js @@ -250,13 +250,11 @@ export function renderer(view, state, actions) { children: node, footer: '', }) - } else if (node.tag === 3) { - out += escapeHtml(node.type) } else if (node.type === 3) { - out += escapeHtml(node.name) + out += escapeHtml(node.tag || node.name) } else if (typeof node === 'object') { out += renderFragment( - node.name || node.type || node.nodeName, + node.tag || node.nodeName, node.props || node.attributes, node.children, stack, diff --git a/test/index.test.js b/test/index.test.js index 3abbd6a..4b83358 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -449,45 +449,23 @@ describe('renderToString(view, state, actions)', () => { expect(html).toBe('') }) - it('should support Hyperapp v2.0.0', () => { + it('should support Hyperapp v2.0.9', () => { const VNode = { - name: 'div', + tag: 'div', props: {}, - children: [ - { - name: 'foo bar baz', - props: {}, - children: [], - element: null, - key: null, - type: 3, - }, - ], - element: null, key: null, - type: 1, - } - const html = renderToString(VNode) - expect(html).toBe('
foo bar baz
') - }) - - it('should support Hyperapp v2.0.6', () => { - const VNode = { - type: 'div', - props: {}, children: [ { - type: 'foo bar baz', + tag: 'foo bar baz', props: {}, + key: null, children: [], + type: 3, node: null, - key: null, - tag: 3, }, ], + type: 1, node: null, - key: null, - tag: 1, } const html = renderToString(VNode) expect(html).toBe('
foo bar baz
')