diff --git a/compat/server.js b/compat/server.js index 715687265e..3eaf7206b5 100644 --- a/compat/server.js +++ b/compat/server.js @@ -9,7 +9,18 @@ try { ); } +var renderToPipeableStream; +try { + const mod = require('preact-render-to-string/stream-node'); + renderToPipeableStream = mod.default || mod.renderToPipeableStream || mod; +} catch (e) { + throw Error( + 'renderToPipeableStream() error: update "preact-render-to-string" dependency to at least 6.5.0.' + ); +} + module.exports = { renderToString: renderToString, - renderToStaticMarkup: renderToString + renderToStaticMarkup: renderToString, + renderToPipeableStream: renderToPipeableStream }; diff --git a/compat/server.mjs b/compat/server.mjs index 51c7a5d332..9db0f19767 100644 --- a/compat/server.mjs +++ b/compat/server.mjs @@ -5,7 +5,10 @@ export { renderToString as renderToStaticMarkup } from 'preact-render-to-string'; +export { renderToPipeableStream } from 'preact-render-to-string/stream-node' + export default { renderToString, - renderToStaticMarkup: renderToString + renderToStaticMarkup: renderToString, + renderToPipeableStream }; diff --git a/package-lock.json b/package-lock.json index 99c7ecb692..4580313a0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "npm-merge-driver-install": "^1.1.1", "npm-run-all": "^4.0.0", "oxlint": "^0.3.4", - "preact-render-to-string": "^5.2.5", + "preact-render-to-string": "^6.5.0", "prop-types": "^15.7.2", "sade": "^1.7.4", "sinon": "^9.2.3", @@ -12103,10 +12103,11 @@ } }, "node_modules/preact-render-to-string": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.5.tgz", - "integrity": "sha512-rEBn42C3Wh+AjPxXUbDkb6xw0cTJQgxdYlp6ytUR1uBZF647Wn6ykkopMeQlRl7ggX+qnYYjZ4Hs1abZENl7ww==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.0.tgz", + "integrity": "sha512-4vTsKlL51D6zAJObcyjDEnFCY5OBH/oaW+97X8z4IM6DK/BYD6exzaRZblTZhCeqzdBpQejPsfoS20xFc05SPA==", "dev": true, + "license": "MIT", "dependencies": { "pretty-format": "^3.8.0" }, @@ -23927,9 +23928,9 @@ "peer": true }, "preact-render-to-string": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.5.tgz", - "integrity": "sha512-rEBn42C3Wh+AjPxXUbDkb6xw0cTJQgxdYlp6ytUR1uBZF647Wn6ykkopMeQlRl7ggX+qnYYjZ4Hs1abZENl7ww==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.0.tgz", + "integrity": "sha512-4vTsKlL51D6zAJObcyjDEnFCY5OBH/oaW+97X8z4IM6DK/BYD6exzaRZblTZhCeqzdBpQejPsfoS20xFc05SPA==", "dev": true, "requires": { "pretty-format": "^3.8.0" diff --git a/package.json b/package.json index 2e262c1764..89b0c38659 100644 --- a/package.json +++ b/package.json @@ -241,7 +241,7 @@ "npm-merge-driver-install": "^1.1.1", "npm-run-all": "^4.0.0", "oxlint": "^0.3.4", - "preact-render-to-string": "^5.2.5", + "preact-render-to-string": "^6.5.0", "prop-types": "^15.7.2", "sade": "^1.7.4", "sinon": "^9.2.3", diff --git a/src/diff/props.js b/src/diff/props.js index d03492293a..316146f0fd 100644 --- a/src/diff/props.js +++ b/src/diff/props.js @@ -116,6 +116,7 @@ export function setProperty(dom, name, value, oldValue, namespace) { name != 'rowSpan' && name != 'colSpan' && name != 'role' && + name != 'popover' && name in dom ) { try { @@ -135,7 +136,7 @@ export function setProperty(dom, name, value, oldValue, namespace) { if (typeof value == 'function') { // never serialize functions as attribute values } else if (value != null && (value !== false || name[4] === '-')) { - dom.setAttribute(name, value); + dom.setAttribute(name, name == 'popover' && value == true ? '' : value); } else { dom.removeAttribute(name); } diff --git a/test/browser/render.test.js b/test/browser/render.test.js index a861271afe..f440962f70 100644 --- a/test/browser/render.test.js +++ b/test/browser/render.test.js @@ -472,6 +472,21 @@ describe('render()', () => { expect(scratch.firstChild.spellcheck).to.equal(false); }); + it('should support popover auto', () => { + render(
, scratch); + expect(scratch.innerHTML).to.equal("
"); + }); + + it('should support popover true boolean', () => { + render(
, scratch); + expect(scratch.innerHTML).to.equal("
"); + }); + + it('should support popover false boolean', () => { + render(
, scratch); + expect(scratch.innerHTML).to.equal("
"); + }); + // Test for preactjs/preact#4340 it('should respect defaultValue in render', () => { scratch.innerHTML = '';