@sequencemedia/react-router-render 2.0.423 → 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.
@@ -0,0 +1,14 @@
1
+ module.exports = {
2
+ presets: [
3
+ [
4
+ '@babel/env', {
5
+ targets: {
6
+ node: 'current'
7
+ },
8
+ useBuiltIns: 'usage',
9
+ corejs: 3
10
+ }
11
+ ],
12
+ '@babel/react'
13
+ ]
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sequencemedia/react-router-render",
3
- "version": "2.0.423",
3
+ "version": "2.2.0",
4
4
  "description": "Sync/async isomorphic render of React apps with React Router",
5
5
  "keywords": [
6
6
  "React",
@@ -11,7 +11,8 @@
11
11
  "renderToString",
12
12
  "renderToStaticMarkup"
13
13
  ],
14
- "main": "./index.js",
14
+ "type": "module",
15
+ "main": "./src/index.mjs",
15
16
  "author": {
16
17
  "name": "Jonathan Perry for Sequence Media Limited",
17
18
  "email": "jonathanperry@sequencemedia.net",
@@ -19,41 +20,30 @@
19
20
  },
20
21
  "license": "MIT",
21
22
  "engines": {
22
- "node": ">=16.13.0"
23
+ "node": ">=18.5.0"
23
24
  },
24
25
  "repository": {
25
26
  "type": "git",
26
27
  "url": "git://github.com/sequencemedia/react-router-render.git"
27
28
  },
28
29
  "scripts": {
29
- "build": "npm run babel",
30
- "build:watch": "npm run babel:watch",
31
- "babel": "babel src -d lib",
32
- "babel:watch": "npm run babel -- -w",
33
- "clean": "rimraf lib",
34
- "prepublishOnly": "npm run build",
35
- "prebuild": "npm run clean",
36
- "lint": "eslint .",
30
+ "test": "NODE_ENV=test mocha test --recursive --verbose",
31
+ "lint": "eslint . --ext .mjs --ext .cjs",
37
32
  "lint:fix": "npm run lint -- --fix",
38
33
  "prepare": "husky install"
39
34
  },
40
35
  "dependencies": {
41
- "@babel/runtime": "^7.21.5",
42
36
  "@hapi/boom": "^10.0.1",
43
37
  "debug": "^4.3.4"
44
38
  },
45
39
  "devDependencies": {
46
- "@babel/cli": "^7.21.5",
47
40
  "@babel/core": "^7.21.8",
48
41
  "@babel/eslint-parser": "^7.21.8",
49
- "@babel/plugin-proposal-export-default-from": "^7.18.10",
50
- "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
51
- "@babel/plugin-proposal-throw-expressions": "^7.18.6",
52
- "@babel/plugin-transform-runtime": "^7.21.4",
53
42
  "@babel/preset-env": "^7.21.5",
54
43
  "@babel/preset-react": "^7.18.6",
55
44
  "@babel/register": "^7.21.0",
56
45
  "@sequencemedia/hooks": "^1.0.423",
46
+ "chai": "^4.3.7",
57
47
  "core-js": "^3.30.2",
58
48
  "eslint": "^8.41.0",
59
49
  "eslint-config-standard": "^17.0.0",
@@ -62,10 +52,16 @@
62
52
  "eslint-plugin-promise": "^6.1.1",
63
53
  "eslint-plugin-react": "^7.32.2",
64
54
  "husky": "^8.0.3",
55
+ "mocha": "^10.2.0",
65
56
  "react": "18.2.0",
66
57
  "react-dom": "18.2.0",
67
58
  "react-router": "6.11.2",
68
59
  "react-router-dom": "6.11.2",
69
- "rimraf": "^5.0.1"
60
+ "rimraf": "^5.0.1",
61
+ "sinon": "^15.1.0",
62
+ "sinon-chai": "^3.7.0"
63
+ },
64
+ "exports": {
65
+ ".": "./src/index.mjs"
70
66
  }
71
67
  }
package/src/index.mjs ADDED
@@ -0,0 +1,50 @@
1
+ import debug from 'debug'
2
+
3
+ import Boom from '@hapi/boom'
4
+
5
+ import {
6
+ getReactDOMServerRenderToString,
7
+ getReactDOMServerRenderToStaticMarkup
8
+ } from './react-dom-server.cjs'
9
+
10
+ const log = debug('@sequencemedia/react-redux-render')
11
+
12
+ log('`react-redux-render` is awake')
13
+
14
+ const notFound = (data) => Boom.notFound('Routing exception', data)
15
+
16
+ /**
17
+ * @param {Object.<string, any>} routerProps
18
+ * @param {Object.<string, any>} routes
19
+ * @returns {string}
20
+ */
21
+ export function renderToString ({ location, context = {}, ...router } = {}, routes = {}) {
22
+ const routerProps = { ...router, location, context }
23
+ const string = getReactDOMServerRenderToString(routerProps, routes)
24
+ if (string) return string
25
+ throw notFound(routerProps)
26
+ }
27
+
28
+ /**
29
+ * @param {Object.<string, any>} routerProps
30
+ * @param {Object.<string, any>} routes
31
+ * @returns {string}
32
+ */
33
+ export function renderToStaticMarkup ({ location, context = {}, ...router } = {}, routes = {}) {
34
+ const routerProps = { ...router, location, context }
35
+ const string = getReactDOMServerRenderToStaticMarkup(routerProps, routes)
36
+ if (string) return string
37
+ throw notFound(routerProps)
38
+ }
39
+
40
+ /**
41
+ * @param {Object.<string, any>} routerProps
42
+ * @param {Object.<string, any>} routes
43
+ * @returns {Promise<string>}
44
+ */
45
+ export async function render ({ location, context = {}, ...router } = {}, routes = {}) {
46
+ const routerProps = { ...router, location, context }
47
+ const string = getReactDOMServerRenderToString(routerProps, routes)
48
+ if (string) return string
49
+ throw notFound(routerProps)
50
+ }
@@ -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
@@ -0,0 +1,49 @@
1
+ import React from 'react'
2
+ import ReactDOMServer from 'react-dom/server'
3
+ import Boom from '@hapi/boom'
4
+ import { StaticRouter as Router } from 'react-router-dom/server'
5
+
6
+ /**
7
+ * @param {Error} e
8
+ * @param {{props: Object.<string, any>}} data
9
+ * @returns A boom object
10
+ */
11
+ const badImplementation = (e, data) => Boom.boomify(e, { statusCode: 500, message: 'Rendering exception', data })
12
+
13
+ /**
14
+ * @param {Object.<string, any>} routerProps
15
+ * @param {Object.<string, any>} routes
16
+ * @returns {string}
17
+ */
18
+ export function getReactDOMServerRenderToString (routerProps, routes) {
19
+ try {
20
+ return ReactDOMServer.renderToString(
21
+ <Router {...routerProps}>
22
+ {routes}
23
+ </Router>
24
+ )
25
+ } catch (e) {
26
+ log(e)
27
+
28
+ throw badImplementation(e, routerProps)
29
+ }
30
+ }
31
+
32
+ /**
33
+ * @param {Object.<string, any>} routerProps
34
+ * @param {Object.<string, any>} routes
35
+ * @returns {string}
36
+ */
37
+ export function getReactDOMServerRenderToStaticMarkup (routerProps, routes) {
38
+ try {
39
+ return ReactDOMServer.renderToStaticMarkup(
40
+ <Router {...routerProps}>
41
+ {routes}
42
+ </Router>
43
+ )
44
+ } catch (e) {
45
+ log(e)
46
+
47
+ throw badImplementation(e, routerProps)
48
+ }
49
+ }
@@ -0,0 +1,7 @@
1
+ require('@babel/register')
2
+
3
+ const {
4
+ default: component
5
+ } = require('./component.jsx')
6
+
7
+ module.exports = component
@@ -0,0 +1,5 @@
1
+ import React from 'react'
2
+
3
+ export default function Component () {
4
+ return <h1>Component</h1>
5
+ }
@@ -0,0 +1,58 @@
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-router-render'
9
+
10
+ import Routes from './routes.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
+ const routerProps = { location: '/' }
37
+
38
+ describe('`renderToString()`', () => {
39
+ it('returns a string', () => {
40
+ return expect(renderToString(routerProps, Routes))
41
+ .to.equal('<h1>Component</h1>')
42
+ })
43
+ })
44
+
45
+ describe('`renderToStaticMarkup()`', () => {
46
+ it('returns a string', () => {
47
+ return expect(renderToStaticMarkup(routerProps, Routes))
48
+ .to.equal('<h1>Component</h1>')
49
+ })
50
+ })
51
+
52
+ describe('`render()`', () => {
53
+ it('returns a Promise resolving to a string', async () => {
54
+ return expect(await render(routerProps, Routes))
55
+ .to.equal('<h1>Component</h1>')
56
+ })
57
+ })
58
+ })
@@ -0,0 +1,7 @@
1
+ require('@babel/register')
2
+
3
+ const {
4
+ default: routes
5
+ } = require('./routes.jsx')
6
+
7
+ module.exports = routes
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+
3
+ import {
4
+ Routes,
5
+ Route
6
+ } from 'react-router-dom'
7
+
8
+ import Component from './component.jsx'
9
+
10
+ export default (
11
+ <Routes>
12
+ <Route exact path='/' element={<Component />} />
13
+ </Routes>
14
+ )
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/babel.config.js DELETED
@@ -1,22 +0,0 @@
1
- module.exports = {
2
- compact: true,
3
- comments: false,
4
- presets: [
5
- [
6
- '@babel/env', {
7
- targets: {
8
- node: 'current'
9
- },
10
- useBuiltIns: 'usage',
11
- corejs: 3
12
- }
13
- ],
14
- '@babel/react'
15
- ],
16
- plugins: [
17
- '@babel/transform-runtime',
18
- '@babel/proposal-throw-expressions',
19
- '@babel/proposal-export-default-from',
20
- '@babel/proposal-export-namespace-from'
21
- ]
22
- }
package/index.js DELETED
@@ -1,2 +0,0 @@
1
- //
2
- module.exports = require('./lib')
package/lib/index.js DELETED
@@ -1 +0,0 @@
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 _reactRouterDom=require("react-router-dom");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});const notFound=data=>_boom.default.notFound('Routing exception',data);const getReactDOMServerRenderToString=(routerProps,routes={})=>{try{return _server.default.renderToString(_react.default.createElement(_reactRouterDom.StaticRouter,routerProps,routes));}catch(e){log(e);throw badImplementation(e,routerProps);}};const getReactDOMServerRenderToStaticMarkup=(routerProps,routes={})=>{try{return _server.default.renderToStaticMarkup(_react.default.createElement(_reactRouterDom.StaticRouter,routerProps,routes));}catch(e){log(e);throw badImplementation(e,routerProps);}};const renderToString=({location,context={},...router}={},routes={})=>getReactDOMServerRenderToString({...router,location,context},routes)||function(e){throw e;}(notFound({...router,location,context}));exports.renderToString=renderToString;const renderToStaticMarkup=({location,context={},...router}={},routes={})=>getReactDOMServerRenderToStaticMarkup({...router,location,context},routes)||function(e){throw e;}(notFound({...router,location,context}));exports.renderToStaticMarkup=renderToStaticMarkup;const render=async({location,context={},...router}={},routes={})=>getReactDOMServerRenderToString({...router,location,context},routes)||function(e){throw e;}(notFound({...router,location,context}));exports.render=render;
package/src/index.js DELETED
@@ -1,61 +0,0 @@
1
- import React from 'react'
2
- import ReactDOMServer from 'react-dom/server'
3
- import Boom from '@hapi/boom'
4
- import { StaticRouter as Router } from 'react-router-dom'
5
- import debug from 'debug'
6
-
7
- const log = debug('@sequencemedia/react-redux-render')
8
-
9
- log('`react-redux-render` is awake')
10
-
11
- const badImplementation = (e, data) => Boom.boomify(e, { statusCode: 500, message: 'Rendering exception', data })
12
- const notFound = (data) => Boom.notFound('Routing exception', data)
13
-
14
- const getReactDOMServerRenderToString = (routerProps, routes = {}) => {
15
- try {
16
- return ReactDOMServer.renderToString(
17
- <Router {...routerProps}>
18
- {routes}
19
- </Router>
20
- )
21
- } catch (e) {
22
- log(e)
23
-
24
- throw badImplementation(e, routerProps)
25
- }
26
- }
27
-
28
- const getReactDOMServerRenderToStaticMarkup = (routerProps, routes = {}) => {
29
- try {
30
- return ReactDOMServer.renderToStaticMarkup(
31
- <Router {...routerProps}>
32
- {routes}
33
- </Router>
34
- )
35
- } catch (e) {
36
- log(e)
37
-
38
- throw badImplementation(e, routerProps)
39
- }
40
- }
41
-
42
- /**
43
- * @return {String}
44
- */
45
- export const renderToString = ({ location, context = {}, ...router } = {}, routes = {}) => (
46
- getReactDOMServerRenderToString({ ...router, location, context }, routes) || throw notFound({ ...router, location, context })
47
- )
48
-
49
- /**
50
- * @return {String}
51
- */
52
- export const renderToStaticMarkup = ({ location, context = {}, ...router } = {}, routes = {}) => (
53
- getReactDOMServerRenderToStaticMarkup({ ...router, location, context }, routes) || throw notFound({ ...router, location, context })
54
- )
55
-
56
- /**
57
- * @return {Promise}
58
- */
59
- export const render = async ({ location, context = {}, ...router } = {}, routes = {}) => (
60
- getReactDOMServerRenderToString({ ...router, location, context }, routes) || throw notFound({ ...router, location, context })
61
- )