react-stdio
Advanced tools
+107
| var path = require('path') | ||
| var invariant = require('invariant') | ||
| var EventStream = require('event-stream') | ||
| var JSONStream = require('JSONStream') | ||
| var ReactDOMServer = require('react-dom/server') | ||
| var React = require('react') | ||
| function getDefaultExports(file) { | ||
| var moduleExports = require(file) | ||
| // Return exports.default if using ES2015 modules. | ||
| if (moduleExports && moduleExports.default) | ||
| return moduleExports.default | ||
| return moduleExports | ||
| } | ||
| function renderToStaticMarkup(element, callback) { | ||
| callback(null, ReactDOMServer.renderToStaticMarkup(element)) | ||
| } | ||
| function renderToString(element, callback) { | ||
| callback(null, ReactDOMServer.renderToString(element)) | ||
| } | ||
| function handleRequest(workingDir, request, callback) { | ||
| var componentPath = request.component | ||
| var renderMethod = request.render | ||
| var props = request.props | ||
| invariant( | ||
| componentPath != null, | ||
| 'Missing { component } in request' | ||
| ) | ||
| var render | ||
| if (renderMethod == null || renderMethod === 'renderToString') { | ||
| render = renderToString | ||
| } else if (renderMethod === 'renderToStaticMarkup') { | ||
| render = renderToStaticMarkup | ||
| } else { | ||
| var methodFile = path.resolve(workingDir, renderMethod) | ||
| try { | ||
| render = getDefaultExports(methodFile) | ||
| } catch (error) { | ||
| if (error.code !== 'MODULE_NOT_FOUND') | ||
| process.stderr.write(error.stack + '\n') | ||
| } | ||
| } | ||
| invariant( | ||
| typeof render === 'function', | ||
| 'Cannot load render method: %s', | ||
| renderMethod | ||
| ) | ||
| var componentFile = path.resolve(workingDir, componentPath) | ||
| var component | ||
| try { | ||
| component = getDefaultExports(componentFile) | ||
| } catch (error) { | ||
| if (error.code !== 'MODULE_NOT_FOUND') | ||
| process.stderr.write(error.stack + '\n') | ||
| } | ||
| invariant( | ||
| component != null, | ||
| 'Cannot load component: %s', | ||
| componentPath | ||
| ) | ||
| render( | ||
| React.createElement(component, props), | ||
| callback | ||
| ) | ||
| } | ||
| function createRequestHandler(workingDir) { | ||
| return function (request, callback) { | ||
| try { | ||
| handleRequest(workingDir, request, function (error, html) { | ||
| if (error) { | ||
| callback(error) | ||
| } else if (typeof html !== 'string') { | ||
| // Crash the server process. | ||
| callback(new Error('Render method must return a string')) | ||
| } else { | ||
| callback(null, JSON.stringify({ html: html })) | ||
| } | ||
| }) | ||
| } catch (error) { | ||
| callback(null, JSON.stringify({ error: error.message })) | ||
| } | ||
| } | ||
| } | ||
| // For convenience, modules we require can use ES2015 and JSX. | ||
| require('babel-register')({ | ||
| presets: [ 'es2015', 'react' ] | ||
| }) | ||
| process.stdin | ||
| .pipe(JSONStream.parse()) | ||
| .pipe(EventStream.map(createRequestHandler(process.cwd()))) | ||
| .pipe(process.stdout) |
+3
-2
| { | ||
| "name": "react-stdio", | ||
| "version": "2.0.5", | ||
| "version": "2.0.6", | ||
| "description": "Render React.js components on any backend", | ||
@@ -8,3 +8,4 @@ "bin": "./bin/react-stdio", | ||
| "files": [ | ||
| "bin" | ||
| "bin", | ||
| "server.js" | ||
| ], | ||
@@ -11,0 +12,0 @@ "author": "Michael Jackson", |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
5907
85.4%4
33.33%90
Infinity%0
-100%2
100%