@sequencemedia/react-redux-render 2.0.431 → 2.2.0
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/{babel.config.js → babel.config.cjs} +0 -7
- package/lib/index.js +1 -1
- package/package.json +14 -18
- package/src/index.mjs +34 -0
- package/src/react-dom-server.cjs +9 -0
- package/src/{index.js → react-dom-server.jsx} +19 -22
- package/test/component.cjs +7 -0
- package/test/component.jsx +13 -0
- package/test/index.spec.mjs +88 -0
- package/.gitattributes +0 -20
- package/index.js +0 -2
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
compact: true,
|
|
3
|
-
comments: false,
|
|
4
2
|
presets: [
|
|
5
3
|
[
|
|
6
4
|
'@babel/env', {
|
|
@@ -12,10 +10,5 @@ module.exports = {
|
|
|
12
10
|
}
|
|
13
11
|
],
|
|
14
12
|
'@babel/react'
|
|
15
|
-
],
|
|
16
|
-
plugins: [
|
|
17
|
-
'@babel/transform-runtime',
|
|
18
|
-
'@babel/proposal-export-default-from',
|
|
19
|
-
'@babel/proposal-export-namespace-from'
|
|
20
13
|
]
|
|
21
14
|
}
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.renderToString=exports.renderToStaticMarkup=exports.render=void 0;var _react=_interopRequireDefault(require("react"));var _server=_interopRequireDefault(require("react-dom/server"));var _boom=_interopRequireDefault(require("@hapi/boom"));var _reactRedux=require("react-redux");var _debug=_interopRequireDefault(require("debug"));const log=(0,_debug.default)('@sequencemedia/react-redux-render');log('`react-redux-render` is awake');const badImplementation=(e,data)=>_boom.default.boomify(e,{statusCode:500,message:'Rendering exception',data});
|
|
1
|
+
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.renderToString=exports.renderToStaticMarkup=exports.render=void 0;var _react=_interopRequireDefault(require("react"));var _server=_interopRequireDefault(require("react-dom/server"));var _boom=_interopRequireDefault(require("@hapi/boom"));var _reactRedux=require("react-redux");var _debug=_interopRequireDefault(require("debug"));const log=(0,_debug.default)('@sequencemedia/react-redux-render');log('`react-redux-render` is awake');const badImplementation=(e,data)=>_boom.default.boomify(e,{statusCode:500,message:'Rendering exception',data});function getReactDOMServerRenderToString(store,Component,props){try{return _server.default.renderToString(_react.default.createElement(_reactRedux.Provider,{store:store},_react.default.createElement(Component,props)));}catch(e){log(e);throw badImplementation(e,{props});}}function getReactDOMServerRenderToStaticMarkup(store,Component,props){try{return _server.default.renderToStaticMarkup(_react.default.createElement(_reactRedux.Provider,{store:store},_react.default.createElement(Component,props)));}catch(e){log(e);throw badImplementation(e,{props});}}const renderToString=(store,Component,props={})=>getReactDOMServerRenderToString(store,Component,props);exports.renderToString=renderToString;const renderToStaticMarkup=(store,Component,props={})=>getReactDOMServerRenderToStaticMarkup(store,Component,props);exports.renderToStaticMarkup=renderToStaticMarkup;const render=async(store,Component,props={})=>getReactDOMServerRenderToString(store,Component,props);exports.render=render;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sequencemedia/react-redux-render",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "React Render",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"React",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"renderToString",
|
|
11
11
|
"renderToStaticMarkup"
|
|
12
12
|
],
|
|
13
|
-
"
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./src/index.mjs",
|
|
14
15
|
"author": {
|
|
15
16
|
"name": "Jonathan Perry for Sequence Media Limited",
|
|
16
17
|
"email": "jonathanperry@sequencemedia.net",
|
|
@@ -18,41 +19,30 @@
|
|
|
18
19
|
},
|
|
19
20
|
"license": "MIT",
|
|
20
21
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
22
|
+
"node": ">=18.5.0"
|
|
22
23
|
},
|
|
23
24
|
"repository": {
|
|
24
25
|
"type": "git",
|
|
25
26
|
"url": "git://github.com/sequencemedia/react-redux-render.git"
|
|
26
27
|
},
|
|
27
28
|
"scripts": {
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"babel": "babel src -d lib",
|
|
31
|
-
"babel:watch": "npm run babel -- -w",
|
|
32
|
-
"clean": "rimraf lib",
|
|
33
|
-
"prepublishOnly": "npm run build",
|
|
34
|
-
"prebuild": "npm run clean",
|
|
35
|
-
"lint": "eslint .",
|
|
29
|
+
"test": "NODE_ENV=test mocha test --recursive --verbose",
|
|
30
|
+
"lint": "eslint . --ext .cjs --ext .mjs",
|
|
36
31
|
"lint:fix": "npm run lint -- --fix",
|
|
37
32
|
"prepare": "husky install"
|
|
38
33
|
},
|
|
39
34
|
"dependencies": {
|
|
40
|
-
"@babel/runtime": "^7.21.5",
|
|
41
35
|
"@hapi/boom": "^10.0.1",
|
|
42
36
|
"debug": "^4.3.4"
|
|
43
37
|
},
|
|
44
38
|
"devDependencies": {
|
|
45
|
-
"@babel/cli": "^7.21.5",
|
|
46
39
|
"@babel/core": "^7.21.8",
|
|
47
40
|
"@babel/eslint-parser": "^7.21.8",
|
|
48
|
-
"@babel/plugin-proposal-export-default-from": "^7.18.10",
|
|
49
|
-
"@babel/plugin-proposal-export-namespace-from": "^7.18.9",
|
|
50
|
-
"@babel/plugin-proposal-throw-expressions": "^7.18.6",
|
|
51
|
-
"@babel/plugin-transform-runtime": "^7.21.4",
|
|
52
41
|
"@babel/preset-env": "^7.21.5",
|
|
53
42
|
"@babel/preset-react": "^7.18.6",
|
|
54
43
|
"@babel/register": "^7.21.0",
|
|
55
44
|
"@sequencemedia/hooks": "^1.0.423",
|
|
45
|
+
"chai": "^4.3.7",
|
|
56
46
|
"core-js": "^3.30.2",
|
|
57
47
|
"eslint": "^8.41.0",
|
|
58
48
|
"eslint-config-standard": "^17.0.0",
|
|
@@ -61,10 +51,16 @@
|
|
|
61
51
|
"eslint-plugin-promise": "^6.1.1",
|
|
62
52
|
"eslint-plugin-react": "^7.32.2",
|
|
63
53
|
"husky": "^8.0.3",
|
|
54
|
+
"mocha": "^10.2.0",
|
|
64
55
|
"react": "18.2.0",
|
|
65
56
|
"react-dom": "18.2.0",
|
|
66
57
|
"react-redux": "^8.0.5",
|
|
67
58
|
"redux": "^4.2.1",
|
|
68
|
-
"rimraf": "^5.0.1"
|
|
59
|
+
"rimraf": "^5.0.1",
|
|
60
|
+
"sinon": "^15.1.0",
|
|
61
|
+
"sinon-chai": "^3.7.0"
|
|
62
|
+
},
|
|
63
|
+
"exports": {
|
|
64
|
+
".": "./src/index.mjs"
|
|
69
65
|
}
|
|
70
66
|
}
|
package/src/index.mjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import debug from 'debug'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
getReactDOMServerRenderToString,
|
|
5
|
+
getReactDOMServerRenderToStaticMarkup
|
|
6
|
+
} from './react-dom-server.cjs'
|
|
7
|
+
|
|
8
|
+
const log = debug('@sequencemedia/react-redux-render')
|
|
9
|
+
|
|
10
|
+
log('`react-redux-render` is awake')
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {Object.<string, any>} store
|
|
14
|
+
* @param {React.ReactElement} Component
|
|
15
|
+
* @param {Object.<string, any>} props
|
|
16
|
+
* @returns {string}
|
|
17
|
+
*/
|
|
18
|
+
export const renderToString = (store, Component, props = {}) => getReactDOMServerRenderToString(store, Component, props)
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {Object.<string, any>} store
|
|
22
|
+
* @param {React.ReactElement} Component
|
|
23
|
+
* @param {Object.<string, any>} props
|
|
24
|
+
* @returns {string}
|
|
25
|
+
*/
|
|
26
|
+
export const renderToStaticMarkup = (store, Component, props = {}) => getReactDOMServerRenderToStaticMarkup(store, Component, props)
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param {Object.<string, any>} store
|
|
30
|
+
* @param {React.ReactElement} Component
|
|
31
|
+
* @param {Object.<string, any>} props
|
|
32
|
+
* @returns {Promise<string>}
|
|
33
|
+
*/
|
|
34
|
+
export const render = async (store, Component, props = {}) => getReactDOMServerRenderToString(store, Component, props)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require('@babel/register')
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
getReactDOMServerRenderToString,
|
|
5
|
+
getReactDOMServerRenderToStaticMarkup
|
|
6
|
+
} = require('./react-dom-server.jsx')
|
|
7
|
+
|
|
8
|
+
module.exports.getReactDOMServerRenderToString = getReactDOMServerRenderToString
|
|
9
|
+
module.exports.getReactDOMServerRenderToStaticMarkup = getReactDOMServerRenderToStaticMarkup
|
|
@@ -2,15 +2,21 @@ import React from 'react'
|
|
|
2
2
|
import ReactDOMServer from 'react-dom/server'
|
|
3
3
|
import Boom from '@hapi/boom'
|
|
4
4
|
import { Provider } from 'react-redux'
|
|
5
|
-
import debug from 'debug'
|
|
6
|
-
|
|
7
|
-
const log = debug('@sequencemedia/react-redux-render')
|
|
8
|
-
|
|
9
|
-
log('`react-redux-render` is awake')
|
|
10
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @param {Error} e
|
|
8
|
+
* @param {{props: Object.<string, any>}} data
|
|
9
|
+
* @returns A boom object
|
|
10
|
+
*/
|
|
11
11
|
const badImplementation = (e, data) => Boom.boomify(e, { statusCode: 500, message: 'Rendering exception', data })
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* @param {Object.<string, any>} store
|
|
15
|
+
* @param {React.ReactElement} Component
|
|
16
|
+
* @param {Object.<string, any>} props
|
|
17
|
+
* @returns {string}
|
|
18
|
+
*/
|
|
19
|
+
export function getReactDOMServerRenderToString (store, Component, props) {
|
|
14
20
|
try {
|
|
15
21
|
return ReactDOMServer.renderToString(
|
|
16
22
|
<Provider store={store}>
|
|
@@ -26,7 +32,13 @@ const getReactDOMServerRenderToString = (store, Component, props) => {
|
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @param {Object.<string, any>} store
|
|
37
|
+
* @param {React.ReactElement} Component
|
|
38
|
+
* @param {Object.<string, any>} props
|
|
39
|
+
* @returns {string}
|
|
40
|
+
*/
|
|
41
|
+
export function getReactDOMServerRenderToStaticMarkup (store, Component, props) {
|
|
30
42
|
try {
|
|
31
43
|
return ReactDOMServer.renderToStaticMarkup(
|
|
32
44
|
<Provider store={store}>
|
|
@@ -41,18 +53,3 @@ const getReactDOMServerRenderToStaticMarkup = (store, Component, props) => {
|
|
|
41
53
|
throw badImplementation(e, { props })
|
|
42
54
|
}
|
|
43
55
|
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* @return {String}
|
|
47
|
-
*/
|
|
48
|
-
export const renderToString = (store, Component, props = {}) => getReactDOMServerRenderToString(store, Component, props)
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @return {String}
|
|
52
|
-
*/
|
|
53
|
-
export const renderToStaticMarkup = (store, Component, props = {}) => getReactDOMServerRenderToStaticMarkup(store, Component, props)
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @return {Promise}
|
|
57
|
-
*/
|
|
58
|
-
export const render = async (store, Component, props = {}) => getReactDOMServerRenderToString(store, Component, props)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
|
|
4
|
+
function Component ({ content }) {
|
|
5
|
+
if (content) return <h1>Component {content}</h1>
|
|
6
|
+
return <h1>Component</h1>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
Component.propTypes = {
|
|
10
|
+
content: PropTypes.string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default Component
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import chai, { expect } from 'chai'
|
|
2
|
+
import sinonChai from 'sinon-chai'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
renderToString,
|
|
6
|
+
renderToStaticMarkup,
|
|
7
|
+
render
|
|
8
|
+
} from '@sequencemedia/react-redux-render'
|
|
9
|
+
|
|
10
|
+
import Component from './component.cjs'
|
|
11
|
+
|
|
12
|
+
chai.use(sinonChai)
|
|
13
|
+
|
|
14
|
+
describe('react-render', () => {
|
|
15
|
+
describe('`renderToString`', () => {
|
|
16
|
+
it('is a function', () => {
|
|
17
|
+
return expect(renderToString)
|
|
18
|
+
.to.be.a('function')
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
describe('`renderToStaticMarkup`', () => {
|
|
23
|
+
it('is a function', () => {
|
|
24
|
+
return expect(renderToStaticMarkup)
|
|
25
|
+
.to.be.a('function')
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
describe('`render`', () => {
|
|
30
|
+
it('is a function', () => {
|
|
31
|
+
return expect(render)
|
|
32
|
+
.to.be.a('function')
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
describe('With props', () => {
|
|
37
|
+
const store = { getState () { return {} } }
|
|
38
|
+
const props = {
|
|
39
|
+
content: 'MOCK CONTENT'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
describe('`renderToString()`', () => {
|
|
43
|
+
it('returns a string', () => {
|
|
44
|
+
return expect(renderToString(store, Component, props))
|
|
45
|
+
.to.equal('<h1>Component <!-- -->MOCK CONTENT</h1>')
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe('`renderToStaticMarkup()`', () => {
|
|
50
|
+
it('returns a string', () => {
|
|
51
|
+
return expect(renderToStaticMarkup(store, Component, props))
|
|
52
|
+
.to.equal('<h1>Component MOCK CONTENT</h1>')
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
describe('`render()`', () => {
|
|
57
|
+
it('returns a Promise resolving to a string', async () => {
|
|
58
|
+
return expect(await render(store, Component, props))
|
|
59
|
+
.to.equal('<h1>Component <!-- -->MOCK CONTENT</h1>')
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
describe('Without props', () => {
|
|
65
|
+
const store = { getState () { return {} } }
|
|
66
|
+
|
|
67
|
+
describe('`renderToString()`', () => {
|
|
68
|
+
it('returns a string', () => {
|
|
69
|
+
return expect(renderToString(store, Component))
|
|
70
|
+
.to.equal('<h1>Component</h1>')
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
describe('`renderToStaticMarkup()`', () => {
|
|
75
|
+
it('returns a string', () => {
|
|
76
|
+
return expect(renderToStaticMarkup(store, Component))
|
|
77
|
+
.to.equal('<h1>Component</h1>')
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
describe('`render()`', () => {
|
|
82
|
+
it('returns a Promise resolving to a string', async () => {
|
|
83
|
+
return expect(await render(store, Component))
|
|
84
|
+
.to.equal('<h1>Component</h1>')
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
})
|
package/.gitattributes
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Default behavior
|
|
2
|
-
* text=auto
|
|
3
|
-
|
|
4
|
-
# LF line endings
|
|
5
|
-
*.json text eol=lf
|
|
6
|
-
*.mjs text eol=lf
|
|
7
|
-
*.cjs text eol=lf
|
|
8
|
-
*.mts text eol=lf
|
|
9
|
-
*.js text eol=lf
|
|
10
|
-
*.ts text eol=lf
|
|
11
|
-
*.sh text eol=lf
|
|
12
|
-
.editorconfig text eol=lf
|
|
13
|
-
.eslintignore text eol=lf
|
|
14
|
-
.eslintrc text eol=lf
|
|
15
|
-
.gitattributes text eol=lf
|
|
16
|
-
.gitignore text eol=lf
|
|
17
|
-
.npmignore text eol=lf
|
|
18
|
-
.npmrc text eol=lf
|
|
19
|
-
.nvmrc text eol=lf
|
|
20
|
-
.husky/* text eol=lf
|
package/index.js
DELETED